From 6739e98662c16571da7aec0e9b52fab0afd3833b Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期五, 13 六月 2025 14:07:28 +0800
Subject: [PATCH] fix:修订支付回调和供应商回调并发问题

---
 LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs |  165 +++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 112 insertions(+), 53 deletions(-)

diff --git a/LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs b/LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs
index a0ceec6..d44e90d 100644
--- a/LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs
+++ b/LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs
@@ -7,9 +7,11 @@
 using System;
 using System.IO;
 using System.Text;
+using System.Threading;
 using System.Threading.Tasks;
 using Volo.Abp;
 using Volo.Abp.AspNetCore.Mvc;
+using Volo.Abp.DistributedLocking;
 using Volo.Abp.Uow;
 
 namespace LifePayment.HttpApi
@@ -20,14 +22,17 @@
     public class ACOOLYNotifyController : AbpController
     {
         private readonly ILifePayService _lifePayService;
+        private readonly IAbpDistributedLock distributedLock;
         private readonly ILogger<ACOOLYNotifyController> _logger;
 
         public ACOOLYNotifyController(
                ILogger<ACOOLYNotifyController> logger,
-               ILifePayService lifePayService)
+               ILifePayService lifePayService,
+               IAbpDistributedLock distributedLock)
         {
             _logger = logger;
             _lifePayService = lifePayService;
+            this.distributedLock = distributedLock;
         }
 
         /// <summary>
@@ -35,11 +40,11 @@
         /// </summary>
         /// <returns></returns>
         [HttpPost]
-        [UnitOfWork]
         [AllowAnonymous]
         public async Task ACOOLYNotify()
         {
             _logger.LogError("ACOOLY鍥炶皟閫氱煡寮�濮嬭繘鍏�");
+            Thread.Sleep(200);
             var body = string.Empty;
             using (var reader = new StreamReader(Request.Body, Encoding.UTF8))
             {
@@ -52,10 +57,13 @@
             }
             var baseInfo = JsonConvert.DeserializeObject<ACOOLYRequestBaseResponse>(body);
             var orderNo = string.Empty;
-            var status = LifePayOrderStatusEnum.寰呯‘璁�;
-            var acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
+            LifePayOrderStatusEnum status = LifePayOrderStatusEnum.寰呴��娆�;
+            ACOOLYStatusEnum acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
             var acoolyOrderNo = string.Empty;
             decimal payAmount = 0;
+            decimal parValue = 0;
+            decimal actualParValue = 0;
+            string refundApplyRemark = string.Empty;
             _logger.LogError("ACOOLY鍥炶皟閫氬鐞嗙被鍨嬶細" + baseInfo.Service);
             _logger.LogError("ACOOLY鍥炶皟鍐呭锛�" + body);
             switch (baseInfo.Service)
@@ -65,42 +73,60 @@
                     orderNo = confirmElectricOrderResponse.ElectricChargeOrder.OutOrderNo;
                     acoolyOrderNo = confirmElectricOrderResponse.ElectricChargeOrder.BusiOrderNo;
                     payAmount = confirmElectricOrderResponse.ElectricChargeOrder.PayAmount;
+                    actualParValue = confirmElectricOrderResponse.ElectricChargeOrder.ActualParValue;
+                    parValue = confirmElectricOrderResponse.ElectricChargeOrder.ParValue;
                     _logger.LogError("ACOOLY鍥炶皟閫氬鐞嗙粨鏋滅姸鎬侊細" + confirmElectricOrderResponse.ElectricChargeOrder.Status);
 
                     if (!confirmElectricOrderResponse.Success
                     || (confirmElectricOrderResponse.Code != ACOOLYConstant.Code.SUCCESS && confirmElectricOrderResponse.Code != ACOOLYConstant.Code.PROCESSING))
                     {
-                        status = LifePayOrderStatusEnum.宸插け璐�;
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
                         acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
                     }
                     else
-
                     if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.鍏呭�兼垚鍔�)
                     {
                         status = LifePayOrderStatusEnum.宸插畬鎴�;
-                        if (confirmElectricOrderResponse.ElectricChargeOrder.ParValue == confirmElectricOrderResponse.ElectricChargeOrder.PayAmount)
-                        {
-
-                            acoolyStatus = ACOOLYStatusEnum.鍏呭�兼垚鍔�;
-                        }
-                        else
-                        {
-                            acoolyStatus = ACOOLYStatusEnum.閮ㄥ垎鍏呭�兼垚鍔�;
-                        }
+                        acoolyStatus = ACOOLYStatusEnum.宸插畬鎴�;
                     }
                     else
