WorkOrderController.cs 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  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 FMSApp.Controllers {
  16. [Authorize]
  17. [ApiController]
  18. [ApiVersion("1")]
  19. [Route("api/app/[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, [FromQuery] string siteId, bool businessAuth) {
  41. var query = _FilterAndSort(req);
  42. query = BusinessFieldHelper.Apply<FmsWorkOrder>(_context, User, businessAuth, query);
  43. query = query.Where(
  44. x => x.SiteId == Util.ToInt(siteId)
  45. && (x.FmsWorkRequest.WorkProgressId == 3 || x.FmsWorkRequest.WorkProgressId == 7) // 작업대기 혹은 보류
  46. );
  47. var list = query.Select(x => new {
  48. x.SiteId,
  49. x.WorkRequestId,
  50. x.FmsWorkRequest.WorkProgressId,
  51. WorkProgress = new {
  52. x.FmsWorkRequest.WorkProgress.Name
  53. },
  54. x.FmsWorkRequest.WorkTypeId,
  55. WorkType = new {
  56. x.FmsWorkRequest.WorkType.Name
  57. },
  58. x.BusinessFieldId,
  59. BusinessField = new {
  60. x.CmBusinessField.Name
  61. },
  62. x.Title,
  63. x.Content,
  64. x.OrderDate,
  65. x.StartWorkDate,
  66. x.OrderUserId,
  67. OrderUser = new {
  68. x.CmUser.Name
  69. },
  70. WorkPartnerName = x.FmsWorkRequest.WorkPartner.Name,
  71. x.FmsWorkRequest.WorkPrice,
  72. x.FmsWorkRequest.WorkItem,
  73. x.FmsWorkRequest.WorkEndDate
  74. });
  75. var paging = PagingList.Pagination(list, req.page, req.limit);
  76. return Ok(paging);
  77. }
  78. [HttpGet("[action]")]
  79. public IActionResult Get([FromQuery] string siteId, [FromQuery] string workRequestId) {
  80. var query = _service.GetAll()
  81. .Where(x => x.SiteId == Util.ToInt(siteId) && x.WorkRequestId == Util.ToInt(workRequestId));
  82. var item = query.Select(x => new {
  83. x.SiteId,
  84. x.WorkRequestId,
  85. x.FmsWorkRequest.WorkProgressId,
  86. WorkProgress = new {
  87. x.FmsWorkRequest.WorkProgress.Name
  88. },
  89. x.FmsWorkRequest.WorkTypeId,
  90. WorkType = new {
  91. x.FmsWorkRequest.WorkType.Name
  92. },
  93. x.BusinessFieldId,
  94. BusinessField = new {
  95. x.CmBusinessField.Name
  96. },
  97. x.Title,
  98. x.Content,
  99. RequestContent = x.FmsWorkRequest.Content,
  100. x.OrderDate,
  101. WorkDueDate = (x.FmsWorkRequest.FmsWorkSchedule == null ? x.FmsWorkRequest.StartWorkDate : x.FmsWorkRequest.FmsWorkSchedule.WorkDueDate),
  102. x.StartWorkDate,
  103. x.OrderUserId,
  104. OrderUser = new {
  105. x.CmUser.Name
  106. },
  107. x.FmsWorkRequest.WorkPartnerId,
  108. WorkPartnerName = x.FmsWorkRequest.WorkPartner.Name,
  109. x.FmsWorkRequest.WorkPrice,
  110. x.FmsWorkRequest.WorkItem,
  111. x.FmsWorkRequest.WorkEndDate,
  112. CmFile = _storage.ParseFile(x.FmsWorkRequest.CmFile),
  113. FmsWorkOrderToFacility = x.FmsWorkOrderToFacility.Select(f => new {
  114. f.SiteId,
  115. f.WorkRequestId,
  116. f.FacilityCode,
  117. CmFacility = new {
  118. f.CmFacility.Name,
  119. f.CmFacility.BuildingId,
  120. CmBuilding = new {
  121. f.CmFacility.CmBuilding.Name,
  122. },
  123. f.CmFacility.FloorId,
  124. CmFloor = new {
  125. f.CmFacility.CmFloor.Name,
  126. },
  127. f.CmFacility.FirstClassId,
  128. FirstClass = new {
  129. f.CmFacility.FmsFacilityCodeClass.Name,
  130. },
  131. f.CmFacility.SecondClassId,
  132. SecondClass = new {
  133. f.CmFacility.FmsFacilityCodeClass1.Name,
  134. },
  135. f.CmFacility.ThirdClassId,
  136. ThirdClass = new {
  137. f.CmFacility.FmsFacilityCodeClass2.Name,
  138. },
  139. },
  140. }).ToList(),
  141. FmsWorkRequestToAccident = x.FmsWorkRequest.FmsWorkRequestToAccident.Select(f => new {
  142. f.SiteId,
  143. f.WorkRequestId,
  144. f.AccidentId,
  145. FmsAccident = new {
  146. f.FmsAccident.SiteId,
  147. f.FmsAccident.AccidentId,
  148. f.FmsAccident.Name,
  149. f.FmsAccident.AccidentTypeId,
  150. AccidentTypeName = f.FmsAccident.FmsAccidentCodeType.Name,
  151. Dates = new {
  152. StartDate = f.FmsAccident.StartDate == null ? null : ((DateTime)f.FmsAccident.StartDate).ToString("yyyy.MM.dd"),
  153. EndDate = f.FmsAccident.EndDate == null ? null : ((DateTime)f.FmsAccident.EndDate).ToString("yyyy.MM.dd"),
  154. },
  155. f.FmsAccident.DepartmentId,
  156. DepartmentName = f.FmsAccident.CmDepartment.Name,
  157. f.FmsAccident.AccidentLocation,
  158. },
  159. }).ToList(),
  160. FmsWorkRequestToComplaint = x.FmsWorkRequest.FmsWorkRequestToComplaint.Select(f => new {
  161. f.SiteId,
  162. f.WorkRequestId,
  163. f.ComplaintId,
  164. FmsComplaints = new {
  165. f.FmsComplaints.SiteId,
  166. f.FmsComplaints.ComplaintId,
  167. f.FmsComplaints.Name,
  168. f.FmsComplaints.ComplaintTypeId,
  169. ComplaintTypeName = f.FmsComplaints.FmsComplaintCodeType.Name,
  170. Dates = new {
  171. StartDate = f.FmsComplaints.StartDate == null ? null : ((DateTime)f.FmsComplaints.StartDate).ToString("yyyy.MM.dd"),
  172. EndDate = f.FmsComplaints.EndDate == null ? null : ((DateTime)f.FmsComplaints.EndDate).ToString("yyyy.MM.dd"),
  173. },
  174. f.FmsComplaints.DepartmentId,
  175. DepartmentName = f.FmsComplaints.CmDepartment.Name,
  176. f.FmsComplaints.ComplaintLocation,
  177. },
  178. }).ToList(),
  179. }).FirstOrDefault();
  180. return Ok(item);
  181. }
  182. [HttpPost("[action]")]
  183. public IActionResult Process([FromBody] FmsWorkResult data) {
  184. _service.Process(data);
  185. return Ok();
  186. }
  187. // 검색 & 정렬 공통
  188. private IQueryable<FmsWorkOrder> _FilterAndSort(PagingRequest req) {
  189. var query = _service.GetAll();
  190. // 기본 Entity 검색
  191. query = query.Filter(req.conditions);
  192. // 기본 Entity 정렬
  193. query = query.Sort(req.sort);
  194. return query;
  195. }
  196. }
  197. }