From 1605af1ced748313e99f38e5eb6888768fbc7d54 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期三, 11 六月 2025 14:46:43 +0800 Subject: [PATCH] fix:支付回调和供应商回调的并发问题 --- LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs | 147 ++++++++++++++++++++++++++++++++++++------------ 1 files changed, 110 insertions(+), 37 deletions(-) diff --git a/LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs b/LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs index f9c6aca..cae6846 100644 --- a/LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs +++ b/LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs @@ -10,6 +10,7 @@ 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 +21,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> @@ -52,10 +56,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,34 +72,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.宸插畬鎴�; - 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); @@ -101,29 +134,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.宸插畬鎴�; - 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: @@ -133,46 +191,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.鍏呭�兼垚鍔�; + 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