From 22a93375823a1fe58e5ca2dcd0545ddf1dfc883c Mon Sep 17 00:00:00 2001 From: jiangshuai <291802688@qq.com> Date: 星期二, 14 十一月 2023 11:47:56 +0800 Subject: [PATCH] 产品列表增加预测和出入库数量 --- controllers/product_controller.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 files changed, 40 insertions(+), 0 deletions(-) diff --git a/controllers/product_controller.go b/controllers/product_controller.go index a7dab0d..fa65e70 100644 --- a/controllers/product_controller.go +++ b/controllers/product_controller.go @@ -106,6 +106,46 @@ 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) + } + } } util.ResponseFormatList(c, code.Success, products, int(total)) } -- Gitblit v1.8.0