|
@@ -7,6 +7,7 @@ import (
|
|
|
"eta/eta_mini_crm_ht/models/response"
|
|
|
"eta/eta_mini_crm_ht/utils"
|
|
|
"fmt"
|
|
|
+ uuid2 "github.com/google/uuid"
|
|
|
"github.com/rdlucklib/rdluck_tools/paging"
|
|
|
"github.com/xuri/excelize/v2"
|
|
|
"math/rand"
|
|
@@ -778,35 +779,46 @@ func (this *OrderController) Refund() {
|
|
|
br.ErrMsg = "退款失败,原订单未完成支付"
|
|
|
return
|
|
|
}
|
|
|
- aa := GenerateProductOrderNo()
|
|
|
- refundOrder := &models.TradeOrder{
|
|
|
- TransactionId: aa,
|
|
|
- OrgTransactionId: productOrder.TradeNo,
|
|
|
- ProductOrderId: productOrder.OrderId,
|
|
|
- PaymentAccount: tradeOrder.PaymentAccount,
|
|
|
- PaymentWay: tradeOrder.PaymentWay,
|
|
|
- Amount: tradeOrder.Amount,
|
|
|
- Currency: tradeOrder.Currency,
|
|
|
- UserId: tradeOrder.UserId,
|
|
|
- TemplateUserId: tradeOrder.TemplateUserId,
|
|
|
- PaymentType: models.PaymentTypeRefund,
|
|
|
- PaymentStatus: models.PaymentStatusPending,
|
|
|
- CreatedTime: time.Now(),
|
|
|
- }
|
|
|
- productOrder.RefundStatus = models.RefundStatusProcessing
|
|
|
- productOrder.Status = models.OrderStatusRefund
|
|
|
- productOrder.RefundTradeId = refundOrder.TransactionId
|
|
|
- productOrder.Remark = req.Remark
|
|
|
- productOrder.RefundAmount = tradeOrder.Amount
|
|
|
- err = refundOrder.Refund(productOrder)
|
|
|
- if err != nil {
|
|
|
- br.Msg = "退款失败"
|
|
|
- br.ErrMsg = "退款失败,,Err:" + err.Error()
|
|
|
+ uuid := uuid2.NewString()
|
|
|
+ key := fmt.Sprintf("refund_lock_%s", productOrder.OrderId)
|
|
|
+ defer func() {
|
|
|
+ utils.ReleaseLock(key, uuid)
|
|
|
+ }()
|
|
|
+ if utils.AcquireLock(key, 10, uuid) {
|
|
|
+ aa := GenerateProductOrderNo()
|
|
|
+ refundOrder := &models.TradeOrder{
|
|
|
+ TransactionId: aa,
|
|
|
+ OrgTransactionId: productOrder.TradeNo,
|
|
|
+ ProductOrderId: productOrder.OrderId,
|
|
|
+ PaymentAccount: tradeOrder.PaymentAccount,
|
|
|
+ PaymentWay: tradeOrder.PaymentWay,
|
|
|
+ Amount: tradeOrder.Amount,
|
|
|
+ Currency: tradeOrder.Currency,
|
|
|
+ UserId: tradeOrder.UserId,
|
|
|
+ TemplateUserId: tradeOrder.TemplateUserId,
|
|
|
+ PaymentType: models.PaymentTypeRefund,
|
|
|
+ PaymentStatus: models.PaymentStatusPending,
|
|
|
+ CreatedTime: time.Now(),
|
|
|
+ }
|
|
|
+ productOrder.RefundStatus = models.RefundStatusProcessing
|
|
|
+ productOrder.Status = models.OrderStatusRefund
|
|
|
+ productOrder.RefundTradeId = refundOrder.TransactionId
|
|
|
+ productOrder.Remark = req.Remark
|
|
|
+ productOrder.RefundAmount = tradeOrder.Amount
|
|
|
+ err = refundOrder.Refund(productOrder)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "退款失败"
|
|
|
+ br.ErrMsg = "退款失败,,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "退款处理成功"
|
|
|
+ } else {
|
|
|
+ br.Msg = "退款失败,当前订单正在退款中"
|
|
|
+ br.ErrMsg = "退款失败,当前订单正在退款中"
|
|
|
return
|
|
|
}
|
|
|
- br.Ret = 200
|
|
|
- br.Success = true
|
|
|
- br.Msg = "退款处理成功"
|
|
|
}
|
|
|
func GenerateProductOrderNo() string {
|
|
|
timestamp := time.Now().UnixNano() / 1000000 // 毫秒级时间戳
|