From f45e4cb8045fe60f96f467dc4ea1e2ae57445712 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期三, 03 七月 2024 23:13:40 +0800
Subject: [PATCH] 默认位置parent_id为视图位置id

---
 controllers/operation.go |  162 +++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 113 insertions(+), 49 deletions(-)

diff --git a/controllers/operation.go b/controllers/operation.go
index e174c67..d4c32c5 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,37 +62,54 @@
 		return
 	}
 
-	if err := slf.FormatLocation(&params); err != nil {
-		util.ResponseFormat(c, code.RequestParamError, err.Error())
-		return
-	}
-
 	if CheckDetailsRepeat(params.Details) {
 		util.ResponseFormat(c, code.RequestParamError, "鏄庣粏涓笉鑳藉瓨鍦ㄩ噸澶嶇殑浜у搧")
 		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 {
+
+	if params.BaseOperationType != constvar.BaseOperationTypeAdjust {
+		if err := slf.FormatLocation(&params); 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(&params)
 	}
 
 	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)
-	params.BaseOperationType = operationType.BaseOperationType
-	params.WarehouseId = operationType.WarehouseId
+
+	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 {
@@ -104,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(&params); err != nil {
 			return err
 		}
@@ -131,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
@@ -148,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 {
@@ -215,9 +271,9 @@
 		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("璇锋坊鍔犳槑缁嗕俊鎭�")
@@ -268,7 +324,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
@@ -306,7 +362,22 @@
 		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)
@@ -358,9 +429,12 @@
 		util.ResponseFormat(c, code.RequestParamError, "鏄庣粏涓笉鑳藉瓨鍦ㄩ噸澶嶇殑浜у搧")
 		return
 	}
-	if err := slf.FormatLocation(&params); err != nil {
-		util.ResponseFormat(c, code.RequestParamError, err.Error())
-		return
+
+	if params.BaseOperationType != constvar.BaseOperationTypeAdjust {
+		if err := slf.FormatLocation(&params); 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 {
@@ -772,22 +846,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 {
@@ -812,15 +883,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
@@ -860,8 +931,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())
 	}
@@ -988,9 +1057,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
 	}
@@ -1108,7 +1175,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
@@ -1192,7 +1258,6 @@
 		logx.Errorf("file upload err: %v", err)
 		return "", err
 	}
-
 	return fileUrl, nil
 }
 
@@ -1367,8 +1432,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