-
                     if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.鍏呭�间腑)
                     {
-                        status = LifePayOrderStatusEnum.寰呯‘璁�;
+                        status = LifePayOrderStatusEnum.鍏呭�间腑;
                         acoolyStatus = ACOOLYStatusEnum.鍏呭�间腑;
                     }
                     else
+                    if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.鍏呭�煎け璐�)
                     {
-                        status = LifePayOrderStatusEnum.宸插け璐�;
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
+                        acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
+                        refundApplyRemark = "渚涘簲鍟嗗厖鍊煎け璐�";
+                    }
+                    else
+                    if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.閫�娆句腑)
+                    {
+                        status = LifePayOrderStatusEnum.閫�娆句腑;
+                        acoolyStatus = ACOOLYStatusEnum.閫�娆句腑;
+                    }
+                    else
+                    if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.閫�娆惧畬鎴�)
+                    {
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
+                        acoolyStatus = ACOOLYStatusEnum.宸查��娆�;
+                    }
+                    else
+                    if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.澶辫触鍏抽棴)
+                    {
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
                         acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
                     }
-
+                    else
+                    if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.閮ㄥ垎鍏呭�兼垚鍔�)
+                    {
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
+                        acoolyStatus = ACOOLYStatusEnum.閮ㄥ垎鍏呭�兼垚鍔�;
+                        refundApplyRemark = confirmElectricOrderResponse.ElectricChargeOrder.ResponseMessage;
+                    }
                     break;
                 case ACOOLYConstant.Sevice.ConfirmPhoneOrder:
                     var confirmPhoneOrderResponse = JsonConvert.DeserializeObject<ConfirmPhoneOrderResponse>(body);
@@ -109,37 +135,54 @@
                     payAmount = confirmPhoneOrderResponse.PhoneChargeOrder.PayAmount;
                     _logger.LogError("ACOOLY鍥炶皟閫氬鐞嗙粨鏋滅姸鎬侊細" + confirmPhoneOrderResponse.PhoneChargeOrder.Status);
                     if (!confirmPhoneOrderResponse.Success
-                    || (confirmPhoneOrderResponse.Code != ACOOLYConstant.Code.SUCCESS && confirmPhoneOrderResponse.Code != ACOOLYConstant.Code.PROCESSING))
+                     || (confirmPhoneOrderResponse.Code != ACOOLYConstant.Code.SUCCESS && confirmPhoneOrderResponse.Code != ACOOLYConstant.Code.PROCESSING))
                     {
-                        status = LifePayOrderStatusEnum.宸插け璐�;
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
                         acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
                     }
                     else
 
-                    if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.鍏呭�兼垚鍔�)
+                     if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.鍏呭�兼垚鍔�)
                     {
                         status = LifePayOrderStatusEnum.宸插畬鎴�;
-                        if (confirmPhoneOrderResponse.PhoneChargeOrder.ParValue == confirmPhoneOrderResponse.PhoneChargeOrder.PayAmount)
-                        {
-
-                            acoolyStatus = ACOOLYStatusEnum.鍏呭�兼垚鍔�;
-                        }
-                        else
-                        {
-                            acoolyStatus = ACOOLYStatusEnum.閮ㄥ垎鍏呭�兼垚鍔�;
-                        }
+                        acoolyStatus = ACOOLYStatusEnum.宸插畬鎴�;
                     }
                     else
 
-                    if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.鍏呭�间腑)
+                     if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.鍏呭�间腑)
                     {
-                        status = LifePayOrderStatusEnum.寰呯‘璁�;
+                        status = LifePayOrderStatusEnum.鍏呭�间腑;
                         acoolyStatus = ACOOLYStatusEnum.鍏呭�间腑;
                     }
                     else
