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 }