MonthlyReportController.cs 7.1 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. using System.Text;
  16. using System.Collections.Generic;
  17. namespace FMSAdmin.Controllers {
  18. [Authorize]
  19. [ApiController]
  20. [ApiVersion("1")]
  21. [Route("api/[controller]")]
  22. public class MonthlyReportController : Controller {
  23. private readonly ILogger<MonthlyReportController> _logger;
  24. private readonly FMSContext _context;
  25. private readonly MonthlyReportService _service;
  26. private readonly FMSAdmin.Services.SiteWeatherInfoService _siteWeatherInfoService;
  27. private readonly StorageHelper _storage;
  28. public enum WorkTypeId {
  29. PeriodicInspection = 1,
  30. ForensicExamination = 2,
  31. CivilComplaint = 3,
  32. SiAlarm = 4,
  33. Occasional = 5,
  34. Construct = 6,
  35. ForensicEducation = 7,
  36. }
  37. public enum WorkProgressId {
  38. WorkStatusPending = 3,
  39. WorkStatusInProgress = 4,
  40. WorkStatusComplete = 5,
  41. WorkStatusApproved = 6,
  42. WorkStatusDeferred = 7,
  43. }
  44. public enum AdjustmentTypeId {
  45. Regular = 0,
  46. Loss = 1,
  47. Return = 2
  48. }
  49. public MonthlyReportController(
  50. ILogger<MonthlyReportController> logger,
  51. FMSContext context,
  52. MonthlyReportService service,
  53. FMSAdmin.Services.SiteWeatherInfoService siteWeatherInfoService,
  54. StorageHelper storage
  55. ) {
  56. _logger = logger;
  57. _context = context;
  58. _service = service;
  59. _siteWeatherInfoService = siteWeatherInfoService;
  60. _storage = storage;
  61. }
  62. /// <summary>
  63. /// 목록
  64. /// </summary>
  65. [HttpGet]
  66. public IActionResult List([FromQuery] PagingRequest req) {
  67. var query = _FilterAndSort(req);
  68. var list = _ListSelect(query);
  69. var paging = PagingList.Pagination(list, req.page, req.limit);
  70. return Ok(paging);
  71. }
  72. // 검색 & 정렬 공통
  73. private IQueryable<FmsMonthlyReport> _FilterAndSort(PagingRequest req) {
  74. var query = _service.GetAll();
  75. // 기본 Entity 검색
  76. query = query.Filter(req.conditions);
  77. if (req.siteId != null) {
  78. query = query.Where(x => x.SiteId == Util.ToInt(req.siteId));
  79. }
  80. if (req.siteIds != null && req.siteIds.Length > 0) {
  81. query = query.Where(x => req.siteIds.Contains(x.SiteId));
  82. }
  83. // 업무분야 필드가 있는경우만 추가
  84. if (req.businessFieldId != null) {
  85. query = query.Where(x => x.SiteId == User.GetSiteId());
  86. query = query.Where(x => x.BusinessFieldId == req.businessFieldId || x.CmBusinessField.Name == "공통");
  87. }
  88. // 기본 Entity 정렬
  89. query = query.Sort(req.sort);
  90. return query;
  91. }
  92. public dynamic _ListSelect(IQueryable<FmsMonthlyReport> query) {
  93. var list = query.Select(x => new {
  94. x.SiteId,
  95. SiteName = _context.CmSite.FirstOrDefault(site => site.SiteId == x.SiteId).Name,
  96. AddDate = x.AddDate.ToString("yyyy-MM-dd"),
  97. x.BusinessFieldId,
  98. x.Name,
  99. x.Contents,
  100. x.RegisterUserId,
  101. RegisterUserName = _context.CmUser.FirstOrDefault(user => user.UserId == x.RegisterUserId).Name,
  102. x.ApproveDate,
  103. RegisterDate = x.RegisterDate.Value.ToString("yyyy-MM-dd"),
  104. x.ApproverUserId,
  105. ApproverUserName = _context.CmUser.FirstOrDefault(user => user.UserId == x.ApproverUserId).Name,
  106. });
  107. return list;
  108. }
  109. [HttpGet("[action]")]
  110. public IActionResult Get([FromQuery] string siteId, [FromQuery] DateTime addDate, [FromQuery] string businessFieldId) {
  111. var query = _service.GetAll();
  112. var item = query.Where(
  113. x => x.SiteId == Util.ToInt(siteId)
  114. && x.AddDate == addDate.Date
  115. && x.BusinessFieldId == Util.ToInt(businessFieldId)
  116. ).Select(x => new {
  117. x.SiteId,
  118. x.AddDate,
  119. x.BusinessFieldId,
  120. x.Name,
  121. x.Contents,
  122. x.SiteInfoDatas,
  123. x.Datas,
  124. x.RegisterUserId,
  125. x.RegisterDate,
  126. x.ApproveDate,
  127. x.ApproverUserId,
  128. ApproverUserName = _context.CmUser.FirstOrDefault(user => user.UserId == x.ApproverUserId).Name,
  129. x.ApproverUserId2,
  130. ApproverUserName2 = _context.CmUser.FirstOrDefault(user => user.UserId == x.ApproverUserId2).Name,
  131. x.ApproverUserId3,
  132. ApproverUserName3 = _context.CmUser.FirstOrDefault(user => user.UserId == x.ApproverUserId3).Name,
  133. x.ApproverUserId4,
  134. ApproverUserName4 = _context.CmUser.FirstOrDefault(user => user.UserId == x.ApproverUserId4).Name,
  135. x.ApproverUserId5,
  136. ApproverUserName5 = _context.CmUser.FirstOrDefault(user => user.UserId == x.ApproverUserId5).Name,
  137. }).FirstOrDefault();
  138. return Ok(item);
  139. }
  140. private static string AreaParse(String areaVal) {
  141. string returnVal = "";
  142. float val;
  143. if (!Util.IsNullOrEmpty(areaVal) && float.TryParse(areaVal, out val)) {
  144. returnVal = val.ToString("#,##0.00") + "㎡ (" + (val / 3.3058).ToString("#,##0.00") + "평)";
  145. }
  146. return returnVal;
  147. }
  148. /// <summary>
  149. /// 저장
  150. /// </summary>
  151. /// <param name="data"></param>
  152. /// <returns></returns>
  153. [HttpPost("[action]")]
  154. public IActionResult Save([FromBody] FmsMonthlyReport data, [FromQuery] bool isCreate) {
  155. _logger.LogInformation($"Save isCreate({isCreate})");
  156. //_logger.LogInformation(data.Dump());
  157. if (ModelState.IsValid) {
  158. _service.Save(data, isCreate);
  159. } else {
  160. return BadRequest(ModelState);
  161. }
  162. return Ok();
  163. }
  164. [HttpPost("[action]")]
  165. public IActionResult Approve([FromQuery] string siteId, [FromQuery] string approverUserId, [FromQuery] DateTime addDate, [FromQuery] string businessFieldId) {
  166. _service.Approve(Util.ToInt(siteId), approverUserId, addDate, Util.ToInt(businessFieldId));
  167. return Ok();
  168. }
  169. [HttpDelete("[action]")]
  170. public IActionResult Delete([FromQuery] string siteId, [FromQuery] DateTime addDate, [FromQuery] string businessFieldId) {
  171. _service.Delete(Util.ToInt(siteId), addDate, Util.ToInt(businessFieldId));
  172. return Ok();
  173. }
  174. }
  175. }