using cylsg.Core; using cylsg.Model.TransferOrder; using EzWechat; using Furion; using Furion.FriendlyException; using Furion.Schedule; using Microsoft.AspNetCore.Http.HttpResults; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EzJob { public class WeChatJob : IJob { /// /// 查询订单完成情况 /// /// /// /// public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { var payServices= App.GetService(); if(payServices == null) { throw Oops.Oh($"定时任务WeChatJob 处理失败,未能获取IWecharPayServicecs 服务"); } var WeChatTransferOrderRs = new BaseRepository(); var OderList = await WeChatTransferOrderRs.AsQueryable().Includes(x=>x.TransferDetailList).Where(x => (x.BatchId != null && x.BatchId != "") || x.BatchStatus == "ACCEPTED" || x.BatchStatus == "PROCESSING").ToListAsync(); foreach( var o in OderList ) { var ret = await payServices.TransferBatches(new SKIT.FlurlHttpClient.Wechat.TenpayV3.Models.GetTransferBatchByBatchIdRequest { BatchId = o.BatchId }); if(ret != null) { if(ret.IsSuccessful()) { if (ret.TransferBatch.BatchStatus == "FINISHED") { //已经全部完成 o.BatchStatus= ret.TransferBatch.BatchStatus; o.UpDataBy = "ExecuteAsync"; o.UpDataTime=DateTime.Now; o.CloseReason = ret.TransferBatch.CloseReason; o.FailAmount= ret.TransferBatch.FailAmount; o.FailNum = ret.TransferBatch.FailNumber; o.SuccessNum = ret.TransferBatch.SuccessNumber; o.SuccessAmount= ret.TransferBatch.SuccessAmount; foreach (var item in o.TransferDetailList) { var del =ret.TransferDetailList.Where(x=>x.OutDetailNumber==item.OutDetailNumber).FirstOrDefault(); item.DetailStatus = del?.DetailStatus; switch (item.DetailStatus) { case "FAIL": //失败,获取失败原因 var retde = await payServices.TransferBatchesDetails(new SKIT.FlurlHttpClient.Wechat.TenpayV3.Models.GetTransferBatchDetailByDetailIdRequest { BatchId = o.BatchId, DetailId = del.DetailId, }); item.FailReason = retde?.FailReason; break; case "SUCCESS": item.DetailStatus = "SUCCESS"; break; default: item.DetailStatus = del?.DetailStatus; break; } } } } } } } } }