From 79aef24a785581d95343ccd99e9cb362b2bc9c97 Mon Sep 17 00:00:00 2001 From: yinbentan <yinbentan@live.com> Date: 星期六, 06 七月 2024 21:31:59 +0800 Subject: [PATCH] 调整库存商品位置错误 --- service/operation.go | 54 ++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 36 insertions(+), 18 deletions(-) diff --git a/service/operation.go b/service/operation.go index 47902e3..6c9fa72 100644 --- a/service/operation.go +++ b/service/operation.go @@ -91,6 +91,7 @@ LocationID: output.LocationID, OperationSource: constvar.OperationSourceSaleDelivery, SalesDetailsNumber: output.SaleDetailsNumber, + WarehouseId: output.WarehouseID, } operations = append(operations, operation) autoCode = models.GetAutoCode(maxAutoIncr, codeStandard) @@ -128,7 +129,7 @@ return err } - if roleProduct, ok := mapLocationRoleProduct[strconv.Itoa(operation.LocationID)+v.ProductId]; ok { + if roleProduct, ok := mapLocationRoleProduct[strconv.Itoa(v.ToLocationID)+v.ProductId]; ok { detail := &models.OperationDetails{ ProductId: v.ProductId, Amount: v.Amount, @@ -149,12 +150,13 @@ ProductId: v.ProductId, Amount: v.Amount, CreateDate: time.Now().Format("2006-01-02 15:04:05"), + WarehouseId: operation.WarehouseId, }); err != nil { return err } } } else { - if roleCategory, cok := mapLocationRoleCategory[strconv.Itoa(operation.LocationID)+strconv.Itoa(v.Product.CategoryId)]; cok { + if roleCategory, cok := mapLocationRoleCategory[strconv.Itoa(v.ToLocationID)+strconv.Itoa(v.Product.CategoryId)]; cok { detail := &models.OperationDetails{ ProductId: v.ProductId, Amount: v.Amount, @@ -175,12 +177,13 @@ ProductId: v.ProductId, Amount: v.Amount, CreateDate: time.Now().Format("2006-01-02 15:04:05"), + WarehouseId: operation.WarehouseId, }); err != nil { return err } } } else { - if locAmount, aok := mapLocAmount[strconv.Itoa(operation.LocationID)+v.ProductId]; aok { + if locAmount, aok := mapLocAmount[strconv.Itoa(v.ToLocationID)+v.ProductId]; aok { locAmount.Amount = locAmount.Amount.Add(v.Amount) locAmount.ID = uint(locAmount.Id) if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(int(locAmount.ID)).Save(locAmount); err != nil { @@ -188,11 +191,12 @@ } } else { if err := models.NewLocationProductAmountSearch().SetOrm(tx).Create(&models.LocationProductAmount{ - LocationId: operation.LocationID, + LocationId: v.ToLocationID, ProductCategoryID: v.Product.CategoryId, ProductId: v.ProductId, Amount: v.Amount, CreateDate: time.Now().Format("2006-01-02 15:04:05"), + WarehouseId: operation.WarehouseId, }); err != nil { return err } @@ -216,6 +220,7 @@ BaseOperationType: constvar.BaseOperationTypeInternal, Details: details, CheckedBy: userInfo.Username, + WarehouseId: operation.WarehouseId, }).Error; err != nil { return err } @@ -256,7 +261,7 @@ } } if len(internalInputDetails) > 0 { - opTypeId, err := GetTargetOperationTypeIdByOperation(originOperation, constvar.BaseOperationTypeIncoming) + opTypeId, err := GetTargetOperationTypeIdByWarehouseId(originOperation.ToLocation.WarehouseId, constvar.BaseOperationTypeIncoming) if err != nil { return err } @@ -268,8 +273,10 @@ Comment: "搴撳瓨璋冩嫧鍏ュ簱", BaseOperationType: constvar.BaseOperationTypeIncoming, Details: internalInputDetails, - LocationID: internalInputDetails[0].ToLocationID, + LocationID: originOperation.LocationID, + ToLocationID: originOperation.ToLocationID, OperationTypeName: "搴撳瓨璋冩嫧鍏ュ簱", + WarehouseId: originOperation.ToLocation.WarehouseId, } if err := models.NewOperationSearch().SetOrm(tx).Create(operation); err != nil { return err @@ -311,9 +318,11 @@ Comment: "搴撳瓨璋冩嫧鍑哄簱", BaseOperationType: constvar.BaseOperationTypeOutgoing, Details: outputDetails, - LocationID: outputDetails[0].FromLocationID, + LocationID: originOperation.LocationID, + ToLocationID: originOperation.ToLocationID, OperationTypeName: "搴撳瓨璋冩嫧鍑哄簱", IsInternalOutput: true, + WarehouseId: originOperation.WarehouseId, } if err := models.NewOperationSearch().SetOrm(tx).Create(operation); err != nil { return err @@ -329,16 +338,16 @@ var inputDetails []*models.OperationDetails var outputDetails []*models.OperationDetails for _, v := range listDetails { - if locAmount, aok := mapLocAmount[strconv.Itoa(v.ToLocationID)+v.ProductId]; aok { - if locAmount.Amount.Equal(v.Amount) { + if _, aok := mapLocAmount[strconv.Itoa(v.FromLocationID)+v.ProductId]; aok { + if v.StockAmount.Equal(v.Amount) { //鐩樼偣鏁伴噺鍜屽墿浣欐暟閲忎竴鑷� continue } - if v.Amount.GreaterThan(locAmount.Amount) { + if v.Amount.GreaterThan(v.StockAmount) { inputDetails = append(inputDetails, &models.OperationDetails{ ProductId: v.ProductId, - Amount: v.Amount.Sub(locAmount.Amount), - FromLocationID: v.FromLocationID, - ToLocationID: v.ToLocationID, + Amount: v.Amount.Sub(v.StockAmount), + FromLocationID: 0, + ToLocationID: v.FromLocationID, TotalGrossWeight: v.TotalGrossWeight, TotalNetWeight: v.TotalNetWeight, AuxiliaryAmount: v.AuxiliaryAmount, @@ -350,9 +359,9 @@ } else { outputDetails = append(outputDetails, &models.OperationDetails{ ProductId: v.ProductId, - Amount: locAmount.Amount.Sub(v.Amount), - FromLocationID: v.ToLocationID, - ToLocationID: v.FromLocationID, + Amount: v.StockAmount.Sub(v.Amount), + FromLocationID: v.FromLocationID, + ToLocationID: 0, TotalGrossWeight: v.TotalGrossWeight, TotalNetWeight: v.TotalNetWeight, AuxiliaryAmount: v.AuxiliaryAmount, @@ -387,6 +396,7 @@ Details: inputDetails, LocationID: inputDetails[0].FromLocationID, OperationTypeName: "搴撳瓨璋冩暣鍏ュ簱", + WarehouseId: originOperation.WarehouseId, } if err := models.NewOperationSearch().SetOrm(tx).Create(operation); err != nil { return err @@ -407,6 +417,7 @@ Details: outputDetails, LocationID: outputDetails[0].FromLocationID, OperationTypeName: "搴撳瓨璋冩暣鍑哄簱", + WarehouseId: originOperation.WarehouseId, } if err := models.NewOperationSearch().SetOrm(tx).Create(operation); err != nil { return err @@ -417,11 +428,18 @@ } func GetTargetOperationTypeIdByOperation(operation *models.Operation, baseOT constvar.BaseOperationType) (operationTypeId int, err error) { - oT, err := models.NewOperationTypeSearch().SetID(uint(operation.OperationTypeId)).First() + targetOT, err := models.NewOperationTypeSearch().SetBaseOperationType(baseOT).SetWarehouseId(operation.WarehouseId).First() if err != nil { return 0, err } - targetOT, err := models.NewOperationTypeSearch().SetBaseOperationType(baseOT).SetWarehouseId(oT.WarehouseId).First() + return targetOT.Id, nil +} + +func GetTargetOperationTypeIdByWarehouseId(warehouseId int, baseOT constvar.BaseOperationType) (operationTypeId int, err error) { + if warehouseId == 0 { + return 0, errors.New("warehouseId miss") + } + targetOT, err := models.NewOperationTypeSearch().SetBaseOperationType(baseOT).SetWarehouseId(warehouseId).First() if err != nil { return 0, err } -- Gitblit v1.8.0