82 lines
2.2 KiB
Go
82 lines
2.2 KiB
Go
package calculate
|
|
|
|
import (
|
|
"electricity_bill_calc/global"
|
|
"electricity_bill_calc/model"
|
|
"electricity_bill_calc/model/calculate"
|
|
"electricity_bill_calc/repository"
|
|
"github.com/jackc/pgx/v5"
|
|
)
|
|
|
|
// 向数据库保存核算概况结果
|
|
func SaveSummary(tx pgx.Tx, summary calculate.Summary) error {
|
|
ctx, cancel := global.TimeoutContext()
|
|
defer cancel()
|
|
|
|
// 保存核算概况结果到数据库
|
|
err := repository.CalculateRepository.SaveReportSummary(tx, summary)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
tx.Commit(ctx)
|
|
return nil
|
|
}
|
|
|
|
// type MeterMap map[string]map[string]calculate.Meter
|
|
// 向数据库保存公共表计的计算结果
|
|
func SavePublics(tx pgx.Tx, report model.ReportIndex, meters MeterMap) error {
|
|
ctx, cancel := global.TimeoutContext()
|
|
defer cancel()
|
|
|
|
var filteredMeters []calculate.Meter
|
|
|
|
for _, m := range meters {
|
|
if m.Detail.MeterType == model.METER_INSTALLATION_PARK {
|
|
filteredMeters = append(filteredMeters, m)
|
|
}
|
|
}
|
|
err := repository.CalculateRepository.SaveReportPublics(tx, report.Id, filteredMeters)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
tx.Commit(ctx)
|
|
return nil
|
|
}
|
|
|
|
func SavePoolings(tx pgx.Tx, report model.ReportIndex, meters MeterMap, relations []model.MeterRelation) error {
|
|
ctx, cancel := global.TimeoutContext()
|
|
defer cancel()
|
|
var poolingMeters []calculate.Meter
|
|
var tenementMeters []calculate.Meter
|
|
// 根据条件筛选 Meter 并保存到对应的数组中
|
|
for _, m := range meters {
|
|
if m.Detail.MeterType == model.METER_INSTALLATION_POOLING {
|
|
poolingMeters = append(poolingMeters, m)
|
|
} else if m.Detail.MeterType == model.METER_INSTALLATION_TENEMENT {
|
|
tenementMeters = append(tenementMeters, m)
|
|
}
|
|
}
|
|
err := repository.CalculateRepository.SaveReportPoolings(tx, report.Id, poolingMeters, relations, tenementMeters)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
tx.Commit(ctx)
|
|
|
|
return nil
|
|
}
|
|
func SaveTenements(tx pgx.Tx, report model.ReportIndex, tenement []calculate.PrimaryTenementStatistics, tc []calculate.TenementCharge) error {
|
|
ctx, cancel := global.TimeoutContext()
|
|
defer cancel()
|
|
var ts []model.Tenement
|
|
for _, r := range tenement {
|
|
ts = append(ts, r.Tenement)
|
|
}
|
|
err := repository.CalculateRepository.SaveReportTenement(tx, report, ts, tc)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
tx.Commit(ctx)
|
|
|
|
return nil
|
|
}
|