WorkRequestController.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  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. using System.Collections.Generic;
  16. using FMSApp.Repositories;
  17. namespace FMSApp.Controllers {
  18. [Authorize]
  19. [ApiController]
  20. [ApiVersion("1")]
  21. [Route("api/app/[controller]")]
  22. public class WorkRequestController : Controller {
  23. private readonly ILogger<WorkRequestController> _logger;
  24. private readonly FMSContext _context;
  25. private readonly WorkRequestService _service;
  26. private readonly StorageHelper _storage;
  27. private readonly WorkConfigRepository _workConfig;
  28. public WorkRequestController(
  29. ILogger<WorkRequestController> logger,
  30. FMSContext context,
  31. WorkRequestService service,
  32. StorageHelper storage,
  33. WorkConfigRepository workConfig
  34. ) {
  35. _logger = logger;
  36. _context = context;
  37. _service = service;
  38. _storage = storage;
  39. _workConfig = workConfig;
  40. }
  41. private IActionResult RequestList(PagingRequest req, string siteId, string workTypeId, bool businessAuth, int[] workProgressIds = null) {
  42. var query = _FilterAndSort(req);
  43. query = BusinessFieldHelper.Apply<FmsWorkRequest>(_context, User, businessAuth, query);
  44. query = query.Where(
  45. x => x.SiteId == Util.ToInt(siteId)
  46. && (x.FmsWorkSchedule == null || (x.FmsWorkSchedule != null && x.FmsWorkSchedule.IsUse == true))
  47. //&& ((x.FmsWorkSchedule != null && x.FmsWorkSchedule.IsUse == true) || !(new int[] { 1, 2, 7 }).Contains(x.WorkTypeId))
  48. );
  49. if (workProgressIds == null || workProgressIds.Length == 0) {
  50. query = query.Where(x => x.WorkProgressId == 1);
  51. } else {
  52. query = query.Where(x => workProgressIds.Contains(x.WorkProgressId));
  53. }
  54. if (!string.IsNullOrEmpty(workTypeId)) {
  55. query = query.Where(
  56. x => x.WorkTypeId == Util.ToInt(workTypeId)
  57. );
  58. }
  59. var list = query.Select(x => new {
  60. x.SiteId,
  61. x.WorkRequestId,
  62. x.WorkTypeId,
  63. WorkType = new {
  64. x.WorkType.Name
  65. },
  66. x.WorkDetailTypeId,
  67. WorkDetailType = new {
  68. x.WorkDetailType.Code,
  69. x.WorkDetailType.Name,
  70. },
  71. x.BusinessFieldId,
  72. BusinessField = new {
  73. x.CmBusinessField.Name
  74. },
  75. x.WorkScheduleId,
  76. x.WorkProgressId,
  77. WorkProgress = new {
  78. x.WorkProgress.Name
  79. },
  80. x.Title,
  81. x.Content,
  82. x.RequestUserId,
  83. CmUserNavigation = new {
  84. x.CmUserNavigation.Name
  85. },
  86. x.RequestDate,
  87. x.StartWorkDate,
  88. x.RejectUserId,
  89. x.RejectDate,
  90. x.RejectReason,
  91. x.InspectionAgencyId,
  92. InspectionAgency = new {
  93. x.CmPartner.Name
  94. },
  95. x.WorkPartnerId,
  96. WorkPartnerName = x.WorkPartner.Name,
  97. x.WorkPrice,
  98. x.WorkItem,
  99. x.WorkEndDate
  100. });
  101. var paging = PagingList.Pagination(list, req.page, req.limit);
  102. return Ok(paging);
  103. }
  104. /// <summary>
  105. /// 수시작업계획 목록
  106. /// </summary>
  107. [HttpGet("[action]")]
  108. public IActionResult AnyList([FromQuery] PagingRequest req, [FromQuery] string siteId, bool businessAuth) {
  109. return RequestList(req, siteId, "5", businessAuth, new int[] { 1 }); // 계획
  110. }
  111. /// <summary>
  112. /// 공사작업계획 목록
  113. /// </summary>
  114. [HttpGet("[action]")]
  115. public IActionResult ConstructList([FromQuery] PagingRequest req, [FromQuery] string siteId, bool businessAuth) {
  116. return RequestList(req, siteId, "6", businessAuth, new int[] { 1 }); // 계획
  117. }
  118. /// <summary>
  119. /// 실행계획 목록
  120. /// </summary>
  121. [HttpGet]
  122. public IActionResult List([FromQuery] PagingRequest req, [FromQuery] string siteId, string workTypeId, bool businessAuth) {
  123. return RequestList(req, siteId, workTypeId, businessAuth, new int[] { 1 }); // 계획
  124. }
  125. /// <summary>
  126. /// 실행계획/수시작업계획/공사작업계획 상세 데이터 조회
  127. /// </summary>
  128. [HttpGet("[action]")]
  129. public IActionResult Get([FromQuery] string siteId, [FromQuery] string workRequestId) {
  130. var query = _service.GetAll()
  131. .Where(x => x.SiteId == Util.ToInt(siteId) && x.WorkRequestId == Util.ToInt(workRequestId));
  132. var item = query.Select(x => new {
  133. x.SiteId,
  134. x.WorkRequestId,
  135. x.WorkTypeId,
  136. WorkType = new {
  137. x.WorkType.Name
  138. },
  139. x.WorkDetailTypeId,
  140. WorkDetailType = new {
  141. x.WorkDetailType.Code,
  142. x.WorkDetailType.Name,
  143. },
  144. x.BusinessFieldId,
  145. BusinessField = new {
  146. x.CmBusinessField.Name
  147. },
  148. x.WorkScheduleId,
  149. x.WorkProgressId,
  150. WorkProgress = new {
  151. x.WorkProgress.Name
  152. },
  153. x.Title,
  154. x.Content,
  155. x.RequestUserId,
  156. CmUserNavigation = new {
  157. x.CmUserNavigation.Name,
  158. },
  159. x.RequestDate,
  160. x.StartWorkDate,
  161. x.RejectUserId,
  162. x.RejectDate,
  163. x.RejectReason,
  164. x.InspectionAgencyId,
  165. InspectionAgency = new {
  166. x.CmPartner.Name
  167. },
  168. x.WorkPartnerId,
  169. WorkPartnerName = x.WorkPartner.Name,
  170. x.WorkPrice,
  171. x.WorkItem,
  172. x.WorkEndDate,
  173. CmFile = _storage.ParseFile(x.CmFile),
  174. x.FmsWorkSchedule.CycleSize,
  175. x.FmsWorkSchedule.CycleUnitId,
  176. CycleUnitName = x.FmsWorkSchedule.FmsWorkCodeCycleUnit.Name ?? "",
  177. x.FmsWorkSchedule.HolidayWorkTypeId,
  178. HolidayWorkTypeName = x.FmsWorkSchedule.FmsWorkCodeHolidayWorkType.Name ?? "",
  179. FmsWorkRequestToFacility = x.FmsWorkRequestToFacility.Select(f => new {
  180. f.SiteId,
  181. f.WorkRequestId,
  182. f.FacilityCode,
  183. CmFacility = new {
  184. f.CmFacility.Name,
  185. f.CmFacility.BuildingId,
  186. CmBuilding = new {
  187. f.CmFacility.CmBuilding.Name,
  188. },
  189. f.CmFacility.FloorId,
  190. CmFloor = new {
  191. f.CmFacility.CmFloor.Name,
  192. },
  193. f.CmFacility.FirstClassId,
  194. FirstClass = new {
  195. f.CmFacility.FmsFacilityCodeClass.Name,
  196. },
  197. f.CmFacility.SecondClassId,
  198. SecondClass = new {
  199. f.CmFacility.FmsFacilityCodeClass1.Name,
  200. },
  201. f.CmFacility.ThirdClassId,
  202. ThirdClass = new {
  203. f.CmFacility.FmsFacilityCodeClass2.Name,
  204. },
  205. },
  206. }).ToList(),
  207. FmsWorkRequestToAccident = x.FmsWorkRequestToAccident.Select(f => new {
  208. f.SiteId,
  209. f.WorkRequestId,
  210. f.AccidentId,
  211. FmsAccident = new {
  212. f.FmsAccident.SiteId,
  213. f.FmsAccident.AccidentId,
  214. f.FmsAccident.Name,
  215. f.FmsAccident.AccidentTypeId,
  216. AccidentTypeName = f.FmsAccident.FmsAccidentCodeType.Name,
  217. Dates = new {
  218. StartDate = f.FmsAccident.StartDate == null ? null : ((DateTime)f.FmsAccident.StartDate).ToString("yyyy.MM.dd"),
  219. EndDate = f.FmsAccident.EndDate == null ? null : ((DateTime)f.FmsAccident.EndDate).ToString("yyyy.MM.dd"),
  220. },
  221. f.FmsAccident.DepartmentId,
  222. DepartmentName = f.FmsAccident.CmDepartment.Name,
  223. f.FmsAccident.AccidentLocation,
  224. },
  225. }).ToList(),
  226. FmsWorkRequestToComplaint = x.FmsWorkRequestToComplaint.Select(f => new {
  227. f.SiteId,
  228. f.WorkRequestId,
  229. f.ComplaintId,
  230. FmsComplaints = new {
  231. f.FmsComplaints.SiteId,
  232. f.FmsComplaints.ComplaintId,
  233. f.FmsComplaints.Name,
  234. f.FmsComplaints.ComplaintTypeId,
  235. AccidentTypeName = f.FmsComplaints.FmsComplaintCodeType.Name,
  236. Dates = new {
  237. StartDate = f.FmsComplaints.StartDate == null ? null : ((DateTime)f.FmsComplaints.StartDate).ToString("yyyy.MM.dd"),
  238. EndDate = f.FmsComplaints.EndDate == null ? null : ((DateTime)f.FmsComplaints.EndDate).ToString("yyyy.MM.dd"),
  239. },
  240. f.FmsComplaints.DepartmentId,
  241. DepartmentName = f.FmsComplaints.CmDepartment.Name,
  242. f.FmsComplaints.ComplaintLocation,
  243. },
  244. }).ToList()
  245. }).FirstOrDefault();
  246. return Ok(item);
  247. }
  248. /// <summary>
  249. /// 저장
  250. /// </summary>
  251. /// <param name="data"></param>
  252. /// <returns></returns>
  253. [HttpPost("[action]")]
  254. public IActionResult Save([FromBody] FmsWorkRequest data) {
  255. _logger.LogInformation("Save");
  256. //_logger.LogInformation(data.Dump());
  257. ModelState.RemoveStartOf("FmsWorkRequestToFacility");
  258. ModelState.RemoveStartOf("FmsWorkRequestToAccident");
  259. ModelState.RemoveStartOf("FmsWorkRequestToComplaint");
  260. if (ModelState.IsValid) {
  261. //_service.Save(data);
  262. _service.SaveBeforeAddHistory(data);
  263. } else {
  264. return BadRequest(ModelState);
  265. }
  266. return Ok();
  267. }
  268. /// <summary>
  269. /// 사고 내역 저장
  270. /// </summary>
  271. /// <param name="data"></param>
  272. /// <returns></returns>
  273. [HttpPost("[action]")]
  274. public IActionResult SaveAccidents([FromBody] FmsWorkRequest data) {
  275. ModelState.Remove("Title");
  276. ModelState.RemoveStartOf("FmsWorkRequestToFacility");
  277. ModelState.RemoveStartOf("FmsWorkRequestToAccident");
  278. ModelState.RemoveStartOf("FmsWorkRequestToComplaint");
  279. if (ModelState.IsValid) {
  280. _service.SaveAccidents(data);
  281. } else {
  282. return BadRequest(ModelState);
  283. }
  284. return Ok();
  285. }
  286. /// <summary>
  287. /// 민원 내역 저장
  288. /// </summary>
  289. /// <param name="data"></param>
  290. /// <returns></returns>
  291. [HttpPost("[action]")]
  292. public IActionResult SaveComplaints([FromBody] FmsWorkRequest data) {
  293. ModelState.Remove("Title");
  294. ModelState.RemoveStartOf("FmsWorkRequestToFacility");
  295. ModelState.RemoveStartOf("FmsWorkRequestToAccident");
  296. ModelState.RemoveStartOf("FmsWorkRequestToComplaint");
  297. if (ModelState.IsValid) {
  298. _service.SaveComplaints(data);
  299. } else {
  300. return BadRequest(ModelState);
  301. }
  302. return Ok();
  303. }
  304. [HttpPost("[action]")]
  305. public IActionResult Reject([FromBody] FmsWorkRequest data, [FromQuery] bool useSchedule, [FromQuery] DateTime? confirmDate) {
  306. _logger.LogInformation($"###########################################################################");
  307. _logger.LogInformation($"useSchedule: {useSchedule}, confirmDate: {confirmDate}");
  308. _service.Reject(data, useSchedule, confirmDate);
  309. return Ok();
  310. }
  311. [HttpPost("[action]")]
  312. public IActionResult Order([FromBody] FmsWorkOrder data) {
  313. _service.Order(data);
  314. return Ok();
  315. }
  316. [HttpDelete("{siteId}/{workRequestId}")]
  317. public IActionResult Delete(int siteId, int workRequestId) {
  318. _service.Delete(siteId, workRequestId);
  319. return Ok();
  320. }
  321. // 검색 & 정렬 공통
  322. private IQueryable<FmsWorkRequest> _FilterAndSort(PagingRequest req) {
  323. var query = _service.GetAll();
  324. // 기본 Entity 검색
  325. query = query.Filter(req.conditions);
  326. // 기본 Entity 정렬
  327. query = query.Sort(req.sort);
  328. return query;
  329. }
  330. }
  331. }