WorkOrderController.cs 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. using System;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using FMSAdmin.Data;
  5. using FMSAdmin.Models;
  6. using FMSAdmin.Entities;
  7. using FMSApp.Services;
  8. using Microsoft.AspNetCore.Mvc;
  9. using Microsoft.Extensions.Logging;
  10. using Microsoft.AspNetCore.Authorization;
  11. using FMSAdmin.Helpers;
  12. using System.Data;
  13. using System.IO;
  14. using OfficeOpenXml;
  15. namespace FMSAdmin.Controllers {
  16. [Authorize]
  17. [ApiController]
  18. [ApiVersion("1")]
  19. [Route("api/[controller]")]
  20. public class WorkOrderController : Controller {
  21. private readonly ILogger<WorkOrderController> _logger;
  22. private readonly FMSContext _context;
  23. private readonly WorkOrderService _service;
  24. private readonly StorageHelper _storage;
  25. public WorkOrderController(
  26. ILogger<WorkOrderController> logger,
  27. FMSContext context,
  28. WorkOrderService service,
  29. StorageHelper storage
  30. ) {
  31. _logger = logger;
  32. _context = context;
  33. _service = service;
  34. _storage = storage;
  35. }
  36. /// <summary>
  37. /// 목록
  38. /// </summary>
  39. [HttpGet]
  40. public IActionResult List([FromQuery]PagingRequest req) {
  41. var query = _FilterAndSort(req);
  42. query = query.Where(
  43. x => (x.FmsWorkRequest.WorkProgressId == 3 || x.FmsWorkRequest.WorkProgressId == 7) // 작업대기 혹은 보류
  44. );
  45. var list = _ListSelect(query);
  46. var paging = PagingList.Pagination(list, req.page, req.limit);
  47. return Ok(paging);
  48. }
  49. /// <summary>
  50. /// 목록
  51. /// </summary>
  52. [HttpGet]
  53. private dynamic _ListSelect(IQueryable<FmsWorkOrder> query) {
  54. var list = query.Select(x => new {
  55. x.SiteId,
  56. Site = x.Site.Name,
  57. x.WorkRequestId,
  58. x.FmsWorkRequest.WorkProgressId,
  59. WorkProgress = x.FmsWorkRequest.WorkProgress.Name,
  60. x.FmsWorkRequest.WorkTypeId,
  61. WorkType = x.FmsWorkRequest.WorkType.Name,
  62. x.BusinessFieldId,
  63. BusinessField = x.CmBusinessField.Name,
  64. x.Title,
  65. x.Content,
  66. x.OrderDate,
  67. x.StartWorkDate,
  68. x.OrderUserId,
  69. OrderUser = x.CmUser.Name
  70. });
  71. return list;
  72. }
  73. [HttpGet("[action]")]
  74. public IActionResult Get([FromQuery] string siteId, [FromQuery] string workRequestId) {
  75. var query = _service.GetAll()
  76. .Where(x => x.SiteId == Util.ToInt(siteId) && x.WorkRequestId == Util.ToInt(workRequestId));
  77. var item = query.Select(x => new {
  78. x.SiteId,
  79. CmSite = new {
  80. x.Site.Name
  81. },
  82. x.WorkRequestId,
  83. x.FmsWorkRequest.WorkProgressId,
  84. WorkProgress = new {
  85. x.FmsWorkRequest.WorkProgress.Name
  86. },
  87. x.FmsWorkRequest.WorkTypeId,
  88. WorkType = new {
  89. x.FmsWorkRequest.WorkType.Name
  90. },
  91. WorkDetailType = new {
  92. x.FmsWorkRequest.WorkDetailType.Name,
  93. x.FmsWorkRequest.WorkDetailType.Code,
  94. },
  95. x.BusinessFieldId,
  96. BusinessField = new {
  97. x.CmBusinessField.Name
  98. },
  99. x.Title,
  100. x.Content,
  101. RequestContent = x.FmsWorkRequest.Content,
  102. x.OrderDate,
  103. WorkDueDate = (x.FmsWorkRequest.FmsWorkSchedule == null ? x.FmsWorkRequest.StartWorkDate : x.FmsWorkRequest.FmsWorkSchedule.WorkDueDate),
  104. x.StartWorkDate,
  105. x.OrderUserId,
  106. OrderUser = new {
  107. x.CmUser.Name
  108. },
  109. FmsWorkResult = new {
  110. x.FmsWorkResult.SiteId,
  111. x.FmsWorkResult.WorkRequestId,
  112. x.FmsWorkResult.WorkerUserId,
  113. x.FmsWorkResult.StartDate,
  114. x.FmsWorkResult.EndDate,
  115. x.FmsWorkResult.Content
  116. },
  117. FmsWorkOrderToFacility = x.FmsWorkOrderToFacility.Select(f => new {
  118. f.SiteId,
  119. f.WorkRequestId,
  120. f.FacilityCode,
  121. CmFacility = new {
  122. f.CmFacility.Name,
  123. f.CmFacility.BuildingId,
  124. CmBuilding = new {
  125. f.CmFacility.CmBuilding.Name,
  126. },
  127. f.CmFacility.FloorId,
  128. CmFloor = new {
  129. f.CmFacility.CmFloor.Name,
  130. },
  131. f.CmFacility.FirstClassId,
  132. FirstClassName = new {
  133. f.CmFacility.FmsFacilityCodeClass.Name,
  134. },
  135. f.CmFacility.SecondClassId,
  136. SecondClassName = new {
  137. f.CmFacility.FmsFacilityCodeClass1.Name,
  138. },
  139. f.CmFacility.ThirdClassId,
  140. ThirdClassName = new {
  141. f.CmFacility.FmsFacilityCodeClass2.Name,
  142. },
  143. },
  144. }).ToList(),
  145. FmsWorkRequestToAccident = x.FmsWorkRequest.FmsWorkRequestToAccident.Select(f => new {
  146. f.SiteId,
  147. f.WorkRequestId,
  148. f.AccidentId,
  149. FmsAccident = new {
  150. f.FmsAccident.SiteId,
  151. f.FmsAccident.AccidentId,
  152. f.FmsAccident.Name,
  153. f.FmsAccident.AccidentTypeId,
  154. AccidentTypeName = f.FmsAccident.FmsAccidentCodeType.Name,
  155. Dates = new {
  156. StartDate = f.FmsAccident.StartDate == null ? null : ((DateTime)f.FmsAccident.StartDate).ToString("yyyy.MM.dd"),
  157. EndDate = f.FmsAccident.EndDate == null ? null : ((DateTime)f.FmsAccident.EndDate).ToString("yyyy.MM.dd"),
  158. },
  159. f.FmsAccident.DepartmentId,
  160. DepartmentName = f.FmsAccident.CmDepartment.Name,
  161. f.FmsAccident.AccidentLocation,
  162. },
  163. }).ToList(),
  164. }).FirstOrDefault();
  165. return Ok(item);
  166. }
  167. [HttpPost("[action]")]
  168. public IActionResult Process([FromBody]FmsWorkResult data) {
  169. _service.Process(data);
  170. return Ok();
  171. }
  172. // 검색 & 정렬 공통
  173. private IQueryable<FmsWorkOrder> _FilterAndSort(PagingRequest req) {
  174. var query = _service.GetAll();
  175. // 기본 Entity 검색
  176. query = query.Filter(req.conditions);
  177. if (req.siteId != null)
  178. query = query.Where(x => x.SiteId == req.siteId);
  179. // 업무분야 필드가 있는경우만 추가
  180. if (req.businessFieldId != null) {
  181. query = query.Where(x => x.SiteId == req.siteId);
  182. query = query.Where(x => x.BusinessFieldId == req.businessFieldId || x.CmBusinessField.Name == "공통");
  183. }
  184. // 기본 Entity 정렬
  185. query = query.Sort(req.sort);
  186. return query;
  187. }
  188. }
  189. }