fix(report):基本完成报表部分的查询调整。

This commit is contained in:
徐涛
2022-09-19 14:27:25 +08:00
parent 3742a445b7
commit 0355300908
10 changed files with 104 additions and 76 deletions

View File

@@ -120,7 +120,7 @@ func (_EndUserService) UpdateEndUserRegisterRecord(tx *bun.Tx, ctx *context.Cont
"current_period_critical",
"current_period_peak",
"current_period_flat",
"current_perios_valley",
"current_period_valley",
"adjust_critical",
"adjust_peak",
"adjust_flat",

View File

@@ -36,37 +36,34 @@ func (_ReportService) FetchParksWithNewestReport(uid string) ([]model.ParkNewest
ctx, cancel := global.TimeoutContext()
defer cancel()
reports := make([]model.Report, 0)
err := global.DB.NewSelect().Model(&reports).Relation("Park").
Where("p.user_id = ?", uid).
Where("p.enabled = ?", true).
parks := make([]model.Park, 0)
err := global.DB.NewSelect().Model(&parks).Relation("Reports").
Where("user_id = ?", uid).
Where("enabled = ?", true).
Order("created_at asc").
Scan(ctx)
if err != nil {
return make([]model.ParkNewestReport, 0), err
}
reducedParks := lo.Reduce(
reports,
func(acc map[string]model.ParkNewestReport, elem model.Report, index int) map[string]model.ParkNewestReport {
if v, ok := acc[elem.Park.Id]; ok {
if v.Report == nil || (elem.Period.After(v.Report.Period)) {
acc[elem.Park.Id] = model.ParkNewestReport{
Report: &elem,
Park: *elem.Park,
}
}
} else {
acc[elem.Park.Id] = model.ParkNewestReport{
Report: &elem,
Park: *elem.Park,
parks,
func(acc map[string]model.ParkNewestReport, elem model.Park, index int) map[string]model.ParkNewestReport {
if _, ok := acc[elem.Id]; !ok {
newestReport := lo.MaxBy(elem.Reports, func(a, b *model.Report) bool {
return a.Period.After(b.Period)
})
acc[elem.Id] = model.ParkNewestReport{
Report: newestReport,
Park: elem,
}
}
return acc
},
make(map[string]model.ParkNewestReport, 0),
)
relations := lo.Map(reports, func(r model.Report, _ int) string {
return fmt.Sprintf("report:%s", r.Id)
relations := lo.Map(parks, func(r model.Park, _ int) string {
return fmt.Sprintf("park:%s", r.Id)
})
relations = append(relations, "park", "report")
cache.CacheSearch(reducedParks, relations, "park_newest_report", uid)
@@ -81,11 +78,11 @@ func (_ReportService) IsNewPeriodValid(uid, pid string, period time.Time) (bool,
reports = *cachedReport
} else {
err := global.DB.NewSelect().Model(&reports).Relation("Park").
Where("p.user_id = ?", uid).
Where("park.user_id = ?", uid).
Where("r.park_id = ?", pid).
Scan(ctx)
if err != nil {
return false, nil
return false, err
}
cache.CacheSearch(reports, []string{"report", "park"}, "park", "user", uid, "park", pid)
}
@@ -430,7 +427,8 @@ func (_ReportService) UpdateMaintenanceFee(feeId string, updates map[string]inte
ctx, cancel := global.TimeoutContext()
defer cancel()
_, err = global.DB.NewUpdate().Model(updates).TableExpr("will_diluted_fee").
updates["last_modified_at"] = lo.ToPtr(time.Now())
_, err = global.DB.NewUpdate().Model(&updates).TableExpr("will_diluted_fee").
Where("id = ?", feeId).
Exec(ctx)
cache.AbolishRelation(fmt.Sprintf("will_diluted_fee:%s", feeId))
@@ -454,6 +452,7 @@ func (_ReportService) ProgressReportWillDilutedFee(report model.Report) (err err
report.StepState.WillDiluted = true
_, err = global.DB.NewUpdate().Model(&report).
WherePK().
Column("step_state").
Exec(ctx)
cache.AbolishRelation(fmt.Sprintf("report:%s", report.Id))
@@ -466,6 +465,7 @@ func (_ReportService) ProgressReportRegisterEndUser(report model.Report) (err er
report.StepState.Submeter = true
_, err = global.DB.NewUpdate().Model(&report).
WherePK().
Column("step_state").
Exec(ctx)
cache.AbolishRelation(fmt.Sprintf("report:%s", report.Id))
@@ -478,6 +478,7 @@ func (_ReportService) ProgressReportCalculate(report model.Report) (err error) {
report.StepState.Calculate = true
_, err = global.DB.NewUpdate().Model(&report).
WherePK().
Column("step_state").
Exec(ctx)
cache.AbolishRelation(fmt.Sprintf("report:%s", report.Id))
@@ -492,7 +493,11 @@ func (_ReportService) RetreiveParkEndUserMeterType(reportId string) (int, error)
defer cancel()
var mType int
err := global.DB.NewSelect().Model((*model.Report)(nil)).Relation("Park").
err := global.DB.NewSelect().Model((*model.Report)(nil)).
Relation("Park", func(q *bun.SelectQuery) *bun.SelectQuery {
return q.Column("meter_04kv_type")
}).
ExcludeColumn("*").
Where("r.id = ?", reportId).
Scan(ctx, &mType)
if err != nil {
@@ -597,14 +602,19 @@ func (_ReportService) AssembleReportPublicity(reportId string) (*model.Publicity
var report = new(model.Report)
err := global.DB.NewSelect().Model(report).
Relation("Summary").Relation("WillDilutedFees").Relation("EndUsers").
Relation("Park", func(q *bun.SelectQuery) *bun.SelectQuery {
return q.Relation("Enterprise")
}).
Where("id = ?", reportId).
Relation("Park").
Where("r.id = ?", reportId).
Scan(ctx)
if err != nil || report == nil {
if err != nil {
return nil, exceptions.NewNotFoundErrorFromError("未找到指定的公示报表", err)
}
var enterprise = new(model.UserDetail)
err = global.DB.NewSelect().Model(enterprise).
Where("id = ?", report.Park.UserId).
Scan(ctx)
if err != nil {
return nil, exceptions.NewNotFoundErrorFromError("未找到指定公示报表对应的用户信息", err)
}
// 组合数据
paidPart := model.PaidPart{
@@ -719,7 +729,7 @@ func (_ReportService) AssembleReportPublicity(reportId string) (*model.Publicity
publicity := &model.Publicity{
Report: *report,
Park: *report.Park,
User: *report.Park.Enterprise,
User: *enterprise,
Paid: paidPart,
EndUser: endUserSummary,
Loss: lossPart,