fix(#10): 修复部分计算错误,遗留问题在pooled中的deteminePublicMeterConsumpyions里时间为空错误

This commit is contained in:
ZiHangQin 2023-08-11 10:37:17 +08:00
parent 98866a8de5
commit d8f470e660
6 changed files with 33 additions and 17 deletions

View File

@ -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),
// TODO2023.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
}

View File

@ -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

View File

@ -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...)
}

View File

@ -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 := &currentTermReading
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{

View File

@ -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)

View File

@ -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