public async Task <JsonResult> RecordExecutedJob(RecordExecutedJobViewModel addJobViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(Json(ResponseDataFactory.CreateAjaxResponseData("-10001", "添加失败", "输入参数错误:" + ModelState.Values.Where(item => item.Errors.Count == 1).Aggregate(string.Empty, (current, item) => current + (item.Errors[0].ErrorMessage + ";   ")))));
            }

            var originalJob =
                _customerJobInfoRepository.LoadCustomerInfo(x => x.JobName == addJobViewModel.OriginalJobName);

            var jobInfo = new customer_quartzjobinfo
            {
                CreateTime       = DateTime.Now,
                Cron             = originalJob.Cron,
                Description      = addJobViewModel.JobDescription,
                JobGroupName     = addJobViewModel.JobGroupName,
                JobName          = addJobViewModel.JobName,
                TriggerState     = 2,
                TriggerName      = addJobViewModel.TriggerName,
                TriggerGroupName = addJobViewModel.TriggerGroupName,
                DLLName          = ConfigurationManager.AppSettings["dllName"],
                FullJobName      = ConfigurationManager.AppSettings["FullJobName"],
                RequestUrl       = originalJob.RequestUrl,
                Deleted          = false,
                Cycle            = originalJob.Cycle,
                TriggerType      = originalJob.TriggerType,
                RepeatCount      = originalJob.RepeatCount
            };
            var jobId = _customerJobInfoRepository.AddCustomerJobInfo(jobInfo);

            return(Json(ResponseDataFactory.CreateAjaxResponseData("1", "操作成功", jobId)));
        }
Example #2
0
        public int AddCustomerJobInfo(customer_quartzjobinfo jobInfo)
        {
            var customerJobInfoModel = _dbContext.customer_quartzjobinfo.Add(jobInfo);

            _dbContext.SaveChanges();
            return(customerJobInfoModel.Id);
        }
        /// <summary>
        /// 暂停任务
        /// </summary>
        /// <param name="jobInfo">任务信息</param>
        /// <returns></returns>
        public bool PauseJob(customer_quartzjobinfo jobInfo)
        {
            var jobKey = _createJobKey(jobInfo.JobName, jobInfo.JobGroupName);

            _scheduler.PauseJob(jobKey);
            return(true);
        }
        public bool ResumeJob(customer_quartzjobinfo jobInfo)
        {
            var jobKey = KeyManager.CreateJobKey(jobInfo.JobName, jobInfo.JobGroupName);

            Scheduler.ResumeJob(jobKey);
            return(true);
        }
        public override bool ModifyJobCron(customer_quartzjobinfo jobInfo)
        {
            var scheduleBuilder = CronScheduleBuilder.CronSchedule(jobInfo.Cron);
            var triggerKey      = KeyManager.CreateTriggerKey(jobInfo.TriggerName, jobInfo.TriggerGroupName);
            var trigger         = TriggerBuilder.Create().StartAt(DateTimeOffset.Now.AddYears(-1)).WithIdentity(triggerKey).WithSchedule(scheduleBuilder.WithMisfireHandlingInstructionDoNothing()).Build();

            Scheduler.RescheduleJob(triggerKey, trigger);
            return(true);
        }
        public bool DeleteJob(customer_quartzjobinfo jobInfo)
        {
            var jobKey     = KeyManager.CreateJobKey(jobInfo.JobName, jobInfo.JobGroupName);
            var triggerKey = KeyManager.CreateTriggerKey(jobInfo.TriggerName, jobInfo.TriggerGroupName);

            Scheduler.PauseTrigger(triggerKey);
            Scheduler.UnscheduleJob(triggerKey);
            Scheduler.DeleteJob(jobKey);
            return(true);
        }
