enhance(report):新一期报表初始化的时候,加入可用户表记录的初始化。
This commit is contained in:
parent
5058f17eda
commit
7f95192c78
|
@ -10,6 +10,7 @@ import (
|
||||||
"github.com/fufuok/utils"
|
"github.com/fufuok/utils"
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/samber/lo"
|
"github.com/samber/lo"
|
||||||
|
"github.com/shopspring/decimal"
|
||||||
"xorm.io/builder"
|
"xorm.io/builder"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -108,9 +109,61 @@ func (_ReportService) IsNewPeriodValid(uid string, period time.Time) (bool, erro
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ReportService) InitializeNewReport(parkId string, period time.Time) (err error) {
|
func (_ReportService) InitializeNewReport(parkId string, period time.Time) (err error) {
|
||||||
|
periods := make([]model.Report, 0)
|
||||||
|
err = global.DBConn.
|
||||||
|
Table("report").
|
||||||
|
Where(builder.Eq{"park_id": parkId, "published": true}).
|
||||||
|
Asc("period").
|
||||||
|
Find(&periods)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 获取上一期的报表索引信息
|
||||||
|
maxPublishedReport := lo.Reduce(
|
||||||
|
periods,
|
||||||
|
func(acc *model.Report, elem model.Report, index int) *model.Report {
|
||||||
|
if acc == nil || (acc != nil && elem.Period.After(acc.Period)) {
|
||||||
|
return &elem
|
||||||
|
}
|
||||||
|
return acc
|
||||||
|
},
|
||||||
|
nil,
|
||||||
|
)
|
||||||
|
var indexedLastPeriodCustomers map[string]model.EndUserDetail
|
||||||
|
if maxPublishedReport != nil {
|
||||||
|
// 获取上一期的所有户表信息,并获取当前已启用的所有用户
|
||||||
|
lastPeriodCustomers := make([]model.EndUserDetail, 0)
|
||||||
|
err = global.DBConn.Where(builder.Eq{"report_id": maxPublishedReport.Id}).Find(&lastPeriodCustomers)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
indexedLastPeriodCustomers = lo.Reduce(
|
||||||
|
lastPeriodCustomers,
|
||||||
|
func(acc map[string]model.EndUserDetail, elem model.EndUserDetail, index int) map[string]model.EndUserDetail {
|
||||||
|
acc[elem.MeterId] = elem
|
||||||
|
return acc
|
||||||
|
},
|
||||||
|
make(map[string]model.EndUserDetail, 0),
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
indexedLastPeriodCustomers = make(map[string]model.EndUserDetail, 0)
|
||||||
|
}
|
||||||
|
currentActivatedCustomers := make([]model.Meter04KV, 0)
|
||||||
|
err = global.DBConn.Where(builder.Eq{"park_id": parkId, "enabled": true}).Find(¤tActivatedCustomers)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 生成新一期的报表
|
||||||
|
tx := global.DBConn.NewSession()
|
||||||
|
if err = tx.Begin(); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer tx.Close()
|
||||||
|
// 插入已经生成的报表索引信息和园区概况信息
|
||||||
newReport := model.Report{
|
newReport := model.Report{
|
||||||
Id: uuid.New().String(),
|
Id: uuid.New().String(),
|
||||||
ParkId: parkId,
|
ParkId: parkId,
|
||||||
|
Period: period,
|
||||||
StepState: model.NewSteps(),
|
StepState: model.NewSteps(),
|
||||||
Published: false,
|
Published: false,
|
||||||
Withdraw: model.REPORT_NOT_WITHDRAW,
|
Withdraw: model.REPORT_NOT_WITHDRAW,
|
||||||
|
@ -118,16 +171,44 @@ func (_ReportService) InitializeNewReport(parkId string, period time.Time) (err
|
||||||
newReportSummary := model.ReportSummary{
|
newReportSummary := model.ReportSummary{
|
||||||
ReportId: newReport.Id,
|
ReportId: newReport.Id,
|
||||||
}
|
}
|
||||||
tx := global.DBConn.NewSession()
|
|
||||||
if err = tx.Begin(); err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
defer tx.Close()
|
|
||||||
_, err = tx.Insert(newReport, newReportSummary)
|
_, err = tx.Insert(newReport, newReportSummary)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
tx.Rollback()
|
tx.Rollback()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
// 生成并插入户表信息
|
||||||
|
for _, customer := range currentActivatedCustomers {
|
||||||
|
newEndUser := model.EndUserDetail{
|
||||||
|
ReportId: newReport.Id,
|
||||||
|
ParkId: parkId,
|
||||||
|
MeterId: customer.Code,
|
||||||
|
Seq: customer.Seq,
|
||||||
|
Ratio: customer.Ratio,
|
||||||
|
Address: customer.Address,
|
||||||
|
CustomerName: customer.CustomerName,
|
||||||
|
ContactName: customer.ContactName,
|
||||||
|
ContactPhone: customer.ContactPhone,
|
||||||
|
IsPublicMeter: customer.IsPublicMeter,
|
||||||
|
WillDilute: customer.WillDilute,
|
||||||
|
LastPeriodOverall: decimal.Zero,
|
||||||
|
LastPeriodCritical: decimal.Zero,
|
||||||
|
LastPeriodPeak: decimal.Zero,
|
||||||
|
LastPeriodFlat: decimal.Zero,
|
||||||
|
LastPeriodValley: decimal.Zero,
|
||||||
|
}
|
||||||
|
if lastPeriod, ok := indexedLastPeriodCustomers[customer.Code]; ok {
|
||||||
|
newEndUser.LastPeriodOverall = lastPeriod.CurrentPeriodOverall
|
||||||
|
newEndUser.LastPeriodCritical = lastPeriod.CurrentPeriodCritical
|
||||||
|
newEndUser.LastPeriodPeak = lastPeriod.CurrentPeriodPeak
|
||||||
|
newEndUser.LastPeriodFlat = lastPeriod.CurrentPeriodFlat
|
||||||
|
newEndUser.LastPeriodValley = lastPeriod.CurrentPeriodValley
|
||||||
|
}
|
||||||
|
_, err = tx.Insert(newEndUser)
|
||||||
|
if err != nil {
|
||||||
|
tx.Rollback()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
err = tx.Commit()
|
err = tx.Commit()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
tx.Rollback()
|
tx.Rollback()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user