forked from free-lancers/electricity_bill_calc_service
fix(report):基本完成报表部分的查询调整。
This commit is contained in:
@@ -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",
|
||||
|
@@ -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,
|
||||
|
Reference in New Issue
Block a user