6b76b10e6c14bb30b3c497d0c7cc3e2b201e356a.svn-base 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Data.Entity;
  5. using System.Data.Entity.Infrastructure;
  6. using System.Diagnostics;
  7. using System.Linq;
  8. using System.Net;
  9. using System.Net.Http;
  10. using System.Web;
  11. using System.Web.Http;
  12. using System.Web.Http.Description;
  13. using DevExpress.XtraCharts.Native;
  14. using DevExpress.XtraPrinting.Native;
  15. using iBemsDataService;
  16. using iBemsDataService.Model;
  17. using iBemsDataService.Util;
  18. using System.Transactions;
  19. namespace iBemsDataService.Controllers
  20. {
  21. public class FmsWorkRequestController : ApiController
  22. {
  23. private iBemsEntities db = new iBemsEntities();
  24. // POST: api/FmsWorkRequest
  25. [ActionName("ExecutionPlanGeneration")]
  26. [ResponseType(typeof(void))]
  27. public IHttpActionResult GetFmsWorkRequest()
  28. {
  29. if (!ModelState.IsValid)
  30. {
  31. return BadRequest(ModelState);
  32. }
  33. // 2019.07.12
  34. Uri uri = Request.RequestUri;
  35. var uriQuery = HttpUtility.ParseQueryString(uri.Query);
  36. int siteId;
  37. if (int.TryParse(uriQuery.Get("SiteId"), out siteId) == false)
  38. {
  39. return BadRequest("Not Found Parameters.");
  40. }
  41. var today = DateTime.Now.Date;
  42. var tomorrow = today.AddDays(1);
  43. using (var transaction = new TransactionScope())
  44. {
  45. // 내일이 작업예정일이고 오늘 생성된 실행계획(작업요청)이 없다면 실행계획을 생성해야 하는 기초계획이다.
  46. var query = from s in db.FmsWorkSchedule
  47. where s.IsUse == true &&
  48. s.WorkDueDate == tomorrow &&
  49. db.FmsWorkRequest.Where(x =>
  50. x.SiteId == siteId && // 2019.07.12
  51. x.WorkScheduleId == s.WorkScheduleId &&
  52. x.RequestDate == today).Any() == false
  53. select s;
  54. foreach (var s in query)
  55. {
  56. var workRequest = new FmsWorkRequest
  57. {
  58. SiteId = s.SiteId,
  59. WorkScheduleId = s.WorkScheduleId,
  60. WorkTypeId = s.WorkTypeId,
  61. BusinessFieldId = s.BusinessFieldId,
  62. WorkProgressId = (short)WorkProgress.WORK_PLAN,
  63. Title = s.Name,
  64. RequestDate = today,
  65. StartWorkDate = s.WorkDueDate,
  66. RequestUserId = s.UpdateUserId,
  67. InspectionAgencyId = s.InspectionAgencyId
  68. };
  69. workRequest = db.FmsWorkRequest.Add(workRequest);
  70. db.SaveChanges();
  71. // 기초계획에 설정된 시설들도 옮겨준다.
  72. var facilitiesQuery = from f in db.FmsWorkScheduleToFacility
  73. where f.SiteId == s.SiteId &&
  74. f.WorkScheduleId == s.WorkScheduleId
  75. select f;
  76. var facilities = facilitiesQuery.ToList();
  77. foreach (var f in facilities)
  78. {
  79. db.FmsWorkRequestToFacility.Add(new FmsWorkRequestToFacility
  80. {
  81. SiteId = f.SiteId,
  82. WorkRequestId = workRequest.WorkRequestId,
  83. FacilityCode = f.FacilityCode
  84. });
  85. }
  86. db.SaveChanges();
  87. // chl 수정(20161021)
  88. //// 작업지시가 자동이면 작업지시도 생성
  89. //if (s.IsAutoOrder)
  90. //{
  91. // InsertWorkOrder(workRequest, facilities);
  92. //}
  93. }
  94. transaction.Complete();
  95. }
  96. return StatusCode(HttpStatusCode.NoContent);
  97. }
  98. [ResponseType(typeof(void))]
  99. [ActionName("Approval")]
  100. public IHttpActionResult PostFmsWorkRequest()
  101. {
  102. Uri uri = Request.RequestUri;
  103. var uriQuery = HttpUtility.ParseQueryString(uri.Query);
  104. int siteId, workRequestId, workProgressId;
  105. bool isConfirmDueDate = false;
  106. DateTime confirmDueDate = new DateTime();
  107. if (int.TryParse(uriQuery.Get("SiteId"), out siteId) == false ||
  108. int.TryParse(uriQuery.Get("WorkRequestId"), out workRequestId) == false ||
  109. int.TryParse(uriQuery.Get("WorkProgressId"), out workProgressId) == false ||
  110. string.IsNullOrEmpty(uriQuery.Get("UserId"))
  111. )
  112. {
  113. return BadRequest("Not Found Parameters.");
  114. }
  115. string userId = uriQuery.Get("UserId");
  116. // WorkRequest progressid 업데이트 필요
  117. try
  118. {
  119. using (var transaction = new TransactionScope())
  120. {
  121. var updateRequest = (
  122. from u in db.FmsWorkRequest
  123. where u.SiteId == siteId &&
  124. u.WorkRequestId == workRequestId
  125. select u).FirstOrDefault();
  126. if (updateRequest != null)
  127. {
  128. updateRequest.WorkProgressId = workProgressId;
  129. if (updateRequest.WorkScheduleId != null)
  130. {
  131. // FmsWorkSchedule update...
  132. bool.TryParse(uriQuery.Get("IsConfirmDueDate"), out isConfirmDueDate);
  133. DateTime.TryParse(uriQuery.Get("ConfirmDueDate"), out confirmDueDate);
  134. // userId = uriQuery.Get("UserId");
  135. if (isConfirmDueDate)
  136. {
  137. var updateSchedule = (
  138. from us in db.FmsWorkSchedule
  139. where us.SiteId == siteId &&
  140. us.WorkScheduleId == updateRequest.WorkScheduleId &&
  141. us.IsUse == true
  142. select us)
  143. .FirstOrDefault();
  144. if (updateSchedule != null)
  145. {
  146. updateSchedule.WorkDueDate = confirmDueDate;
  147. }
  148. }
  149. }
  150. if (workProgressId == 6) // 완료승인인 경우에만 수행
  151. {
  152. var workResultMaterials = (
  153. from wm in db.FmsWorkResultCheckItemMaterial
  154. where wm.SiteId == siteId &&
  155. wm.WorkRequestId == workRequestId
  156. select wm).ToList();
  157. foreach (var item in workResultMaterials)
  158. {
  159. var material = db.FmsMaterial.Where(m =>
  160. m.SiteId == siteId &&
  161. m.MaterialId == item.MaterialId &&
  162. m.IsUse == true
  163. ).FirstOrDefault();
  164. if (material == null) { continue; }
  165. FmsMaterialRelease releaseItem = new FmsMaterialRelease()
  166. {
  167. SiteId = item.SiteId,
  168. BusinessFieldId = updateRequest.BusinessFieldId,
  169. ReleaseDate = DateTime.Now,
  170. ReleaseTypeId = 1, // 작업출고
  171. WorkRequestId = workRequestId,
  172. MaterialId = item.MaterialId,
  173. MaterialCount = item.MaterialCount,
  174. //// TODO : 선입선출에 따른 계산이 필요함
  175. ReleaseTotalCost = 0,
  176. ConfirmedUserId = userId,
  177. ConfirmedDate = DateTime.Now,
  178. IsConfirmed = true,
  179. AdjustmentTypeId = 0
  180. };
  181. // 선입선출에 따른 계산
  182. var currentStoredList = db.FmsMaterialStored
  183. .Where(ms => ms.IsApproval == true
  184. && ms.MaterialId == item.MaterialId
  185. && ms.RemainStoredCount > 0)
  186. .OrderBy(s => s.StoredDate)
  187. .ToList();
  188. var tempReleasedItemCount = item.MaterialCount;
  189. foreach (var storedItem in currentStoredList)
  190. {
  191. if ((storedItem.RemainStoredCount - tempReleasedItemCount) >= 0)
  192. {
  193. releaseItem.ReleaseTotalCost += (storedItem.UnitCost * tempReleasedItemCount);
  194. storedItem.RemainStoredCount -= tempReleasedItemCount;
  195. break;
  196. }
  197. releaseItem.ReleaseTotalCost += (storedItem.UnitCost * storedItem.RemainStoredCount);
  198. tempReleasedItemCount -= storedItem.RemainStoredCount;
  199. storedItem.RemainStoredCount = 0;
  200. }
  201. db.FmsMaterialRelease.Add(releaseItem);
  202. }
  203. }
  204. }
  205. db.SaveChanges();
  206. transaction.Complete();
  207. }
  208. }
  209. catch (DbUpdateException e) { throw e; }
  210. return StatusCode(HttpStatusCode.NoContent);
  211. }
  212. private void InsertWorkOrder(FmsWorkRequest workRequest, List<FmsWorkScheduleToFacility> facilities)
  213. {
  214. var workOrder = new FmsWorkOrder
  215. {
  216. SiteId = workRequest.SiteId,
  217. WorkRequestId = workRequest.WorkRequestId,
  218. BusinessFieldId = workRequest.BusinessFieldId,
  219. OrderUserId = workRequest.RequestUserId,
  220. OrderDate = DateTime.Now.Date,
  221. Title = workRequest.Title,
  222. Content = workRequest.Content,
  223. StartWorkDate = workRequest.StartWorkDate
  224. };
  225. workOrder = db.FmsWorkOrder.Add(workOrder);
  226. foreach (var f in facilities)
  227. {
  228. db.FmsWorkOrderToFacility.Add(new FmsWorkOrderToFacility
  229. {
  230. SiteId = f.SiteId,
  231. WorkRequestId = workOrder.WorkRequestId,
  232. FacilityCode = f.FacilityCode
  233. });
  234. }
  235. workRequest.WorkProgressId = (short)WorkProgress.WORK_STANDBY;
  236. db.SaveChanges();
  237. }
  238. protected override void Dispose(bool disposing)
  239. {
  240. if (disposing)
  241. {
  242. db.Dispose();
  243. }
  244. base.Dispose(disposing);
  245. }
  246. }
  247. }