forked from free-lancers/electricity_bill_calc_service
		
	feat(report):完成修改单一抄表记录的功能。
This commit is contained in:
		| @@ -2,6 +2,7 @@ package controller | ||||
|  | ||||
| import ( | ||||
| 	"electricity_bill_calc/excel" | ||||
| 	"electricity_bill_calc/global" | ||||
| 	"electricity_bill_calc/response" | ||||
| 	"electricity_bill_calc/security" | ||||
| 	"electricity_bill_calc/service" | ||||
| @@ -10,12 +11,14 @@ import ( | ||||
|  | ||||
| 	"github.com/gin-gonic/gin" | ||||
| 	"github.com/samber/lo" | ||||
| 	"github.com/shopspring/decimal" | ||||
| ) | ||||
|  | ||||
| func InitializeEndUserController(router *gin.Engine) { | ||||
| 	router.GET("/report/:rid/submeter", security.EnterpriseAuthorize, fetchEndUserInReport) | ||||
| 	router.GET("/report/:rid/meter/template", security.EnterpriseAuthorize, downloadEndUserRegisterTemplate) | ||||
| 	router.POST("/report/:rid/meter/batch", security.EnterpriseAuthorize, uploadEndUserRegisterTemplate) | ||||
| 	router.PUT("/report/:rid/submeter/:pid/:mid", security.EnterpriseAuthorize, modifyEndUserRegisterRecord) | ||||
| } | ||||
|  | ||||
| func fetchEndUserInReport(c *gin.Context) { | ||||
| @@ -121,3 +124,92 @@ func uploadEndUserRegisterTemplate(c *gin.Context) { | ||||
| 	} | ||||
| 	result.Json(http.StatusOK, "已经成功完成抄表记录的导入。", gin.H{"errors": make([]error, 0)}) | ||||
| } | ||||
|  | ||||
| type ModifyEndUserRegisterFormData struct { | ||||
| 	CurrentPeriodOverall  decimal.NullDecimal `json:"currentPeriodOverall" form:"currentPeriodOverall"` | ||||
| 	CurrentPeriodCritical decimal.NullDecimal `json:"currentPeriodCritical" form:"currentPeriodCritical"` | ||||
| 	CurrentPeriodPeak     decimal.NullDecimal `json:"currentPeriodPeak" form:"currentPeriodPeak"` | ||||
| 	CurrentPeriodValley   decimal.NullDecimal `json:"currentPeriodValley" form:"currentPeriodValley"` | ||||
| 	AdjustOverall         decimal.NullDecimal `json:"adjustOverall" form:"adjustOverall"` | ||||
| 	AdjustCritical        decimal.NullDecimal `json:"adjustCritical" form:"adjustCritical"` | ||||
| 	AdjustPeak            decimal.NullDecimal `json:"adjustPeak" form:"adjustPeak"` | ||||
| 	AdjustValley          decimal.NullDecimal `json:"adjustValley" form:"adjustValley"` | ||||
| } | ||||
|  | ||||
| func modifyEndUserRegisterRecord(c *gin.Context) { | ||||
| 	result := response.NewResult(c) | ||||
| 	requestReportId := c.Param("rid") | ||||
| 	if !ensureReportBelongs(c, result, requestReportId) { | ||||
| 		return | ||||
| 	} | ||||
| 	meterType, err := service.ReportService.RetreiveParkEndUserMeterType(requestReportId) | ||||
| 	if err != nil { | ||||
| 		result.Error(http.StatusInternalServerError, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
| 	if meterType == -1 { | ||||
| 		result.NotFound("未能确定用户表计类型。") | ||||
| 		return | ||||
| 	} | ||||
| 	requestParkId := c.Param("pid") | ||||
| 	requestMeterId := c.Param("mid") | ||||
| 	formData := new(ModifyEndUserRegisterFormData) | ||||
| 	c.BindJSON(formData) | ||||
| 	meter, err := service.EndUserService.FetchSpecificEndUserRecord(requestReportId, requestParkId, requestMeterId) | ||||
| 	if err != nil { | ||||
| 		result.NotFound(err.Error()) | ||||
| 		return | ||||
| 	} | ||||
| 	if formData.CurrentPeriodOverall.Valid { | ||||
| 		meter.CurrentPeriodOverall = formData.CurrentPeriodOverall.Decimal | ||||
| 	} | ||||
| 	if formData.CurrentPeriodCritical.Valid { | ||||
| 		meter.CurrentPeriodCritical = formData.CurrentPeriodCritical.Decimal | ||||
| 	} | ||||
| 	if formData.CurrentPeriodPeak.Valid { | ||||
| 		meter.CurrentPeriodPeak = formData.CurrentPeriodPeak.Decimal | ||||
| 	} | ||||
| 	if formData.CurrentPeriodValley.Valid { | ||||
| 		meter.CurrentPeriodValley = formData.CurrentPeriodValley.Decimal | ||||
| 	} | ||||
| 	if formData.AdjustOverall.Valid { | ||||
| 		meter.AdjustOverall = formData.AdjustOverall.Decimal | ||||
| 	} | ||||
| 	if formData.AdjustCritical.Valid { | ||||
| 		meter.AdjustCritical = formData.AdjustCritical.Decimal | ||||
| 	} | ||||
| 	if formData.AdjustPeak.Valid { | ||||
| 		meter.AdjustPeak = formData.AdjustPeak.Decimal | ||||
| 	} | ||||
| 	if formData.AdjustValley.Valid { | ||||
| 		meter.AdjustValley = formData.AdjustValley.Decimal | ||||
| 	} | ||||
| 	valid, err := meter.Validate() | ||||
| 	if err != nil { | ||||
| 		result.Error(http.StatusInternalServerError, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
| 	if !valid { | ||||
| 		result.NotAccept("抄表数据合法性验证失败。") | ||||
| 		return | ||||
| 	} | ||||
| 	tx := global.DBConn.NewSession() | ||||
| 	if err = tx.Begin(); err != nil { | ||||
| 		result.Error(http.StatusInternalServerError, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
| 	defer tx.Close() | ||||
| 	err = service.EndUserService.UpdateEndUserRegisterRecord(tx, *meter) | ||||
| 	if err != nil { | ||||
| 		tx.Rollback() | ||||
| 		result.Error(http.StatusInternalServerError, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
| 	err = tx.Commit() | ||||
| 	if err != nil { | ||||
| 		tx.Rollback() | ||||
| 		result.Error(http.StatusInternalServerError, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
| 	result.Success("指定终端用户抄表记录已经更新。") | ||||
| } | ||||
|   | ||||
| @@ -71,11 +71,12 @@ func (d EndUserDetail) Validate() (bool, error) { | ||||
| } | ||||
|  | ||||
| func (d *EndUserDetail) CalculatePeriod() { | ||||
| 	d.Overall = decimal.NewNullDecimal(d.CurrentPeriodOverall.Sub(d.LastPeriodOverall).Add(d.AdjustOverall).RoundBank(2)) | ||||
| 	d.Critical = decimal.NewNullDecimal(d.CurrentPeriodCritical.Sub(d.LastPeriodCritical).Add(d.AdjustCritical).RoundBank(2)) | ||||
| 	d.Peak = decimal.NewNullDecimal(d.CurrentPeriodPeak.Sub(d.LastPeriodPeak).Add(d.AdjustPeak).RoundBank(2)) | ||||
| 	d.Flat = decimal.NewNullDecimal(d.CurrentPeriodFlat.Sub(d.LastPeriodFlat).Add(d.AdjustFlat).RoundBank(2)) | ||||
| 	d.Valley = decimal.NewNullDecimal(d.CurrentPeriodValley.Sub(d.LastPeriodValley).Add(d.AdjustValley).RoundBank(2)) | ||||
| 	d.CurrentPeriodFlat = d.CurrentPeriodOverall.Sub(d.CurrentPeriodCritical).Sub(d.CurrentPeriodPeak).Sub(d.CurrentPeriodValley) | ||||
| 	d.Overall = decimal.NewNullDecimal(d.CurrentPeriodOverall.Sub(d.LastPeriodOverall).Mul(d.Ratio).Add(d.AdjustOverall).RoundBank(2)) | ||||
| 	d.Critical = decimal.NewNullDecimal(d.CurrentPeriodCritical.Sub(d.LastPeriodCritical).Mul(d.Ratio).Add(d.AdjustCritical).RoundBank(2)) | ||||
| 	d.Peak = decimal.NewNullDecimal(d.CurrentPeriodPeak.Sub(d.LastPeriodPeak).Mul(d.Ratio).Add(d.AdjustPeak).RoundBank(2)) | ||||
| 	d.Flat = decimal.NewNullDecimal(d.CurrentPeriodFlat.Sub(d.LastPeriodFlat).Mul(d.Ratio).Add(d.AdjustFlat).RoundBank(2)) | ||||
| 	d.Valley = decimal.NewNullDecimal(d.CurrentPeriodValley.Sub(d.LastPeriodValley).Mul(d.Ratio).Add(d.AdjustValley).RoundBank(2)) | ||||
| } | ||||
|  | ||||
| type EndUserImport struct { | ||||
|   | ||||
| @@ -56,6 +56,15 @@ func (_EndUserService) AllEndUserRecord(reportId string) ([]model.EndUserDetail, | ||||
| 	return users, err | ||||
| } | ||||
|  | ||||
| func (_EndUserService) FetchSpecificEndUserRecord(reportId, parkId, meterId string) (*model.EndUserDetail, error) { | ||||
| 	record := new(model.EndUserDetail) | ||||
| 	_, err := global.DBConn. | ||||
| 		ID(schemas.NewPK(reportId, parkId, meterId)). | ||||
| 		NoAutoCondition(). | ||||
| 		Get(record) | ||||
| 	return record, err | ||||
| } | ||||
|  | ||||
| func (_EndUserService) UpdateEndUserRegisterRecord(tx *xorm.Session, record model.EndUserDetail) (err error) { | ||||
| 	record.CalculatePeriod() | ||||
| 	_, err = tx.ID(schemas.NewPK(record.ReportId, record.ParkId, record.MeterId)). | ||||
| @@ -70,6 +79,11 @@ func (_EndUserService) UpdateEndUserRegisterRecord(tx *xorm.Session, record mode | ||||
| 			"adjust_peak", | ||||
| 			"adjust_flat", | ||||
| 			"adjust_valley", | ||||
| 			"overall", | ||||
| 			"critical", | ||||
| 			"peak", | ||||
| 			"flat", | ||||
| 			"valley", | ||||
| 		). | ||||
| 		Update(record) | ||||
| 	return | ||||
|   | ||||
		Reference in New Issue
	
	Block a user