From e0f2b29f3349d43e7f4222e079c54ba9cc4b6ee1 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期一, 16 六月 2025 11:09:23 +0800
Subject: [PATCH] fix:支付回调及供应商回调并发问题修订

---
 LifePayment/LifePayment.HttpApi/LifePay/AliPayNotifyController.cs |   65 +++++++++++++++++++-------------
 1 files changed, 38 insertions(+), 27 deletions(-)

diff --git a/LifePayment/LifePayment.HttpApi/LifePay/AliPayNotifyController.cs b/LifePayment/LifePayment.HttpApi/LifePay/AliPayNotifyController.cs
index 3ecc609..97c023c 100644
--- a/LifePayment/LifePayment.HttpApi/LifePay/AliPayNotifyController.cs
+++ b/LifePayment/LifePayment.HttpApi/LifePay/AliPayNotifyController.cs
@@ -49,7 +49,7 @@
         /// </summary>
         /// <returns></returns>
         [HttpPost]
-        [UnitOfWork]
+        [UnitOfWork(false)]
         public async Task<ContentResult> AliRechargeNotify()
         {
             _logger.LogError($"鐢熸椿绠″鏀粯瀹濆厖鍊煎洖璋冮�氱煡锛氳繘鍏ユ敮浠樺疂鍥炶皟");
@@ -61,38 +61,49 @@
             //var serializeRequest = "{\"gmt_create\":\"2025-02-25 13:18:59\",\"charset\":\"UTF-8\",\"seller_email\":\"zfb1@818nb.com\",\"subject\":\"鐢熸椿缂磋垂-璇濊垂\",\"sign\":\"Sp06G1GxrAfDvoHPz9l3DJ20SxhvRzEGFeCGu4LHrSWmEG4OY7MHMx+iJi54ETbdXV0YsyDH9JZD7PWN3HCpEq/wGO4Wh4VSYSe7lqxD6r4f/HFiB0YlrdQoSzjZgYPzLjy6bcdlKRRHOeDkgs2i7TfvIsxWxHs9t0xuS0RlkpdZfb7d7m0EuZ/3v2Cbsj5AHjxb1S2PkO0oQyriYgGQdmkPqILZHwieST+tNEHS4dGFKYu2nkfctAGjWIDv/hKQNY7jEUxsEeG0SnK4TPU8zNplFR9/aKM0Wfwp1pdlaiP2u/d8vOtNh5q+emvaYbKrUkIEFBok8pDLNDta7ZjtVw==\",\"invoice_amount\":\"0.01\",\"buyer_open_id\":\"071xYXDfXBLAI9U11jg_WrH1K6hWq8HYGz0u85xBivf3Sce\",\"notify_id\":\"2025022501222131904087711494539601\",\"fund_bill_list\":\"[{\\\"amount\\\":\\\"0.01\\\",\\\"fundChannel\\\":\\\"ALIPAYACCOUNT\\\"}]\",\"notify_type\":\"trade_status_sync\",\"trade_status\":\"TRADE_SUCCESS\",\"receipt_amount\":\"0.01\",\"buyer_pay_amount\":\"0.01\",\"app_id\":\"2021004171602214\",\"sign_type\":\"RSA2\",\"seller_id\":\"2088050542042301\",\"gmt_payment\":\"2025-02-25 13:19:03\",\"notify_time\":\"2025-02-25 13:44:34\",\"merchant_app_id\":\"2021004171602214\",\"version\":\"1.0\",\"out_trade_no\":\"JF202502251318555214671\",\"total_amount\":\"0.01\",\"trade_no\":\"2025022522001487711401331043\",\"auth_app_id\":\"2021004171602214\",\"buyer_logon_id\":\"130****2238\",\"point_amount\":\"0.00\"}";
             var input = JsonConvert.DeserializeObject<AliRechargeNotifyInput>(serializeRequest);
 
+            await using var orderLock = await distributedLock.TryAcquireAsync($"LockKey:UpdateOrder:{input.OutTradeNo}", TimeSpan.FromSeconds(60));
+            _logger.LogInformation($"閿侊細LockKey:UpdateOrder:{input.OutTradeNo} - {orderLock != null}");
+
             if (input.OutTradeNo.Contains("JF"))
             {
-                if (input.TradeStatus == LifePaymentConstant.AliPayStatus.鏀粯鎴愬姛 && input.OutBizNo.IsNullOrEmpty())
+                try
                 {
-                    await using var orderLock = await distributedLock.TryAcquireAsync($"LockKey:UpdateOrder:{input.OutTradeNo}", TimeSpan.FromSeconds(60));
-
-                    await _lifePayService.LifePaySuccessHandler(input.OutTradeNo, input.TradeNo);
-                    // 鎻掑叆鏀舵敮娴佹按
-                    await _lifePayOrderService.AddLifePayExpensesReceipts(new AddLifePayExpensesReceiptsInput()
+                    if (input.TradeStatus == LifePaymentConstant.AliPayStatus.鏀粯鎴愬姛 && input.OutBizNo.IsNullOrEmpty())
                     {
-                        OrderNo = input.OutTradeNo,
-                        OutOrderNo = input.TradeNo,
-                        LifePayType = LifePayTypeEnum.AliPay,
-                        ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Expenses
-                    });
+                        await _lifePayService.LifePaySuccessHandler(input.OutTradeNo, input.TradeNo);
+                        // 鎻掑叆鏀舵敮娴佹按
+                        await _lifePayOrderService.AddLifePayExpensesReceipts(new AddLifePayExpensesReceiptsInput()
+                        {
+                            OrderNo = input.OutTradeNo,
+                            OutOrderNo = input.TradeNo,
+                            LifePayType = LifePayTypeEnum.AliPay,
+                            ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Expenses
+                        });
+                        await CurrentUnitOfWork.SaveChangesAsync();
+                        _logger.LogInformation("浜嬪姟瀹屾垚");
+                    }
+                    else if (((input.TradeStatus == LifePaymentConstant.AliPayStatus.鏀粯鎴愬姛 || input.TradeStatus == LifePaymentConstant.AliPayStatus.瓒呮椂鍏抽棴)
+                        && input.OutBizNo.IsNotNullOrEmpty()
+                        && (input.RefundFee.HasValue && input.RefundFee > 0)))
+                    {
+                        await _lifePayService.LifePayRefundsHandler(input.OutTradeNo, LifePayRefundStatusEnum.宸查��娆�);
+                        // 鎻掑叆鏀舵敮娴佹按
+                        await _lifePayOrderService.AddLifePayExpensesReceipts(new AddLifePayExpensesReceiptsInput()
+                        {
+                            OrderNo = input.OutTradeNo,
+                            OutRefundNo = input.OutBizNo,
+                            OutOrderNo = input.TradeNo,
+                            LifePayType = LifePayTypeEnum.AliPay,
+                            ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Receipts
+                        });
+                        await CurrentUnitOfWork.SaveChangesAsync();
+                        _logger.LogInformation("浜嬪姟瀹屾垚");
+                    }
                 }
-                else if (((input.TradeStatus == LifePaymentConstant.AliPayStatus.鏀粯鎴愬姛 || input.TradeStatus == LifePaymentConstant.AliPayStatus.瓒呮椂鍏抽棴)
-                    && input.OutBizNo.IsNotNullOrEmpty()
-                    && (input.RefundFee.HasValue && input.RefundFee > 0)))
+                catch (Exception ex)
                 {
-                    await using var orderLock = await distributedLock.TryAcquireAsync($"LockKey:UpdateOrder:{input.OutTradeNo}", TimeSpan.FromSeconds(60));
-
-                    await _lifePayService.LifePayRefundsHandler(input.OutTradeNo, LifePayRefundStatusEnum.宸查��娆�);
-                    // 鎻掑叆鏀舵敮娴佹按
-                    await _lifePayOrderService.AddLifePayExpensesReceipts(new AddLifePayExpensesReceiptsInput()
-                    {
-                        OrderNo = input.OutTradeNo,
-                        OutRefundNo = input.OutBizNo,
-                        OutOrderNo = input.TradeNo,
-                        LifePayType = LifePayTypeEnum.AliPay,
-                        ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Receipts
-                    });
+                    await CurrentUnitOfWork.RollbackAsync();
+                    _logger.LogError($"鏀粯瀹濇敮浠樺洖璋冨紓甯革細{ex.Message}", ex);
                 }
             }
             else

--
Gitblit v1.9.1