AccidentCodeTypeController.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. using System;
  2. using System.IO;
  3. using System.Linq;
  4. using FMSAdmin.Data;
  5. using FMSAdmin.Entities;
  6. using FMSAdmin.Helpers;
  7. using FMSAdmin.Models;
  8. using FMSAdmin.Services;
  9. using Microsoft.AspNetCore.Authorization;
  10. using Microsoft.AspNetCore.Mvc;
  11. using Microsoft.Extensions.Logging;
  12. using OfficeOpenXml;
  13. namespace FMSAdmin.Controllers {
  14. [Authorize]
  15. [ApiController]
  16. [ApiVersion("1")]
  17. [Route("api/[controller]")]
  18. public class AccidentCodeTypeController : Controller {
  19. private readonly ILogger<AccidentCodeTypeController> _logger;
  20. private readonly FMSContext _context;
  21. private AccidentCodeTypeService _service;
  22. public AccidentCodeTypeController(
  23. ILogger<AccidentCodeTypeController> logger,
  24. FMSContext context,
  25. AccidentCodeTypeService service
  26. ) {
  27. _logger = logger;
  28. _context = context;
  29. _service = service;
  30. }
  31. /// <summary>
  32. /// 검색 & 정렬
  33. /// </summary>
  34. /// <param name="req"></param>
  35. /// <returns></returns>
  36. private IQueryable<FmsAccidentCodeType> _FilterAndSort(PagingRequest req) {
  37. var query = _service.GetAll();
  38. query = query.Filter(req.conditions);
  39. query = query.Sort(req.sort);
  40. return query;
  41. }
  42. /// <summary>
  43. /// 셀렉트 공통
  44. /// </summary>
  45. /// <param name="query"></param>
  46. /// <returns></returns>
  47. private dynamic _ListSelect(IQueryable<FmsAccidentCodeType> query) {
  48. var list = query.Select(x => new {
  49. x.AccidentTypeId,
  50. x.Name,
  51. IsUse = (x.IsUse.GetValueOrDefault() ? "Y" : "N")
  52. });
  53. return list;
  54. }
  55. /// <summary>
  56. /// 목록
  57. /// </summary>
  58. /// <param name="req"></param>
  59. /// <param name="siteId"></param>
  60. /// <returns></returns>
  61. [HttpGet]
  62. public IActionResult List([FromQuery] PagingRequest req) {
  63. var query = _FilterAndSort(req);
  64. var list = _ListSelect(query);
  65. var paging = PagingList.Pagination(list, req.page, req.limit);
  66. return Ok(paging);
  67. }
  68. // 엑셀 다운로드
  69. [AllowAnonymous]
  70. [HttpGet("excel")]
  71. public IActionResult ExportExcel([FromQuery] PagingRequest req, string filename) {
  72. var query = _FilterAndSort(req);
  73. var list = _ListSelect(query);
  74. var stream = new MemoryStream();
  75. using (var package = new ExcelPackage(stream)) {
  76. var workSheet = package.Workbook.Worksheets.Add("Sheet1");
  77. workSheet.Cells.LoadFromCollection(list, true);
  78. if (req.columns != null && req.columns.Length > 0) {
  79. workSheet.AddStyle(req.columns, req.sort?.order?.ToLower() == "asc", filename);
  80. }
  81. package.Save();
  82. }
  83. stream.Position = 0;
  84. string excelName = $"excel-{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.xlsx";
  85. return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", excelName);
  86. }
  87. /// <summary>
  88. /// 조회
  89. /// </summary>
  90. [HttpGet("{id}")]
  91. public IActionResult Get(int id) {
  92. var data = _service.Get(id);
  93. if (data.Count() == 0) {
  94. return NotFound("사이트 정보를 찾을 수 없습니다.");
  95. }
  96. var list = data.Select(x => new {
  97. x.AccidentTypeId,
  98. x.Name,
  99. x.IsUse
  100. });
  101. return Ok(list.First());
  102. }
  103. /// <summary>
  104. /// 수정
  105. /// </summary>
  106. [HttpPost("{id}")]
  107. public IActionResult Edit(int id, [FromBody] FmsAccidentCodeType data) {
  108. _logger.LogInformation("Edit");
  109. _logger.LogInformation("id:" + id);
  110. //_logger.LogInformation(data.Dump());
  111. if (id != data.AccidentTypeId) {
  112. return BadRequest("잘못된 접근입니다.");
  113. }
  114. if (ModelState.IsValid) {
  115. _service.Edit(id, data);
  116. } else {
  117. return BadRequest(ModelState);
  118. }
  119. return Ok();
  120. }
  121. /// <summary>
  122. /// 등록
  123. /// </summary>
  124. [HttpPut]
  125. public IActionResult Create([FromBody] FmsAccidentCodeType data) {
  126. _logger.LogInformation("Create");
  127. //_logger.LogInformation(data.Dump());
  128. if (ModelState.IsValid) {
  129. _service.Create(data);
  130. } else {
  131. return BadRequest(ModelState);
  132. }
  133. return Ok();
  134. }
  135. /// <summary>
  136. /// 삭제
  137. /// </summary>
  138. [HttpDelete("{id}")]
  139. public IActionResult Delete(int id) {
  140. _service.Delete(id);
  141. return Ok();
  142. }
  143. }
  144. }