key1_beacon_api/ARW.Tasks/TaskScheduler/Business/OrderTask_Job.cs
2023-10-25 16:07:57 +08:00

174 lines
7.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Aliyun.OSS;
using ARW.Common;
using ARW.Model.Models.Business.OrderManage.Orders;
using ARW.Model.Models.Business.OrderTasks;
using ARW.Model.Models.Business.Payments;
using ARW.Model.Models.Business.SubscribeTasks;
using ARW.Model.System;
using ARW.Service.Business.IBusinessService.Custom.Customers;
using ARW.Service.Business.IBusinessService.OrderManage.Orders;
using ARW.Service.Business.IBusinessService.OrderTasks;
using ARW.Service.Business.IBusinessService.Payments;
using ARW.Service.Business.IBusinessService.SubscribeTasks;
using ARW.Service.System.IService;
using Infrastructure;
using Infrastructure.Attribute;
using Infrastructure.WeChat.SubScribe;
using Infrastructure.WeChat.TenPay;
using Quartz;
using Senparc.CO2NET.Extensions;
using Senparc.CO2NET.HttpUtility;
using Senparc.Weixin.Entities.TemplateMessage;
using Senparc.Weixin.WxOpen.AdvancedAPIs.WxApp.WxAppJson;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
using SystemTime = System.SystemTime;
namespace ARW.Tasks.TaskScheduler.Business
{
/// <summary>
/// 订单取消任务
/// </summary>
[AppService(ServiceType = typeof(OrderTask_Job), ServiceLifetime = LifeTime.Scoped)]
public class OrderTask_Job : JobBase, IJob
{
private readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
private readonly ISysTasksLogService SysTasksLogService;
private readonly ISysTasksQzService SysTasksQzService;
private readonly IOrderTaskService _OrderTaskService;
private readonly IOrderService _OrderService;
private readonly ICustomerService _CustomerService;
private readonly IPaymentService _PaymentService;
private readonly SenparcHttpClient _httpClient;
public OrderTask_Job(ISysTasksLogService sysTasksLogService, ISysTasksQzService sysTasksQzService, IOrderTaskService orderTaskService, IOrderService orderService, ICustomerService customerService, SenparcHttpClient httpClient, IPaymentService paymentService)
{
SysTasksLogService = sysTasksLogService;
SysTasksQzService = sysTasksQzService;
_OrderTaskService = orderTaskService;
_OrderService = orderService;
_CustomerService = customerService;
_httpClient = httpClient;
_PaymentService = paymentService;
}
public async Task Execute(IJobExecutionContext context)
{
var message = await Run();
var logModel = await ExecuteJob(context, async () => await Run(), message);
await RecordTaskLog(context, logModel);
}
public async Task<string> Run()
{
await Task.Delay(1);
//TODO 业务逻辑
var waitCancelList = await _OrderTaskService.GetListAsync(s => s.PayStatus == 1 && s.CancelStatus == 1);
if (waitCancelList.Count > 0)
{
var taskList = new List<string>();
foreach (var item in waitCancelList)
{
try
{
if (item.EndTime < DateTime.Now)
{
//logger.Info("推送结果:" + res);
Pay pay = new Pay(_httpClient);
var customer = await _CustomerService.GetFirstAsync(s => s.CustomerGuid == item.CustomerGuid);
var order = await _OrderService.GetFirstAsync(s => s.OrderGuid == item.OrderGuid);
var payment = await _PaymentService.GetFirstAsync(s => s.PaymentGuid == order.PaymentGuid);
var res = await pay.CloseOrder(payment.PaymentNumber);
if (res == null)
throw new CustomException("订单关闭失败!");
else
{
var respones = await _PaymentService.UpdateAsync(f => new Payment
{
PaymentStatus = 3,
Update_time = DateTime.Now
}, f => f.PaymentNumber == payment.PaymentNumber);
}
// 修改订单状态
await _OrderService.UpdateAsync(f => new Order
{
OrderStatus = 2
}, s => s.OrderGuid == item.OrderGuid);
// 修改订单取消任务状态
await _OrderTaskService.UpdateAsync(f => new OrderTask
{
CancelStatus = 2
}, s => s.OrderGuid == item.OrderGuid);
taskList.Add("订单号:" + order.OrderNumber + " " + customer.CustomerNickname + "用户的订单已取消");
}
}
catch (Exception ex)
{
return ex.ToString();
}
}
return taskList.ToJson().ToString();
}
else
{
return "没有需要执行的任务";
}
//return "执行成功!";
#region -- DPBMARK MP
//可选参数(需要和公众号模板消息匹配):
//var templateData = new
//{
// first = new Senparc.Weixin.MP.AdvancedAPIs.TemplateMessage.TemplateDataItem("预约健身开始提醒"),
// keyword1 = new Senparc.Weixin.MP.AdvancedAPIs.TemplateMessage.TemplateDataItem("测试门店"),
// keyword2 = new Senparc.Weixin.MP.AdvancedAPIs.TemplateMessage.TemplateDataItem("佛山市顺德区xxx健身"),
// keyword3 = new Senparc.Weixin.MP.AdvancedAPIs.TemplateMessage.TemplateDataItem(SystemTime.Now.ToString("yyyy年MM月dd日 HH:mm")),
// keyword4 = new Senparc.Weixin.MP.AdvancedAPIs.TemplateMessage.TemplateDataItem("1小时"),
// keyword5 = new Senparc.Weixin.MP.AdvancedAPIs.TemplateMessage.TemplateDataItem("还有1个小时开始健身请熟知"),
// remark = new Senparc.Weixin.MP.AdvancedAPIs.TemplateMessage.TemplateDataItem("您的 OpenId" + openId),
//};
#endregion DPBMARK_END
//System.Console.WriteLine("job test");
}
/// <summary>
/// 记录到日志
/// </summary>
/// <param name="context"></param>
/// <param name="logModel"></param>
public async Task RecordTaskLog(IJobExecutionContext context, SysTasksLog logModel)
{
//可以直接获取 JobDetail 的值
IJobDetail job = context.JobDetail;
logModel.InvokeTarget = job.JobType.FullName;
logModel = await SysTasksLogService.AddTaskLog(job.Key.Name, logModel);
//成功后执行次数+1
if (logModel.Status == "0")
{
await SysTasksQzService.UpdateAsync(f => new SysTasksQz()
{
RunTimes = f.RunTimes + 1,
LastRunTime = DateTime.Now
}, f => f.ID.ToString() == job.Key.Name);
}
logger.Info($"执行任务【{job.Key.Name}|{logModel.JobName}】结果={logModel.JobMessage}");
}
}
}