From a91f274d753217814c29c0e54a80b3931da5f593 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期四, 24 八月 2023 15:12:25 +0800 Subject: [PATCH] 退款单校验,增加累计金额校验 --- service/salesRefund.go | 24 ++++++++++++++++++++---- pkg/ecode/code.go | 17 +++++++++-------- pkg/ecode/msg.go | 1 + 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/pkg/ecode/code.go b/pkg/ecode/code.go index 3ef1e48..58afd29 100644 --- a/pkg/ecode/code.go +++ b/pkg/ecode/code.go @@ -214,14 +214,15 @@ SalesReturnUpdateErr = 2900005 // 鏇存柊閿�鍞��璐у崟澶辫触 SalesReturnDeleteErr = 2900006 // 鍒犻櫎閿�鍞��璐у崟澶辫触 - SalesRefundExist = 3000001 // 閿�鍞��娆惧崟宸插瓨鍦� - SalesRefundNotExist = 3000002 // 閿�鍞��娆惧崟涓嶅瓨鍦� - SalesRefundListErr = 3000003 // 鑾峰彇閿�鍞��娆惧崟鍒楄〃澶辫触 - SalesRefundSetErr = 3000004 // 璁剧疆閿�鍞��娆惧崟澶辫触 - SalesRefundUpdateErr = 3000005 // 鏇存柊閿�鍞��娆惧崟澶辫触 - SalesRefundDeleteErr = 3000006 // 鍒犻櫎閿�鍞��娆惧崟澶辫触 - SalesRefundProductNotExist = 3000007 // 閫�璐т骇鍝佷笉瀛樺湪 - SalesRefundProductPriceOrAmountErr = 3000009 // 閫�璐т骇鍝佷环鏍兼垨鏁伴噺閿欒 + SalesRefundExist = 3000001 // 閿�鍞��娆惧崟宸插瓨鍦� + SalesRefundNotExist = 3000002 // 閿�鍞��娆惧崟涓嶅瓨鍦� + SalesRefundListErr = 3000003 // 鑾峰彇閿�鍞��娆惧崟鍒楄〃澶辫触 + SalesRefundSetErr = 3000004 // 璁剧疆閿�鍞��娆惧崟澶辫触 + SalesRefundUpdateErr = 3000005 // 鏇存柊閿�鍞��娆惧崟澶辫触 + SalesRefundDeleteErr = 3000006 // 鍒犻櫎閿�鍞��娆惧崟澶辫触 + SalesRefundProductNotExist = 3000007 // 閫�璐т骇鍝佷笉瀛樺湪 + SalesRefundProductPriceOrAmountErr = 3000009 // 閫�璐т骇鍝佷环鏍兼垨鏁伴噺閿欒 + SalesRefundProductBeyondTotalAmount = 3000010 // 閫�璐т骇鍝佸搴旀�讳环瓒呭嚭搴旈��鎬讳环 ContractExist = 3100001 // 鍚堝悓宸插瓨鍦� ContractNotExist = 3100002 // 鍚堝悓涓嶅瓨鍦� diff --git a/pkg/ecode/msg.go b/pkg/ecode/msg.go index f0df18e..ef0a12a 100644 --- a/pkg/ecode/msg.go +++ b/pkg/ecode/msg.go @@ -25,6 +25,7 @@ SContractInvoiceProductPriceGreaterThanReceivableAmountErr: "寮�绁ㄦ�婚楂樹簬搴旀敹閲戦", SalesRefundProductNotExist: "閫�璐т骇鍝佷笉瀛樺湪", SalesRefundProductPriceOrAmountErr: "閫�璐т骇鍝佷环鏍兼垨鏁伴噺閿欒", + SalesRefundProductBeyondTotalAmount: "閫�璐т骇鍝佸搴旀�讳环瓒呭嚭搴旈��鎬讳环", } func GetMsg(errCode int) (errMsg string) { diff --git a/service/salesRefund.go b/service/salesRefund.go index cf548d9..d3fe5f8 100644 --- a/service/salesRefund.go +++ b/service/salesRefund.go @@ -4,6 +4,7 @@ "aps_crm/constvar" "aps_crm/model" "aps_crm/pkg/ecode" + "errors" "github.com/shopspring/decimal" "gorm.io/gorm" ) @@ -23,23 +24,29 @@ for _, product := range salesRefund.Products { amount = amount.Add(product.Amount.Mul(product.Price)) } - + code := ecode.OK err = model.WithTransaction(func(db *gorm.DB) error { err = model.NewSalesRefundSearch().Create(salesRefund) if err != nil { + code = ecode.DBErr return err } salesReturnRecord.AmountHasRefund = salesReturnRecord.AmountHasRefund.Add(amount).Round(2) + if salesReturnRecord.AmountHasRefund.GreaterThan(salesReturnRecord.AmountTotal) { + code = ecode.SalesRefundProductBeyondTotalAmount + return errors.New("閫�璐т骇鍝佸搴旀�讳环瓒呭嚭搴旈��鎬讳环") + } salesReturnRecord.AmountShouldRefund = salesReturnRecord.AmountTotal.Sub(salesReturnRecord.AmountHasRefund).Round(2) err = model.NewSalesReturnSearch().SetId(salesRefund.SourceId).Update(salesReturnRecord) if err != nil { + code = ecode.DBErr return err } return nil }) if err != nil { - return ecode.SalesRefundExist + return code } return ecode.OK @@ -54,7 +61,7 @@ if returnProductsMap[product.Id] == nil { return ecode.SalesRefundProductNotExist } - if returnProductsMap[product.Id].Price != product.Price || product.Amount.GreaterThan(returnProductsMap[product.Id].Amount) { + if !returnProductsMap[product.Id].Price.Equal(product.Price) || product.Amount.GreaterThan(returnProductsMap[product.Id].Amount) { return ecode.SalesRefundProductPriceOrAmountErr } } @@ -131,22 +138,31 @@ diffAmount = diffAmount.Sub(product.Amount.Mul(product.Price)) } + code := ecode.OK err = model.WithTransaction(func(db *gorm.DB) error { err = model.NewSalesRefundSearch().SetId(salesRefund.Id).Update(salesRefund) if err != nil { + code = ecode.DBErr return err } salesReturnRecord.AmountHasRefund = salesReturnRecord.AmountHasRefund.Sub(diffAmount).Round(2) salesReturnRecord.AmountShouldRefund = salesReturnRecord.AmountTotal.Sub(salesReturnRecord.AmountHasRefund).Round(2) + + if salesReturnRecord.AmountHasRefund.GreaterThan(salesReturnRecord.AmountTotal) { + code = ecode.SalesRefundProductBeyondTotalAmount + return errors.New("閫�璐т骇鍝佸搴旀�讳环瓒呭嚭搴旈��鎬讳环") + } + err = model.NewSalesReturnSearch().SetId(salesRefund.SourceId).Update(salesReturnRecord) if err != nil { + code = ecode.DBErr return err } return nil }) if err != nil { - return ecode.SalesRefundSetErr + return code } return ecode.OK -- Gitblit v1.8.0