From da3e478917dea118df075357cbd2e6f10833d9c6 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期五, 14 六月 2024 20:08:22 +0800
Subject: [PATCH] 商品调整验证后生成入库单和出库单

---
 service/operation.go |   80 +++++++++++++++++++++++++++++++++++----
 1 files changed, 71 insertions(+), 9 deletions(-)

diff --git a/service/operation.go b/service/operation.go
index 1d8e8a1..59b3421 100644
--- a/service/operation.go
+++ b/service/operation.go
@@ -286,21 +286,83 @@
 }
 
 // FinishOperationAdjust 瀹屾垚搴撳瓨璋冩暣
+// 楠岃瘉鍚庣敓鎴愬叆搴撳崟鎴栧嚭搴撳崟锛堝簱瀛樺噺灏戠敓鎴愬嚭搴撳崟锛屽簱瀛樺鍔犵敓鎴愬叆搴撳崟锛�
 func FinishOperationAdjust(tx *gorm.DB, listDetails []*models.OperationDetails, mapLocAmount map[string]*models.LocationProductAmount) (err error) {
+	var inputDetails []*models.OperationDetails
+	var outputDetails []*models.OperationDetails
 	for _, v := range listDetails {
 		if locAmount, aok := mapLocAmount[strconv.Itoa(v.ToLocationID)+v.ProductId]; aok {
 			locAmount.Amount = v.Amount
-			if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(locAmount.Id).Save(locAmount); err != nil {
-				return err
+			if locAmount.Amount.Equal(v.Amount) {
+				continue
+			}
+			if v.Amount.GreaterThan(locAmount.Amount) {
+				inputDetails = append(inputDetails, &models.OperationDetails{
+					ProductId:      v.ProductId,
+					Amount:         v.Amount.Sub(locAmount.Amount),
+					FromLocationID: v.FromLocationID,
+					ToLocationID:   v.ToLocationID,
+				})
+			} else {
+				outputDetails = append(outputDetails, &models.OperationDetails{
+					ProductId:      v.ProductId,
+					Amount:         locAmount.Amount.Sub(v.Amount),
+					FromLocationID: v.ToLocationID,
+					ToLocationID:   v.FromLocationID,
+				})
 			}
 		} else {
-			if err := models.NewLocationProductAmountSearch().SetOrm(tx).Create(&models.LocationProductAmount{
-				LocationId:        v.ToLocationID,
-				ProductCategoryID: v.Product.CategoryId,
-				ProductId:         v.ProductId,
-				Amount:            v.Amount,
-				CreateDate:        time.Now().Format("2006-01-02 15:04:05"),
-			}); err != nil {
+			inputDetails = append(inputDetails, &models.OperationDetails{
+				ProductId:      v.ProductId,
+				Amount:         v.Amount,
+				FromLocationID: v.FromLocationID,
+				ToLocationID:   v.ToLocationID,
+			})
+		}
+		//if locAmount, aok := mapLocAmount[strconv.Itoa(v.ToLocationID)+v.ProductId]; aok {
+		//	locAmount.Amount = v.Amount
+		//	if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(locAmount.Id).Save(locAmount); err != nil {
+		//		return err
+		//	}
+		//} else {
+		//	if err := models.NewLocationProductAmountSearch().SetOrm(tx).Create(&models.LocationProductAmount{
+		//		LocationId:        v.ToLocationID,
+		//		ProductCategoryID: v.Product.CategoryId,
+		//		ProductId:         v.ProductId,
+		//		Amount:            v.Amount,
+		//		CreateDate:        time.Now().Format("2006-01-02 15:04:05"),
+		//	}); err != nil {
+		//		return err
+		//	}
+		//}
+
+		if len(inputDetails) > 0 {
+			operation := &models.Operation{
+				Number:            strconv.FormatInt(time.Now().Unix(), 10),
+				Status:            constvar.OperationStatus_Ready,
+				OperationDate:     time.Now().Format("2006-01-02 15:04:05"),
+				Comment:           "搴撳瓨鐩樼偣",
+				BaseOperationType: constvar.BaseOperationTypeIncoming,
+				Details:           inputDetails,
+				LocationID:        inputDetails[0].FromLocationID,
+				OperationTypeName: "搴撳瓨璋冩暣",
+			}
+			if err := models.NewOperationSearch().SetOrm(tx).Create(operation); err != nil {
+				return err
+			}
+		}
+		if len(outputDetails) > 0 {
+			operation := &models.Operation{
+				Number:            strconv.FormatInt(time.Now().Unix(), 10),
+				Status:            constvar.OperationStatus_Ready,
+				OperationDate:     time.Now().Format("2006-01-02 15:04:05"),
+				Comment:           "搴撳瓨鐩樼偣",
+				BaseOperationType: constvar.BaseOperationTypeOutgoing,
+				Details:           outputDetails,
+				LocationID:        outputDetails[0].FromLocationID,
+				OperationTypeName: "搴撳瓨璋冩暣",
+			}
+			if err := models.NewOperationSearch().SetOrm(tx).Create(operation); err != nil {
 				return err
 			}
 		}

--
Gitblit v1.8.0