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