+                     if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.鍏呭�煎け璐�)
                     {
-                        status = LifePayOrderStatusEnum.宸插け璐�;
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
                         acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
+                    }
+                    else
+                     if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.閫�娆句腑)
+                    {
+                        status = LifePayOrderStatusEnum.閫�娆句腑;
+                        acoolyStatus = ACOOLYStatusEnum.閫�娆句腑;
+                    }
+                    else
+                     if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.閫�娆惧畬鎴�)
+                    {
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
+                        acoolyStatus = ACOOLYStatusEnum.宸查��娆�;
+                    }
+                    else
+                     if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.澶辫触鍏抽棴)
+                    {
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
+                        acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
+                    }
+                    else
+                    if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.閮ㄥ垎鍏呭�兼垚鍔�)
+                    {
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
+                        acoolyStatus = ACOOLYStatusEnum.閮ㄥ垎鍏呭�兼垚鍔�;
                     }
                     break;
                 case ACOOLYConstant.Sevice.ConfirmGasOrder:
@@ -149,45 +192,61 @@
                     payAmount = confirmGasOrderResponse.GasChargeOrder.PayAmount;
                     _logger.LogError("ACOOLY鍥炶皟閫氬鐞嗙粨鏋滅姸鎬侊細" + confirmGasOrderResponse.GasChargeOrder.Status);
                     if (!confirmGasOrderResponse.Success
-                    || (confirmGasOrderResponse.Code != ACOOLYConstant.Code.SUCCESS && confirmGasOrderResponse.Code != ACOOLYConstant.Code.PROCESSING))
+                     || (confirmGasOrderResponse.Code != ACOOLYConstant.Code.SUCCESS && confirmGasOrderResponse.Code != ACOOLYConstant.Code.PROCESSING))
                     {
-                        status = LifePayOrderStatusEnum.宸插け璐�;
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
+                        acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
                     }
                     else
 
-                    if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.鍏呭�兼垚鍔�)
+                     if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.鍏呭�兼垚鍔�)
                     {
                         status = LifePayOrderStatusEnum.宸插畬鎴�;
-                        // TODO 纭浠�涔堟儏鍐典笅鍙互鍒ゆ柇鏄儴鍒嗗厖鍊兼垚鍔�
-
-                        //if (confirmGasOrderResponse.GasChargeOrder.ParValue == confirmGasOrderResponse.GasChargeOrder.PayAmount)
-                        //{
-
-                        //    acoolyStatus = ACOOLYStatusEnum.鍏呭�兼垚鍔�;
-                        //}
-                        //else
-                        //{
-                        //    acoolyStatus = ACOOLYStatusEnum.閮ㄥ垎鍏呭�兼垚鍔�;
-                        //}
+                        acoolyStatus = ACOOLYStatusEnum.宸插畬鎴�;
                     }
                     else
 
-                    if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.鍏呭�间腑)
+                     if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.鍏呭�间腑)
                     {
-                        status = LifePayOrderStatusEnum.寰呯‘璁�;
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
                         acoolyStatus = ACOOLYStatusEnum.鍏呭�间腑;
                     }
                     else
+                     if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.鍏呭�煎け璐�)
                     {
-                        status = LifePayOrderStatusEnum.宸插け璐�;
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
                         acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
+                    }
+                    else
+                     if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.閫�娆句腑)
+                    {
+                        status = LifePayOrderStatusEnum.閫�娆句腑;
+                        acoolyStatus = ACOOLYStatusEnum.閫�娆句腑;
+                    }
+                    else
+                     if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.閫�娆惧畬鎴�)
+                    {
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
+                        acoolyStatus = ACOOLYStatusEnum.宸查��娆�;
+                    }
+                    else
+                     if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.澶辫触鍏抽棴)
+                    {
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
+                        acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
+                    }
+                    else
+                    if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.閮ㄥ垎鍏呭�兼垚鍔�)
+                    {
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
+                        acoolyStatus = ACOOLYStatusEnum.閮ㄥ垎鍏呭�兼垚鍔�;
                     }
                     break;
                 default:
-                    break;
+                    throw new UserFriendlyException("ACOOLY鍥炶皟閫氬鐞嗙被鍨嬩笉瀛樺湪");
             }
 
-            await _lifePayService.ACOOLYOrderNotifyHandler(orderNo, acoolyOrderNo, status, acoolyStatus, payAmount);
+            await _lifePayService.ACOOLYOrderNotifyHandler(orderNo, acoolyOrderNo, status, acoolyStatus, payAmount, refundApplyRemark, parValue, actualParValue);
         }
     }
 }
\ No newline at end of file

--
Gitblit v1.9.1