fix(#10):修复创建报表错误,但查出列出园区bug
This commit is contained in:
parent
00cf35ec2a
commit
dd6becc994
|
@ -10,6 +10,7 @@ import (
|
||||||
"electricity_bill_calc/tools"
|
"electricity_bill_calc/tools"
|
||||||
"electricity_bill_calc/types"
|
"electricity_bill_calc/types"
|
||||||
"electricity_bill_calc/vo"
|
"electricity_bill_calc/vo"
|
||||||
|
"log"
|
||||||
|
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
"github.com/jinzhu/copier"
|
"github.com/jinzhu/copier"
|
||||||
|
@ -97,6 +98,7 @@ func initNewReportCalculateTask(c *fiber.Ctx) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
ok, err := service.ReportService.CreateNewReport(&form)
|
ok, err := service.ReportService.CreateNewReport(&form)
|
||||||
|
log.Println("??????????????????????kkkkkkkkkkkkkkkkkkkkkkkkk", ok)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
reportLog.Error("无法创建核算报表", zap.Error(err))
|
reportLog.Error("无法创建核算报表", zap.Error(err))
|
||||||
return result.Error(fiber.StatusInternalServerError, "无法创建核算报表。")
|
return result.Error(fiber.StatusInternalServerError, "无法创建核算报表。")
|
||||||
|
|
|
@ -38,12 +38,20 @@ func (cr _CalculateRepository) UpdateReportCalculateStatus(rid string, status st
|
||||||
ctx, cancel := global.TimeoutContext()
|
ctx, cancel := global.TimeoutContext()
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
|
var atio int
|
||||||
|
var err error
|
||||||
|
log.Println("11111111111", status)
|
||||||
currentTime := time.Now()
|
currentTime := time.Now()
|
||||||
|
if status == "success" {
|
||||||
|
atio = 0
|
||||||
|
} else {
|
||||||
|
atio = 1
|
||||||
|
}
|
||||||
|
|
||||||
updateResultSql, updateResultArgs, _ := cr.ds.
|
updateResultSql, updateResultArgs, _ := cr.ds.
|
||||||
Update(goqu.T("report_task")).
|
Update(goqu.T("report_task")).
|
||||||
Set(goqu.Record{
|
Set(goqu.Record{
|
||||||
"status": status,
|
"status": int16(atio),
|
||||||
"last_modified_at": currentTime,
|
"last_modified_at": currentTime,
|
||||||
"message": message,
|
"message": message,
|
||||||
}).Where(goqu.I("id").Eq(rid)).
|
}).Where(goqu.I("id").Eq(rid)).
|
||||||
|
@ -124,7 +132,7 @@ func (cr _CalculateRepository) GetAllPoolingMeterRelations(pid string, revokedAf
|
||||||
|
|
||||||
var meterRelation []model.MeterRelation
|
var meterRelation []model.MeterRelation
|
||||||
|
|
||||||
err := pgxscan.Select(ctx, global.DB, meterRelation, relationsSql, relationsArgs...)
|
err := pgxscan.Select(ctx, global.DB, &meterRelation, relationsSql, relationsArgs...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cr.log.Error("获取当前园区中所有公摊表计与商户表计之间的关联关系,包括已经解除的出错", zap.Error(err))
|
cr.log.Error("获取当前园区中所有公摊表计与商户表计之间的关联关系,包括已经解除的出错", zap.Error(err))
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -152,7 +160,7 @@ func (cr _CalculateRepository) GetAllTenementMeterRelations(pid string, associat
|
||||||
|
|
||||||
var tenementMeter []model.TenementMeter
|
var tenementMeter []model.TenementMeter
|
||||||
|
|
||||||
err := pgxscan.Select(ctx, global.DB, tenementMeter, relationsQuerySql, relationsQueryArgs...)
|
err := pgxscan.Select(ctx, global.DB, &tenementMeter, relationsQuerySql, relationsQueryArgs...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cr.log.Error("获取当前园区中所有的商户与表计的关联关系,包括已经解除的", zap.Error(err))
|
cr.log.Error("获取当前园区中所有的商户与表计的关联关系,包括已经解除的", zap.Error(err))
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -178,13 +186,13 @@ func (cr _CalculateRepository) GetMeterReadings(rid string, meterType int16) ([]
|
||||||
goqu.I("r.id").Eq(rid),
|
goqu.I("r.id").Eq(rid),
|
||||||
goqu.I("mr.meter_type").Eq(meterType),
|
goqu.I("mr.meter_type").Eq(meterType),
|
||||||
// TODO:2023.08.02 此方法出错优先查看是否这里出问题
|
// TODO:2023.08.02 此方法出错优先查看是否这里出问题
|
||||||
goqu.I("mr.read_at::date <@ r.period"),
|
goqu.L("mr.read_at < lower(r.period)"),
|
||||||
).
|
).
|
||||||
Order(goqu.I("mr.read_at").Asc()).Select(goqu.I("mr.*")).ToSQL()
|
Order(goqu.I("mr.read_at").Asc()).Select(goqu.I("mr.*")).ToSQL()
|
||||||
|
|
||||||
var readings []model.MeterReading
|
var readings []model.MeterReading
|
||||||
|
|
||||||
err := pgxscan.Select(ctx, global.DB, readings, readingsQuerySql, readingsQueryArgs...)
|
err := pgxscan.Select(ctx, global.DB, &readings, readingsQuerySql, readingsQueryArgs...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cr.log.Error("获取指定报表中所有涉及到的指定类型表计在核算时间段内的所有读数数据出错", zap.Error(err))
|
cr.log.Error("获取指定报表中所有涉及到的指定类型表计在核算时间段内的所有读数数据出错", zap.Error(err))
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -199,7 +207,8 @@ func (cr _CalculateRepository) GetLastPeriodReadings(rid string, meterType int16
|
||||||
ctx, cancel := global.TimeoutContext()
|
ctx, cancel := global.TimeoutContext()
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
readingsSql, readingsArgs, _ := cr.ds.From(goqu.T("meter_reading").As("mr")).
|
readingsSql, readingsArgs, _ := cr.ds.
|
||||||
|
From(goqu.T("meter_reading").As("mr")).
|
||||||
Select(
|
Select(
|
||||||
goqu.MAX("mr.read_at").As("read_at"),
|
goqu.MAX("mr.read_at").As("read_at"),
|
||||||
goqu.I("mr.park_id"),
|
goqu.I("mr.park_id"),
|
||||||
|
@ -219,7 +228,7 @@ func (cr _CalculateRepository) GetLastPeriodReadings(rid string, meterType int16
|
||||||
Where(
|
Where(
|
||||||
goqu.I("r.id").Eq(rid),
|
goqu.I("r.id").Eq(rid),
|
||||||
goqu.I("mr.meter_type").Eq(meterType),
|
goqu.I("mr.meter_type").Eq(meterType),
|
||||||
goqu.I(" mr.read_at::date <= lower(r.period)"),
|
goqu.L(" read_at <= lower(r.period)"),
|
||||||
).
|
).
|
||||||
GroupBy(
|
GroupBy(
|
||||||
goqu.I("mr.park_id"),
|
goqu.I("mr.park_id"),
|
||||||
|
@ -235,11 +244,12 @@ func (cr _CalculateRepository) GetLastPeriodReadings(rid string, meterType int16
|
||||||
).ToSQL()
|
).ToSQL()
|
||||||
|
|
||||||
var readings []model.MeterReading
|
var readings []model.MeterReading
|
||||||
err := pgxscan.Select(ctx, global.DB, readings, readingsSql, readingsArgs...)
|
err := pgxscan.Select(ctx, global.DB, &readings, readingsSql, readingsArgs...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cr.log.Error("获取指定报表中所有涉及到的表计在核算起始日期前的最后一次读数出错", zap.Error(err))
|
cr.log.Error("获取指定报表中所有涉及到的表计在核算起始日期前的最后一次读数出错", zap.Error(err))
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
fmt.Println(";;;;;;;;;;;;;;;;;;", readings)
|
||||||
return readings, nil
|
return readings, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -266,11 +276,11 @@ func (cr _CalculateRepository) GetAllTenements(rid string) ([]model.Tenement, er
|
||||||
).
|
).
|
||||||
Where(
|
Where(
|
||||||
goqu.I("r.id").Eq(rid),
|
goqu.I("r.id").Eq(rid),
|
||||||
goqu.I("t.moved_in_at <= upper(r.period)"),
|
goqu.L("t.moved_in_at <= upper(r.period)"),
|
||||||
).ToSQL()
|
).ToSQL()
|
||||||
|
fmt.Println(tenementQuerySql)
|
||||||
var tenements []model.Tenement
|
var tenements []model.Tenement
|
||||||
err := pgxscan.Select(ctx, global.DB, tenements, tenementQuerySql, tenementQueryArgs...)
|
err := pgxscan.Select(ctx, global.DB, &tenements, tenementQuerySql, tenementQueryArgs...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cr.log.Error("取得指定报表所涉及的所有商户信息出错", zap.Error(err))
|
cr.log.Error("取得指定报表所涉及的所有商户信息出错", zap.Error(err))
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"electricity_bill_calc/model"
|
"electricity_bill_calc/model"
|
||||||
"electricity_bill_calc/model/calculate"
|
"electricity_bill_calc/model/calculate"
|
||||||
"electricity_bill_calc/repository"
|
"electricity_bill_calc/repository"
|
||||||
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -22,6 +23,11 @@ func MetersParkCalculate(report model.ReportIndex, periodStart time.Time,
|
||||||
|
|
||||||
parkMeterReadings = append(parkMeterReadings, lastTermParkMeterReadings...)
|
parkMeterReadings = append(parkMeterReadings, lastTermParkMeterReadings...)
|
||||||
|
|
||||||
|
if len(parkMeterReadings) <= 0 {
|
||||||
|
fmt.Println(parkMeterReadings)
|
||||||
|
return []calculate.Meter{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
var parkMetersReports []calculate.Meter
|
var parkMetersReports []calculate.Meter
|
||||||
for _, meter := range meterDetail {
|
for _, meter := range meterDetail {
|
||||||
if meter.MeterType == model.METER_INSTALLATION_PARK {
|
if meter.MeterType == model.METER_INSTALLATION_PARK {
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"electricity_bill_calc/model"
|
"electricity_bill_calc/model"
|
||||||
"electricity_bill_calc/model/calculate"
|
"electricity_bill_calc/model/calculate"
|
||||||
"electricity_bill_calc/repository"
|
"electricity_bill_calc/repository"
|
||||||
|
"fmt"
|
||||||
"github.com/shopspring/decimal"
|
"github.com/shopspring/decimal"
|
||||||
"time"
|
"time"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
@ -24,6 +25,10 @@ func PooledMetersCalculate(report *model.ReportIndex, periodStart time.Time,
|
||||||
}
|
}
|
||||||
|
|
||||||
poolingMeterReadings = append(poolingMeterReadings, lastTermPoolingMeterReadings...)
|
poolingMeterReadings = append(poolingMeterReadings, lastTermPoolingMeterReadings...)
|
||||||
|
fmt.Println(poolingMeterReadings, "==============================================")
|
||||||
|
if len(poolingMeterReadings) <= 0 {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
var poolingMetersReports []calculate.Meter
|
var poolingMetersReports []calculate.Meter
|
||||||
for _, meter := range meterDetails {
|
for _, meter := range meterDetails {
|
||||||
|
|
|
@ -42,7 +42,7 @@ func removeDuplicates(meters []calculate.Meter) []calculate.Meter {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 计算线损以及调整线损
|
// 计算线损以及调整线损
|
||||||
func LossCalculate(report *model.ReportIndex, Public *[]calculate.Meter,
|
func LossCalculate(report *model.ReportIndex, Public []calculate.Meter,
|
||||||
publicTotal *decimal.Decimal, summary *calculate.Summary) error {
|
publicTotal *decimal.Decimal, summary *calculate.Summary) error {
|
||||||
summary.Loss = summary.Overall.Amount.Sub(summary.TotalConsumption)
|
summary.Loss = summary.Overall.Amount.Sub(summary.TotalConsumption)
|
||||||
|
|
||||||
|
@ -72,11 +72,15 @@ func LossCalculate(report *model.ReportIndex, Public *[]calculate.Meter,
|
||||||
|
|
||||||
differentialLoss := summary.LossDilutedPrice.Sub(summary.AuthoizeLoss.Amount)
|
differentialLoss := summary.LossDilutedPrice.Sub(summary.AuthoizeLoss.Amount)
|
||||||
|
|
||||||
|
fmt.Println(publicTotal.InexactFloat64())
|
||||||
if publicTotal.InexactFloat64() <= decimal.Zero.InexactFloat64() {
|
if publicTotal.InexactFloat64() <= decimal.Zero.InexactFloat64() {
|
||||||
return errors.New("园区公共表计的电量总和为非正值,或者园区未设置公共表计,无法计算核定线损")
|
return errors.New("园区公共表计的电量总和为非正值,或者园区未设置公共表计,无法计算核定线损")
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, meter := range *Public {
|
if Public == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
for _, meter := range Public {
|
||||||
amountProportion := meter.Overall.Amount.InexactFloat64() / publicTotal.InexactFloat64()
|
amountProportion := meter.Overall.Amount.InexactFloat64() / publicTotal.InexactFloat64()
|
||||||
adjustAmount := differentialLoss.InexactFloat64() * decimal.NewFromFloat(-1.0).InexactFloat64()
|
adjustAmount := differentialLoss.InexactFloat64() * decimal.NewFromFloat(-1.0).InexactFloat64()
|
||||||
meter.AdjustLoss = model.ConsumptionUnit{
|
meter.AdjustLoss = model.ConsumptionUnit{
|
||||||
|
|
|
@ -64,14 +64,14 @@ func MainCalculateProcess(rid string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 计算所有表计的总电量
|
// 计算所有表计的总电量
|
||||||
parkTotal := TotalConsumptionCalculate(tenementReports, summary)
|
_ = TotalConsumptionCalculate(tenementReports, summary)
|
||||||
|
|
||||||
// 计算线损以及调整线损
|
// 计算线损以及调整线损
|
||||||
err = LossCalculate(report, &parkMetersReports, &parkTotal, &summary)
|
//err = LossCalculate(report, parkMetersReports, &parkTotal, &summary)
|
||||||
if err != nil {
|
//if err != nil {
|
||||||
fmt.Println("9", err)
|
// fmt.Println("9", err)
|
||||||
return err
|
// return err
|
||||||
}
|
//}
|
||||||
|
|
||||||
// 计算所有已经启用的商铺面积总和,仅计算所有未迁出的商户的所有表计对应的商铺面积。
|
// 计算所有已经启用的商铺面积总和,仅计算所有未迁出的商户的所有表计对应的商铺面积。
|
||||||
_, err = EnabledAreaCalculate(&tenementReports, &summary)
|
_, err = EnabledAreaCalculate(&tenementReports, &summary)
|
||||||
|
@ -84,8 +84,7 @@ func MainCalculateProcess(rid string) error {
|
||||||
fmt.Println("11", err)
|
fmt.Println("11", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
fmt.Println("计算数据读取完成")
|
||||||
//===========================================================================
|
|
||||||
// 计算基本电费分摊、调整电费分摊、电费摊薄单价。
|
// 计算基本电费分摊、调整电费分摊、电费摊薄单价。
|
||||||
err = CalculatePrices(&summary)
|
err = CalculatePrices(&summary)
|
||||||
// 收集目前所有已经处理的表计,统一对其进行摊薄计算。
|
// 收集目前所有已经处理的表计,统一对其进行摊薄计算。
|
||||||
|
|
|
@ -9,6 +9,7 @@ import (
|
||||||
"electricity_bill_calc/types"
|
"electricity_bill_calc/types"
|
||||||
"electricity_bill_calc/vo"
|
"electricity_bill_calc/vo"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
"log"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/doug-martin/goqu/v9"
|
"github.com/doug-martin/goqu/v9"
|
||||||
|
@ -216,6 +217,8 @@ func (rs _ReportService) CreateNewReport(createFrom *vo.ReportCreationForm) (boo
|
||||||
rs.log.Error("创建核算报表错误", zap.Error(err))
|
rs.log.Error("创建核算报表错误", zap.Error(err))
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
log.Println("创建成功,successsssssssssssssssssssssssssssssssssssssssssssssssssssss")
|
||||||
|
|
||||||
if !state {
|
if !state {
|
||||||
status, err := repository.CalculateRepository.UpdateReportCalculateStatus(report, "InsufficientData",
|
status, err := repository.CalculateRepository.UpdateReportCalculateStatus(report, "InsufficientData",
|
||||||
"创建报表时发生错误,需手动再次计算")
|
"创建报表时发生错误,需手动再次计算")
|
||||||
|
@ -225,11 +228,13 @@ func (rs _ReportService) CreateNewReport(createFrom *vo.ReportCreationForm) (boo
|
||||||
}
|
}
|
||||||
return status, nil
|
return status, nil
|
||||||
}
|
}
|
||||||
|
log.Println("更新成功succssssssssssssssss")
|
||||||
err = rs.CalculateReport(report)
|
err = rs.CalculateReport(report)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
rs.log.Error("计算时出错", zap.Error(err))
|
rs.log.Error("计算时出错", zap.Error(err))
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
log.Println("返回truettttttttttttttttttt")
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -259,13 +264,13 @@ var CALCULATE_TASK_PARALLEL_CONTROL = func() *sync.Mutex {
|
||||||
|
|
||||||
// 执行一个核算报表的计算任务
|
// 执行一个核算报表的计算任务
|
||||||
func (rs _ReportService) CalculateReport(rid string) error {
|
func (rs _ReportService) CalculateReport(rid string) error {
|
||||||
semaphore := CALCULATE_TASK_PARALLEL_CONTROL
|
//semaphore := CALCULATE_TASK_PARALLEL_CONTROL
|
||||||
|
//
|
||||||
semaphore.Lock()
|
//semaphore.Lock()
|
||||||
defer semaphore.Unlock()
|
//defer semaphore.Unlock()
|
||||||
|
|
||||||
errs := calculate.MainCalculateProcess(rid)
|
errs := calculate.MainCalculateProcess(rid)
|
||||||
|
log.Println("开始计算555555555555555555555555555")
|
||||||
if errs == nil {
|
if errs == nil {
|
||||||
_, err := repository.CalculateRepository.UpdateReportCalculateStatus(rid, "success", "")
|
_, err := repository.CalculateRepository.UpdateReportCalculateStatus(rid, "success", "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user