From f0786e779666d67a50cd57d82cfe1e278b47d397 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期四, 04 七月 2024 11:54:11 +0800 Subject: [PATCH] fix --- controllers/operation.go | 192 ++++++++++++++++++++++++++++++++++------------- 1 files changed, 138 insertions(+), 54 deletions(-) diff --git a/controllers/operation.go b/controllers/operation.go index 2cc1671..a841978 100644 --- a/controllers/operation.go +++ b/controllers/operation.go @@ -9,7 +9,6 @@ "github.com/shopspring/decimal" "github.com/xuri/excelize/v2" "gorm.io/gorm" - "io/ioutil" "sort" "strconv" "strings" @@ -63,26 +62,54 @@ return } - if err := slf.FormatLocation(¶ms); err != nil { - util.ResponseFormat(c, code.RequestParamError, err.Error()) - return - } - if CheckDetailsRepeat(params.Details) { util.ResponseFormat(c, code.RequestParamError, "鏄庣粏涓笉鑳藉瓨鍦ㄩ噸澶嶇殑浜у搧") return } - operationType, err := models.NewOperationTypeSearch().SetID(uint(params.OperationTypeId)).First() - if err != nil { - util.ResponseFormat(c, code.RequestParamError, err.Error()) + if params.BaseOperationType != constvar.BaseOperationTypeAdjust { + if err := slf.FormatLocation(¶ms); err != nil { + util.ResponseFormat(c, code.RequestParamError, err.Error()) + return + } + + var operationType *models.OperationType + var err error + if params.OperationTypeId == 0 { + operationType, err := models.NewOperationTypeSearch(). + SetWarehouseId(params.WarehouseId).SetBaseOperationType(params.BaseOperationType). + First() + if err != nil || params.WarehouseId != operationType.WarehouseId { + util.ResponseFormat(c, code.RequestParamError, "鍙傛暟缂哄け") + return + } + } else { + operationType, err = models.NewOperationTypeSearch().SetID(uint(params.OperationTypeId)).First() + if err != nil { + util.ResponseFormat(c, code.RequestParamError, err.Error()) + return + } + } + params.BaseOperationType = operationType.BaseOperationType + params.WarehouseId = operationType.WarehouseId + } + + if params.InventoryDealerType == 0 { + CheckInventoryDealerType(¶ms) + } + + userInfo := middleware.GetUserInfo(c) + if userInfo == nil { + util.ResponseFormat(c, code.SetStatusError, "鐧诲綍鐢ㄦ埛淇℃伅涓虹┖锛岃鐧诲綍鍚庨噸璇曪紒") return } - userInfo := middleware.GetUserInfo(c) params.CreatedBy = userInfo.Username params.Status = constvar.OperationStatus_Ready //params.Number = strconv.FormatInt(time.Now().Unix(), 10) - params.BaseOperationType = operationType.BaseOperationType + + for _, detail := range params.Details { + detail.BaseOperationType = params.BaseOperationType + } var numberNum int64 if err := mysqlx.GetDB().Model(&models.Operation{}).Where("number=?", params.Number).Count(&numberNum).Error; err != nil { @@ -93,7 +120,7 @@ util.ResponseFormat(c, code.RequestParamError, "鍗曞彿宸插瓨鍦�") return } - err = models.WithTransaction(func(db *gorm.DB) error { + err := models.WithTransaction(func(db *gorm.DB) error { if err := models.NewOperationSearch().Create(¶ms); err != nil { return err } @@ -120,6 +147,45 @@ util.ResponseFormat(c, code.Success, "娣诲姞鎴愬姛") } +func CheckInventoryDealerType(params *models.Operation) { + var dictType constvar.MiniDictType + dictName := "鍏跺畠" + switch params.BaseOperationType { + case constvar.BaseOperationTypeIncoming: + dictType = constvar.StorageType + //dictName = "鍏跺畠鍏ュ簱" + case constvar.BaseOperationTypeOutgoing: + dictType = constvar.StockoutType + //dictName = "鍏跺畠鍑哄簱" + case constvar.BaseOperationTypeInternal: + dictType = constvar.TransferType + //dictName = "鍏跺畠璋冩嫧" + case constvar.BaseOperationTypeDisuse: + dictType = constvar.DisuseType + //dictName = "鍏跺畠鎶ュ簾" + case constvar.BaseOperationTypeAdjust: + dictType = constvar.TakeStockType + //dictName = "鍏跺畠鐩樼偣" + default: + return + } + miniDict, _ := models.NewMiniDictSearch().SetType(dictType).SetName(dictName).First() + if miniDict != nil { + params.InventoryDealerType = int(miniDict.ID) + } else { + dict := &models.MiniDict{ + Type: dictType, + Name: dictName, + } + models.NewMiniDictSearch().Create(dict) + miniDict, err := models.NewMiniDictSearch().SetType(dictType).SetName(dictName).First() + if err != nil { + return + } + params.InventoryDealerType = int(miniDict.ID) + } +} + func CheckDetailsRepeat(details []*models.OperationDetails) bool { var detailIDs []string var tempID string @@ -137,6 +203,7 @@ return false } +// FormatLocation 浣嶇疆妫�鏌� func (slf OperationController) FormatLocation(params *models.Operation) error { operationType, err := models.NewOperationTypeSearch().SetID(uint(params.OperationTypeId)).First() if err != nil { @@ -191,16 +258,18 @@ } if params.OperationTypeId == 0 && int(params.BaseOperationType) == 0 { - return errors.New("鏈瘑鍒璁板綍绫诲瀷") + return errors.New("鏈瘑鍒璁板綍绫诲瀷1") + } else if params.OperationTypeId == 0 && params.BaseOperationType != 0 && params.WarehouseId == 0 { + return errors.New("鏈瘑鍒璁板綍绫诲瀷2") } if params.OperationDate == "" { return errors.New("璇烽�夋嫨瀹夋帓鏃ユ湡") } - if params.LocationID == 0 { - return errors.New("璇烽�夋嫨婧愪綅缃�") - } + //if params.LocationID == 0 { + // return errors.New("璇烽�夋嫨婧愪綅缃�") + //} if len(params.Details) <= 0 { return errors.New("璇锋坊鍔犳槑缁嗕俊鎭�") @@ -251,7 +320,7 @@ // @Summary 鍏ュ簱/鍑哄簱鍒楄〃 // @Produce application/json // @Param object body request.OperationList true "鏌ヨ鍙傛暟" -// @Success 200 {object} util.Response "鎴愬姛" +// @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 @@ -282,12 +351,29 @@ costMap[material.ID] = material.Cost salePriceMap[material.ID] = material.SalePrice } - list, total, err := search.SetOperationTypeId(params.OperationTypeId).SetPreload(true).SetOrder("created_at desc").Find() + list, total, err := search.SetOperationTypeId(params.OperationTypeId). + SetBaseOperationType(params.BaseOperationType). + SetPreload(true).SetOrder("created_at desc").Find() if err != nil { util.ResponseFormat(c, code.RequestError, "鏌ユ壘澶辫触:"+err.Error()) return } + //userList, err := service.GetUserList() + //userMap := make(map[string]string) + //if err == nil { + // for _, user := range userList { + // userMap[user.UserName] = user.NickName + // } + //} + userInfo := middleware.GetUserInfo(c) for _, v := range list { + //if err == nil { + if userInfo != nil { + // v.CreatedBy = userMap[v.CreatedBy] + // v.CheckedBy = userMap[v.CheckedBy] + v.CreatedBy = userInfo.NickName + v.CheckedBy = userInfo.NickName + } for _, v1 := range v.Details { //v1.SalePrice = decimal.NewFromFloat(1.2345) //v1.Cost = decimal.NewFromFloat(9.678) @@ -303,8 +389,8 @@ if !params.PageInfo.Check() { return errors.New("鏁版嵁鍒嗛〉淇℃伅閿欒") } - if params.OperationTypeId == 0 { - return errors.New("operationTypeId涓�0") + if params.OperationTypeId == 0 && params.BaseOperationType == 0 { + return errors.New("operationTypeId鍜宐aseOperationType涓嶈兘鍚屾椂涓�0") } return nil } @@ -339,9 +425,12 @@ util.ResponseFormat(c, code.RequestParamError, "鏄庣粏涓笉鑳藉瓨鍦ㄩ噸澶嶇殑浜у搧") return } - if err := slf.FormatLocation(¶ms); err != nil { - util.ResponseFormat(c, code.RequestParamError, err.Error()) - return + + if params.BaseOperationType != constvar.BaseOperationTypeAdjust { + if err := slf.FormatLocation(¶ms); err != nil { + util.ResponseFormat(c, code.RequestParamError, err.Error()) + return + } } if err := models.WithTransaction(func(tx *gorm.DB) error { if err := models.NewOperationDetailsSearch().SetOrm(tx).SetOperationId(params.Id).Delete(); err != nil { @@ -753,22 +842,19 @@ return } - if warehouse.FileTemplateCategoryIn == constvar.FileTemplateCategory_JialianInput1 { - fileUrl, err = JialianOperation2(warehouse.FileTemplateCategoryIn, operation) - if err != nil { - util.ResponseFormat(c, code.RequestParamError, err.Error()) - return - } - - } else if warehouse.FileTemplateCategoryIn == constvar.FileWarehouseCategory_JialianInput2 { + if warehouse.FileTemplateCategoryIn == constvar.FileWarehouseCategory_JialianInput2 { fileUrl, err = JialianOperation1(warehouse.FileTemplateCategoryIn, operation) if err != nil { util.ResponseFormat(c, code.RequestParamError, err.Error()) return } - + } else { + fileUrl, err = JialianOperation2(warehouse.FileTemplateCategoryIn, 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 { @@ -793,15 +879,15 @@ return } - if warehouse.FileTemplateCategoryOut == constvar.FileTemplateCategory_JialianOutput1 { - fileUrl, err = JialianOperation2(warehouse.FileTemplateCategoryOut, operation) + if warehouse.FileTemplateCategoryOut == constvar.FileWarehouseCategory_JialianOutput2 { + fileUrl, err = JialianOperation1(warehouse.FileTemplateCategoryOut, operation) if err != nil { util.ResponseFormat(c, code.RequestParamError, err.Error()) return } - } else if warehouse.FileTemplateCategoryOut == constvar.FileWarehouseCategory_JialianOutput2 { - fileUrl, err = JialianOperation1(warehouse.FileTemplateCategoryOut, operation) + } else { + fileUrl, err = JialianOperation2(warehouse.FileTemplateCategoryOut, operation) if err != nil { util.ResponseFormat(c, code.RequestParamError, err.Error()) return @@ -841,8 +927,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()) } @@ -969,9 +1053,7 @@ } fileUrl, err := upload.UploadFileToSeaWeed(string(constvar.FileType_File), uuid.NewV4().String()+".xlsx", buf.Bytes()) - ioutil.WriteFile("E:\\"+uuid.NewV4().String()+".xlsx", buf.Bytes(), 0644) if err != nil { - //ioutil.WriteFile("E:\\"+uuid.NewV4().String()+".xlsx", buf.Bytes(), 0644) logx.Errorf("file upload err: %v", err) return "", err } @@ -1002,8 +1084,8 @@ sheet := "Sheet1" f.SetCellValue(sheet, "A2", "鍗曚綅(閮ㄩ棬):"+operation.CompanyName) // 鍗曚綅閮ㄩ棬 - f.SetCellValue(sheet, "H2", operation.OperationDate) // 鏃堕棿 - f.SetCellValue(sheet, "O2", operation.Number) // 缂栧彿 + f.SetCellValue(sheet, "J2", operation.OperationDate) // 鏃堕棿 + f.SetCellValue(sheet, "Q2", operation.Number) // 缂栧彿 totalAmount := decimal.NewFromInt(0) // 鎬婚噾棰� totalPrice := decimal.NewFromInt(0) // 鎬讳环 @@ -1013,14 +1095,19 @@ if i > 9 { break } - f.SetCellValue(sheet, "A"+strconv.Itoa(rowIndex), v.Product.Name) // 浜у搧鍚嶇О - f.SetCellValue(sheet, "B"+strconv.Itoa(rowIndex), v.Product.Specs) //瑙勬牸 - f.SetCellValue(sheet, "C"+strconv.Itoa(rowIndex), v.TotalGrossWeight.String()) //閲嶉噺 - f.SetCellValue(sheet, "D"+strconv.Itoa(rowIndex), v.Amount.String()) //鏁伴噺 - f.SetCellValue(sheet, "E"+strconv.Itoa(rowIndex), v.AuxiliaryAmount.String()) //杈呭姪鏁伴噺 - f.SetCellValue(sheet, "F"+strconv.Itoa(rowIndex), v.AuxiliaryUnit) //杈呭姪鍗曚綅 + 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) // 鍗曚綅 + f.SetCellValue(sheet, "D"+strconv.Itoa(rowIndex), v.Amount.String()) // 鏁伴噺 + unit := service.CreateMoreUnit(v.Amount, v.Product.MoreUnitList) + for _, v1 := range unit { + if !v1.Amount.IsZero() { + f.SetCellValue(sheet, "E"+strconv.Itoa(rowIndex), v1.Amount) // 杈呮暟閲� + f.SetCellValue(sheet, "F"+strconv.Itoa(rowIndex), v1.Unit) // 杈呭崟浣� + break + } + } f.SetCellValue(sheet, "G"+strconv.Itoa(rowIndex), v.Product.SalePrice.String()) // 鍗曚环 - // 閲戦 if !v.Product.SalePrice.IsZero() { ap := v.Amount.Mul(v.Product.SalePrice) @@ -1084,7 +1171,6 @@ } fileUrl, err := upload.UploadFileToSeaWeed(string(constvar.FileType_File), uuid.NewV4().String()+".xlsx", buf.Bytes()) - ioutil.WriteFile("E:\\"+uuid.NewV4().String()+".xlsx", buf.Bytes(), 0644) if err != nil { logx.Errorf("file upload err: %v", err) return "", err @@ -1168,7 +1254,6 @@ logx.Errorf("file upload err: %v", err) return "", err } - return fileUrl, nil } @@ -1343,8 +1428,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