Example #7
0
 public int UpdateCustomerJobInfo(customer_quartzjobinfo customerJobInfoModel, params string[] paramsFieldNames)
 {
     _dbContext.customer_quartzjobinfo.Attach(customerJobInfoModel);
     foreach (var fieldName in paramsFieldNames)
     {
         _dbContext.Entry(customerJobInfoModel).Property(fieldName).IsModified = true;
     }
     _dbContext.SaveChanges();
     return(customerJobInfoModel.Id);
 }
        public override bool ModifyJobCron(customer_quartzjobinfo jobInfo)
        {
            var      triggerKey = KeyManager.CreateTriggerKey(jobInfo.TriggerName, jobInfo.TriggerGroupName);
            ITrigger trigger    = TriggerBuilder.Create().StartAt(DateTimeOffset.Now)
                                  .WithIdentity(jobInfo.TriggerName, jobInfo.TriggerGroupName)
                                  .WithSimpleSchedule(x => x.WithIntervalInSeconds(jobInfo.Cycle.HasValue ? jobInfo.Cycle.Value : 1).WithRepeatCount(jobInfo.RepeatCount.Value - 1))
                                  .Build();

            Scheduler.RescheduleJob(triggerKey, trigger);
            return(true);
        }
        /// <summary>
        /// 更改任务运行周期
        /// </summary>
        /// <param name="jobInfo">任务信息</param>
        /// <returns></returns>
        public bool ModifyJobCron(customer_quartzjobinfo jobInfo)
        {
            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.CronSchedule(jobInfo.Cron);
            var      triggerKey = _createTriggerKey(jobInfo.TriggerName, jobInfo.TriggerGroupName);
            ITrigger trigger    = TriggerBuilder.Create().StartNow()
                                  .WithIdentity(jobInfo.TriggerName, jobInfo.TriggerGroupName)
                                  .WithSchedule(scheduleBuilder.WithMisfireHandlingInstructionDoNothing())
                                  .Build();

            _scheduler.RescheduleJob(triggerKey, trigger);
            return(true);
        }
Example #10
0
        public async Task <int> UpdateCustomerJobInfo(customer_quartzjobinfo customerJobInfoModel)
        {
            List <string> updateFieldNames = new List <string>();

            ReflectObjectFields(customerJobInfoModel, updateFieldNames);

            //_dbContext.Entry(customerJobInfoModel).State = System.Data.Entity.EntityState.Detached;
            _dbContext.customer_quartzjobinfo.Attach(customerJobInfoModel);
            foreach (var fieldName in updateFieldNames)
            {
                _dbContext.Entry(customerJobInfoModel).Property(fieldName).IsModified = true;
            }
            await _dbContext.SaveChangesAsync();

            return(customerJobInfoModel.Id);
        }
        public override bool RunJob(customer_quartzjobinfo jobInfo)
        {
            var jobKey = KeyManager.CreateJobKey(jobInfo.JobName, jobInfo.JobGroupName);

            if (!Scheduler.CheckExists(jobKey).Result)
            {
                IJobDetail          jobDetail           = JobBuilder.Create <JobItem>().WithIdentity(jobKey).UsingJobData(KeyManager.CreateJobDataMap("requestUrl", jobInfo.RequestUrl)).Build();
                CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.CronSchedule(jobInfo.Cron);
                ITrigger            trigger             = TriggerBuilder.Create().StartAt(DateTimeOffset.Now.AddYears(-1))
                                                          .WithIdentity(jobInfo.TriggerName, jobInfo.TriggerGroupName)
                                                          .ForJob(jobKey)
                                                          .WithSchedule(cronScheduleBuilder.WithMisfireHandlingInstructionDoNothing())
                                                          .Build();
                Scheduler.ScheduleJob(jobDetail, trigger);
            }
            return(true);
        }
        public override bool RunJob(customer_quartzjobinfo jobInfo)
        {
            var jobKey = KeyManager.CreateJobKey(jobInfo.JobName, jobInfo.JobGroupName);

            if (!Scheduler.CheckExists(jobKey).Result)
            {
                var job = JobBuilder.Create <JobItem>()
                          .WithIdentity(jobKey)
                          .UsingJobData(KeyManager.CreateJobDataMap("requestUrl", jobInfo.RequestUrl))
                          .Build();
                var trigger = TriggerBuilder.Create().StartAt(DateTimeOffset.Now)
                              .WithIdentity(jobInfo.TriggerName, jobInfo.TriggerGroupName)
                              .ForJob(jobKey)
                              .WithSimpleSchedule(x => x.WithIntervalInSeconds(jobInfo.Cycle.HasValue ? jobInfo.Cycle.Value : 1).WithRepeatCount(jobInfo.RepeatCount.Value - 1))
                              .Build();
                Scheduler.ScheduleJob(job, trigger);
            }
            return(true);
        }
