using iBemsDataService.Model; using Quartz; using System; using System.Collections.Generic; using System.Linq; using System.Transactions; using System.Web; namespace iBemsDataService.Controllers.Fms.WorkManagement.ScheduledTask { public class WorkExecutionPlanJob : IJob { private iBemsEntities db = new iBemsEntities(); public void Execute(IJobExecutionContext context) { var today = DateTime.Now.Date; var time = today.AddDays(-31); //return; using (var transaction = new TransactionScope()) { // 내일 혹은 작업예정일이고 오늘 생성된 실행계획(작업요청)이 없다면 // 실행계획을 생성해야 하는 기초계획 임 var query = from s in db.FmsWorkSchedule where s.IsUse == true //&& (s.WorkDueDate == tomorrow || s.WorkDueDate == today) && (s.WorkDueDate >= time) //&& (s.WorkDueDate >= today) && db.FmsWorkRequest .Where(x => x.SiteId == s.SiteId && x.WorkScheduleId == s.WorkScheduleId //&& x.RequestDate == today && x.StartWorkDate == s.WorkDueDate ) .Any() == false select s; foreach (var s in query) { var workRequest = new FmsWorkRequest { SiteId = s.SiteId, WorkScheduleId = s.WorkScheduleId, WorkTypeId = s.WorkTypeId, BusinessFieldId = s.BusinessFieldId, WorkProgressId = (short)WorkProgress.WORK_PLAN, // chl 수정(20161021) //WorkProgressId = s.IsAutoOrder ? (short)WorkProgress.WORK_STANDBY : (short)WorkProgress.WORK_PLAN, Title = s.Name, Content = s.Content, RequestDate = today, StartWorkDate = s.WorkDueDate, RequestUserId = s.UpdateUserId, InspectionAgencyId = s.InspectionAgencyId }; workRequest = db.FmsWorkRequest.Add(workRequest); db.SaveChanges(); // 기초계획에 설정된 시설들도 옮겨준다. var facilitiesQuery = from f in db.FmsWorkScheduleToFacility where f.SiteId == s.SiteId && f.WorkScheduleId == s.WorkScheduleId select f; var facilities = facilitiesQuery.ToList(); foreach (var f in facilities) { db.FmsWorkRequestToFacility.Add(new FmsWorkRequestToFacility { SiteId = f.SiteId, WorkRequestId = workRequest.WorkRequestId, FacilityCode = f.FacilityCode }); } db.SaveChanges(); // chl 수정(20161021) // 작업지시가 자동이면 작업지시도 생성 //if (s.IsAutoOrder) //{ // InsertWorkOrder(workRequest, facilities); //} } // 법정검사 및 정기점검의 작업에 자동지시로 되어 있으면 작업 예정일이 넘었는데도 실행계획에 있으면 작업예정일 0시에 자동으로 작업목록으로 넘어간다 var query_auto = from s in db.FmsWorkSchedule join w in db.FmsWorkRequest on s.WorkScheduleId equals w.WorkScheduleId where s.IsUse == true && s.IsAutoOrder == true && (w.StartWorkDate <= today) && db.FmsWorkOrder .Where(x => x.SiteId == w.SiteId && x.WorkRequestId == w.WorkRequestId && x.Title == w.Title ) .Any() == false select w; foreach (var w in query_auto) { // FmsWorkRequest 테이블 WorkProgressId 업데이트 var update_WorkProgressId = (from d in db.FmsWorkRequest where d.WorkRequestId == w.WorkRequestId select d).Single(); update_WorkProgressId.WorkProgressId = (short)WorkProgress.WORK_STANDBY; db.SaveChanges(); var workRequest = new FmsWorkRequest { SiteId = w.SiteId, WorkRequestId = w.WorkRequestId, BusinessFieldId = w.BusinessFieldId, Title = w.Title, RequestUserId = w.RequestUserId, StartWorkDate = w.StartWorkDate }; // 기초계획에 설정된 시설들도 옮겨준다. var facilitiesQuery = from f in db.FmsWorkScheduleToFacility where f.SiteId == w.SiteId && f.WorkScheduleId == w.WorkScheduleId select f; var facilities = facilitiesQuery.ToList(); InsertWorkOrder(workRequest, facilities); } transaction.Complete(); } } private void InsertWorkOrder(FmsWorkRequest workRequest, List facilities) { var workOrder = new FmsWorkOrder { SiteId = workRequest.SiteId, WorkRequestId = workRequest.WorkRequestId, BusinessFieldId = workRequest.BusinessFieldId, OrderUserId = workRequest.RequestUserId, OrderDate = DateTime.Now.Date, Title = workRequest.Title, Content = workRequest.Content, StartWorkDate = workRequest.StartWorkDate }; workOrder = db.FmsWorkOrder.Add(workOrder); foreach (var f in facilities) { db.FmsWorkOrderToFacility.Add(new FmsWorkOrderToFacility { SiteId = f.SiteId, WorkRequestId = workOrder.WorkRequestId, FacilityCode = f.FacilityCode }); } //workRequest.WorkProgressId = (short)WorkProgress.WORK_STANDBY; db.SaveChanges(); } } }