forked from free-lancers/electricity_bill_calc_service
fix(#10): 修复部分计算错误,遗留问题在pooled中的deteminePublicMeterConsumpyions里时间为空错误
This commit is contained in:
@@ -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
|
||||
|
@@ -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...)
|
||||
}
|
||||
|
||||
|
@@ -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{
|
||||
|
@@ -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)
|
||||
|
Reference in New Issue
Block a user