8957377f5a2aa4d386b3a74934883f7713411f2f.svn-base 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. using iBemsDataService.Model;
  2. using Quartz;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Transactions;
  7. using System.Web;
  8. namespace iBemsDataService.Controllers.Fms.WorkManagement.ScheduledTask
  9. {
  10. public class WorkExecutionPlanJob : IJob
  11. {
  12. private iBemsEntities db = new iBemsEntities();
  13. public void Execute(IJobExecutionContext context)
  14. {
  15. var today = DateTime.Now.Date;
  16. var time = today.AddDays(-31);
  17. //return;
  18. using (var transaction = new TransactionScope())
  19. {
  20. // 내일 혹은 작업예정일이고 오늘 생성된 실행계획(작업요청)이 없다면
  21. // 실행계획을 생성해야 하는 기초계획 임
  22. var query =
  23. from s in db.FmsWorkSchedule
  24. where s.IsUse == true
  25. //&& (s.WorkDueDate == tomorrow || s.WorkDueDate == today)
  26. && (s.WorkDueDate >= time) //&& (s.WorkDueDate >= today)
  27. && db.FmsWorkRequest
  28. .Where(x => x.SiteId == s.SiteId
  29. && x.WorkScheduleId == s.WorkScheduleId
  30. //&& x.RequestDate == today
  31. && x.StartWorkDate == s.WorkDueDate
  32. )
  33. .Any() == false
  34. select s;
  35. foreach (var s in query)
  36. {
  37. var workRequest = new FmsWorkRequest
  38. {
  39. SiteId = s.SiteId,
  40. WorkScheduleId = s.WorkScheduleId,
  41. WorkTypeId = s.WorkTypeId,
  42. BusinessFieldId = s.BusinessFieldId,
  43. WorkProgressId = (short)WorkProgress.WORK_PLAN, // chl 수정(20161021)
  44. //WorkProgressId = s.IsAutoOrder ? (short)WorkProgress.WORK_STANDBY : (short)WorkProgress.WORK_PLAN,
  45. Title = s.Name,
  46. Content = s.Content,
  47. RequestDate = today,
  48. StartWorkDate = s.WorkDueDate,
  49. RequestUserId = s.UpdateUserId,
  50. InspectionAgencyId = s.InspectionAgencyId
  51. };
  52. workRequest = db.FmsWorkRequest.Add(workRequest);
  53. db.SaveChanges();
  54. // 기초계획에 설정된 시설들도 옮겨준다.
  55. var facilitiesQuery = from f in db.FmsWorkScheduleToFacility
  56. where f.SiteId == s.SiteId &&
  57. f.WorkScheduleId == s.WorkScheduleId
  58. select f;
  59. var facilities = facilitiesQuery.ToList();
  60. foreach (var f in facilities)
  61. {
  62. db.FmsWorkRequestToFacility.Add(new FmsWorkRequestToFacility
  63. {
  64. SiteId = f.SiteId,
  65. WorkRequestId = workRequest.WorkRequestId,
  66. FacilityCode = f.FacilityCode
  67. });
  68. }
  69. db.SaveChanges();
  70. // chl 수정(20161021)
  71. // 작업지시가 자동이면 작업지시도 생성
  72. //if (s.IsAutoOrder)
  73. //{
  74. // InsertWorkOrder(workRequest, facilities);
  75. //}
  76. }
  77. // 법정검사 및 정기점검의 작업에 자동지시로 되어 있으면 작업 예정일이 넘었는데도 실행계획에 있으면 작업예정일 0시에 자동으로 작업목록으로 넘어간다
  78. var query_auto =
  79. from s in db.FmsWorkSchedule
  80. join w in db.FmsWorkRequest on s.WorkScheduleId equals w.WorkScheduleId
  81. where s.IsUse == true
  82. && s.IsAutoOrder == true
  83. && (w.StartWorkDate <= today)
  84. && db.FmsWorkOrder
  85. .Where(x => x.SiteId == w.SiteId
  86. && x.WorkRequestId == w.WorkRequestId
  87. && x.Title == w.Title
  88. )
  89. .Any() == false
  90. select w;
  91. foreach (var w in query_auto)
  92. {
  93. // FmsWorkRequest 테이블 WorkProgressId 업데이트
  94. var update_WorkProgressId = (from d in db.FmsWorkRequest
  95. where d.WorkRequestId == w.WorkRequestId
  96. select d).Single();
  97. update_WorkProgressId.WorkProgressId = (short)WorkProgress.WORK_STANDBY;
  98. db.SaveChanges();
  99. var workRequest = new FmsWorkRequest
  100. {
  101. SiteId = w.SiteId,
  102. WorkRequestId = w.WorkRequestId,
  103. BusinessFieldId = w.BusinessFieldId,
  104. Title = w.Title,
  105. RequestUserId = w.RequestUserId,
  106. StartWorkDate = w.StartWorkDate
  107. };
  108. // 기초계획에 설정된 시설들도 옮겨준다.
  109. var facilitiesQuery = from f in db.FmsWorkScheduleToFacility
  110. where f.SiteId == w.SiteId &&
  111. f.WorkScheduleId == w.WorkScheduleId
  112. select f;
  113. var facilities = facilitiesQuery.ToList();
  114. InsertWorkOrder(workRequest, facilities);
  115. }
  116. transaction.Complete();
  117. }
  118. }
  119. private void InsertWorkOrder(FmsWorkRequest workRequest, List<FmsWorkScheduleToFacility> facilities)
  120. {
  121. var workOrder = new FmsWorkOrder
  122. {
  123. SiteId = workRequest.SiteId,
  124. WorkRequestId = workRequest.WorkRequestId,
  125. BusinessFieldId = workRequest.BusinessFieldId,
  126. OrderUserId = workRequest.RequestUserId,
  127. OrderDate = DateTime.Now.Date,
  128. Title = workRequest.Title,
  129. Content = workRequest.Content,
  130. StartWorkDate = workRequest.StartWorkDate
  131. };
  132. workOrder = db.FmsWorkOrder.Add(workOrder);
  133. foreach (var f in facilities)
  134. {
  135. db.FmsWorkOrderToFacility.Add(new FmsWorkOrderToFacility
  136. {
  137. SiteId = f.SiteId,
  138. WorkRequestId = workOrder.WorkRequestId,
  139. FacilityCode = f.FacilityCode
  140. });
  141. }
  142. //workRequest.WorkProgressId = (short)WorkProgress.WORK_STANDBY;
  143. db.SaveChanges();
  144. }
  145. }
  146. }