FacilityStateService.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  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 FacilityStateService {
  18. private readonly ILogger<FacilityStateService> _logger;
  19. private readonly FMSContext _context;
  20. private readonly StorageHelper _storage;
  21. public FacilityStateService(
  22. ILogger<FacilityStateService> logger,
  23. FMSContext context,
  24. StorageHelper storage) {
  25. _logger = logger;
  26. _context = context;
  27. _storage = storage;
  28. }
  29. public IQueryable<FmsFacilityState> GetAll() {
  30. var query = _context.FmsFacilityState;//.AsNoTracking();
  31. return query;
  32. }
  33. public IQueryable<FmsFacilityState> Get(int id) {
  34. var data = _context.FmsFacilityState.Where(x => x.FacilityStateId == id);
  35. return data;
  36. }
  37. public IQueryable<FmsFacilityStateDetail> GetDetail(int id) {
  38. var data = _context.FmsFacilityStateDetail.Where(x => x.FacilityStateId == id);
  39. return data;
  40. }
  41. public void Create(FmsFacilityState data) {
  42. // if (data.StartDate <= DateTime.Today) {
  43. // throw new ServiceException("시작일은 당일 이후로 설정하시기 바랍니다.");
  44. // }
  45. using (var transaction = _context.Database.BeginTransaction()) {
  46. int num = 1;
  47. foreach (var item in data.FmsFacilityStateDetail) {
  48. item.QuestionId = num++;
  49. }
  50. _context.FmsFacilityState.Add(data);
  51. _context.SaveChanges();
  52. transaction.Commit();
  53. }
  54. }
  55. public void Edit(int id, FmsFacilityState data) {
  56. var persist = _context.FmsFacilityState.Where(x => x.FacilityStateId == id).FirstOrDefault();
  57. if (persist == null) {
  58. throw new ServiceException("정보를 찾을 수 없습니다.");
  59. }
  60. // if (persist.StartDate <= DateTime.Today) {
  61. // throw new ServiceException("진행중인 질문은 수정할 수 없습니다.");
  62. // }
  63. if (persist.EndDate < DateTime.Today) {
  64. throw new ServiceException("완료된 질문은 수정할 수 없습니다.");
  65. }
  66. using (var transaction = _context.Database.BeginTransaction()) {
  67. //if (isAdmin == 1) {
  68. persist.Title = data.Title;
  69. persist.StartDate = data.StartDate;
  70. persist.EndDate = data.EndDate;
  71. persist.Note = data.Note;
  72. var oldDetailList = _context.FmsFacilityStateDetail.Where(x => x.FacilityStateId == persist.FacilityStateId && x.Type == 2).ToList();
  73. _context.FmsFacilityStateDetail.RemoveRange(persist.FmsFacilityStateDetail);
  74. _context.SaveChanges();
  75. int num = 1;
  76. foreach (var item in data.FmsFacilityStateDetail) {
  77. persist.FmsFacilityStateDetail.Add(new FmsFacilityStateDetail() {
  78. FacilityStateId = persist.FacilityStateId,
  79. QuestionId = num,
  80. Type = 1,
  81. SiteId = null,
  82. Content = item.Content
  83. });
  84. foreach (var item2 in oldDetailList.Where(f => f.QuestionId == item.QuestionId)) {
  85. persist.FmsFacilityStateDetail.Add(new FmsFacilityStateDetail() {
  86. FacilityStateId = persist.FacilityStateId,
  87. QuestionId = num,
  88. Type = 2,
  89. SiteId = item2.SiteId,
  90. Content = item2.Content
  91. });
  92. }
  93. num = num + 1;
  94. }
  95. _context.FmsFacilityState.Update(persist);
  96. _context.SaveChanges();
  97. transaction.Commit();
  98. }
  99. }
  100. public void Reply(int id, int siteId, FmsFacilityState data) {
  101. var persist = _context.FmsFacilityState.Where(x => x.FacilityStateId == id).FirstOrDefault();
  102. if (persist == null) {
  103. throw new ServiceException("정보를 찾을 수 없습니다.");
  104. }
  105. if (persist.StartDate > DateTime.Today) {
  106. throw new ServiceException("대기중인 질문은 답변할 수 없습니다.");
  107. }
  108. if (persist.EndDate < DateTime.Today) {
  109. throw new ServiceException("완료된 질문은 답변할 수 없습니다.");
  110. }
  111. using (var transaction = _context.Database.BeginTransaction()) {
  112. var delList = persist.FmsFacilityStateDetail.Where(x => x.Type == 2 && x.SiteId == siteId);
  113. _context.FmsFacilityStateDetail.RemoveRange(delList);
  114. foreach (var item in data.FmsFacilityStateDetail) {
  115. if (item.Type == 2 && item.SiteId == siteId && item.Content != "") {
  116. FmsFacilityStateDetail detailList = new FmsFacilityStateDetail() {
  117. FacilityStateId = id,
  118. QuestionId = item.QuestionId,
  119. Type = 2,
  120. SiteId = siteId,
  121. Content = item.Content
  122. };
  123. _context.FmsFacilityStateDetail.Add(detailList);
  124. }
  125. }
  126. _context.SaveChanges();
  127. transaction.Commit();
  128. }
  129. }
  130. public void Delete(int id) {
  131. using (var trans = new TransactionScope()) {
  132. var data = _context.FmsFacilityStateDetail.Where(x => x.FacilityStateId == id);
  133. _context.FmsFacilityStateDetail.RemoveRange(data);
  134. var data2 = _context.FmsFacilityState.Where(x => x.FacilityStateId == id).FirstOrDefault();
  135. _context.FmsFacilityState.Remove(data2);
  136. _context.SaveChanges();
  137. trans.Complete();
  138. }
  139. }
  140. }
  141. }