public void Execute(DateTime nextRunFrom, DateTime nextRunTo) { ICommonHandler commonHandler = ServiceContainer.GetService <ICommonHandler>() as ICommonHandler; ErrorLogger.WriteErrorLog(DateTime.Now, new ApplicationException(string.Format("Executing jobs for the time between {0} and {1}", nextRunFrom.ToString("yyyy/MM/dd HH:mm:ss"), nextRunTo.ToString("yyyy/MM/dd HH:mm:ss")))); //sendMail(); //処理対象データがあれば処理を実行 try { LoadBatchQueue(nextRunFrom, nextRunTo); while (!IsFinished) { var remainings = commonHandler.GetTbs_BatchQueue(null, nextRunFrom, nextRunTo).Where(q => q.EndTime == null).ToList(); ErrorLogger.WriteErrorLog(DateTime.Now, new ApplicationException("残り件数:" + remainings.Count())); ErrorLogger.WriteErrorLog(DateTime.Now, new ApplicationException(remainings.Count.ToString())); if (remainings.Count() > 0) { Thread.Sleep(10000); } else { IsFinished = true; } } } catch (Exception ex) { ErrorLogger.WriteErrorLog(DateTime.Now, ex); } finally { ErrorLogger.WriteErrorLog(DateTime.Now, new ApplicationException("Finished Executing")); } // 処理対象データの生成(常時1日後のデータを作成する) DateTime nextSettingFrom = nextRunFrom.AddDays(1); DateTime nextSettingTo = nextRunTo.AddDays(1); var settings = commonHandler.GetTbs_BatchQueue(null, nextSettingFrom, nextSettingTo).ToList(); if (settings.Count < 1) { try { new ApplicationDataservice().GenerateBatchQueue(); } catch (Exception ex) { ErrorLogger.WriteErrorLog(DateTime.Now, new ApplicationException("バッチキューのデータ生成に失敗しました。", ex)); } } }
private void LoadBatchQueue(DateTime nextRunFrom, DateTime nextRunTo) { ICommonHandler commonHandler = ServiceContainer.GetService <ICommonHandler>() as ICommonHandler; var lstAllQueue = commonHandler.GetTbs_BatchQueue(null, nextRunFrom, nextRunTo).OrderBy(q => q.NextRun).ThenBy(q => q.RunId).ToList(); foreach (var queueProxy in lstAllQueue) { var queue = CommonUtil.CloneObject <tbs_BatchQueue, tbs_BatchQueue>(queueProxy); JobDetail jobDetail = SequentialProcessJob.CreateJobDetail(queue, new QueueStatusUpdate(this.QueueStatusUpdate)); var scheduledQueue = _lstBatchQueue.Where(q => q.RunId == queue.RunId).FirstOrDefault(); if (scheduledQueue != null) { _lstBatchQueue.Remove(scheduledQueue); } if (queue.Status == "W") { Trigger trg = new SimpleTrigger(jobDetail.Name, null, queue.NextRun.ToUniversalTime(), null, 0, TimeSpan.Zero); if (_scheduler.GetJobDetail(jobDetail.Name, jobDetail.Group) != null) { _scheduler.DeleteJob(jobDetail.Name, jobDetail.Group); } _scheduler.ScheduleJob(jobDetail, trg); } _lstBatchQueue.Add(queue); } var lstCompleted = _lstBatchQueue.Where(q => q.Status == "C").ToList(); foreach (var queue in lstCompleted) { _lstBatchQueue.Remove(queue); } bsBatchQueue.ResetBindings(false); this.LastLoadedNextRun = nextRunTo; timLoadBatchQueue.Interval = (int)(nextRunTo.AddMinutes(-5) - DateTime.Now).TotalMilliseconds; timLoadBatchQueue.Enabled = true; }