From 5710a640e8bd0dd149134d96bd0e97401ae8d24c Mon Sep 17 00:00:00 2001 From: ZiHangQin <1420014281@qq.com> Date: Fri, 4 Aug 2023 10:05:27 +0800 Subject: [PATCH] =?UTF-8?q?[=E8=AE=A1=E7=AE=97=E7=9B=B8=E5=85=B3]fix=20?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E7=BA=BF=E6=8D=9F=E4=BB=A5=E5=8F=8A=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E7=BA=BF=E6=8D=9F=E5=8F=82=E6=95=B0=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E3=80=82new=20=E8=AE=A1=E7=AE=97=E6=89=80=E6=9C=89=E5=B7=B2?= =?UTF-8?q?=E7=BB=8F=E5=90=AF=E7=94=A8=E7=9A=84=E5=95=86=E9=93=BA=E9=9D=A2?= =?UTF-8?q?=E7=A7=AF=E6=80=BB=E5=92=8C=EF=BC=8C=E4=BB=85=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E6=89=80=E6=9C=89=E6=9C=AA=E8=BF=81=E5=87=BA=E7=9A=84=E5=95=86?= =?UTF-8?q?=E6=88=B7=E7=9A=84=E6=89=80=E6=9C=89=E8=A1=A8=E8=AE=A1=E5=AF=B9?= =?UTF-8?q?=E5=BA=94=E7=9A=84=E5=95=86=E9=93=BA=E9=9D=A2=E7=A7=AF=E3=80=82?= =?UTF-8?q?(=E5=AE=8C=E6=88=90)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- service/calculate/summary.go | 32 ++++++++++++++++++++++++++++---- service/calculate/wattCost.go | 9 ++++++++- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/service/calculate/summary.go b/service/calculate/summary.go index 85f22ea..26d5620 100644 --- a/service/calculate/summary.go +++ b/service/calculate/summary.go @@ -42,8 +42,8 @@ func removeDuplicates(meters []calculate.Meter) []calculate.Meter { } //计算线损以及调整线损 -func LossCalculate(report *model.ReportIndex, Public []calculate.Meter, - publicTotal decimal.Decimal, summary calculate.Summary) error { +func LossCalculate(report *model.ReportIndex, Public *[]calculate.Meter, + publicTotal *decimal.Decimal, summary *calculate.Summary) error { summary.Loss = summary.Overall.Amount.Sub(summary.TotalConsumption) var summaryAmount decimal.Decimal @@ -56,10 +56,11 @@ func LossCalculate(report *model.ReportIndex, Public []calculate.Meter, summary.LossProportion = summary.Loss.Div(summaryAmount) var authorizedLossRate decimal.Decimal + //TODO: 2023.08.04 在此发现reportIndex结构体与数据库中的report表字段不对应缺少两个相应字段,在此添加的,如在其他地方有错误优先查找这里 if summary.LossProportion.InexactFloat64() > report.AuthorizedLossRate { authorizedLossRate = summary.LossProportion } else { - return errors.New(fmt.Sprintf("经过核算园区的线损率为:{%.8f}, 核定线损率为:{%.8f}", summary.LossProportion.InexactFloat64(),authorizedLossRate.InexactFloat64())) + return errors.New(fmt.Sprintf("经过核算园区的线损率为:{%.8f}, 核定线损率为:{%.8f}", summary.LossProportion.InexactFloat64(), authorizedLossRate.InexactFloat64())) } summary.AuthoizeLoss = model.ConsumptionUnit{ @@ -75,7 +76,7 @@ func LossCalculate(report *model.ReportIndex, Public []calculate.Meter, return errors.New("园区公共表计的电量总和为非正值,或者园区未设置公共表计,无法计算核定线损") } - for _, meter := range Public { + for _, meter := range *Public { amountProportion := meter.Overall.Amount.InexactFloat64() / publicTotal.InexactFloat64() adjustAmount := differentialLoss.InexactFloat64() * decimal.NewFromFloat(-1.0).InexactFloat64() meter.AdjustLoss = model.ConsumptionUnit{ @@ -87,3 +88,26 @@ func LossCalculate(report *model.ReportIndex, Public []calculate.Meter, } return nil } + +// 计算已经启用的商铺面积和 +func EnabledAreaCalculate(tenements *[]calculate.PrimaryTenementStatistics, summary *calculate.Summary) error { + var areaMeters []calculate.Meter + for _, t := range *tenements { + areaMeters = append(areaMeters, t.Meters...) + } + // 去重 + uniqueAreaMeters := make(map[string]calculate.Meter) + for _, meter := range areaMeters { + uniqueAreaMeters[meter.Code] = meter + } + var areaTotal decimal.Decimal + for _, meter := range uniqueAreaMeters { + areaTotal = areaTotal.Add(meter.Detail.Area.Decimal) + } + if summary != nil { + summary.OverallArea = areaTotal + } else { + return errors.New("summary is nil") + } + return nil +} diff --git a/service/calculate/wattCost.go b/service/calculate/wattCost.go index f7ff373..6fe261b 100644 --- a/service/calculate/wattCost.go +++ b/service/calculate/wattCost.go @@ -65,12 +65,19 @@ func MainCalculateProcess(rid string) { //计算所有表计的总电量 parkTotal := TotalConsumptionCalculate(tenementReports, summary) - err = LossCalculate(report, parkMetersReports, parkTotal, summary) + // 计算线损以及调整线损 + err = LossCalculate(report, &parkMetersReports, &parkTotal, &summary) if err != nil { fmt.Println("9", err) return } + err = EnabledAreaCalculate(&tenementReports, &summary) + if err != nil{ + fmt.Println("10",err) + return + } + fmt.Println(meterRelations, poolingMetersReports, parkMetersReports, parkTotal) }