[计算相关]计算所有表计的总电量(完成)

This commit is contained in:
ZiHangQin 2023-08-03 17:30:00 +08:00
parent f688f50ecb
commit 8fc463bd9d
3 changed files with 47 additions and 25 deletions

View File

@ -1 +1,39 @@
package calculate 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
}

View File

@ -15,7 +15,7 @@ import (
// 核算园区中的全部商户表计电量用电 // 核算园区中的全部商户表计电量用电
func TenementMetersCalculate(report *model.ReportIndex, PeriodStart time.Time, func TenementMetersCalculate(report *model.ReportIndex, PeriodStart time.Time,
PeriodEnd time.Time, meterDetails []*model.MeterDetail, 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) tenements, err := repository.CalculateRepository.GetAllTenements(report.Id)
if err != nil { if err != nil {
fmt.Println("tenement 0", err) fmt.Println("tenement 0", err)
@ -40,7 +40,7 @@ func TenementMetersCalculate(report *model.ReportIndex, PeriodStart time.Time,
return nil, err return nil, err
} }
var tenementReports []model.Tenement var tenementReports []calculate.PrimaryTenementStatistics
for _, tenement := range tenements { for _, tenement := range tenements {
var meters []model.TenementMeter var meters []model.TenementMeter
@ -65,30 +65,10 @@ func TenementMetersCalculate(report *model.ReportIndex, PeriodStart time.Time,
return nil, err return nil, err
} }
report := model.Tenement{ tenementReports = append(tenementReports, pt)
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) return tenementReports, nil
}
return tenementMeterRelations, nil
} }
//TODO: 2023.08.02 此方法未完成此方法主要用于。确定指定商户在指定时间段内的所有表计读数(完成) //TODO: 2023.08.02 此方法未完成此方法主要用于。确定指定商户在指定时间段内的所有表计读数(完成)

View File

@ -55,12 +55,16 @@ func MainCalculateProcess(rid string) {
return return
} }
// 获取所有的物业表计,然后对所有的物业表计电量进行计算。
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 return
} }
fmt.Println(meterRelations, tenementReports, poolingMetersReports, parkMetersReports) //计算所有表计的总电量
parkTotal := TotalConsumptionCalculate(tenementReports, summary)
fmt.Println(meterRelations, poolingMetersReports, parkMetersReports, parkTotal)
} }