Example #13
0
        public async Task <int> UpdateCustomerJobInfo(customer_quartzjobinfo customerJobInfoModel)
        {
            List <string> updateFieldNames = new List <string>();

            ReflectObjectFields(customerJobInfoModel, updateFieldNames);

            //_dbContext.Entry(customerJobInfoModel).State = System.Data.Entity.EntityState.Detached;
            _dbContext.customer_quartzjobinfo.Attach(customerJobInfoModel);
            foreach (var fieldName in updateFieldNames)
            {
                _dbContext.Entry(customerJobInfoModel).Property(fieldName).IsModified = true;
            }
            //RecordExecutedJob
            //if (customerJobInfoModel.TriggerState == 6)
            //{
            //    var jobDetail = LoadCustomerInfo(x => x.Id == customerJobInfoModel.Id);
            //    var jobInfo = new customer_quartzjobinfo
            //    {
            //        CreateTime = DateTime.Now,
            //        Cron = jobDetail.Cron,
            //        Description = jobDetail.Description,
            //        JobGroupName = jobDetail.JobGroupName,
            //        JobName = jobDetail.JobName+jobDetail.Id,
            //        TriggerState = 2,
            //        TriggerName = jobDetail.TriggerName,
            //        TriggerGroupName = jobDetail.TriggerGroupName,
            //        DLLName = ConfigurationManager.AppSettings["dllName"],
            //        FullJobName = ConfigurationManager.AppSettings["FullJobName"],
            //        RequestUrl = jobDetail.RequestUrl,
            //        Deleted = false,
            //        Cycle = jobDetail.Cycle,
            //        TriggerType = jobDetail.TriggerType,
            //        RepeatCount = jobDetail.RepeatCount

            //    };
            //    AddCustomerJobInfo(jobDetail);
            //}
            await _dbContext.SaveChangesAsync();

            return(customerJobInfoModel.Id);
        }
        /// <summary>
        /// 运行任务
        /// </summary>
        /// <param name="jobInfo">任务信息</param>
        /// <returns></returns>
        public bool RunJob(customer_quartzjobinfo jobInfo)
        {
            Assembly assembly = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + $"bin/{jobInfo.DLLName}");
            var      type     = assembly.GetType(jobInfo.FullJobName);
            JobKey   jobKey   = _createJobKey(jobInfo.JobName, jobInfo.JobGroupName);

            if (!_scheduler.CheckExists(jobKey))
            {
                IJobDetail job = JobBuilder.Create(type)
                                 .WithIdentity(jobKey)
                                 .UsingJobData(_createJobDataMap("jobId", jobInfo.Id))
                                 .UsingJobData(_createJobDataMap("requestUrl", jobInfo.RequestUrl))//添加此任务请求地址附带到Context上下文中
                                 .Build();

                CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.CronSchedule(jobInfo.Cron);
                ITrigger            trigger         = TriggerBuilder.Create().StartNow()//StartAt(DateTime.SpecifyKind(jobInfo.JobStartTime, DateTimeKind.Local))
                                                      .WithIdentity(jobInfo.TriggerName, jobInfo.TriggerGroupName)
                                                      .ForJob(jobKey)
                                                      .WithSchedule(scheduleBuilder.WithMisfireHandlingInstructionDoNothing())
                                                      .Build();
                #region Quartz 任务miss之后三种操作

                /*
                 * withMisfireHandlingInstructionDoNothing
                 * ——不触发立即执行
                 * ——等待下次Cron触发频率到达时刻开始按照Cron频率依次执行
                 *
                 * withMisfireHandlingInstructionIgnoreMisfires
                 * ——以错过的第一个频率时间立刻开始执行
                 * ——重做错过的所有频率周期后
                 * ——当下一次触发频率发生时间大于当前时间后,再按照正常的Cron频率依次执行
                 *
                 * withMisfireHandlingInstructionFireAndProceed
                 * ——以当前时间为触发频率立刻触发一次执行
                 * ——然后按照Cron频率依次执行*/
                #endregion

                _scheduler.ScheduleJob(job, trigger);
            }
            return(true);
        }
        public override bool RunJob(customer_quartzjobinfo jobInfo)
        {
            //Assembly assembly = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + $"bin/{jobInfo.DLLName}");
            //var type = assembly.GetType(jobInfo.FullJobName);
            JobKey jobKey = KeyManager.CreateJobKey(jobInfo.JobName, jobInfo.JobGroupName);

            if (!Scheduler.CheckExists(jobKey))
            {
                IJobDetail job = JobBuilder.Create <JobItem>()
                                 .WithIdentity(jobKey)
                                 .UsingJobData(KeyManager.CreateJobDataMap("requestUrl", jobInfo.RequestUrl))
                                 .Build();
                ITrigger trigger = TriggerBuilder.Create().StartAt(DateTimeOffset.Now)
                                   .WithIdentity(jobInfo.TriggerName, jobInfo.TriggerGroupName)
                                   .ForJob(jobKey)
                                   .WithSimpleSchedule(x => x.WithIntervalInSeconds(jobInfo.Cycle.HasValue? jobInfo.Cycle.Value:1).WithRepeatCount(jobInfo.RepeatCount.Value - 1))
                                   .Build();
                Scheduler.ScheduleJob(job, trigger);
            }
            return(true);
        }
