コード例 #1
0
ファイル: JobHandler.cs プロジェクト: EliGosK/SECOM_AJIS_INDO
        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));
                }
            }
        }
コード例 #2
0
        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;
        }