174 lines
7.5 KiB
C#
174 lines
7.5 KiB
C#
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}");
|
||
}
|
||
}
|
||
}
|