feat(god):增加重新同步终端用户档案的功能。
This commit is contained in:
parent
ac70adf92a
commit
e3f6af886b
|
@ -16,6 +16,7 @@ func InitializeGodModeController(router *gin.Engine) {
|
|||
gmR.DELETE("/report/:rid/summary", security.SingularityAuthorize, gmResetReportSummary)
|
||||
gmR.DELETE("/report/:rid/maintenance", security.SingularityAuthorize, gmResetReportMaintenance)
|
||||
gmR.DELETE("/report/:rid/meters", security.SingularityAuthorize, gmResetReportEndUserRecord)
|
||||
gmR.POST("/report/:rid/meters", security.SingularityAuthorize, gmResynchronizeReportEndUserRecord)
|
||||
gmR.DELETE("/report/:rid", security.SingularityAuthorize, gmResetReport)
|
||||
gmR.DELETE("/report/:rid/force", security.SingularityAuthorize, gmDeleteReport)
|
||||
gmR.DELETE("/park/:pid/maintenance/:mid", security.SingularityAuthorize, gmDeleteSpecificMaintenance)
|
||||
|
@ -56,6 +57,21 @@ func gmResetReportMaintenance(c *gin.Context) {
|
|||
result.Success("指定报表的配电维护费已经重置。")
|
||||
}
|
||||
|
||||
func gmResynchronizeReportEndUserRecord(c *gin.Context) {
|
||||
result := response.NewResult(c)
|
||||
requestReportId := c.Param("rid")
|
||||
done, err := service.GodModeService.ResynchronizeEndUser(requestReportId)
|
||||
if err != nil {
|
||||
result.Error(http.StatusInternalServerError, err.Error())
|
||||
return
|
||||
}
|
||||
if !done {
|
||||
result.Error(http.StatusInternalServerError, "未能成功重置指定报表的抄表记录基本档案。")
|
||||
return
|
||||
}
|
||||
result.Success("指定报表的抄表记录基本档案已经重新同步。")
|
||||
}
|
||||
|
||||
func gmResetReportEndUserRecord(c *gin.Context) {
|
||||
result := response.NewResult(c)
|
||||
requestReportId := c.Param("rid")
|
||||
|
|
|
@ -108,47 +108,38 @@ func (_GodModeService) flushReportMaintenances(tx *xorm.Session, reportId string
|
|||
return rows >= 0, err
|
||||
}
|
||||
|
||||
func (_GodModeService) resetEndUserRecords(tx *xorm.Session, reportId string) (bool, error) {
|
||||
var records = make([]*model.EndUserDetail, 0)
|
||||
err := tx.Where(builder.Eq{"report_id": reportId}).Find(&records)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
return false, err
|
||||
}
|
||||
for _, u := range records {
|
||||
u.CurrentPeriodOverall = decimal.Zero
|
||||
u.CurrentPeriodCritical = decimal.Zero
|
||||
u.CurrentPeriodPeak = decimal.Zero
|
||||
u.CurrentPeriodFlat = decimal.Zero
|
||||
u.CurrentPeriodValley = decimal.Zero
|
||||
u.AdjustOverall = decimal.Zero
|
||||
u.AdjustCritical = decimal.Zero
|
||||
u.AdjustPeak = decimal.Zero
|
||||
u.AdjustFlat = decimal.Zero
|
||||
u.AdjustValley = decimal.Zero
|
||||
u.Overall.Valid = false
|
||||
u.OverallFee.Valid = false
|
||||
u.OverallProportion = decimal.Zero
|
||||
u.Critical.Valid = false
|
||||
u.CriticalFee.Valid = false
|
||||
u.Peak.Valid = false
|
||||
u.PeakFee.Valid = false
|
||||
u.Flat.Valid = false
|
||||
u.FlatFee.Valid = false
|
||||
u.Valley.Valid = false
|
||||
u.ValleyFee.Valid = false
|
||||
u.BasicFeeDiluted.Valid = false
|
||||
u.AdjustFeeDiluted.Valid = false
|
||||
u.LossDiluted.Valid = false
|
||||
u.LossFeeDiluted.Valid = false
|
||||
u.MaintenanceFeeDiluted.Valid = false
|
||||
u.FinalDiluted.Valid = false
|
||||
u.PublicConsumptionDiluted.Valid = false
|
||||
u.FinalCharge.Valid = false
|
||||
func (_GodModeService) resetSingleEndUserRecord(tx *xorm.Session, record *model.EndUserDetail, additionalColumns ...string) (bool, error) {
|
||||
record.CurrentPeriodOverall = decimal.Zero
|
||||
record.CurrentPeriodCritical = decimal.Zero
|
||||
record.CurrentPeriodPeak = decimal.Zero
|
||||
record.CurrentPeriodFlat = decimal.Zero
|
||||
record.CurrentPeriodValley = decimal.Zero
|
||||
record.AdjustOverall = decimal.Zero
|
||||
record.AdjustCritical = decimal.Zero
|
||||
record.AdjustPeak = decimal.Zero
|
||||
record.AdjustFlat = decimal.Zero
|
||||
record.AdjustValley = decimal.Zero
|
||||
record.Overall.Valid = false
|
||||
record.OverallFee.Valid = false
|
||||
record.OverallProportion = decimal.Zero
|
||||
record.Critical.Valid = false
|
||||
record.CriticalFee.Valid = false
|
||||
record.Peak.Valid = false
|
||||
record.PeakFee.Valid = false
|
||||
record.Flat.Valid = false
|
||||
record.FlatFee.Valid = false
|
||||
record.Valley.Valid = false
|
||||
record.ValleyFee.Valid = false
|
||||
record.BasicFeeDiluted.Valid = false
|
||||
record.AdjustFeeDiluted.Valid = false
|
||||
record.LossDiluted.Valid = false
|
||||
record.LossFeeDiluted.Valid = false
|
||||
record.MaintenanceFeeDiluted.Valid = false
|
||||
record.FinalDiluted.Valid = false
|
||||
record.PublicConsumptionDiluted.Valid = false
|
||||
record.FinalCharge.Valid = false
|
||||
|
||||
affected, err := tx.
|
||||
ID(schemas.PK{u.ReportId, u.ParkId, u.MeterId}).
|
||||
MustCols(
|
||||
columns := []string{
|
||||
"current_period_overall",
|
||||
"current_period_critical",
|
||||
"current_period_peak",
|
||||
|
@ -178,16 +169,114 @@ func (_GodModeService) resetEndUserRecords(tx *xorm.Session, reportId string) (b
|
|||
"public_consumption_diluted",
|
||||
"final_diluted",
|
||||
"final_charge",
|
||||
).
|
||||
Update(u)
|
||||
}
|
||||
columns = append(columns, additionalColumns...)
|
||||
|
||||
affected, err := tx.
|
||||
ID(schemas.PK{record.ReportId, record.ParkId, record.MeterId}).
|
||||
MustCols(columns...).
|
||||
Update(record)
|
||||
if err != nil || affected == 0 {
|
||||
tx.Rollback()
|
||||
return false, err
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
||||
func (g _GodModeService) resynchronizeEndUserArchives(tx *xorm.Session, reportId string) (bool, error) {
|
||||
var currentRecords = make([]*model.EndUserDetail, 0)
|
||||
err := tx.Where(builder.Eq{"report_id": reportId}).Find(¤tRecords)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
return false, err
|
||||
}
|
||||
if affected == 0 {
|
||||
var report = new(model.Report)
|
||||
has, err := tx.ID(reportId).NoAutoCondition().Unscoped().Get(report)
|
||||
if err != nil || !has {
|
||||
tx.Rollback()
|
||||
return false, err
|
||||
}
|
||||
var latestArchives = make([]model.Meter04KV, 0)
|
||||
err = tx.Table(new(model.Meter04KV)).Where(builder.Eq{"park_id": report.ParkId}).Find(&latestArchives)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
return false, err
|
||||
}
|
||||
|
||||
for _, meter := range latestArchives {
|
||||
record, has := lo.Find(currentRecords, func(rec *model.EndUserDetail) bool {
|
||||
return rec.ParkId == meter.ParkId && rec.MeterId == meter.Code
|
||||
})
|
||||
if has {
|
||||
record.CustomerName = meter.CustomerName
|
||||
record.Address = meter.Address
|
||||
record.Ratio = meter.Ratio
|
||||
record.ContactName = meter.ContactName
|
||||
record.ContactPhone = meter.ContactPhone
|
||||
record.Seq = meter.Seq
|
||||
record.IsPublicMeter = meter.IsPublicMeter
|
||||
record.WillDilute = meter.WillDilute
|
||||
success, err := g.resetSingleEndUserRecord(
|
||||
tx, record,
|
||||
"customer_name",
|
||||
"address",
|
||||
"ratio",
|
||||
"contact_name",
|
||||
"contact_phone",
|
||||
"seq",
|
||||
"public_meter",
|
||||
"dilute",
|
||||
)
|
||||
if err != nil {
|
||||
return success, err
|
||||
}
|
||||
} else {
|
||||
newEndUser := model.EndUserDetail{
|
||||
ReportId: report.Id,
|
||||
ParkId: report.ParkId,
|
||||
MeterId: meter.Code,
|
||||
Seq: meter.Seq,
|
||||
Ratio: meter.Ratio,
|
||||
Address: meter.Address,
|
||||
CustomerName: meter.CustomerName,
|
||||
ContactName: meter.ContactName,
|
||||
ContactPhone: meter.ContactPhone,
|
||||
IsPublicMeter: meter.IsPublicMeter,
|
||||
WillDilute: meter.WillDilute,
|
||||
LastPeriodOverall: decimal.Zero,
|
||||
LastPeriodCritical: decimal.Zero,
|
||||
LastPeriodPeak: decimal.Zero,
|
||||
LastPeriodFlat: decimal.Zero,
|
||||
LastPeriodValley: decimal.Zero,
|
||||
}
|
||||
_, err = tx.Insert(newEndUser)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
return false, err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
report.StepState.Submeter = false
|
||||
rows, err := tx.ID(reportId).Cols("step_state").NoAutoCondition().Update(report)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
}
|
||||
return rows >= 0, nil
|
||||
}
|
||||
|
||||
func (g _GodModeService) resetEndUserRecords(tx *xorm.Session, reportId string) (bool, error) {
|
||||
var records = make([]*model.EndUserDetail, 0)
|
||||
err := tx.Where(builder.Eq{"report_id": reportId}).Find(&records)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
return false, err
|
||||
}
|
||||
for _, u := range records {
|
||||
success, err := g.resetSingleEndUserRecord(tx, u)
|
||||
if err != nil {
|
||||
return success, err
|
||||
}
|
||||
}
|
||||
var report = new(model.Report)
|
||||
_, err = tx.ID(reportId).NoAutoCondition().Unscoped().Get(report)
|
||||
|
@ -256,6 +345,13 @@ func (_GodModeService) forceDeleteReport(tx *xorm.Session, reportId string) (boo
|
|||
}
|
||||
|
||||
func (g _GodModeService) ClearReportSummary(reportId string) (bool, error) {
|
||||
isLatest, err := g.isTheLatestReport(reportId)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
if !isLatest {
|
||||
return false, exceptions.NewImproperOperateError("不能操作非最新期数的报表。")
|
||||
}
|
||||
tx := global.DBConn.NewSession()
|
||||
if err := tx.Begin(); err != nil {
|
||||
return false, err
|
||||
|
@ -277,6 +373,13 @@ func (g _GodModeService) ClearReportSummary(reportId string) (bool, error) {
|
|||
}
|
||||
|
||||
func (g _GodModeService) ClearReportMaintenances(reportId string) (bool, error) {
|
||||
isLatest, err := g.isTheLatestReport(reportId)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
if !isLatest {
|
||||
return false, exceptions.NewImproperOperateError("不能操作非最新期数的报表。")
|
||||
}
|
||||
tx := global.DBConn.NewSession()
|
||||
if err := tx.Begin(); err != nil {
|
||||
return false, err
|
||||
|
@ -297,7 +400,43 @@ func (g _GodModeService) ClearReportMaintenances(reportId string) (bool, error)
|
|||
return result, nil
|
||||
}
|
||||
|
||||
func (g _GodModeService) ResynchronizeEndUser(reportId string) (bool, error) {
|
||||
isLatest, err := g.isTheLatestReport(reportId)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
if !isLatest {
|
||||
return false, exceptions.NewImproperOperateError("不能操作非最新期数的报表。")
|
||||
}
|
||||
tx := global.DBConn.NewSession()
|
||||
if err := tx.Begin(); err != nil {
|
||||
return false, err
|
||||
}
|
||||
defer tx.Close()
|
||||
|
||||
result, err := g.resynchronizeEndUserArchives(tx, reportId)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
err = tx.Commit()
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
return false, err
|
||||
}
|
||||
cache.AbolishRelation("end_user_detail")
|
||||
cache.AbolishRelation(fmt.Sprintf("report_%s", reportId))
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (g _GodModeService) ResetEndUserRegisterRecords(reportId string) (bool, error) {
|
||||
isLatest, err := g.isTheLatestReport(reportId)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
if !isLatest {
|
||||
return false, exceptions.NewImproperOperateError("不能操作非最新期数的报表。")
|
||||
}
|
||||
tx := global.DBConn.NewSession()
|
||||
if err := tx.Begin(); err != nil {
|
||||
return false, err
|
||||
|
@ -320,6 +459,13 @@ func (g _GodModeService) ResetEndUserRegisterRecords(reportId string) (bool, err
|
|||
}
|
||||
|
||||
func (g _GodModeService) ResetReport(reportId string) (bool, error) {
|
||||
isLatest, err := g.isTheLatestReport(reportId)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
if !isLatest {
|
||||
return false, exceptions.NewImproperOperateError("不能操作非最新期数的报表。")
|
||||
}
|
||||
tx := global.DBConn.NewSession()
|
||||
if err := tx.Begin(); err != nil {
|
||||
return false, err
|
||||
|
|
Loading…
Reference in New Issue
Block a user