From d8f470e6601fa32f9f943563b37c22f1ac09e88d Mon Sep 17 00:00:00 2001 From: ZiHangQin <1420014281@qq.com> Date: Fri, 11 Aug 2023 10:37:17 +0800 Subject: [PATCH] =?UTF-8?q?fix(#10):=20=E4=BF=AE=E5=A4=8D=E9=83=A8?= =?UTF-8?q?=E5=88=86=E8=AE=A1=E7=AE=97=E9=94=99=E8=AF=AF=EF=BC=8C=E9=81=97?= =?UTF-8?q?=E7=95=99=E9=97=AE=E9=A2=98=E5=9C=A8pooled=E4=B8=AD=E7=9A=84det?= =?UTF-8?q?eminePublicMeterConsumpyions=E9=87=8C=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E4=B8=BA=E7=A9=BA=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- repository/calculate.go | 14 ++++++++------ service/calculate/pooled.go | 2 ++ service/calculate/summary.go | 1 + service/calculate/tenement.go | 21 ++++++++++++++++----- service/calculate/wattCost.go | 8 ++++---- settings.yaml | 4 ++-- 6 files changed, 33 insertions(+), 17 deletions(-) diff --git a/repository/calculate.go b/repository/calculate.go index a4c45d6..d2e2efd 100644 --- a/repository/calculate.go +++ b/repository/calculate.go @@ -150,12 +150,14 @@ func (cr _CalculateRepository) GetAllTenementMeterRelations(pid string, associat From(goqu.T("tenement_meter")). Where(goqu.I("park_id").Eq(pid)). Where(goqu.And( - goqu.I("associated_at").IsNull(), + goqu.I("associated_at").IsNotNull(), goqu.I("associated_at").Lte(associatedBefore), )). Where(goqu.And( - goqu.I("associated_at").IsNull(), - goqu.I("associated_at").Gte(disassociatedAfter), + goqu.Or( + goqu.I("disassociated_at").IsNull(), + goqu.I("disassociated_at").Gte(disassociatedAfter), + ), )).ToSQL() var tenementMeter []model.TenementMeter @@ -165,6 +167,7 @@ func (cr _CalculateRepository) GetAllTenementMeterRelations(pid string, associat cr.log.Error("获取当前园区中所有的商户与表计的关联关系,包括已经解除的", zap.Error(err)) return nil, err } + fmt.Println("==", tenementMeter) return tenementMeter, nil } @@ -186,7 +189,7 @@ func (cr _CalculateRepository) GetMeterReadings(rid string, meterType int16) ([] goqu.I("r.id").Eq(rid), goqu.I("mr.meter_type").Eq(meterType), // TODO:2023.08.02 此方法出错优先查看是否这里出问题 - goqu.L("mr.read_at < lower(r.period)"), + goqu.L("?::date <@ ?", goqu.I("mr.read_at"), goqu.I("r.period")), ). Order(goqu.I("mr.read_at").Asc()).Select(goqu.I("mr.*")).ToSQL() @@ -249,8 +252,7 @@ func (cr _CalculateRepository) GetLastPeriodReadings(rid string, meterType int16 cr.log.Error("获取指定报表中所有涉及到的表计在核算起始日期前的最后一次读数出错", zap.Error(err)) return nil, err } - fmt.Println(">>>>>>>>>>>>", readingsSql) - fmt.Println(";;;;;;;;;;;;;;;;;;", readings) + return readings, nil } diff --git a/service/calculate/pooled.go b/service/calculate/pooled.go index ead36e8..48fddde 100644 --- a/service/calculate/pooled.go +++ b/service/calculate/pooled.go @@ -4,6 +4,7 @@ import ( "electricity_bill_calc/model" "electricity_bill_calc/model/calculate" "electricity_bill_calc/repository" + "fmt" "github.com/shopspring/decimal" "time" "unsafe" @@ -43,6 +44,7 @@ func PooledMetersCalculate(report *model.ReportIndex, periodStart time.Time, func determinePublicMeterConsumptions(meterId string, periodStart time.Time, periodEnd time.Time, readings []model.MeterReading, meterDetail model.MeterDetail, summary calculate.Summary) (calculate.Meter, error) { + fmt.Println(meterDetail.DetachedAt) startReading, err := DeterminePublicMeterStartReading(meterId, periodStart, meterDetail.DetachedAt.Time, readings) if err != nil { return calculate.Meter{}, err diff --git a/service/calculate/summary.go b/service/calculate/summary.go index 879946e..a3802fb 100644 --- a/service/calculate/summary.go +++ b/service/calculate/summary.go @@ -13,6 +13,7 @@ import ( func TotalConsumptionCalculate(tenements []calculate.PrimaryTenementStatistics, summary calculate.Summary) decimal.Decimal { var areaMaters []calculate.Meter for _, t := range tenements { + fmt.Println(t.Meters) areaMaters = append(areaMaters, t.Meters...) } diff --git a/service/calculate/tenement.go b/service/calculate/tenement.go index 1b84bd9..41c015b 100644 --- a/service/calculate/tenement.go +++ b/service/calculate/tenement.go @@ -4,6 +4,7 @@ import ( "electricity_bill_calc/model" "electricity_bill_calc/model/calculate" "electricity_bill_calc/repository" + "electricity_bill_calc/types" "errors" "fmt" "github.com/shopspring/decimal" @@ -42,7 +43,6 @@ func TenementMetersCalculate(report *model.ReportIndex, } var tenementReports []calculate.PrimaryTenementStatistics - for _, tenement := range tenements { var meters []model.TenementMeter @@ -79,13 +79,24 @@ func determineTenementConsumptions(tenement model.Tenement, meterDetails []*model.MeterDetail, summary calculate.Summary) (calculate.PrimaryTenementStatistics, error) { var meters []calculate.Meter for _, meter := range relatedMeters { - startReading, err := determineTenementMeterStartReading(meter.MeterId, periodStart, ShiftToAsiaShanghai(tenement.MovedInAt.Time), meter, currentTermReadings, lastPeriodReadings) + + movedInAt := tenement.MovedInAt + if movedInAt == nil { + shiftedTime := ShiftToAsiaShanghai(time.Time{}) + movedInAt = &types.DateTime{Time: shiftedTime} + } + startReading, err := determineTenementMeterStartReading(meter.MeterId, periodStart, ShiftToAsiaShanghai(movedInAt.Time), meter, currentTermReadings, lastPeriodReadings) if err != nil { fmt.Println(err) return calculate.PrimaryTenementStatistics{}, err } - endReading, err := determineTenementMeterEndReading(meter.MeterId, periodEnd, ShiftToAsiaShanghai(tenement.MovedOutAt.Time), meter, currentTermReadings) + moveOutAt := tenement.MovedOutAt + if moveOutAt == nil { + shiftedTime := ShiftToAsiaShanghai(time.Time{}) + moveOutAt = &types.DateTime{Time: shiftedTime}// 使用 types.DateTime 的零值表示时间的最大值 + } + endReading, err := determineTenementMeterEndReading(meter.MeterId, periodEnd, ShiftToAsiaShanghai(moveOutAt.Time), meter, currentTermReadings) if err != nil { fmt.Println(err) return calculate.PrimaryTenementStatistics{}, err @@ -142,7 +153,7 @@ func determineTenementConsumptions(tenement model.Tenement, } currentTermReadingPtr := ¤tTermReading - meter := calculate.Meter{ + m := calculate.Meter{ Code: meter.MeterId, Detail: detail, CoveredArea: decimal.NewFromFloat(detail.Area.Decimal.InexactFloat64()), @@ -165,7 +176,7 @@ func determineTenementConsumptions(tenement model.Tenement, Poolings: nil, } - meters = append(meters, meter) + meters = append(meters, m) } return calculate.PrimaryTenementStatistics{ diff --git a/service/calculate/wattCost.go b/service/calculate/wattCost.go index 1b21892..c446e0c 100644 --- a/service/calculate/wattCost.go +++ b/service/calculate/wattCost.go @@ -55,24 +55,24 @@ func MainCalculateProcess(rid string) error { fmt.Println("7", err) return err } - fmt.Println(meterDetails,"看看是不是为空的") + fmt.Println(meterDetails, "看看是不是为空的") // 获取所有的物业表计,然后对所有的物业表计电量进行计算。 parkMetersReports, err := MetersParkCalculate(*report, periodStart.Time, periodEnd.Time, meterDetails, summary) if err != nil { fmt.Println("8", err) return err } - + fmt.Println(parkMetersReports, "看看物业所有表计电量是否为空", tenementReports, summary) // 计算所有表计的总电量 parkTotal := TotalConsumptionCalculate(tenementReports, summary) - + fmt.Println(parkTotal, "看看所有表计电量是否为空") //计算线损以及调整线损 err = LossCalculate(report, parkMetersReports, &parkTotal, &summary) if err != nil { fmt.Println("9", err) return err } - fmt.Println(parkTotal) + fmt.Println(parkTotal, "===") // 计算所有已经启用的商铺面积总和,仅计算所有未迁出的商户的所有表计对应的商铺面积。 _, err = EnabledAreaCalculate(&tenementReports, &summary) diff --git a/settings.yaml b/settings.yaml index 84db9ed..7620533 100644 --- a/settings.yaml +++ b/settings.yaml @@ -12,9 +12,9 @@ Server: ReadTimeout: 60 WriteTimeout: 60 Redis: - Host: 192.168.88.129 + Host: 127.0.0.1 Port: 6379 - Password: 123456 + Password: DB: 1 Service: MaxSessionLife: 2h