From 79aef24a785581d95343ccd99e9cb362b2bc9c97 Mon Sep 17 00:00:00 2001 From: yinbentan <yinbentan@live.com> Date: 星期六, 06 七月 2024 21:31:59 +0800 Subject: [PATCH] 调整库存商品位置错误 --- controllers/warehouse.go | 166 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 135 insertions(+), 31 deletions(-) diff --git a/controllers/warehouse.go b/controllers/warehouse.go index 5dc9857..087679e 100644 --- a/controllers/warehouse.go +++ b/controllers/warehouse.go @@ -7,11 +7,11 @@ "github.com/spf13/cast" "gorm.io/gorm" "strconv" + "strings" "wms/constvar" "wms/extend/code" "wms/extend/util" "wms/models" - "wms/pkg/logx" "wms/pkg/structx" "wms/request" ) @@ -41,21 +41,71 @@ util.ResponseFormat(c, code.RequestParamError, err.Error()) return } - //鍒涘缓榛樿浣嶇疆 - location := &models.Location{ - Name: "榛樿浣嶇疆", - ParentId: params.Code, - Type: constvar.LocationTypeInternal, - ReplenishLocation: true, - } - locationId, err := models.NewLocationSearch().CreateReturnId(location) + + err := models.WithTransaction(func(tx *gorm.DB) error { + err := models.NewWarehouseSearch().SetOrm(tx).Create(¶ms) + if err != nil { + return err + } + + //鍒涘缓瑙嗗浘 + view := &models.Location{ + Name: params.Code, + JointName: params.Code, + Type: constvar.LocationTypeView, + WarehouseId: params.Id, + } + viewId, err := models.NewLocationSearch().CreateReturnId(view) + if err != nil { + return err + } + + //鍒涘缓榛樿浣嶇疆 + location := &models.Location{ + Name: params.Name, + JointName: params.Name, + Type: constvar.LocationTypeInternal, + ReplenishLocation: true, + ParentId: viewId, + WarehouseId: params.Id, + } + locationId, err := models.NewLocationSearch().SetOrm(tx).CreateReturnId(location) + if err != nil { + return err + } + + //鏇存敼浠撳簱璁板綍閲岀殑浣嶇疆id + params.LocationId = locationId + err = models.NewWarehouseSearch().SetOrm(tx).SetID(params.Id).UpdateByMap(map[string]interface{}{"location_id": locationId}) + if err != nil { + return err + } + + //鍒涘缓涓変釜榛樿鎿嶄綔绫诲瀷 + var types []*models.OperationType + inType := &models.OperationType{ + Name: params.Name + "-鍏ュ簱", + BaseOperationType: constvar.BaseOperationTypeIncoming, + WarehouseId: params.Id, + } + types = append(types, inType) + outType := &models.OperationType{ + Name: params.Name + "-鍑哄簱", + BaseOperationType: constvar.BaseOperationTypeOutgoing, + WarehouseId: params.Id, + } + types = append(types, outType) + internalType := &models.OperationType{ + Name: params.Name + "-鍐呴儴璋冩嫧", + BaseOperationType: constvar.BaseOperationTypeInternal, + WarehouseId: params.Id, + } + types = append(types, internalType) + err = models.NewOperationTypeSearch().SetOrm(tx).CreateBatch(types) + return err + }) + if err != nil { - util.ResponseFormat(c, code.SaveFail, "浣嶇疆鍒涘缓澶辫触") - return - } - params.LocationId = locationId - if err := models.NewWarehouseSearch().Create(¶ms); err != nil { - logx.Errorf("warehouse create err: %v", err) util.ResponseFormat(c, code.SaveFail, "鎻掑叆澶辫触") return } @@ -80,7 +130,34 @@ util.ResponseFormat(c, code.RequestParamError, err.Error()) return } - err := models.NewWarehouseSearch().SetID(params.Id).Update(¶ms) + warehouse, err := models.NewWarehouseSearch().SetID(params.Id).First() + if err != nil { + util.ResponseFormat(c, code.RequestParamError, "浠撳簱涓嶅瓨鍦�") + return + } + err = models.WithTransaction(func(db *gorm.DB) error { + //鏇存柊浣滀笟绫诲瀷鍚嶇О + if params.Name != warehouse.Name { + m := make(map[string]interface{}) + m["name"] = params.Name + "-鍏ュ簱" + err := models.NewOperationTypeSearch().SetOrm(db).SetBaseOperationType(constvar.BaseOperationTypeIncoming).SetWarehouseId(params.Id).UpdateByMap(m) + if err != nil { + return err + } + m["name"] = params.Name + "-鍑哄簱" + err = models.NewOperationTypeSearch().SetOrm(db).SetBaseOperationType(constvar.BaseOperationTypeOutgoing).SetWarehouseId(params.Id).UpdateByMap(m) + if err != nil { + return err + } + m["name"] = params.Name + "-鍐呴儴璋冩嫧" + err = models.NewOperationTypeSearch().SetOrm(db).SetBaseOperationType(constvar.BaseOperationTypeInternal).SetWarehouseId(params.Id).UpdateByMap(m) + if err != nil { + return err + } + } + err = models.NewWarehouseSearch().SetID(params.Id).Update(¶ms) + return err + }) if err != nil { util.ResponseFormat(c, code.RequestParamError, "淇敼澶辫触") @@ -100,9 +177,27 @@ } //鏇存柊浣嶇疆淇℃伅 if oldRecord != nil && params.Code != oldRecord.Code { - m := make(map[string]interface{}) - m["parent_id"] = 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("鏇存柊浣嶇疆淇℃伅澶辫触") } @@ -139,11 +234,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().SetParents(codes).FindNotTotal() + locations, err := models.NewLocationSearch().SetIds(ids).FindNotTotal() if err != nil { util.ResponseFormat(c, code.RequestParamError, "浣嶇疆淇℃伅鏌ユ壘澶辫触") return @@ -151,7 +246,7 @@ for _, warehouse := range list { for _, location := range locations { if warehouse.LocationId == location.Id { - warehouse.WarehouseLocation = warehouse.Code + "/" + location.Name + warehouse.WarehouseLocation = location.Name break } } @@ -174,22 +269,31 @@ return } - //鍒犻櫎浣嶇疆淇℃伅 first, err := models.NewWarehouseSearch().SetID(id).First() if err != nil { util.ResponseFormat(c, code.RequestParamError, "鑾峰彇浠撳簱淇℃伅澶辫触") return } - err = models.NewLocationSearch().SetID(first.LocationId).Delete() + err = models.WithTransaction(func(tx *gorm.DB) error { + //鍒犻櫎浣嶇疆淇℃伅 + err = models.NewLocationSearch().SetOrm(tx).SetJointName(first.Code).Delete() + if err != nil { + return err + } + //鍒犻櫎鎿嶄綔绫诲瀷 + err = models.NewOperationTypeSearch().SetOrm(tx).SetWarehouseId(first.Id).Delete() + if err != nil { + return err + } + //鍒犻櫎浠撳簱 + err = models.NewWarehouseSearch().SetOrm(tx).SetID(id).Delete() + return err + }) if err != nil { - util.ResponseFormat(c, code.RequestParamError, "鍒犻櫎浣嶇疆淇℃伅澶辫触") + util.ResponseFormat(c, code.RequestParamError, "鍒犻櫎浠撳簱澶辫触") return } - err = models.NewWarehouseSearch().SetID(id).Delete() - if err != nil { - util.ResponseFormat(c, code.RequestParamError, "鍒犻櫎浠撳簱淇℃伅澶辫触") - return - } + util.ResponseFormat(c, code.UpdateSuccess, "鍒犻櫎鎴愬姛") } -- Gitblit v1.8.0