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