EquipmentCodeTypeController.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  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 EquipmentCodeTypeController : Controller {
  19. private readonly ILogger<EquipmentCodeTypeController> _logger;
  20. private readonly FMSContext _context;
  21. private EquipmentCodeTypeService _service;
  22. public EquipmentCodeTypeController(
  23. ILogger<EquipmentCodeTypeController> logger,
  24. FMSContext context,
  25. EquipmentCodeTypeService 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<FmsEquipmentCodeType> _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<FmsEquipmentCodeType> query) {
  48. var list = query.Select(x => new {
  49. x.EquipmentTypeId,
  50. x.Name,
  51. x.Description,
  52. IsUse = x.IsUse ? "Y" : "N",
  53. });
  54. return list;
  55. }
  56. /// <summary>
  57. /// 목록
  58. /// </summary>
  59. /// <param name="req"></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.EquipmentTypeId,
  98. x.Name,
  99. x.Description,
  100. x.IsUse
  101. });
  102. return Ok(list.First());
  103. }
  104. /// <summary>
  105. /// 수정
  106. /// </summary>
  107. [HttpPost("{id}")]
  108. public IActionResult Edit(int id, [FromBody] FmsEquipmentCodeType data) {
  109. _logger.LogInformation("Edit");
  110. _logger.LogInformation("id:" + id);
  111. //_logger.LogInformation(data.Dump());
  112. if (id != data.EquipmentTypeId) {
  113. return BadRequest("잘못된 접근입니다.");
  114. }
  115. if (ModelState.IsValid) {
  116. _service.Edit(id, data);
  117. } else {
  118. return BadRequest(ModelState);
  119. }
  120. return Ok();
  121. }
  122. /// <summary>
  123. /// 등록
  124. /// </summary>
  125. [HttpPut]
  126. public IActionResult Create([FromBody] FmsEquipmentCodeType data) {
  127. _logger.LogInformation("Create");
  128. //_logger.LogInformation(data.Dump());
  129. if (ModelState.IsValid) {
  130. _service.Create(data);
  131. } else {
  132. return BadRequest(ModelState);
  133. }
  134. return Ok();
  135. }
  136. /// <summary>
  137. /// 삭제
  138. /// </summary>
  139. [HttpDelete("{id}")]
  140. public IActionResult Delete(int id) {
  141. _service.Delete(id);
  142. return Ok();
  143. }
  144. }
  145. }