From 8fc463bd9d53487d314bb9f2a69eda18cbeb407f Mon Sep 17 00:00:00 2001 From: ZiHangQin <1420014281@qq.com> Date: Thu, 3 Aug 2023 17:30:00 +0800 Subject: [PATCH] =?UTF-8?q?[=E8=AE=A1=E7=AE=97=E7=9B=B8=E5=85=B3]=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E6=89=80=E6=9C=89=E8=A1=A8=E8=AE=A1=E7=9A=84=E6=80=BB?= =?UTF-8?q?=E7=94=B5=E9=87=8F(=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 | 38 +++++++++++++++++++++++++++++++++++ service/calculate/tenement.go | 28 ++++---------------------- service/calculate/wattCost.go | 6 +++++- 3 files changed, 47 insertions(+), 25 deletions(-) diff --git a/service/calculate/summary.go b/service/calculate/summary.go index 8b0bbf7..50bd708 100644 --- a/service/calculate/summary.go +++ b/service/calculate/summary.go @@ -1 +1,39 @@ package calculate + +import ( + "electricity_bill_calc/model/calculate" + "github.com/shopspring/decimal" +) + +// 计算已经启用的商铺面积和 +func TotalConsumptionCalculate(tenements []calculate.PrimaryTenementStatistics, + summary calculate.Summary) decimal.Decimal { + var areaMaters []calculate.Meter + for _, t := range tenements { + areaMaters = append(areaMaters, t.Meters...) + } + + areaMaters = removeDuplicates(areaMaters) + + var areaTotal float64 + for _, m := range areaMaters { + areaTotal += m.Detail.Area.Decimal.InexactFloat64() + } + + areaTotal += summary.OverallArea.InexactFloat64() + + return decimal.NewFromFloat(areaTotal) + +} + +func removeDuplicates(meters []calculate.Meter) []calculate.Meter { + result := make([]calculate.Meter, 0, len(meters)) + seen := make(map[string]bool) + for _, meter := range meters { + if !seen[meter.Code] { + seen[meter.Code] = true + result = append(result, meter) + } + } + return result +} diff --git a/service/calculate/tenement.go b/service/calculate/tenement.go index ca82dad..1749140 100644 --- a/service/calculate/tenement.go +++ b/service/calculate/tenement.go @@ -15,7 +15,7 @@ import ( // 核算园区中的全部商户表计电量用电 func TenementMetersCalculate(report *model.ReportIndex, PeriodStart time.Time, PeriodEnd time.Time, meterDetails []*model.MeterDetail, - summary calculate.Summary) ([]model.TenementMeter, error) { + summary calculate.Summary) ([]calculate.PrimaryTenementStatistics, error) { tenements, err := repository.CalculateRepository.GetAllTenements(report.Id) if err != nil { fmt.Println("tenement 0", err) @@ -40,7 +40,7 @@ func TenementMetersCalculate(report *model.ReportIndex, PeriodStart time.Time, return nil, err } - var tenementReports []model.Tenement + var tenementReports []calculate.PrimaryTenementStatistics for _, tenement := range tenements { var meters []model.TenementMeter @@ -65,30 +65,10 @@ func TenementMetersCalculate(report *model.ReportIndex, PeriodStart time.Time, return nil, err } - report := model.Tenement{ - Id: pt.Tenement.Id, - Park: pt.Tenement.Park, - FullName: pt.Tenement.FullName, - ShortName: pt.Tenement.ShortName, - Abbr: pt.Tenement.Abbr, - Address: pt.Tenement.Address, - ContactName: pt.Tenement.ContactName, - ContactPhone: pt.Tenement.ContactPhone, - Building: pt.Tenement.Building, - BuildingName: pt.Tenement.BuildingName, - OnFloor: pt.Tenement.OnFloor, - InvoiceInfo: pt.Tenement.InvoiceInfo, - MovedInAt: pt.Tenement.MovedInAt, - MovedOutAt: pt.Tenement.MovedOutAt, - CreatedAt: pt.Tenement.CreatedAt, - LastModifiedAt: pt.Tenement.LastModifiedAt, - DeletedAt: pt.Tenement.DeletedAt, - } - - tenementReports = append(tenementReports, report) + tenementReports = append(tenementReports, pt) } - return tenementMeterRelations, nil + return tenementReports, nil } //TODO: 2023.08.02 此方法未完成此方法主要用于。确定指定商户在指定时间段内的所有表计读数(完成) diff --git a/service/calculate/wattCost.go b/service/calculate/wattCost.go index 5d2956e..f9556f1 100644 --- a/service/calculate/wattCost.go +++ b/service/calculate/wattCost.go @@ -55,12 +55,16 @@ func MainCalculateProcess(rid string) { return } + // 获取所有的物业表计,然后对所有的物业表计电量进行计算。 parkMetersReports, err := MetersParkCalculate(*report, periodStart.Time, periodEnd.Time, meterDetails, summary) if err != nil { fmt.Println("8", err) return } - fmt.Println(meterRelations, tenementReports, poolingMetersReports, parkMetersReports) + //计算所有表计的总电量 + parkTotal := TotalConsumptionCalculate(tenementReports, summary) + + fmt.Println(meterRelations, poolingMetersReports, parkMetersReports, parkTotal) }