56 lines
1.6 KiB
Go
56 lines
1.6 KiB
Go
package calculate
|
|
|
|
import (
|
|
"electricity_bill_calc/model/calculate"
|
|
"errors"
|
|
"github.com/shopspring/decimal"
|
|
)
|
|
|
|
// / 计算已经启用的商铺面积和
|
|
// /
|
|
// / - `tenements`:所有商户的电量信息
|
|
// / - `summary`:核算报表的摘要信息
|
|
func CalculateEnabledArea(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 nil, errors.New("summary is nil")
|
|
}
|
|
return &areaTotal, nil
|
|
}
|
|
|
|
// / 计算基本电费分摊、调整电费分摊以及电费摊薄单价。
|
|
// /
|
|
// / - `summary`:核算报表的摘要信息
|
|
func CalculatePrices(summary *calculate.Summary) error {
|
|
if summary.TotalConsumption.IsZero() {
|
|
return nil
|
|
}
|
|
summary.BasicPooledPriceConsumption = summary.BasicFee.Div(summary.TotalConsumption)
|
|
if summary.OverallArea.IsZero() {
|
|
summary.BasicPooledPriceArea = decimal.Zero
|
|
} else {
|
|
summary.BasicPooledPriceArea = summary.BasicFee.Div(summary.OverallArea)
|
|
}
|
|
summary.AdjustPooledPriceConsumption = summary.AdjustFee.Div(summary.TotalConsumption)
|
|
if summary.OverallArea.IsZero() {
|
|
summary.AdjustPooledPriceArea = decimal.Zero
|
|
} else {
|
|
summary.AdjustPooledPriceArea = summary.AdjustFee.Div(summary.OverallArea)
|
|
}
|
|
return nil
|
|
}
|