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 }