From a0125ef3d6ce35be7b6dc4919c4192dba4a7329a Mon Sep 17 00:00:00 2001 From: jiangshuai <291802688@qq.com> Date: 星期四, 16 十一月 2023 14:33:51 +0800 Subject: [PATCH] 报废数量bug --- controllers/product_controller.go | 95 +++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 91 insertions(+), 4 deletions(-) diff --git a/controllers/product_controller.go b/controllers/product_controller.go index 8178e2d..054b4ca 100644 --- a/controllers/product_controller.go +++ b/controllers/product_controller.go @@ -15,7 +15,6 @@ "wms/models" "wms/pkg/logx" "wms/request" - "wms/utils" ) type ProductController struct { @@ -34,6 +33,10 @@ util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�") return } + if params.ID == "" { + util.ResponseFormat(c, code.RequestParamError, "浜у搧缂栫爜涓嶈兘涓虹┖") + return + } if params.Name == "" { util.ResponseFormat(c, code.RequestParamError, "浜у搧鍚嶇О涓嶈兘涓虹┖") return @@ -46,7 +49,7 @@ util.ResponseFormat(c, code.RequestParamError, "鍗曚綅涓嶈兘涓虹┖") return } - params.ID = utils.GetUUID() + //params.ID = utils.GetUUID() err := models.NewMaterialSearch().Create(¶ms) if err != nil { util.ResponseFormat(c, code.RequestParamError, "浜у搧淇℃伅淇濆瓨澶辫触") @@ -106,6 +109,55 @@ product.CategoryName = category.Name } } + var reorderAmount request.ProductStatisticsAmount + if err := models.NewOperationSearch().Orm. + Table("wms_operation_details"). + InnerJoins("INNER JOIN wms_operation on wms_operation_details.operation_id=wms_operation.id"). + Select("wms_operation_details.product_id,SUM(wms_operation_details.amount) as total_count"). + Where("wms_operation_details.product_id=? and wms_operation.`status`=? and wms_operation.base_operation_type in (?)", product.ID, constvar.OperationStatus_Ready, []constvar.BaseOperationType{constvar.BaseOperationTypeIncoming, constvar.BaseOperationTypeOutgoing, constvar.BaseOperationTypeDisuse}). + Group("wms_operation_details.product_id"). + //Order("wms_operation_details.product_id"). + First(&reorderAmount).Error; err != nil { + if !errors.Is(err, gorm.ErrRecordNotFound) { + util.ResponseFormat(c, code.RequestParamError, "浜у搧鏁版嵁缁熻澶辫触") + return + } else { + reorderAmount.TotalAmount = decimal.NewFromInt(0) + } + } + product.PredictionAmount = product.Amount.Add(reorderAmount.TotalAmount) + + var statisticsList []*request.ProductStatistics + if err := models.NewOperationSearch().Orm.Table("wms_operation"). + InnerJoins("INNER JOIN wms_operation_details on wms_operation_details.operation_id=wms_operation.id"). + Select("SUM(wms_operation_details.amount) as total_amount,wms_operation.base_operation_type"). + Where("wms_operation_details.product_id=? and wms_operation.`status`=? and wms_operation.base_operation_type in (?)", product.ID, constvar.OperationStatus_Finish, []constvar.BaseOperationType{constvar.BaseOperationTypeIncoming, constvar.BaseOperationTypeOutgoing, constvar.BaseOperationTypeDisuse}). + Group("wms_operation.base_operation_type"). + Find(&statisticsList).Error; err != nil { + util.ResponseFormat(c, code.RequestParamError, "浜у搧鏁版嵁缁熻澶辫触") + return + } + for _, v := range statisticsList { + if v.BaseOperationType == constvar.BaseOperationTypeIncoming { + product.InputAmount = v.TotalAmount + } + if v.BaseOperationType == constvar.BaseOperationTypeOutgoing { + product.OutputAmount = product.OutputAmount.Add(v.TotalAmount) + } + if v.BaseOperationType == constvar.BaseOperationTypeAdjust { + product.OutputAmount = product.OutputAmount.Add(v.TotalAmount) + } + } + reorderRules, rulesTotal, err := models.NewReorderRuleSearch().SetProductId(product.ID).Find() + if err != nil { + util.ResponseFormat(c, code.RequestParamError, "閲嶈璐ц鍒欑粺璁″け璐�") + return + } + if rulesTotal == 1 { + product.MinInventoryRule = reorderRules[0].MinInventory + product.MaxInventoryRule = reorderRules[0].MaxInventory + } + product.ReorderRuleNum = rulesTotal } util.ResponseFormatList(c, code.Success, products, int(total)) } @@ -523,7 +575,7 @@ locAmount, res := models.NewLocationProductAmountSearch(). SetProductId(v.ID). - SetLocationId(operation.ToLocationID). + SetLocationId(operation.FromLocationID). FirstRes() if res.Error != nil { return err @@ -640,7 +692,7 @@ search := models.NewOperationSearch().SetPage(params.Page, params.PageSize).SetPreload(true).SetOrder("created_at desc") search.SetOrm(search.Orm.InnerJoins("inner join wms_operation_details on wms_operation_details.operation_id=wms_operation.id").Where("wms_operation_details.product_id=? and (wms_operation.from_location_id=? or wms_operation.to_location_id=?)", params.ProductId, params.LocationId, params.LocationId)) - list, total, err := search.Find() + list, total, err := search.SetBaseOperationType(constvar.BaseOperationTypeAdjust).Find() if err != nil { util.ResponseFormat(c, code.RequestError, "鏌ユ壘澶辫触:"+err.Error()) return @@ -648,3 +700,38 @@ util.ResponseFormatListWithPage(c, code.Success, list, int(total), params.Page, params.PageSize) } + +// CancelDisuse +// +// @Tags 浜у搧 +// @Summary 鍙栨秷鎶ュ簾 +// @Produce application/json +// @Param id path int true "id" +// @Success 200 {object} util.Response "鎴愬姛" +// @Router /api-wms/v1/product/cancelDisuse/{id} [put] +func (slf ProductController) CancelDisuse(c *gin.Context) { + id, err := strconv.Atoi(c.Param("id")) + if err != nil { + util.ResponseFormat(c, code.RequestParamError, "閿欒鐨刬d鍊�") + return + } + if id == 0 { + util.ResponseFormat(c, code.RequestParamError, "id涓�0") + return + } + operation, err := models.NewOperationSearch().SetID(id).First() + if err != nil { + util.ResponseFormat(c, code.RequestParamError, "鏈壘鍒扮浉鍏充俊鎭�:"+err.Error()) + return + } + if operation.Status != constvar.OperationStatus_Ready { + util.ResponseFormat(c, code.RequestError, "璇ヤ俊鎭棤娉曞彇娑�") + return + } + operation.Status = constvar.OperationStatus_Cancel + if err := models.NewOperationSearch().SetID(operation.Id).Save(operation); err != nil { + util.ResponseFormat(c, code.SaveFail, err.Error()) + return + } + util.ResponseFormat(c, code.Success, "鎿嶄綔鎴愬姛") +} -- Gitblit v1.8.0