using ARW.Common; using ARW.Model.Models.Business.SubscribeTasks; using ARW.Model.System; using ARW.Service.Business.IBusinessService.Marketing.CouponManage.Coupons; using ARW.Service.Business.IBusinessService.Marketing.CouponManage.CustomerCoupons; 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(CouponTask_Job), ServiceLifetime = LifeTime.Scoped)] public class CouponTask_Job : JobBase, IJob { private readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); private readonly ISysTasksLogService SysTasksLogService; private readonly ISysTasksQzService SysTasksQzService; private readonly ISubscribeTaskService _SubscribeTaskService; private readonly ICouponService _CouponService; private readonly ICustomerCouponService _CustomerCouponService; public CouponTask_Job(ISysTasksLogService sysTasksLogService, ISysTasksQzService sysTasksQzService, ISubscribeTaskService subscribeTaskService, ICouponService couponService, ICustomerCouponService customerCouponService) { SysTasksLogService = sysTasksLogService; SysTasksQzService = sysTasksQzService; _SubscribeTaskService = subscribeTaskService; _CouponService = couponService; _CustomerCouponService = customerCouponService; } 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 waiCancelList = await _CustomerCouponService.GetListAsync(s => s.CustomerCouponIsExpired == 1 && s.CustomerCouponIsUsed == 1 && s.IsDelete == false); if (waiCancelList.Count > 0) { var taskList = new List(); foreach (var item in waiCancelList) { try { // 判断类型 var coupon = await _CouponService.GetFirstAsync(s => s.CouponGuid == item.CouponGuid); if(coupon != null) { // 领券后生效 if (coupon.CouponExpireType == 1) { var endTime = item.Create_time.AddDays(coupon.CouponEffectiveDays); if (endTime < DateTime.Now) { item.CustomerCouponIsExpired = 2; await _CustomerCouponService.UpdateAsync(item); } } // 固定时间 if (coupon.CouponExpireType == 2) { var endTime = coupon.CouponFixedEndTime; if (endTime < DateTime.Now) { item.CustomerCouponIsExpired = 2; await _CustomerCouponService.UpdateAsync(item); } } } } 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}"); } } }