123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- using Quartz;
- using Quartz.Impl.Triggers;
- using System;
- using System.Threading.Tasks;
- using YiSha.Business.AutoJob.IBusiness;
- using YiSha.Business.AutoJob.IService;
- using YiSha.Entity.SystemManage;
- using YiSha.Enum;
- using YiSha.IBusiness.SystemManage;
- using YiSha.Util;
- using YiSha.Util.Extension;
- using YiSha.Util.Model;
- namespace YiSha.Business.AutoJob.Service
- {
- public class JobExecuteService : IJobExecuteService
- {
- private IAutoJobBLL _autoJobBLL;
- private IAutoJobLogBLL _autoJobLogBLL;
- private IJobSchedulerBusiness _jobSchedulerBusiness;
- private IDatabasesBackupJobBusiness _databasesBackupJobBusiness;
- public JobExecuteService(IAutoJobBLL autoJobBLL, IAutoJobLogBLL autoJobLogBLL, IJobSchedulerBusiness jobSchedulerBusiness, IDatabasesBackupJobBusiness databasesBackupJobBusiness)
- {
- _autoJobBLL = autoJobBLL;
- _autoJobLogBLL = autoJobLogBLL;
- _jobSchedulerBusiness = jobSchedulerBusiness;
- _databasesBackupJobBusiness = databasesBackupJobBusiness;
- }
- public Task Execute(IJobExecutionContext context)
- {
- return Task.Run(async () =>
- {
- TData obj = new TData();
- int jobId = 0;
- JobDataMap jobData = null;
- AutoJobEntity dbJobEntity = null;
- try
- {
- jobData = context.JobDetail.JobDataMap;
- jobId = jobData["Id"].ParseToInt();
- // 获取数据库中的任务
- dbJobEntity = (await _autoJobBLL.GetEntityPartial(jobId)).Data;
- if (dbJobEntity != null)
- {
- if (dbJobEntity.JobStatus == StatusEnum.Yes.ParseToInt())
- {
- CronTriggerImpl trigger = context.Trigger as CronTriggerImpl;
- if (trigger != null)
- {
- if (trigger.CronExpressionString != dbJobEntity.CronExpression)
- {
- // 更新任务周期
- trigger.CronExpressionString = dbJobEntity.CronExpression;
- await _jobSchedulerBusiness.GetScheduler().RescheduleJob(trigger.Key, trigger);
- }
- #region 执行任务
- switch (context.JobDetail.Key.Name)
- {
- case "数据库备份":
- obj = await _databasesBackupJobBusiness.Start(DBConnectTypeEnum.SystemDB);
- break;
- }
- #endregion
- }
- }
- }
- }
- catch (Exception ex)
- {
- obj.Message = ex.GetOriginalException().Message;
- LogHelper.Error(ex);
- }
- try
- {
- if (dbJobEntity != null)
- {
- if (dbJobEntity.JobStatus == StatusEnum.Yes.ParseToInt())
- {
- #region 更新下次运行时间
- await _autoJobBLL.SaveFormPartial(new AutoJobEntity
- {
- Id = dbJobEntity.Id,
- NextStartTime = context.NextFireTimeUtc.Value.DateTime.AddHours(8)
- });
- #endregion
- #region 记录执行状态
- await _autoJobLogBLL.SaveFormPartial(new AutoJobLogEntity
- {
- JobGroupName = context.JobDetail.Key.Group,
- JobName = context.JobDetail.Key.Name,
- LogStatus = obj.Tag,
- Remark = obj.Message
- });
- #endregion
- }
- }
- }
- catch (Exception ex)
- {
- obj.Message = ex.GetOriginalException().Message;
- LogHelper.Error(ex);
- }
- });
- }
- }
- }
|