shop_template_api/ARW.Tasks/TaskScheduler/Business/CouponTask_Job.cs
2023-10-25 17:11:58 +08:00

151 lines
6.4 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 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
{
/// <summary>
/// 优惠券过期任务
/// </summary>
[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<string> 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<string>();
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");
}
/// <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}");
}
}
}