FacilityService.cs 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IdentityModel.Tokens.Jwt;
  4. using System.Linq;
  5. using System.Security.Claims;
  6. using System.Text;
  7. using FMSAdmin.Data;
  8. using FMSAdmin.Helpers;
  9. using FMSAdmin.Entities;
  10. using Microsoft.EntityFrameworkCore;
  11. using Microsoft.Extensions.Logging;
  12. using System.Transactions;
  13. using Microsoft.Extensions.Options;
  14. using Microsoft.IdentityModel.Tokens;
  15. using FMSAdmin.Models;
  16. namespace FMSAdmin.Services {
  17. public class FacilityService {
  18. private readonly ILogger<FacilityService> _logger;
  19. private readonly FMSContext _context;
  20. private readonly StorageHelper _storage;
  21. private readonly QrCodeHelper _qrCodeHelper;
  22. public FacilityService(
  23. ILogger<FacilityService> logger,
  24. FMSContext context,
  25. StorageHelper storage,
  26. QrCodeHelper qrCodeHelper) {
  27. _logger = logger;
  28. _context = context;
  29. _storage = storage;
  30. _qrCodeHelper = qrCodeHelper;
  31. }
  32. public int checkName(CmFacility data, bool isExcel = false) {
  33. var check = _context.CmFacility.Where(x => x.Name == data.Name && x.Nickname == data.Nickname && x.SiteId == data.SiteId).Count();
  34. if (!isExcel && check > 0) {
  35. throw new ServiceException("동일 정보가 존재합니다.");
  36. }
  37. return check;
  38. }
  39. public int checkRfid(CmFacility data, bool isExcel = false) {
  40. var check = _context.CmFacility.Where(x => x.Rfid == data.Rfid && x.SiteId == data.SiteId).Count();
  41. if (!isExcel && check > 0) {
  42. throw new ServiceException("QR코드값이 중복되었습니다.");
  43. }
  44. return check;
  45. }
  46. public void ImportExcel(IList<CmFacility> list) {
  47. using (var transaction = _context.Database.BeginTransaction()) {
  48. _context.CmFacility.AddRange(list);
  49. _context.SaveChanges();
  50. transaction.Commit();
  51. }
  52. }
  53. public void Save(CmFacility data) {
  54. using (var trans = new TransactionScope()) {
  55. var persist = _context.CmFacility
  56. .Where(x => x.FacilityCode == data.FacilityCode).FirstOrDefault();
  57. //var facilityTypeId = data.FacilityTypeId == 99 ? 99 : _context.BemsFacilityType.Where(x => x.FacilityTypeId < 99).OrderBy(x => x.FacilityTypeId).Select(x => x.FacilityTypeId).FirstOrDefault();
  58. if (persist == null) {
  59. checkName(data);
  60. if (!Util.IsNullOrEmpty(data.Rfid)) checkRfid(data);
  61. if (data.CmFile != null && data.CmFile.IsUpload) {
  62. var category = _context.CmFileCategory.First(x => x.Name == "facility");
  63. data.CmFile.SiteId = data.SiteId;
  64. data.CmFile.FileCategory = category;
  65. data.CmFile.CreatedDate = DateTime.Now;
  66. } else {
  67. data.CmFile = null;
  68. }
  69. // /data.FacilityTypeId = Util.ToInt(facilityTypeId);
  70. if (data.FacilityTypeId > 99) {
  71. data.IsVirtualFacility = true;
  72. }
  73. data.Multiple = 1;
  74. data.Rfid = data.Rfid.Trim();
  75. _context.CmFacility.Add(data);
  76. _context.SaveChanges();
  77. if (data.CmFile != null && data.CmFile.IsUpload) {
  78. // 카피
  79. _storage.CopyEntity(data.CmFile.Path, data.CmFile);
  80. }
  81. if (!string.IsNullOrEmpty(data.Rfid)) {
  82. _qrCodeHelper.Save(data.Rfid, $"{data.SiteId}_{data.FacilityCode}", "Facility");
  83. }
  84. } else {
  85. if (!persist.Name.Equals(data.Name) && !persist.Name.Equals(data.Nickname)) checkName(data);
  86. if (!Util.IsNullOrEmpty(data.Rfid)) {
  87. if (Util.IsNullOrEmpty(persist.Rfid) || !persist.Rfid.Equals(data.Rfid)) checkRfid(data);
  88. }
  89. if (data.CmFile != null && data.CmFile.IsUpload) {
  90. var category = _context.CmFileCategory.First(x => x.Name == "facility");
  91. data.CmFile.SiteId = data.SiteId;
  92. data.CmFile.FileCategory = category;
  93. data.CmFile.CreatedDate = DateTime.Now;
  94. data.CmFile.Name = data.CmFile.Name;
  95. // persist.CmFile = new CmFile {
  96. // SiteId = data.SiteId,
  97. // FileCategory = category,
  98. // CreatedDate = DateTime.Now,
  99. // Name = data.CmFile.Name,
  100. // FileSize = data.CmFile.FileSize,
  101. // ContentType = data.CmFile.ContentType,
  102. // };
  103. } else if (data.CmFile != null && data.CmFile.IsDelete) {
  104. persist.FileId = null;
  105. persist.CmFile = null;
  106. }
  107. // QR코드 재생성
  108. var qrRefresh = !string.IsNullOrEmpty(data.Rfid) && persist.Rfid != data.Rfid;
  109. persist.SiteId = data.SiteId;
  110. persist.FacilityTypeId = data.FacilityTypeId;
  111. //persist.FacilityCode = data.FacilityCode;
  112. persist.FirstClassId = data.FirstClassId;
  113. persist.SecondClassId = data.SecondClassId;
  114. persist.ThirdClassId = data.ThirdClassId;
  115. persist.DeviceType = data.DeviceType;
  116. persist.ParentFacilityCode = data.ParentFacilityCode;
  117. persist.Name = data.Name;
  118. persist.Nickname = data.Nickname;
  119. persist.Rfid = data.Rfid.Trim();
  120. persist.Manufacturer = data.Manufacturer;
  121. persist.ManufactureDate = data.ManufactureDate;
  122. persist.ManufactureSerial = data.ManufactureSerial;
  123. persist.ManufactureModel = data.ManufactureModel;
  124. persist.Supplier = data.Supplier;
  125. persist.SupplierPhoneNo = data.SupplierPhoneNo;
  126. persist.BuildingId = data.BuildingId;
  127. persist.FloorId = data.FloorId;
  128. persist.ZoneId = data.ZoneId;
  129. persist.InstallDate = data.InstallDate;
  130. persist.OperationStartDate = data.OperationStartDate;
  131. persist.FacilityCapacity = data.FacilityCapacity;
  132. persist.FacilityCost = data.FacilityCost;
  133. persist.FacilityCount = data.FacilityCount;
  134. persist.FacilitySeviceLifeYear = data.FacilitySeviceLifeYear;
  135. persist.FacilityUsage = data.FacilityUsage;
  136. persist.RatedPowerConsumption = data.RatedPowerConsumption;
  137. persist.RatedCop = data.RatedCop;
  138. persist.MainContactorUserId = data.MainContactorUserId;
  139. persist.SubContactorUserId = data.SubContactorUserId;
  140. persist.Note = data.Note;
  141. persist.Reserved1 = data.Reserved1;
  142. persist.Reserved2 = data.Reserved2;
  143. persist.IsUse = data.IsUse;
  144. persist.Multiple = data.Multiple;
  145. //persist.FileId = data.FileId;
  146. if (data.CmFile != null && data.CmFile.IsUpload) {
  147. persist.CmFile = data.CmFile;
  148. }
  149. if (data.FacilityTypeId > 99) {
  150. persist.IsVirtualFacility = true;
  151. } else {
  152. persist.IsVirtualFacility = false;
  153. }
  154. //persist.IsVirtualFacility = data.IsVirtualFacility;
  155. persist.FuelTypeId = data.FuelTypeId;
  156. persist.ContractType = data.ContractType;
  157. _context.SaveChanges();
  158. if (data.CmFile != null && data.CmFile.IsUpload) {
  159. // 카피
  160. _storage.CopyEntity(data.CmFile.Path, persist.CmFile);
  161. if (persist.CmFile != null) {
  162. // 파일 삭제시 진짜 DB삭제?
  163. }
  164. }
  165. if (qrRefresh) {
  166. _qrCodeHelper.Save(data.Rfid, $"{data.SiteId}_{data.FacilityCode}", "Facility");
  167. }
  168. }
  169. trans.Complete();
  170. }
  171. }
  172. public IQueryable<CmFacility> GetAll() {
  173. var query = _context.CmFacility;//.AsNoTracking();
  174. return query;
  175. }
  176. public IQueryable<CmFacility> Get(int id, int siteId) {
  177. var data = _context.CmFacility.Where(x => x.FacilityCode == id && x.SiteId == siteId);
  178. return data;
  179. }
  180. public void Delete(int id, int siteId) {
  181. using (var trans = new TransactionScope()) {
  182. var data = _context.CmFacility.First(x => x.FacilityCode == id && x.SiteId == siteId);
  183. _context.CmFacility.Remove(data);
  184. //data.IsUse = false;
  185. _context.SaveChanges();
  186. trans.Complete();
  187. }
  188. }
  189. }
  190. }