SitePriceService.cs 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  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 Microsoft.Extensions.Options;
  13. using Microsoft.IdentityModel.Tokens;
  14. using FMSAdmin.Models;
  15. namespace FMSAdmin.Services {
  16. public class SitePriceService {
  17. private readonly ILogger<SitePriceService> _logger;
  18. private readonly FMSContext _context;
  19. public SitePriceService(
  20. ILogger<SitePriceService> logger,
  21. FMSContext context) {
  22. _logger = logger;
  23. _context = context;
  24. }
  25. public IQueryable<BemsSitePrice> GetAll() {
  26. var query = _context.BemsSitePrice;
  27. return query;
  28. }
  29. public IQueryable<BemsSitePrice> Gets(int id, int siteId) {
  30. var data = _context.BemsSitePrice.Where(x => x.SiteId == siteId && x.FuelTypeId == id && x.PriceTypeId == id && x.PriceCode == id.ToString());
  31. return data;
  32. }
  33. public void Save(int siteId, int fuelTypeId, int priceTypeId, BemsSitePrice[] data) {
  34. var oldPriceTypeId = data[0].PriceTypeId;
  35. var persist = _context.BemsSitePrice.Where(x => x.SiteId == siteId && x.FuelTypeId == fuelTypeId && x.PriceTypeId == priceTypeId).ToList();
  36. if (persist.Count > 0) {
  37. if (priceTypeId != oldPriceTypeId) {
  38. throw new ServiceException("존재하고 있는 요금제입니다.");
  39. }
  40. }
  41. using (var transaction = _context.Database.BeginTransaction()) {
  42. var oldPersist = _context.BemsSitePrice.Where(x => x.SiteId == siteId && x.FuelTypeId == fuelTypeId && x.PriceTypeId == oldPriceTypeId).ToList();
  43. _context.BemsSitePrice.RemoveRange(oldPersist);
  44. _context.SaveChanges();
  45. foreach (var item in data) {
  46. item.PriceTypeId = priceTypeId;
  47. _context.BemsSitePrice.Add(item);
  48. }
  49. _context.SaveChanges();
  50. //BemsPriceFormula Update
  51. //전기:100, 가스:101, 수도:102, 등유:104, LPG:105, 증온수:106
  52. int facilityTypeId = fuelTypeId == 1 ? 100 : fuelTypeId == 2 ? 101 : fuelTypeId == 3 ? 102 : fuelTypeId == 4 ? 104 : fuelTypeId == 5 ? 105 : 106;
  53. int? facilityCode = _context.CmFacility.Where(x => x.SiteId == siteId && x.FacilityTypeId == facilityTypeId).Select(x => x.FacilityCode).FirstOrDefault();
  54. int formulaId = 1; //formulaId 전체로 매칭
  55. var formulaList = _context.BemsFormula.Where(x => x.SiteId == siteId && x.FacilityTypeId == facilityTypeId && x.FacilityCode == facilityCode && x.FormulaId == formulaId).ToList();
  56. if (formulaList.Count == 0) {
  57. throw new Exception("수식을 먼저 설정하세요.");
  58. }
  59. if (oldPriceTypeId != 0) {
  60. var persist2 = _context.BemsPriceFormula.Where(x => x.SiteId == siteId && x.PriceTypeId == oldPriceTypeId).ToList();
  61. _context.BemsPriceFormula.RemoveRange(persist2);
  62. _context.SaveChanges();
  63. BemsPriceFormula oldPriceFormula = new BemsPriceFormula {
  64. SiteId = siteId,
  65. PriceTypeId = oldPriceTypeId,
  66. FacilityTypeId = facilityTypeId,
  67. FormulaId = (int)formulaId,
  68. FacilityCode = (int)facilityCode,
  69. UseYN = "N"
  70. };
  71. _context.BemsPriceFormula.Add(oldPriceFormula);
  72. _context.SaveChanges();
  73. }
  74. if (facilityCode != null) {
  75. var persist3 = _context.BemsPriceFormula.Where(x => x.SiteId == siteId && x.PriceTypeId == priceTypeId).ToList();
  76. _context.BemsPriceFormula.RemoveRange(persist3);
  77. _context.SaveChanges();
  78. BemsPriceFormula newPriceFormula = new BemsPriceFormula {
  79. SiteId = siteId,
  80. PriceTypeId = priceTypeId,
  81. FacilityTypeId = facilityTypeId,
  82. FormulaId = (int)formulaId,
  83. FacilityCode = (int)facilityCode,
  84. UseYN = "Y"
  85. };
  86. _context.BemsPriceFormula.Add(newPriceFormula);
  87. _context.SaveChanges();
  88. }
  89. transaction.Commit();
  90. }
  91. }
  92. public void Delete(int siteId, int fuelTypeId, int priceTypeId) {
  93. using (var transaction = _context.Database.BeginTransaction()) {
  94. var persist = _context.BemsSitePrice.Where(x => x.SiteId == siteId && x.FuelTypeId == fuelTypeId && x.PriceTypeId == priceTypeId);
  95. _context.BemsSitePrice.RemoveRange(persist);
  96. _context.SaveChanges();
  97. //BemsPriceFormula Update
  98. //전기:100, 가스:101, 수도:102, 등유:104, LPG:105, 증온수:106
  99. int facilityTypeId = fuelTypeId == 1 ? 100 : fuelTypeId == 2 ? 101 : fuelTypeId == 3 ? 102 : fuelTypeId == 4 ? 104 : fuelTypeId == 5 ? 105 : 106;
  100. int? facilityCode = _context.CmFacility.Where(x => x.SiteId == siteId && x.FacilityTypeId == facilityTypeId).Select(x => x.FacilityCode).FirstOrDefault();
  101. int formulaId = 1; //formulaId 전체로 매칭
  102. var persist2 = _context.BemsPriceFormula.Where(x => x.SiteId == siteId && x.PriceTypeId == priceTypeId).ToList();
  103. _context.BemsPriceFormula.RemoveRange(persist2);
  104. _context.SaveChanges();
  105. BemsPriceFormula oldPriceFormula = new BemsPriceFormula {
  106. SiteId = siteId,
  107. PriceTypeId = priceTypeId,
  108. FacilityTypeId = facilityTypeId,
  109. FormulaId = formulaId,
  110. FacilityCode = (int)facilityCode,
  111. UseYN = "N"
  112. };
  113. _context.BemsPriceFormula.Add(oldPriceFormula);
  114. _context.SaveChanges();
  115. transaction.Commit();
  116. }
  117. }
  118. public IQueryable<BemsFuelType> GetFuelType() {
  119. var data = _context.BemsFuelType.Where(x => x.FuelTypeId != 0);
  120. return data;
  121. }
  122. private BemsPriceFormula GetBemsPriceFormula(int siteId, int fuelTypeId, int priceTypeId) {
  123. //전기:100, 가스:101, 수도:102, 등유:104, LPG:105, 증온수:106
  124. int facilityTypeId = fuelTypeId == 1 ? 100 : fuelTypeId == 2 ? 101 : fuelTypeId == 3 ? 102 : fuelTypeId == 4 ? 104 : fuelTypeId == 5 ? 105 : 106;
  125. int? facilityCode = _context.CmFacility.Where(x => x.SiteId == siteId && x.FacilityTypeId == facilityTypeId).Select(x => x.FacilityCode).FirstOrDefault();
  126. int formulaId = 1; //formulaId 전체로 매칭
  127. var persist2 = _context.BemsPriceFormula.Where(x => x.SiteId == siteId && x.FacilityTypeId == facilityTypeId && x.FacilityCode == facilityCode && x.PriceTypeId == priceTypeId && x.FormulaId == formulaId).FirstOrDefault();
  128. return persist2;
  129. }
  130. }
  131. }