using 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 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 { public class CheckUnPayOrderWork : AsyncPeriodicBackgroundWorkerBase { private readonly int _doWorkHour = 0; private readonly int _doWorkMinute = 1; private readonly ILogger logger; private readonly ILifePayOrderService lifePayOrderService; private readonly ILifePayService lifePayService; private readonly IAbpDistributedLock distributedLock; private readonly IRepository lifePayOrderRepository; public CheckUnPayOrderWork( AbpAsyncTimer timer, ILogger logger, IServiceScopeFactory serviceScopeFactory, ILifePayOrderService lifePayOrderService, ILifePayService lifePayService, IAbpDistributedLock distributedLock, IRepository lifePayOrderRepository) : base(timer, serviceScopeFactory) { timer.Period = (int)TimeSpan.FromMinutes(30).TotalMilliseconds; this.logger = logger; this.lifePayOrderService = lifePayOrderService; this.lifePayService = lifePayService; this.distributedLock = distributedLock; this.lifePayOrderRepository = lifePayOrderRepository; } [UnitOfWork] protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext) { try { Logger.LogInformation($"检查未支付订单状态开始: {DateTime.Now}"); //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}"); // 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); // // 插入收支流水 // 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); } } } }