From ae1b07994f7785196d1d3ba1d53215bbded2dbc0 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期五, 18 八月 2023 20:07:29 +0800
Subject: [PATCH] fix

---
 service/salesReturn.go |   46 ++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 44 insertions(+), 2 deletions(-)

diff --git a/service/salesReturn.go b/service/salesReturn.go
index 231d7d3..6ffec28 100644
--- a/service/salesReturn.go
+++ b/service/salesReturn.go
@@ -73,9 +73,51 @@
 	}
 	salesReturn.AmountShouldRefund = salesReturn.AmountTotal
 
-	err = model.NewSalesReturnSearch().SetId(salesReturn.Id).Update(salesReturn)
+	old, err := model.NewSalesReturnSearch().SetId(salesReturn.Id).SetPreload(true).First()
 	if err != nil {
-		return ecode.SalesReturnSetErr
+		return ecode.DBErr
+	}
+	newProducts, removedProducts := NewProductsService().PickDiffProducts(salesReturn.Products, old.Products)
+	err = model.WithTransaction(func(db *gorm.DB) error {
+		err := model.NewSalesReturnSearch().SetId(salesReturn.Id).Update(salesReturn)
+		if err != nil {
+			return err
+		}
+		if len(removedProducts) > 0 {
+			removedProductIds := make([]uint, 0, len(removedProducts))
+			for _, product := range removedProducts {
+				removedProductIds = append(removedProductIds, product.Id)
+			}
+			err = model.NewProductSearch(db).SetIds(removedProductIds).Delete()
+			if err != nil {
+				return err
+			}
+		}
+		if len(newProducts) > 0 {
+			for _, p := range newProducts {
+				p.Id = 0
+			}
+			err = model.NewProductSearch(db).CreateBatch(newProducts)
+			if err != nil {
+				return err
+			}
+			var rel []*model.SalesReturnProduct
+			for _, p := range newProducts {
+				rel = append(rel, &model.SalesReturnProduct{
+					SalesReturnId: salesReturn.Id,
+					ProductId:     p.Id,
+				})
+			}
+			err = model.NewSalesReturnProductSearch().CreateBatch(rel)
+			if err != nil {
+				return err
+			}
+		}
+		return nil
+	})
+
+	if err != nil {
+		return ecode.DBErr
 	}
 
 	return ecode.OK

--
Gitblit v1.8.0