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