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.Worker/Worker/CheckUnPayOrderWork.cs |   70 +++++++++++++++++++++--------------
 1 files changed, 42 insertions(+), 28 deletions(-)

diff --git a/LifePayment/LifePayment.Worker/Worker/CheckUnPayOrderWork.cs b/LifePayment/LifePayment.Worker/Worker/CheckUnPayOrderWork.cs
index 085423f..0d8287d 100644
--- a/LifePayment/LifePayment.Worker/Worker/CheckUnPayOrderWork.cs
+++ b/LifePayment/LifePayment.Worker/Worker/CheckUnPayOrderWork.cs
@@ -6,16 +6,19 @@
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Logging;
 using Nest;
+using StackExchange.Redis;
 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using Volo.Abp.BackgroundWorkers;
+using Volo.Abp.DistributedLocking;
 using Volo.Abp.Domain.Repositories;
 using Volo.Abp.Threading;
 using Volo.Abp.Uow;
 using ZeroD.Util;
+using ZeroD.Util.Fadd;
 
 namespace LifePayment.Worker.Worker
 {
@@ -23,20 +26,26 @@
     {
         private readonly int _doWorkHour = 0;
         private readonly int _doWorkMinute = 1;
+        private readonly ILogger<CheckUnPayOrderWork> logger;
         private readonly ILifePayOrderService lifePayOrderService;
         private readonly ILifePayService lifePayService;
+        private readonly IAbpDistributedLock distributedLock;
         private readonly IRepository<LifePayOrder, Guid> lifePayOrderRepository;
 
         public CheckUnPayOrderWork(
             AbpAsyncTimer timer,
+            ILogger<CheckUnPayOrderWork> logger,
             IServiceScopeFactory serviceScopeFactory,
             ILifePayOrderService lifePayOrderService,
             ILifePayService lifePayService,
+            IAbpDistributedLock distributedLock,
             IRepository<LifePayOrder, Guid> lifePayOrderRepository) : base(timer, serviceScopeFactory)
         {
-            timer.Period = (int)TimeSpan.FromMinutes(10).TotalMilliseconds;
+            timer.Period = (int)TimeSpan.FromMinutes(30).TotalMilliseconds;
+            this.logger = logger;
             this.lifePayOrderService = lifePayOrderService;
             this.lifePayService = lifePayService;
+            this.distributedLock = distributedLock;
             this.lifePayOrderRepository = lifePayOrderRepository;
         }
 
@@ -46,35 +55,40 @@
             try
             {
                 Logger.LogInformation($"妫�鏌ユ湭鏀粯璁㈠崟鐘舵�佸紑濮�: {DateTime.Now}");
-                var end = DateTime.Now;
-                var start = end.AddMinutes(-15);
-                var orderNos = lifePayOrderRepository.Where(it => it.PayStatus == LifePayStatusEnum.鏈敮浠� && it.CreationTime >= start && it.CreationTime <= end).Select(it => it.OrderNo).ToList();
-                foreach (var orderNo in orderNos)
-                {
-                    var wxPayNotice = await lifePayService.WxPayTradeQuery(orderNo);
-                    var json = wxPayNotice.ToJson();
-                    Logger.LogInformation($"璁㈠崟锛坽wxPayNotice.OutTradeNo}锛変俊鎭�: {json}");
-                    if (wxPayNotice.OutTradeNo.Contains("JF") && wxPayNotice.TradeState == LifePaymentConstant.WxPayStatus.鏀粯鎴愬姛)
-                    {
-                        await lifePayService.LifePaySuccessHandler(wxPayNotice.OutTradeNo, wxPayNotice.TransactionId);
+                //var end = DateTime.Now;
+                //var start = end.AddMinutes(-45);
+                //end = end.AddMinutes(-15);
+                //var orders = lifePayOrderRepository.Where(it => it.PayStatus == LifePayStatusEnum.鏈敮浠� && it.CreationTime >= start && it.CreationTime <= end).ToList();
+                //foreach (var order in orders)
+                //{
+                //    await using var orderLock = await distributedLock.TryAcquireAsync($"LockKey:UpdateOrder:{order.OrderNo}", TimeSpan.FromSeconds(60));
+                //    logger.LogInformation($"閿侊細LockKey:UpdateOrder:{order.OrderNo} - {orderLock != null}");
 
-                        // 鎻掑叆鏀舵敮娴佹按
-                        await lifePayOrderService.AddLifePayExpensesReceipts(new AddLifePayExpensesReceiptsInput()
-                        {
-                            OrderNo = wxPayNotice.OutTradeNo,
-                            OutOrderNo = wxPayNotice.TransactionId,
-                            LifePayType = LifePayTypeEnum.WxPay,
-                            ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Expenses,
-                            Amount = wxPayNotice.Amount.Total
-                        });
+                //    Logger.LogInformation($"璁㈠崟锛歿order.OrderNo}-{order.ToJson()}");
+                //    var wxPayNotice = await lifePayService.WxPayTradeQuery(order.OrderNo);
+                //    var json = wxPayNotice.ToJson();
+                //    Logger.LogInformation($"璁㈠崟锛坽wxPayNotice.OutTradeNo}锛変俊鎭�: {json}");
+                //    if (wxPayNotice.OutTradeNo.Contains("JF") && wxPayNotice.TradeState == LifePaymentConstant.WxPayStatus.鏀粯鎴愬姛)
+                //    {
+                //        await lifePayService.LifePaySuccessHandler(wxPayNotice.OutTradeNo, wxPayNotice.TransactionId);
 
-                        Logger.LogInformation("宸叉敼涓烘敮浠樻垚鍔�");
-                    }
-                    else
-                    {
-                        Logger.LogInformation("鏈洿鏂�");
-                    }
-                }
+                //        // 鎻掑叆鏀舵敮娴佹按
+                //        await lifePayOrderService.AddLifePayExpensesReceipts(new AddLifePayExpensesReceiptsInput()
+                //        {
+                //            OrderNo = wxPayNotice.OutTradeNo,
+                //            OutOrderNo = wxPayNotice.TransactionId,
+                //            LifePayType = LifePayTypeEnum.WxPay,
+                //            ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Expenses,
+                //            Amount = wxPayNotice.Amount.Total
+                //        });
+
+                //        Logger.LogInformation("宸叉敼涓烘敮浠樻垚鍔�");
+                //    }
+                //    else
+                //    {
+                //        Logger.LogInformation("鏈洿鏂�");
+                //    }
+                //}
             }
             catch (Exception ex)
             {

--
Gitblit v1.9.1