From 469279cdbbfcebb15d9b1c2c9c2b7bc6210041ba Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期一, 09 六月 2025 17:10:02 +0800
Subject: [PATCH] feat:每隔10分钟定时查询15分钟内的未支付订单向微信API获取最新信息若为支付成功则更改订单状态

---
 LifePayment/LifePayment.Worker/LifePaymentServicesWorkModule.cs |    1 
 LifePayment/LifePayment.Worker/LifePayment.Worker.csproj        |   15 +++++++
 LifePayment/LifePayment.Worker/Worker/CheckUnPayOrderWork.cs    |   87 +++++++++++++++++++++++++++++++++++++++++++
 LifePayment/LifePayment.Worker/appsettings.json                 |    5 +-
 LifePayment/LifePayment.Application/LifePay/LifePayService.cs   |    1 
 5 files changed, 105 insertions(+), 4 deletions(-)

diff --git a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs
index 7d0e1f1..69f1df1 100644
--- a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs
+++ b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs
@@ -99,7 +99,6 @@
 
     #region 鏌ヨ
 
-
     /// <summary>
     /// 鑾峰彇鐢佃垂闈㈠��
     /// </summary>
diff --git a/LifePayment/LifePayment.Worker/LifePayment.Worker.csproj b/LifePayment/LifePayment.Worker/LifePayment.Worker.csproj
index dee56af..e6e6a62 100644
--- a/LifePayment/LifePayment.Worker/LifePayment.Worker.csproj
+++ b/LifePayment/LifePayment.Worker/LifePayment.Worker.csproj
@@ -38,4 +38,19 @@
     <ProjectReference Include="..\LifePayment.EntityFrameworkCore\LifePayment.EntityFrameworkCore.csproj" />
   </ItemGroup>
 
+  <ItemGroup>
+    <None Update="Cert\alipayCertPublicKey_RSA2.crt">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Update="Cert\alipayRootCert.crt">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Update="Cert\appCertPublicKey_2021004171602214.crt">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Update="Cert\CSR鏂囦欢.csr">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+  </ItemGroup>
+
 </Project>
diff --git a/LifePayment/LifePayment.Worker/LifePaymentServicesWorkModule.cs b/LifePayment/LifePayment.Worker/LifePaymentServicesWorkModule.cs
index efeef28..94062ab 100644
--- a/LifePayment/LifePayment.Worker/LifePaymentServicesWorkModule.cs
+++ b/LifePayment/LifePayment.Worker/LifePaymentServicesWorkModule.cs
@@ -52,6 +52,7 @@
         public async override Task OnApplicationInitializationAsync(ApplicationInitializationContext context)
         {
             await context.AddBackgroundWorkerAsync<GetStaticsWorker>();
+            await context.AddBackgroundWorkerAsync<CheckUnPayOrderWork>();
         }
 
         private void ConfigurePays(ServiceConfigurationContext context, IConfiguration configuration)
diff --git a/LifePayment/LifePayment.Worker/Worker/CheckUnPayOrderWork.cs b/LifePayment/LifePayment.Worker/Worker/CheckUnPayOrderWork.cs
new file mode 100644
index 0000000..085423f
--- /dev/null
+++ b/LifePayment/LifePayment.Worker/Worker/CheckUnPayOrderWork.cs
@@ -0,0 +1,87 @@
+锘縰sing LifePayment.Application;
+using LifePayment.Application.Contracts;
+using LifePayment.Application.LifePay;
+using LifePayment.Domain.Models;
+using LifePayment.Domain.Shared;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using Nest;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.BackgroundWorkers;
+using Volo.Abp.Domain.Repositories;
+using Volo.Abp.Threading;
+using Volo.Abp.Uow;
+using ZeroD.Util;
+
+namespace LifePayment.Worker.Worker
+{
+    public class CheckUnPayOrderWork : AsyncPeriodicBackgroundWorkerBase
+    {
+        private readonly int _doWorkHour = 0;
+        private readonly int _doWorkMinute = 1;
+        private readonly ILifePayOrderService lifePayOrderService;
+        private readonly ILifePayService lifePayService;
+        private readonly IRepository<LifePayOrder, Guid> lifePayOrderRepository;
+
+        public CheckUnPayOrderWork(
+            AbpAsyncTimer timer,
+            IServiceScopeFactory serviceScopeFactory,
+            ILifePayOrderService lifePayOrderService,
+            ILifePayService lifePayService,
+            IRepository<LifePayOrder, Guid> lifePayOrderRepository) : base(timer, serviceScopeFactory)
+        {
+            timer.Period = (int)TimeSpan.FromMinutes(10).TotalMilliseconds;
+            this.lifePayOrderService = lifePayOrderService;
+            this.lifePayService = lifePayService;
+            this.lifePayOrderRepository = lifePayOrderRepository;
+        }
+
+        [UnitOfWork]
+        protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext)
+        {
+            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);
+
+                        // 鎻掑叆鏀舵敮娴佹按
+                        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)
+            {
+                Logger.LogError($"妫�鏌ユ湭鏀粯璁㈠崟鐘舵�佸彂鐢熷紓甯�: {DateTime.Now}" + ex.Message);
+            }
+
+
+        }
+    }
+}
diff --git a/LifePayment/LifePayment.Worker/appsettings.json b/LifePayment/LifePayment.Worker/appsettings.json
index 93c551b..4beb47b 100644
--- a/LifePayment/LifePayment.Worker/appsettings.json
+++ b/LifePayment/LifePayment.Worker/appsettings.json
@@ -13,9 +13,8 @@
     "OssUrl": "https://waterdroptest2.oss-cn-hangzhou.aliyuncs.com/"
   },
   "ConnectionStrings": {
-    //"LifePayment": "Server=120.26.58.240; Database=Dev_12333; User=bole;Password=Blym123!@#$"
-    "AbpIdentity": "Server=120.26.58.240; Database=Dev_LifePaymentIdentity; User=bole;Password=Bole147258",
-    "LifePaymentServices": "Server=120.26.58.240; Database=Dev_LifePayment; User=bole;Password=Bole147258"
+    "LifePaymentServices": "Server=rm-bp1mt744021h1s6dg4o.sqlserver.rds.aliyuncs.com,2333;Database=Dev_LifePayment;Uid=bole;Pwd=Blcs20@%27;",
+    "AbpIdentity": "Server=rm-bp1mt744021h1s6dg4o.sqlserver.rds.aliyuncs.com,2333;Database=Dev_LifePaymentIdentity;Uid=bole;Pwd=Blcs20@%27;"
   },
   "App": {
     "CorsOrigins": "http://localhost:31804"

--
Gitblit v1.9.1