Skip to content

新增定时任务

  1. Jobs文件夹下面新增一个以Job结尾的文件,如TestJob.cs,内容格式如下:
cs
using Mom.Core.Application.Dto;
using Mom.Core.Application.Service.IService;
using Mom.Core.Infrastructure;
using Quartz;

namespace Mom.Core.Job
{
    [DisallowConcurrentExecution]
    public class SyncSapWorkOrderJob : JobBase, IJob
    {
        private readonly ISysJobService _sysJobService;

        public SyncSapWorkOrderJob(ISysJobService sysJobService)
        {
            _sysJobService = sysJobService;
        }

        public async Task Execute(IJobExecutionContext context)
        {
            await base.ExecuteJobAsync(context, async (now) => await Run(context), SuccessCallback);
        }

        /// <summary>
        /// 测试同步Sap工单
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        private async Task Run(IJobExecutionContext context)
        {
            var jobKey = context.JobDetail.Key;
            var jobId = jobKey.Name.ObjToInt();
            JobDataMap data = context.JobDetail.JobDataMap;

            SapWorkOrderParam input = new SapWorkOrderParam();
            var sapResult = await SapHelper.InvokeRfcFuncAsync<Sap_WorkOrder_Result>("ZFATP_MES_003", input, AddLog);
            // 业务处理
            // ...
        }
    }
}
using Mom.Core.Application.Dto;
using Mom.Core.Application.Service.IService;
using Mom.Core.Infrastructure;
using Quartz;

namespace Mom.Core.Job
{
    [DisallowConcurrentExecution]
    public class SyncSapWorkOrderJob : JobBase, IJob
    {
        private readonly ISysJobService _sysJobService;

        public SyncSapWorkOrderJob(ISysJobService sysJobService)
        {
            _sysJobService = sysJobService;
        }

        public async Task Execute(IJobExecutionContext context)
        {
            await base.ExecuteJobAsync(context, async (now) => await Run(context), SuccessCallback);
        }

        /// <summary>
        /// 测试同步Sap工单
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        private async Task Run(IJobExecutionContext context)
        {
            var jobKey = context.JobDetail.Key;
            var jobId = jobKey.Name.ObjToInt();
            JobDataMap data = context.JobDetail.JobDataMap;

            SapWorkOrderParam input = new SapWorkOrderParam();
            var sapResult = await SapHelper.InvokeRfcFuncAsync<Sap_WorkOrder_Result>("ZFATP_MES_003", input, AddLog);
            // 业务处理
            // ...
        }
    }
}

注意点:

  • 命名空间必须为Mom.Core.Job, 否则不会执行
  • DisallowConcurrentExecution:防止并发执行
  • JobBase:必须继承JobBase类,实现ExecuteJobAsync方法,内部包含了日志记录、异常处理、执行时间记录等
  • SuccessCallback:执行成功后的回调方法,可以在这里更新下次执行参数等
  • AddLog:日志记录方法,可以在这里记录执行日志

其他信息

cs
var jobKey = context.JobDetail.Key;
var jobId = jobKey.Name.ObjToInt(); // 获取定时任务表的id
JobDataMap data = context.JobDetail.JobDataMap; // 获取本次任务执行参数, 也可以通过数据库配置,获取传递过来的参数
var jobKey = context.JobDetail.Key;
var jobId = jobKey.Name.ObjToInt(); // 获取定时任务表的id
JobDataMap data = context.JobDetail.JobDataMap; // 获取本次任务执行参数, 也可以通过数据库配置,获取传递过来的参数