From 79aef24a785581d95343ccd99e9cb362b2bc9c97 Mon Sep 17 00:00:00 2001 From: yinbentan <yinbentan@live.com> Date: 星期六, 06 七月 2024 21:31:59 +0800 Subject: [PATCH] 调整库存商品位置错误 --- controllers/operation.go | 151 +++++++++++++++++++++++++++++++++++++------------- 1 files changed, 111 insertions(+), 40 deletions(-) diff --git a/controllers/operation.go b/controllers/operation.go index 4828007..2f10d27 100644 --- a/controllers/operation.go +++ b/controllers/operation.go @@ -9,8 +9,6 @@ "github.com/shopspring/decimal" "github.com/xuri/excelize/v2" "gorm.io/gorm" - "io/ioutil" - "sort" "strconv" "strings" "time" @@ -95,7 +93,15 @@ params.WarehouseId = operationType.WarehouseId } + if params.DealerType == "" { + CheckInventoryDealerType(¶ms) + } + userInfo := middleware.GetUserInfo(c) + if userInfo == nil { + util.ResponseFormat(c, code.SetStatusError, "鐧诲綍鐢ㄦ埛淇℃伅涓虹┖锛岃鐧诲綍鍚庨噸璇曪紒") + return + } params.CreatedBy = userInfo.Username params.Status = constvar.OperationStatus_Ready //params.Number = strconv.FormatInt(time.Now().Unix(), 10) @@ -140,19 +146,52 @@ util.ResponseFormat(c, code.Success, "娣诲姞鎴愬姛") } -func CheckDetailsRepeat(details []*models.OperationDetails) bool { - var detailIDs []string - var tempID string - for _, v := range details { - detailIDs = append(detailIDs, v.ProductId) +func CheckInventoryDealerType(params *models.Operation) { + var dictType constvar.MiniDictType + dictName := "鍏朵粬" + switch params.BaseOperationType { + case constvar.BaseOperationTypeIncoming: + dictType = constvar.StorageType + //dictName = dictName + "鍏ュ簱" + case constvar.BaseOperationTypeOutgoing: + dictType = constvar.StockoutType + //dictName = dictName + "鍑哄簱" + case constvar.BaseOperationTypeInternal: + dictType = constvar.TransferType + //dictName = dictName + "璋冩嫧" + case constvar.BaseOperationTypeDisuse: + dictType = constvar.DisuseType + //dictName = dictName + "鎶ュ簾" + case constvar.BaseOperationTypeAdjust: + dictType = constvar.TakeStockType + //dictName = dictName + "鐩樼偣" + default: + return } - sort.Strings(detailIDs) - for _, v := range detailIDs { - if v != tempID { - tempID = v - } else { - return true + miniDict, err := models.NewMiniDictSearch().SetType(dictType).SetName(dictName).First() + if err == gorm.ErrRecordNotFound { + miniDict = &models.MiniDict{ + Type: dictType, + Name: dictName, } + models.NewMiniDictSearch().Create(miniDict) + } + params.DealerType = miniDict.Name +} + +// CheckDetailsRepeat 鍑哄簱銆佸叆搴撱�佺洏鐐规秹鍙婁骇鍝侀噸澶嶆�ф鏌ワ紙浠ヤ骇鍝佺紪鍙枫�佸嚭搴撳簱鎴跨紪鍙枫�佸叆搴撳簱鎴跨紪鍙凤級 +// 瀛樺湪閲嶅鍊� true锛� 涓嶅瓨鍦ㄨ繑鍥� false +func CheckDetailsRepeat(details []*models.OperationDetails) bool { + if len(details) == 0 { + return false + } + var detailKeyMap = make(map[string]bool) + for _, v := range details { + key := fmt.Sprintf("%v%v%v", v.ProductId, v.FromLocationID, v.ToLocationID) + detailKeyMap[key] = true + } + if len(detailKeyMap) != len(details) { // 闀垮害鐩稿悓锛屼笉瀛樺湪閲嶅鍊硷紱闀垮害涓嶅悓瀛樺湪瀛樺湪涓嶅悓 + return true } return false } @@ -213,12 +252,8 @@ if params.OperationTypeId == 0 && int(params.BaseOperationType) == 0 { return errors.New("鏈瘑鍒璁板綍绫诲瀷1") - } - - if params.BaseOperationType != 0 { - if params.WarehouseId == 0 { - return errors.New("鏈瘑鍒璁板綍绫诲瀷2") - } + } else if params.OperationTypeId == 0 && params.BaseOperationType != 0 && params.WarehouseId == 0 { + return errors.New("鏈瘑鍒璁板綍绫诲瀷2") } if params.OperationDate == "" { @@ -251,12 +286,11 @@ // GetOperationInfo // @Tags 鍏ュ簱/鍑哄簱 -// @Summary 鍏ュ簱/鍑哄簱鍒楄〃 +// @Summary 鎿嶄綔璇︽儏鎺ュ彛 // @Produce application/json -// -// @Param id path string true "id" -// -// @Success 200 {object} util.Response "鎴愬姛" +// @Param id path string true "id" +// @Param Authorization header string true "token" +// @Success 200 {object} util.Response{data=models.Operation} "鎴愬姛" // @Router /api-wms/v1/operation/getOperationInfo/{id} [get] func (slf OperationController) GetOperationInfo(c *gin.Context) { number := c.Param("id") @@ -270,6 +304,26 @@ util.ResponseFormat(c, code.RequestParamError, err.Error()) return } + + if operation.BaseOperationType == constvar.BaseOperationTypeOutgoing || operation.BaseOperationType == constvar.BaseOperationTypeInternal { //鏌ヨ瀹炴椂鍦ㄥ簱搴撳瓨 + productIds := make([]string, 0) + locationIds := make([]int, 0) + for _, v := range operation.Details { + productIds = append(productIds, v.ProductId) + locationIds = append(locationIds, v.FromLocationID) + } + locationAmountMap, err := service.GetLocationAmounts(productIds, locationIds) + if err != nil { + util.ResponseFormat(c, code.RequestParamError, "鏌ヨ浜у搧搴撳瓨閿欒") + return + } + for _, v := range operation.Details { + if locationAmountMap[v.ProductId] != nil { + v.StockAmount = locationAmountMap[v.ProductId][v.FromLocationID] + } + } + } + util.ResponseFormat(c, code.Success, operation) } @@ -278,7 +332,7 @@ // @Summary 鍏ュ簱/鍑哄簱鍒楄〃 // @Produce application/json // @Param object body request.OperationList true "鏌ヨ鍙傛暟" -// @Success 200 {object} util.ResponseList{data=[]models.Operation} "鎴愬姛" +// @Success 200 {object} util.ResponseList{data=[]models.Operation} "鎴愬姛" // @Router /api-wms/v1/operation/list [post] func (slf OperationController) List(c *gin.Context) { var params request.OperationList @@ -316,7 +370,26 @@ util.ResponseFormat(c, code.RequestError, "鏌ユ壘澶辫触:"+err.Error()) return } + //userList, err := user.GetUserList() + //userMap := make(map[string]string) + //if err == nil { + // for _, user := range userList { + // userMap[user.UserName] = user.NickName + // } + //} + userInfo := middleware.GetUserInfo(c) + if userInfo == nil { + util.ResponseFormat(c, code.SetStatusError, "鐧诲綍鐢ㄦ埛淇℃伅涓虹┖锛岃鐧诲綍鍚庨噸璇曪紒") + return + } for _, v := range list { + v.CreatedBy = userInfo.NickName + //if err == nil { + if userInfo != nil { + // v.CreatedBy = userMap[v.CreatedBy] + // v.CheckedBy = userMap[v.CheckedBy] + v.CheckedBy = userInfo.NickName + } for _, v1 := range v.Details { //v1.SalePrice = decimal.NewFromFloat(1.2345) //v1.Cost = decimal.NewFromFloat(9.678) @@ -791,16 +864,13 @@ util.ResponseFormat(c, code.RequestParamError, err.Error()) return } - - } else if warehouse.FileTemplateCategoryIn == constvar.FileTemplateCategory_JialianInput1 { - fileUrl, err = JialianOperation2(warehouse.FileTemplateCategoryIn, operation) + } else { + fileUrl, err = JialianOperation2(constvar.FileTemplateCategory_JialianInput1, operation) if err != nil { util.ResponseFormat(c, code.RequestParamError, err.Error()) return } - } - } else if companyName == "geruimi" { fileUrl, err = ExportInputSelfmade(constvar.FileTemplateCategory_Selfmade, operation) if err != nil { @@ -832,8 +902,8 @@ return } - } else if warehouse.FileTemplateCategoryOut == constvar.FileTemplateCategory_JialianOutput1 { - fileUrl, err = JialianOperation2(warehouse.FileTemplateCategoryOut, operation) + } else { + fileUrl, err = JialianOperation2(constvar.FileTemplateCategory_JialianOutput1, operation) if err != nil { util.ResponseFormat(c, code.RequestParamError, err.Error()) return @@ -873,8 +943,6 @@ // 璇诲彇妯℃澘鍐呭 f, err := excelize.OpenReader(readerCloser) - //fl, err := os.Open("E:\\瀹剁汉鍑哄叆搴撳崟.xlsx") - //f, err := excelize.OpenReader(fl) if err != nil { return "", errors.New("璇诲彇excel妯$増澶辫触锛�" + err.Error()) } @@ -926,11 +994,13 @@ totalAmount := decimal.NewFromInt(0) // 鎬婚噾棰� totalPrice := decimal.NewFromInt(0) // 鎬讳环 rowIndex := 6 + str := "" for i, v := range operation.Details { //璁剧疆琛ㄥ崟鏈�澶�6鏉℃暟鎹� if i > 6 { break } + str += v.Remark f.SetCellValue(sheet, "B"+strconv.Itoa(rowIndex), v.Product.Name) // 浜у搧鍚嶇О f.SetCellValue(sheet, "C"+strconv.Itoa(rowIndex), v.Product.Specs) //瑙勬牸 f.SetCellValue(sheet, "D"+strconv.Itoa(rowIndex), attributeValueMap[fmt.Sprintf("%d%s", attributeMap["棰滆壊"], v.ProductId)]) //棰滆壊 @@ -990,7 +1060,8 @@ } // 澶囨敞 绗�13琛� - f.SetCellValue(sheet, "B13", "澶囨敞锛�"+operation.Remark) + //f.SetCellValue(sheet, "B13", "澶囨敞锛�"+operation.Comment) + f.SetCellValue(sheet, "B13", "澶囨敞锛�"+str) // 绗�14琛� f.SetCellValue(sheet, "C14", operation.Manager) // 瀹℃牳 f.SetCellValue(sheet, "F14", operation.Accountant) // 淇濈 @@ -1002,7 +1073,6 @@ fileUrl, err := upload.UploadFileToSeaWeed(string(constvar.FileType_File), uuid.NewV4().String()+".xlsx", buf.Bytes()) if err != nil { - ioutil.WriteFile("E:\\"+uuid.NewV4().String()+".xlsx", buf.Bytes(), 0644) logx.Errorf("file upload err: %v", err) return "", err } @@ -1039,11 +1109,13 @@ totalAmount := decimal.NewFromInt(0) // 鎬婚噾棰� totalPrice := decimal.NewFromInt(0) // 鎬讳环 rowIndex := 5 + str := "" for i, v := range operation.Details { //璁剧疆琛ㄥ崟鏈�澶�9鏉℃暟鎹� if i > 9 { break } + str += v.Remark f.SetCellValue(sheet, "A"+strconv.Itoa(rowIndex), v.Product.Name) // 鍝佸悕 f.SetCellValue(sheet, "B"+strconv.Itoa(rowIndex), v.Product.Type) // 鍨嬪彿 f.SetCellValue(sheet, "C"+strconv.Itoa(rowIndex), v.Product.Unit) // 鍗曚綅 @@ -1107,7 +1179,8 @@ } } - f.SetCellValue(sheet, "Q5", operation.Remark) // 澶囨敞 + //f.SetCellValue(sheet, "Q5", operation.Comment) // 澶囨敞 + f.SetCellValue(sheet, "Q5", str) // 澶囨敞 // 绗�14琛� f.SetCellValue(sheet, "B15", operation.Manager) // 涓荤 @@ -1121,7 +1194,6 @@ fileUrl, err := upload.UploadFileToSeaWeed(string(constvar.FileType_File), uuid.NewV4().String()+".xlsx", buf.Bytes()) if err != nil { - ioutil.WriteFile("E:\\"+uuid.NewV4().String()+".xlsx", buf.Bytes(), 0644) logx.Errorf("file upload err: %v", err) return "", err } @@ -1378,8 +1450,7 @@ // @Tags 鍏ュ簱/鍑哄簱 // @Summary 鑾峰彇浜哄憳鍒楄〃 // @Produce application/json -// @Param object body request.OperationCondition true "鍙傛暟" -// @Success 200 {object} util.ResponseList{data=[]inventory_order.WorkerInfo} "鎴愬姛" +// @Success 200 {object} util.Response "鎴愬姛" // @Router /api-wms/v1/operation/getPersonnelList [get] func (slf OperationController) GetPersonnelList(c *gin.Context) { cli := inventory_order.NewInventoryOrderServiceClient(init_client.ApsConn) -- Gitblit v1.8.0