Investigation1HistoryController.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  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 Microsoft.AspNetCore.Mvc;
  8. using Microsoft.Extensions.Logging;
  9. using Microsoft.AspNetCore.Authorization;
  10. using FMSAdmin.Helpers;
  11. using System.Data;
  12. using System.IO;
  13. using OfficeOpenXml;
  14. using FMSAdmin.Services;
  15. namespace FMSAdmin.Controllers {
  16. [Authorize]
  17. [ApiController]
  18. [ApiVersion("1")]
  19. [Route("api/[controller]")]
  20. public class Investigation1HistoryController : Controller {
  21. private readonly ILogger<Investigation1HistoryController> _logger;
  22. private readonly FMSContext _context;
  23. private readonly Investigation1HistoryService _service;
  24. private readonly StorageHelper _storage;
  25. public Investigation1HistoryController(
  26. ILogger<Investigation1HistoryController> logger,
  27. FMSContext context,
  28. Investigation1HistoryService service,
  29. StorageHelper storage
  30. ) {
  31. _logger = logger;
  32. _context = context;
  33. _service = service;
  34. _storage = storage;
  35. }
  36. /// <summary>
  37. /// 셀렉트 공통
  38. /// </summary>
  39. /// <param name="query"></param>
  40. /// <returns></returns>
  41. private dynamic _ListSelect(IQueryable<CmInvestigation1History> query) {
  42. var list = query.Select(x => new {
  43. x.SiteId,
  44. x.InvestigationId,
  45. x.HistoryId,
  46. x.RevisionNo,
  47. x.FileId,
  48. CmFile = _storage.ParseFile(x.CmFile),
  49. x.Description,
  50. x.UpdatedDate,
  51. UpdateUserName = x.CmInvestigation1.IsAllSite ? x.CmUser.CmSite.Name : x.CmUser.Name,
  52. });
  53. return list;
  54. }
  55. /// <summary>
  56. /// 목록
  57. /// </summary>
  58. [HttpGet]
  59. public IActionResult List([FromQuery] PagingRequest req, [FromQuery] string siteId, [FromQuery] string investigationId) {
  60. var query = _FilterAndSort(req);
  61. query = query.Where(x => x.InvestigationId == Util.ToInt(investigationId));
  62. if (!Util.IsNullOrEmpty(siteId)) {
  63. var currentUserSiteId = _context.CmUser.Where(x => x.UserId == User.Identity.Name).Select(x => x.SiteId).SingleOrDefault();
  64. query = query.Where(x => x.CmUser.SiteId == currentUserSiteId || x.CmUser.SiteId == x.CmInvestigation1.SiteId);
  65. }
  66. var list = _ListSelect(query);
  67. var paging = PagingList.Pagination(list, req.page, req.limit);
  68. return Ok(paging);
  69. }
  70. [HttpDelete("{siteId}/{investigationId}/{historyId}")]
  71. public IActionResult Delete(int siteId, int investigationId, int historyId) {
  72. _service.Delete(siteId, investigationId, historyId);
  73. return Ok();
  74. }
  75. // 검색 & 정렬 공통
  76. private IQueryable<CmInvestigation1History> _FilterAndSort(PagingRequest req) {
  77. var query = _service.GetAll();
  78. // 기본 Entity 검색
  79. query = query.Filter(req.conditions);
  80. // 기본 Entity 정렬
  81. query = query.Sort(req.sort);
  82. return query;
  83. }
  84. /// <summary>
  85. /// 조회
  86. /// </summary>
  87. [HttpGet("{siteId}/{investigationId}/{historyId}")]
  88. public IActionResult Get(int siteId, int investigationId, int historyId) {
  89. var data = _service.Get(siteId, investigationId, historyId);
  90. if (data.Count() == 0) {
  91. return NotFound("정보를 찾을 수 없습니다.");
  92. }
  93. var list = data.Select(x => new {
  94. x.SiteId,
  95. x.InvestigationId,
  96. x.HistoryId,
  97. x.RevisionNo,
  98. CmUser = new {
  99. x.CmUser.Name,
  100. },
  101. CmFile = _storage.ParseFile(x.CmFile),
  102. x.Description
  103. });
  104. return Ok(list.First());
  105. }
  106. /// <summary>
  107. /// 조회
  108. /// </summary>
  109. [HttpGet("{siteId}/{InvestigationId}")]
  110. public int GetNextRevisionNo(int siteId, int investigationId) {
  111. int nextRevisionNo = _service.GetRevisionNo(siteId, investigationId);
  112. return nextRevisionNo;
  113. }
  114. /// <summary>
  115. /// 등록
  116. /// </summary>
  117. [HttpPut]
  118. public IActionResult Create([FromBody] CmInvestigation1History data) {
  119. _logger.LogInformation("Create");
  120. //_logger.LogInformation(data.Dump());
  121. if (ModelState.IsValid) {
  122. _service.Create(data);
  123. } else {
  124. return BadRequest(ModelState);
  125. }
  126. return Ok();
  127. }
  128. /// <summary>
  129. /// 수정
  130. /// </summary>
  131. [HttpPost("{siteId}/{investigationId}/{historyId}")]
  132. public IActionResult Edit(int siteId, int investigationId, int historyId, [FromBody] CmInvestigation1History data) {
  133. _logger.LogInformation("Edit");
  134. _logger.LogInformation("id:" + historyId);
  135. _logger.LogInformation("siteId:" + siteId);
  136. //_logger.LogInformation(data.Dump());
  137. if (historyId != data.HistoryId) {
  138. return BadRequest("잘못된 접근입니다.");
  139. }
  140. if (ModelState.IsValid) {
  141. data.UpdatedUserId = User.Identity.Name;
  142. _service.Edit(data);
  143. } else {
  144. return BadRequest(ModelState);
  145. }
  146. return Ok();
  147. }
  148. /// <summary>
  149. /// 삭제
  150. /// </summary>
  151. // [HttpDelete("{siteId}/{InvestigationId}/{historyId}")]
  152. // public IActionResult Delete(int siteId, int id) {
  153. // _service.Delete(id, siteId);
  154. // return Ok();
  155. // }
  156. }
  157. }