diff --git a/model/calculate/calculate.go b/model/calculate/calculate.go index 4eca038..be40395 100644 --- a/model/calculate/calculate.go +++ b/model/calculate/calculate.go @@ -60,7 +60,7 @@ type TenementCharge struct { LossPooled decimal.Decimal `json:"loss_pooled"` PublicPooled decimal.Decimal `json:"public_pooled"` FinalCharges decimal.Decimal `json:"final_charges"` - Loss decimal.Decimal `json:"loss"` + Loss model.ConsumptionUnit `json:"loss"` Submeters []*Meter `json:"submeters"` Poolings []*Meter `json:"poolings"` } diff --git a/repository/calculate.go b/repository/calculate.go index 9b9a5b4..8e210c3 100644 --- a/repository/calculate.go +++ b/repository/calculate.go @@ -501,57 +501,53 @@ func (cr _CalculateRepository) SaveReportTenement(tx pgx.Tx, report model.Report defer cancel() insertQuery := cr.ds. Insert("report_tenement") - //var values []goqu.Record + var rows []goqu.Record for _, tenement := range tenements { - //charge := findTenementCharge(tenementCharges, tenement.Id) - for _, charge := range tenementCharges { - tenementStr, _ := json.Marshal(tenement) - overallStr, _ := json.Marshal(charge.Overall) - criticalStr, _ := json.Marshal(charge.Critical) - peakStr, _ := json.Marshal(charge.Peak) - flatStr, _ := json.Marshal(charge.Flat) - valleyStr, _ := json.Marshal(charge.Valley) - lossStr, _ := json.Marshal(charge.Loss) - meters, _ := json.Marshal(convertToNestedMeters(charge.Submeters)) - pooled, _ := json.Marshal(convertToNestedMeters(charge.Poolings)) - fmt.Println(report.Id, tenement.Id, "123") - insertQuery = insertQuery. - Cols( - "report_id", "tenement_id", "tenement_detail", "calc_period", "overall", "critical", "peak", "flat", "valley", "loss", "basic_fee_pooled", - "adjust_fee_pooled", "loss_fee_pooled", "final_charge", "invoice", "meters", "pooled", - ). - Vals(goqu.Vals{report.Id, - tenement.Id, - tenementStr, - report.Period, - overallStr, - criticalStr, - peakStr, - flatStr, - valleyStr, - lossStr, - charge.BasicFee, - charge.AdjustFee, - charge.LossPooled, - charge.PublicPooled, - charge.FinalCharges, - meters, - pooled}) + tenementCharge := findTenementCharge(tenementCharges, tenement.Id) + + tenementDetail, _ := json.Marshal(tenement) + overallJSON, _ := json.Marshal(tenementCharge.Overall) + criticalJSON, _ := json.Marshal(tenementCharge.Critical) + peakJSON, _ := json.Marshal(tenementCharge.Peak) + flatJSON, _ := json.Marshal(tenementCharge.Flat) + valleyJSON, _ := json.Marshal(tenementCharge.Valley) + lossJSON, _ := json.Marshal(tenementCharge.Loss) + submetersJSON, _ := json.Marshal(convertToNestedMeters(tenementCharge.Submeters)) + poolingsJSON, _ := json.Marshal(convertToNestedMeters(tenementCharge.Poolings)) + + row := goqu.Record{ + "report_id": report.Id, + "tenement_id": tenement.Id, + "tenement_detail": tenementDetail, + "calc_period": report.Period, + "overall": overallJSON, + "critical": criticalJSON, + "peak": peakJSON, + "flat": flatJSON, + "valley": valleyJSON, + "loss": lossJSON, + "basic_fee_pooled": tenementCharge.BasicFee, + "adjust_fee_pooled": tenementCharge.AdjustFee, + "loss_fee_pooled": tenementCharge.LossPooled, + "final_pooled": tenementCharge.PublicPooled, + "final_charge": tenementCharge.FinalCharges, + "meters": submetersJSON, + "pooled": poolingsJSON, } + rows = append(rows, row) } - sql, params, err := insertQuery.Prepared(true).ToSQL() + sql, params, err := insertQuery.Rows(rows).Prepared(true).ToSQL() if err != nil { fmt.Println(err) } - fmt.Println("====================================================================", sql) _, err = tx.Exec(ctx, sql, params...) if err != nil { fmt.Println(err.Error()) return err } - fmt.Println("保存成功") + return nil } diff --git a/service/calculate/meters.go b/service/calculate/meters.go index d48ee70..aa7f40a 100644 --- a/service/calculate/meters.go +++ b/service/calculate/meters.go @@ -151,9 +151,9 @@ func CalculateLossPooling(report model.ReportIndex, summary calculate.Summary, m /// 计算所有商户类型表计的全周期电量。 -func CalculateTenementConsumptions(meters MeterMap) (map[string]decimal.Decimal, error) { +func CalculateTenementConsumptions(meters *MeterMap) (map[string]decimal.Decimal, error) { consumptions := make(map[string]decimal.Decimal) - for _, meter := range meters { + for _, meter := range *meters { if meter.Detail.MeterType == model.METER_INSTALLATION_TENEMENT { amount, ok := consumptions[meter.Code] if !ok { @@ -163,7 +163,7 @@ func CalculateTenementConsumptions(meters MeterMap) (map[string]decimal.Decimal, consumptions[meter.Code] = amount } } - for _, meter := range meters { + for _, meter := range *meters { if meter.Detail.MeterType == model.METER_INSTALLATION_TENEMENT { amount, ok := consumptions[meter.Code] if !ok { diff --git a/service/calculate/wattCost.go b/service/calculate/wattCost.go index 2f0771b..23c483d 100644 --- a/service/calculate/wattCost.go +++ b/service/calculate/wattCost.go @@ -110,7 +110,7 @@ func MainCalculateProcess(rid string) error { return err } // 计算所有商户类型表计的全周期电量,并根据全周期电量计算共用过同一表计的商户的二次分摊比例。 - _, err = CalculateTenementConsumptions(meters) + _, err = CalculateTenementConsumptions(&meters) if err != nil { fmt.Println("16", err) return err