73 lines
2.1 KiB
Go
73 lines
2.1 KiB
Go
package calculate
|
|
|
|
import (
|
|
"electricity_bill_calc/global"
|
|
"electricity_bill_calc/repository"
|
|
"github.com/doug-martin/goqu/v9"
|
|
)
|
|
|
|
type _ModService struct {
|
|
ds goqu.DialectWrapper
|
|
}
|
|
|
|
var ModService = _ModService{
|
|
ds: goqu.Dialect("postgres"),
|
|
}
|
|
|
|
func mainCalculateProcess(rid string) error {
|
|
|
|
// 计算所有已经启用的商铺面积总和,仅计算所有未迁出的商户的所有表计对应的商铺面积。
|
|
err := CalculateEnabledArea(tenementreports, &summary)
|
|
// 计算基本电费分摊、调整电费分摊、电费摊薄单价。
|
|
err = CalculatePrices(&summary)
|
|
// 收集目前所有已经处理的表计,统一对其进行摊薄计算。
|
|
collectMeters, err := CollectMeters(tenementreports, poolingmetersreports, parkmetersreports)
|
|
meters, err := collectMeters, err
|
|
if err != nil {
|
|
return err
|
|
}
|
|
// 根据核算报表中设置的摊薄内容,逐个表计进行计算
|
|
CalculateBasicPooling(report, summary, meters)
|
|
CalculateAdjustPooling(report, summary, meters)
|
|
CalculateLossPooling(report, summary, meters)
|
|
// 计算所有商户类型表计的全周期电量,并根据全周期电量计算共用过同一表计的商户的二次分摊比例。
|
|
CalculateTenementConsumptions(meters)
|
|
CalculateTenementPoolings(report, summary, meters, metersrelations)
|
|
// 计算商户的合计电费信息,并归总与商户相关联的表计记录
|
|
tenementCharges, err := CalculateTenementCharge(tenementReports, summary, meters, meterRelations)
|
|
if err != nil {
|
|
// 处理错误
|
|
}
|
|
// 从此处开始向数据库保存全部计算结果。
|
|
ctx, cancel := global.TimeoutContext()
|
|
defer cancel()
|
|
tx, _ := global.DB.Begin(ctx)
|
|
err = repository.CalculateRepository.ClearReportContent(tx, report.Id)
|
|
if err != nil {
|
|
tx.Rollback(ctx)
|
|
return err
|
|
}
|
|
|
|
err = SaveSummary(tx, summary)
|
|
if err != nil {
|
|
tx.Rollback(ctx)
|
|
return err
|
|
}
|
|
err = SavePublics(tx, report, meters)
|
|
if err != nil {
|
|
tx.Rollback(ctx)
|
|
return err
|
|
}
|
|
err = SavePoolings(tx)
|
|
if err != nil {
|
|
tx.Rollback(ctx)
|
|
return err
|
|
}
|
|
err = SaveTenements(tx)
|
|
if err != nil {
|
|
tx.Rollback(ctx)
|
|
return err
|
|
}
|
|
tx.Commit(ctx)
|
|
}
|