From 1dd416deaf053a23a56b42a1ab18fe9f621fefb0 Mon Sep 17 00:00:00 2001
From: liujiandao <274878379@qq.com>
Date: 星期一, 13 十一月 2023 20:01:30 +0800
Subject: [PATCH] 仓库与位置修改

---
 request/report_forms_request.go        |    1 
 controllers/report_forms_controller.go |   21 ++++++----
 models/location.go                     |   10 +++++
 controllers/warehouse.go               |   45 +++++++++++++++++++---
 docs/swagger.yaml                      |    2 +
 controllers/location.go                |    3 +
 docs/docs.go                           |    5 ++
 docs/swagger.json                      |    3 +
 8 files changed, 73 insertions(+), 17 deletions(-)

diff --git a/controllers/location.go b/controllers/location.go
index ff2d5c4..e1102fa 100644
--- a/controllers/location.go
+++ b/controllers/location.go
@@ -4,6 +4,7 @@
 	"errors"
 	"github.com/gin-gonic/gin"
 	"strconv"
+	"strings"
 	"wms/extend/code"
 	"wms/extend/util"
 	"wms/models"
@@ -159,7 +160,7 @@
 		}
 		params.JointName = first.JointName + "/" + params.Name
 	} else {
-		params.JointName = params.Name
+		params.JointName = strings.Split(params.JointName, "/")[0] + "/" + params.Name
 	}
 	err := models.NewLocationSearch().Update(&params)
 	if err != nil {
diff --git a/controllers/report_forms_controller.go b/controllers/report_forms_controller.go
index c137692..e69f3d4 100644
--- a/controllers/report_forms_controller.go
+++ b/controllers/report_forms_controller.go
@@ -218,16 +218,19 @@
 		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�")
 		return
 	}
-
-	//鏌ヨ浣嶇疆
-	locations, err := models.NewLocationSearch().SetJointName(params.WareHouseCode).FindAll()
-	if err != nil {
-		util.ResponseFormat(c, code.RequestParamError, "鏌ヨ浣嶇疆澶辫触")
-		return
-	}
 	ids := make([]int, 0)
-	for _, location := range locations {
-		ids = append(ids, location.Id)
+	if params.LocationId != 0 {
+		ids = append(ids, params.LocationId)
+	} else {
+		//鏌ヨ浣嶇疆
+		locations, err := models.NewLocationSearch().SetJointName(params.WareHouseCode).FindAll()
+		if err != nil {
+			util.ResponseFormat(c, code.RequestParamError, "鏌ヨ浣嶇疆澶辫触")
+			return
+		}
+		for _, location := range locations {
+			ids = append(ids, location.Id)
+		}
 	}
 
 	amounts, total, err := models.NewLocationProductAmountSearch().SetPage(params.Page, params.PageSize).SetPreload(true).SetKeyword(params.KeyWord).SetProductId(params.ProductId).SetLocationIds(ids).FindByPage()
diff --git a/controllers/warehouse.go b/controllers/warehouse.go
index 01c1ba3..bc2aa7f 100644
--- a/controllers/warehouse.go
+++ b/controllers/warehouse.go
@@ -7,6 +7,7 @@
 	"github.com/spf13/cast"
 	"gorm.io/gorm"
 	"strconv"
+	"strings"
 	"wms/constvar"
 	"wms/extend/code"
 	"wms/extend/util"
@@ -41,12 +42,24 @@
 		util.ResponseFormat(c, code.RequestParamError, err.Error())
 		return
 	}
