FacilityController.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  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. namespace FMSApp.Controllers {
  16. [Authorize]
  17. [ApiController]
  18. [ApiVersion("1")]
  19. [Route("api/app/[controller]")]
  20. public class FacilityController : Controller {
  21. private readonly ILogger<FacilityController> _logger;
  22. private readonly FMSContext _context;
  23. private readonly FacilityService _service;
  24. private readonly StorageHelper _storage;
  25. public FacilityController(
  26. ILogger<FacilityController> logger,
  27. FMSContext context,
  28. FacilityService service,
  29. StorageHelper storage
  30. ) {
  31. _logger = logger;
  32. _context = context;
  33. _service = service;
  34. _storage = storage;
  35. }
  36. /// <summary>
  37. /// 목록
  38. /// </summary>
  39. [HttpGet]
  40. public IActionResult List([FromQuery] PagingRequest req, [FromQuery] string siteId) {
  41. var query = _FilterAndSort(req);
  42. if (!string.IsNullOrEmpty(siteId)) {
  43. query = query.Where(x => x.SiteId == Util.ToInt(siteId));
  44. }
  45. var list = query.Select(x => new {
  46. x.SiteId,
  47. x.FacilityCode,
  48. CmSite = new {
  49. x.CmSite.Name,
  50. },
  51. CmBuilding = new {
  52. x.CmBuilding.BuildingId,
  53. x.CmBuilding.Name,
  54. },
  55. CmFloor = new {
  56. x.CmFloor.FloorId,
  57. x.CmFloor.Name,
  58. },
  59. CmZone = new {
  60. x.CmZone.ZoneId,
  61. x.CmZone.Name,
  62. },
  63. x.FirstClassId,
  64. FirstClass = new {
  65. x.FmsFacilityCodeClass.Name,
  66. },
  67. x.SecondClassId,
  68. SecondClass = new {
  69. x.FmsFacilityCodeClass1.Name,
  70. },
  71. x.ThirdClassId,
  72. ThirdClass = new {
  73. x.FmsFacilityCodeClass2.Name,
  74. },
  75. x.Name,
  76. x.Manufacturer,
  77. x.FacilityCapacity,
  78. x.IsUse,
  79. });
  80. var paging = PagingList.Pagination(list, req.page, req.limit);
  81. return Ok(paging);
  82. }
  83. [HttpGet("[action]")]
  84. public IActionResult Get([FromQuery] string siteId, [FromQuery] string facilityCode) {
  85. _logger.LogInformation("siteId : " + siteId + ", facilityCode : " + facilityCode);
  86. var query = _service.GetAll().Where(x => x.SiteId == Util.ToInt(siteId)
  87. && x.FacilityCode == Util.ToInt(facilityCode));
  88. var item = query.Select(x => new {
  89. x.SiteId,
  90. x.FileId,
  91. CmFile = _storage.ParseFile(x.CmFile),
  92. x.FacilityCode,
  93. x.FacilityTypeId,
  94. x.FirstClassId,
  95. x.SecondClassId,
  96. x.ThirdClassId,
  97. x.DeviceType,
  98. x.Name,
  99. x.Nickname,
  100. x.FacilityUsage,
  101. x.Manufacturer,
  102. x.ManufactureDate,
  103. x.IsUse,
  104. x.FacilityCapacity,
  105. x.Rfid,
  106. x.RatedPowerConsumption,
  107. x.RatedCop,
  108. x.ManufactureSerial,
  109. x.ManufactureModel,
  110. x.Supplier,
  111. x.SupplierPhoneNo,
  112. x.BuildingId,
  113. x.FloorId,
  114. x.ZoneId,
  115. x.InstallDate,
  116. x.OperationStartDate,
  117. x.MainContactorUserId,
  118. MainContactor = new {
  119. x.MainContactor.Name,
  120. },
  121. x.SubContactorUserId,
  122. SubContactor = new {
  123. x.SubContactor.Name,
  124. },
  125. x.FacilityCost,
  126. x.FacilityCount,
  127. x.FuelTypeId,
  128. x.ContractType,
  129. ContractTypeName = _context.FmsContractType.FirstOrDefault(c => c.ContractTypeId == x.ContractType).Name,
  130. x.Note,
  131. x.Multiple,
  132. }).FirstOrDefault();
  133. return Ok(item);
  134. }
  135. /// <summary>
  136. /// 저장
  137. /// </summary>
  138. /// <param name="data"></param>
  139. /// <returns></returns>
  140. [HttpPost("[action]")]
  141. public IActionResult Save([FromBody] CmFacility data) {
  142. _logger.LogInformation("Save");
  143. //_logger.LogInformation(data.Dump());
  144. if (ModelState.IsValid) {
  145. _service.Save(data);
  146. } else {
  147. return BadRequest(ModelState);
  148. }
  149. return Ok();
  150. }
  151. [HttpDelete("{siteId}/{facilityCode}")]
  152. public IActionResult Delete(int siteId, int facilityCode) {
  153. _service.Delete(siteId, facilityCode);
  154. return Ok();
  155. }
  156. // 검색 & 정렬 공통
  157. private IQueryable<CmFacility> _FilterAndSort(PagingRequest req) {
  158. var query = _service.GetAll();
  159. query = query.Where(x => !(new int[] { 99, 100, 101, 102, 103 }).Contains(x.FacilityTypeId));
  160. // 기본 Entity 검색
  161. query = query.Filter(req.conditions);
  162. // 기본 Entity 정렬
  163. query = query.Sort(req.sort);
  164. return query;
  165. }
  166. }
  167. }