Example #16
0
        public override bool RunJob(customer_quartzjobinfo jobInfo)
        {
            //Assembly assembly = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + $"bin/{jobInfo.DLLName}");
            //var type = assembly.GetType(jobInfo.FullJobName);
            JobKey jobKey = KeyManager.CreateJobKey(jobInfo.JobName, jobInfo.JobGroupName);

            if (!Scheduler.CheckExists(jobKey))
            {
                IJobDetail job = JobBuilder.Create <JobItem>()
                                 .WithIdentity(jobKey)
                                 .UsingJobData(KeyManager.CreateJobDataMap("requestUrl", jobInfo.RequestUrl))
                                 .Build();
                CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.CronSchedule(jobInfo.Cron);
                ITrigger            trigger         = TriggerBuilder.Create().StartAt(DateTimeOffset.Now.AddYears(-1))
                                                      .WithIdentity(jobInfo.TriggerName, jobInfo.TriggerGroupName)
                                                      .ForJob(jobKey)
                                                      .WithSchedule(scheduleBuilder.WithMisfireHandlingInstructionDoNothing())
                                                      .Build();
                Scheduler.ScheduleJob(job, trigger);
            }
            return(true);
        }
Example #17
0
        public int AddCustomerJobInfo(string jobName, string jobGroupName, string triggerName, string triggerGroupName, string cron, string jobDescription, string requestUrl, int?cycle, int?repeatCount, string triggerType)
        {
            var jobInfo = new customer_quartzjobinfo
            {
                CreateTime       = DateTime.Now,
                Cron             = cron,
                Description      = jobDescription,
                JobGroupName     = jobGroupName,
                JobName          = jobName,
                TriggerState     = -1,
                TriggerName      = triggerName,
                TriggerGroupName = triggerGroupName,
                DLLName          = ConfigurationManager.AppSettings["dllName"],
                FullJobName      = ConfigurationManager.AppSettings["FullJobName"],
                RequestUrl       = requestUrl,
                Deleted          = false,
                Cycle            = cycle,
                TriggerType      = triggerType,
                RepeatCount      = repeatCount
            };

            return(AddCustomerJobInfo(jobInfo));
        }
 public abstract bool RunJob(customer_quartzjobinfo jobInfo);
 public abstract bool ModifyJobCron(customer_quartzjobinfo jobInfo);
Example #20
0
 public int UpdateCustomerJobInfo(customer_quartzjobinfo customerJobInfoModel)
 {
     _dbContext.SaveChanges();
     return(customerJobInfoModel.Id);
 }