using ARW.Common; using ARW.Model.Models.Business.OrderManage.Orders; using ARW.Model.Models.Business.OrderTasks; 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.SubscribeTasks; using ARW.Service.System.IService; using Infrastructure; using Infrastructure.Attribute; using Infrastructure.WeChat.SubScribe; using Quartz; using Senparc.CO2NET.Extensions; using Senparc.Weixin.Entities.TemplateMessage; using Senparc.Weixin.WxOpen.AdvancedAPIs.WxApp.WxAppJson; using SqlSugar; using System; using System.Collections.Generic; using System.Threading.Tasks; using SystemTime = System.SystemTime; namespace ARW.Tasks.TaskScheduler.Business { /// /// 订单取消任务 /// [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; public OrderTask_Job(ISysTasksLogService sysTasksLogService, ISysTasksQzService sysTasksQzService, IOrderTaskService orderTaskService, IOrderService orderService, ICustomerService customerService) { SysTasksLogService = sysTasksLogService; SysTasksQzService = sysTasksQzService; _OrderTaskService = orderTaskService; _OrderService = orderService; _CustomerService = customerService; } 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 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(); foreach (var item in waitCancelList) { try { if (item.EndTime < DateTime.Now) { //logger.Info("推送结果:" + res); // 修改订单状态 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); var customer = await _CustomerService.GetFirstAsync(s => s.CustomerGuid == item.CustomerGuid); var order = await _OrderService.GetFirstAsync(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"); } /// /// 记录到日志 /// /// /// 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}"); } } }