From eae158f8d95df5f49c4e36d5b9ad00b62dbad9ec Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期一, 29 七月 2024 21:51:47 +0800
Subject: [PATCH] 产品库存增加多单位存储,完成出入库操作时更改多单位剩余数量

---
 service/operation.go |   18 ++++++++++++++++++
 1 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/service/operation.go b/service/operation.go
index 6c9fa72..514bdc8 100644
--- a/service/operation.go
+++ b/service/operation.go
@@ -125,6 +125,7 @@
 	var details []*models.OperationDetails
 	for k, v := range listDetails {
 		listDetails[k].Product.Amount = listDetails[k].Product.Amount.Add(v.Amount)
+		listDetails[k].Product.MoreUnitList = AddMoreUnit(listDetails[k].Product.MoreUnitList, v.MoreUnitList)
 		if err := tx.Save(&listDetails[k].Product).Error; err != nil {
 			return err
 		}
@@ -133,6 +134,7 @@
 			detail := &models.OperationDetails{
 				ProductId:      v.ProductId,
 				Amount:         v.Amount,
+				MoreUnitList:   v.MoreUnitList,
 				FromLocationID: roleProduct.AreaId,
 				ToLocationID:   roleProduct.LocationId,
 			}
@@ -140,6 +142,7 @@
 
 			if locAmount, aok := mapLocAmount[strconv.Itoa(roleProduct.LocationId)+v.ProductId]; aok {
 				locAmount.Amount = locAmount.Amount.Add(v.Amount)
+				locAmount.MoreUnitList = AddMoreUnit(locAmount.MoreUnitList, v.MoreUnitList)
 				if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(int(locAmount.ID)).Save(locAmount); err != nil {
 					return err
 				}
@@ -149,6 +152,7 @@
 					ProductCategoryID: v.Product.CategoryId,
 					ProductId:         v.ProductId,
 					Amount:            v.Amount,
+					MoreUnitList:      v.MoreUnitList,
 					CreateDate:        time.Now().Format("2006-01-02 15:04:05"),
 					WarehouseId:       operation.WarehouseId,
 				}); err != nil {
@@ -160,6 +164,7 @@
 				detail := &models.OperationDetails{
 					ProductId:      v.ProductId,
 					Amount:         v.Amount,
+					MoreUnitList:   v.MoreUnitList,
 					FromLocationID: roleCategory.AreaId,
 					ToLocationID:   roleCategory.LocationId,
 				}
@@ -167,6 +172,7 @@
 
 				if locAmount, aok := mapLocAmount[strconv.Itoa(roleCategory.LocationId)+v.ProductId]; aok {
 					locAmount.Amount = locAmount.Amount.Add(v.Amount)
+					locAmount.MoreUnitList = AddMoreUnit(locAmount.MoreUnitList, v.MoreUnitList)
 					if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(int(locAmount.ID)).Save(locAmount); err != nil {
 						return err
 					}
@@ -176,6 +182,7 @@
 						ProductCategoryID: v.Product.CategoryId,
 						ProductId:         v.ProductId,
 						Amount:            v.Amount,
+						MoreUnitList:      v.MoreUnitList,
 						CreateDate:        time.Now().Format("2006-01-02 15:04:05"),
 						WarehouseId:       operation.WarehouseId,
 					}); err != nil {
@@ -185,6 +192,7 @@
 			} else {
 				if locAmount, aok := mapLocAmount[strconv.Itoa(v.ToLocationID)+v.ProductId]; aok {
 					locAmount.Amount = locAmount.Amount.Add(v.Amount)
+					locAmount.MoreUnitList = AddMoreUnit(locAmount.MoreUnitList, v.MoreUnitList)
 					locAmount.ID = uint(locAmount.Id)
 					if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(int(locAmount.ID)).Save(locAmount); err != nil {
 						return err
@@ -195,6 +203,7 @@
 						ProductCategoryID: v.Product.CategoryId,
 						ProductId:         v.ProductId,
 						Amount:            v.Amount,
+						MoreUnitList:      v.MoreUnitList,
 						CreateDate:        time.Now().Format("2006-01-02 15:04:05"),
 						WarehouseId:       operation.WarehouseId,
 					}); err != nil {
@@ -236,6 +245,9 @@
 		if v.Product.Amount.LessThan(v.Amount) {
 			return errors.New(fmt.Sprintf("浜у搧锛�%v,搴撳瓨锛�%v,鍑哄簱锛�%v,鏁伴噺涓嶅锛屾棤娉曞畬鎴愬嚭搴撴搷浣�", v.Product.Name, v.Product.Amount.String(), v.Amount.String()))
 		}
+		if !MoreUnitIsEnough(v.Product.MoreUnitList, v.MoreUnitList) {
+			return errors.New(fmt.Sprintf("浜у搧锛�%v, 澶氬崟浣嶆暟閲忎笉澶燂紝鏃犳硶瀹屾垚鍑哄簱鎿嶄綔", v.Product.Name))
+		}
 		listDetails[k].Product.Amount = listDetails[k].Product.Amount.Sub(v.Amount)
 		if err := models.NewMaterialSearch().SetOrm(tx).Save(&listDetails[k].Product); err != nil {
 			return err
@@ -245,7 +257,11 @@
 			if locAmount.Amount.LessThan(v.Amount) {
 				return errors.New(fmt.Sprintf("浜у搧锛�%v,搴撳瓨锛�%v,鍑哄簱锛�%v,鏁伴噺涓嶅锛屾棤娉曞畬鎴愬嚭搴撴搷浣�", v.Product.Name, locAmount.Amount.String(), v.Amount.String()))
 			}
+			if !MoreUnitIsEnough(locAmount.MoreUnitList, v.MoreUnitList) {
+				return errors.New(fmt.Sprintf("浜у搧锛�%v, 澶氬崟浣嶆暟閲忎笉澶燂紝鏃犳硶瀹屾垚鍑哄簱鎿嶄綔", v.Product.Name))
+			}
 			locAmount.Amount = locAmount.Amount.Sub(v.Amount)
+			locAmount.MoreUnitList = SubMoreUnit(locAmount.MoreUnitList, v.MoreUnitList)
 			if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(locAmount.Id).Save(locAmount); err != nil {
 				return err
 			}
@@ -293,6 +309,8 @@
 		outputDetails = append(outputDetails, &models.OperationDetails{
 			ProductId:        v.ProductId,
 			Amount:           v.Amount,
+			MoreUnitList:     v.MoreUnitList,
+			DealerType:       v.DealerType,
 			FromLocationID:   v.FromLocationID,
 			ToLocationID:     v.ToLocationID,
 			TotalGrossWeight: v.TotalGrossWeight,

--
Gitblit v1.8.0