[计算相关]计算所有表计的总电量(完成)
This commit is contained in:
parent
f688f50ecb
commit
8fc463bd9d
|
@ -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
|
||||||
|
}
|
||||||
|
|
|
@ -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 此方法未完成此方法主要用于。确定指定商户在指定时间段内的所有表计读数(完成)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user