+	//鍒涘缓瑙嗗浘
+	view := &models.Location{
+		Name:      params.Code,
+		JointName: params.Code,
+		Type:      constvar.LocationTypeView,
+	}
+	id, err := models.NewLocationSearch().CreateReturnId(view)
+	if err != nil {
+		util.ResponseFormat(c, code.SaveFail, "瑙嗗浘鍒涘缓澶辫触")
+		return
+	}
 	//鍒涘缓榛樿浣嶇疆
 	location := &models.Location{
 		Name:              "榛樿浣嶇疆",
-		JointName:         params.Code,
+		JointName:         params.Code + "/榛樿浣嶇疆",
 		Type:              constvar.LocationTypeInternal,
 		ReplenishLocation: true,
+		ParentId:          id,
 	}
 	locationId, err := models.NewLocationSearch().CreateReturnId(location)
 	if err != nil {
@@ -129,9 +142,27 @@
 	}
 	//鏇存柊浣嶇疆淇℃伅
 	if oldRecord != nil && params.Code != oldRecord.Code {
-		m := make(map[string]interface{})
-		m["joint_name"] = params.Code
-		err := models.NewLocationSearch().SetID(oldRecord.LocationId).UpdateByMap(m)
+		locations, err := models.NewLocationSearch().SetJointName(oldRecord.Code).FindNotTotal()
+		if err != nil {
+			return errors.New("鏌ヨ浣嶇疆淇℃伅澶辫触")
+		}
+
+		err = models.WithTransaction(func(db *gorm.DB) error {
+			for _, location := range locations {
+				m := make(map[string]interface{})
+				index := strings.Index(location.JointName, "/")
+				if index > 0 {
+					m["joint_name"] = params.Code + location.JointName[index:]
+				} else {
+					m["joint_name"] = params.Code
+				}
+				err = models.NewLocationSearch().SetOrm(db).SetID(location.Id).UpdateByMap(m)
+				if err != nil {
+					return err
+				}
+			}
+			return nil
+		})
 		if err != nil {
 			return errors.New("鏇存柊浣嶇疆淇℃伅澶辫触")
 		}
@@ -168,11 +199,11 @@
 		return
 	}
 	//鑾峰彇浣嶇疆淇℃伅
-	codes := make([]string, 0)
+	ids := make([]int, 0)
 	for _, warehouse := range list {
-		codes = append(codes, warehouse.Code)
+		ids = append(ids, warehouse.LocationId)
 	}
-	locations, err := models.NewLocationSearch().SetJointNames(codes).FindNotTotal()
+	locations, err := models.NewLocationSearch().SetIds(ids).FindNotTotal()
 	if err != nil {
 		util.ResponseFormat(c, code.RequestParamError, "浣嶇疆淇℃伅鏌ユ壘澶辫触")
 		return
diff --git a/docs/docs.go b/docs/docs.go
index 2d9e716..794a765 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -3656,6 +3656,9 @@
                 "keyWord": {
                     "type": "string"
                 },
+                "locationId": {
+                    "type": "integer"
+                },
                 "page": {
                     "description": "椤电爜",
                     "type": "integer"
@@ -4372,6 +4375,8 @@
 	Description:      "",
 	InfoInstanceName: "swagger",
 	SwaggerTemplate:  docTemplate,
+	LeftDelim:        "{{",
+	RightDelim:       "}}",
 }
 
 func init() {
diff --git a/docs/swagger.json b/docs/swagger.json
index 61c30f6..9cbcfea 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -3644,6 +3644,9 @@
                 "keyWord": {
                     "type": "string"
                 },
+                "locationId": {
+                    "type": "integer"
+                },
                 "page": {
                     "description": "椤电爜",
                     "type": "integer"
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 7346a4a..6754d44 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -994,6 +994,8 @@
     properties:
       keyWord:
         type: string
+      locationId:
+        type: integer
       page:
         description: 椤电爜
         type: integer
diff --git a/models/location.go b/models/location.go
index 028e875..ad60d86 100644
--- a/models/location.go
+++ b/models/location.go
@@ -38,6 +38,7 @@
 		Orm        *gorm.DB
 		Preload    bool
 		JointNames []string
+		Ids        []int
 	}
 )
 
@@ -66,6 +67,11 @@
 
 func (slf *LocationSearch) SetID(ID int) *LocationSearch {
 	slf.Id = ID
+	return slf
+}
+
+func (slf *LocationSearch) SetIds(ids []int) *LocationSearch {
+	slf.Ids = ids
 	return slf
 }
 
@@ -116,6 +122,10 @@
 		db = db.Where("id = ?", slf.Id)
 	}
 
+	if len(slf.Ids) > 0 {
+		db = db.Where("id in (?)", slf.Ids)
+	}
+
 	if slf.Order != "" {
 		db = db.Order(slf.Order)
 	}
diff --git a/request/report_forms_request.go b/request/report_forms_request.go
index 729a0e4..5956eaa 100644
--- a/request/report_forms_request.go
+++ b/request/report_forms_request.go
@@ -23,4 +23,5 @@
 	KeyWord       string `json:"keyWord"`
 	WareHouseCode string `json:"wareHouseCode"`
 	ProductId     string `json:"productId"`
+	LocationId    int    `json:"locationId"`
 }

--
Gitblit v1.8.0