fix(#10): 修复部分计算错误,遗留问题在pooled中的deteminePublicMeterConsumpyions里时间为空错误
This commit is contained in:
parent
98866a8de5
commit
d8f470e660
|
@ -150,12 +150,14 @@ func (cr _CalculateRepository) GetAllTenementMeterRelations(pid string, associat
|
||||||
From(goqu.T("tenement_meter")).
|
From(goqu.T("tenement_meter")).
|
||||||
Where(goqu.I("park_id").Eq(pid)).
|
Where(goqu.I("park_id").Eq(pid)).
|
||||||
Where(goqu.And(
|
Where(goqu.And(
|
||||||
goqu.I("associated_at").IsNull(),
|
goqu.I("associated_at").IsNotNull(),
|
||||||
goqu.I("associated_at").Lte(associatedBefore),
|
goqu.I("associated_at").Lte(associatedBefore),
|
||||||
)).
|
)).
|
||||||
Where(goqu.And(
|
Where(goqu.And(
|
||||||
goqu.I("associated_at").IsNull(),
|
goqu.Or(
|
||||||
goqu.I("associated_at").Gte(disassociatedAfter),
|
goqu.I("disassociated_at").IsNull(),
|
||||||
|
goqu.I("disassociated_at").Gte(disassociatedAfter),
|
||||||
|
),
|
||||||
)).ToSQL()
|
)).ToSQL()
|
||||||
|
|
||||||
var tenementMeter []model.TenementMeter
|
var tenementMeter []model.TenementMeter
|
||||||
|
@ -165,6 +167,7 @@ func (cr _CalculateRepository) GetAllTenementMeterRelations(pid string, associat
|
||||||
cr.log.Error("获取当前园区中所有的商户与表计的关联关系,包括已经解除的", zap.Error(err))
|
cr.log.Error("获取当前园区中所有的商户与表计的关联关系,包括已经解除的", zap.Error(err))
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
fmt.Println("==", tenementMeter)
|
||||||
return tenementMeter, nil
|
return tenementMeter, nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -186,7 +189,7 @@ func (cr _CalculateRepository) GetMeterReadings(rid string, meterType int16) ([]
|
||||||
goqu.I("r.id").Eq(rid),
|
goqu.I("r.id").Eq(rid),
|
||||||
goqu.I("mr.meter_type").Eq(meterType),
|
goqu.I("mr.meter_type").Eq(meterType),
|
||||||
// TODO:2023.08.02 此方法出错优先查看是否这里出问题
|
// 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()
|
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))
|
cr.log.Error("获取指定报表中所有涉及到的表计在核算起始日期前的最后一次读数出错", zap.Error(err))
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
fmt.Println(">>>>>>>>>>>>", readingsSql)
|
|
||||||
fmt.Println(";;;;;;;;;;;;;;;;;;", readings)
|
|
||||||
return readings, nil
|
return readings, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"electricity_bill_calc/model"
|
"electricity_bill_calc/model"
|
||||||
"electricity_bill_calc/model/calculate"
|
"electricity_bill_calc/model/calculate"
|
||||||
"electricity_bill_calc/repository"
|
"electricity_bill_calc/repository"
|
||||||
|
"fmt"
|
||||||
"github.com/shopspring/decimal"
|
"github.com/shopspring/decimal"
|
||||||
"time"
|
"time"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
@ -43,6 +44,7 @@ func PooledMetersCalculate(report *model.ReportIndex, periodStart time.Time,
|
||||||
func determinePublicMeterConsumptions(meterId string, periodStart time.Time,
|
func determinePublicMeterConsumptions(meterId string, periodStart time.Time,
|
||||||
periodEnd time.Time, readings []model.MeterReading,
|
periodEnd time.Time, readings []model.MeterReading,
|
||||||
meterDetail model.MeterDetail, summary calculate.Summary) (calculate.Meter, error) {
|
meterDetail model.MeterDetail, summary calculate.Summary) (calculate.Meter, error) {
|
||||||
|
fmt.Println(meterDetail.DetachedAt)
|
||||||
startReading, err := DeterminePublicMeterStartReading(meterId, periodStart, meterDetail.DetachedAt.Time, readings)
|
startReading, err := DeterminePublicMeterStartReading(meterId, periodStart, meterDetail.DetachedAt.Time, readings)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return calculate.Meter{}, err
|
return calculate.Meter{}, err
|
||||||
|
|
|
@ -13,6 +13,7 @@ import (
|
||||||
func TotalConsumptionCalculate(tenements []calculate.PrimaryTenementStatistics, summary calculate.Summary) decimal.Decimal {
|
func TotalConsumptionCalculate(tenements []calculate.PrimaryTenementStatistics, summary calculate.Summary) decimal.Decimal {
|
||||||
var areaMaters []calculate.Meter
|
var areaMaters []calculate.Meter
|
||||||
for _, t := range tenements {
|
for _, t := range tenements {
|
||||||
|
fmt.Println(t.Meters)
|
||||||
areaMaters = append(areaMaters, t.Meters...)
|
areaMaters = append(areaMaters, t.Meters...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"electricity_bill_calc/model"
|
"electricity_bill_calc/model"
|
||||||
"electricity_bill_calc/model/calculate"
|
"electricity_bill_calc/model/calculate"
|
||||||
"electricity_bill_calc/repository"
|
"electricity_bill_calc/repository"
|
||||||
|
"electricity_bill_calc/types"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/shopspring/decimal"
|
"github.com/shopspring/decimal"
|
||||||
|
@ -42,7 +43,6 @@ func TenementMetersCalculate(report *model.ReportIndex,
|
||||||
}
|
}
|
||||||
|
|
||||||
var tenementReports []calculate.PrimaryTenementStatistics
|
var tenementReports []calculate.PrimaryTenementStatistics
|
||||||
|
|
||||||
for _, tenement := range tenements {
|
for _, tenement := range tenements {
|
||||||
var meters []model.TenementMeter
|
var meters []model.TenementMeter
|
||||||
|
|
||||||
|
@ -79,13 +79,24 @@ func determineTenementConsumptions(tenement model.Tenement,
|
||||||
meterDetails []*model.MeterDetail, summary calculate.Summary) (calculate.PrimaryTenementStatistics, error) {
|
meterDetails []*model.MeterDetail, summary calculate.Summary) (calculate.PrimaryTenementStatistics, error) {
|
||||||
var meters []calculate.Meter
|
var meters []calculate.Meter
|
||||||
for _, meter := range relatedMeters {
|
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 {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return calculate.PrimaryTenementStatistics{}, 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 {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return calculate.PrimaryTenementStatistics{}, err
|
return calculate.PrimaryTenementStatistics{}, err
|
||||||
|
@ -142,7 +153,7 @@ func determineTenementConsumptions(tenement model.Tenement,
|
||||||
}
|
}
|
||||||
|
|
||||||
currentTermReadingPtr := ¤tTermReading
|
currentTermReadingPtr := ¤tTermReading
|
||||||
meter := calculate.Meter{
|
m := calculate.Meter{
|
||||||
Code: meter.MeterId,
|
Code: meter.MeterId,
|
||||||
Detail: detail,
|
Detail: detail,
|
||||||
CoveredArea: decimal.NewFromFloat(detail.Area.Decimal.InexactFloat64()),
|
CoveredArea: decimal.NewFromFloat(detail.Area.Decimal.InexactFloat64()),
|
||||||
|
@ -165,7 +176,7 @@ func determineTenementConsumptions(tenement model.Tenement,
|
||||||
Poolings: nil,
|
Poolings: nil,
|
||||||
}
|
}
|
||||||
|
|
||||||
meters = append(meters, meter)
|
meters = append(meters, m)
|
||||||
}
|
}
|
||||||
|
|
||||||
return calculate.PrimaryTenementStatistics{
|
return calculate.PrimaryTenementStatistics{
|
||||||
|
|
|
@ -55,24 +55,24 @@ func MainCalculateProcess(rid string) error {
|
||||||
fmt.Println("7", err)
|
fmt.Println("7", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
fmt.Println(meterDetails,"看看是不是为空的")
|
fmt.Println(meterDetails, "看看是不是为空的")
|
||||||
// 获取所有的物业表计,然后对所有的物业表计电量进行计算。
|
// 获取所有的物业表计,然后对所有的物业表计电量进行计算。
|
||||||
parkMetersReports, err := MetersParkCalculate(*report, periodStart.Time, periodEnd.Time, meterDetails, summary)
|
parkMetersReports, err := MetersParkCalculate(*report, periodStart.Time, periodEnd.Time, meterDetails, summary)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("8", err)
|
fmt.Println("8", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
fmt.Println(parkMetersReports, "看看物业所有表计电量是否为空", tenementReports, summary)
|
||||||
// 计算所有表计的总电量
|
// 计算所有表计的总电量
|
||||||
parkTotal := TotalConsumptionCalculate(tenementReports, summary)
|
parkTotal := TotalConsumptionCalculate(tenementReports, summary)
|
||||||
|
fmt.Println(parkTotal, "看看所有表计电量是否为空")
|
||||||
//计算线损以及调整线损
|
//计算线损以及调整线损
|
||||||
err = LossCalculate(report, parkMetersReports, &parkTotal, &summary)
|
err = LossCalculate(report, parkMetersReports, &parkTotal, &summary)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("9", err)
|
fmt.Println("9", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
fmt.Println(parkTotal)
|
fmt.Println(parkTotal, "===")
|
||||||
|
|
||||||
// 计算所有已经启用的商铺面积总和,仅计算所有未迁出的商户的所有表计对应的商铺面积。
|
// 计算所有已经启用的商铺面积总和,仅计算所有未迁出的商户的所有表计对应的商铺面积。
|
||||||
_, err = EnabledAreaCalculate(&tenementReports, &summary)
|
_, err = EnabledAreaCalculate(&tenementReports, &summary)
|
||||||
|
|
|
@ -12,9 +12,9 @@ Server:
|
||||||
ReadTimeout: 60
|
ReadTimeout: 60
|
||||||
WriteTimeout: 60
|
WriteTimeout: 60
|
||||||
Redis:
|
Redis:
|
||||||
Host: 192.168.88.129
|
Host: 127.0.0.1
|
||||||
Port: 6379
|
Port: 6379
|
||||||
Password: 123456
|
Password:
|
||||||
DB: 1
|
DB: 1
|
||||||
Service:
|
Service:
|
||||||
MaxSessionLife: 2h
|
MaxSessionLife: 2h
|
||||||
|
|
Loading…
Reference in New Issue
Block a user