CircularRecordDomainService.cs 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. using Hotline.Orders;
  2. using Hotline.Realtimes;
  3. using Hotline.Share.Dtos.Article;
  4. using Hotline.Share.Enums.Article;
  5. using MapsterMapper;
  6. using Microsoft.AspNetCore.Http;
  7. using XF.Domain.Authentications;
  8. using XF.Domain.Dependency;
  9. using XF.Domain.Repository;
  10. namespace Hotline.Article
  11. {
  12. public class CircularRecordDomainService : ICircularRecordDomainService, IScopeDependency
  13. {
  14. private readonly IRepository<CircularRecord> _circularRecordRepository;
  15. private readonly IRealtimeService _realtimeService;
  16. private readonly IMapper _mapper;
  17. private readonly IRepository<Circular> _circularRepository;
  18. private readonly IRepository<CircularReadGroup> _circularReadGroupRepository;
  19. private readonly ISessionContext _sessionContext;
  20. public CircularRecordDomainService(IRepository<CircularRecord> circularRecordRepository, IRealtimeService realtimeService, IMapper mapper, IRepository<Circular> circularRepository, IRepository<CircularReadGroup> circularReadGroupRepository, ISessionContext sessionContext)
  21. {
  22. _circularRecordRepository = circularRecordRepository;
  23. _realtimeService = realtimeService;
  24. _mapper = mapper;
  25. _circularRepository = circularRepository;
  26. _circularReadGroupRepository = circularReadGroupRepository;
  27. _sessionContext = sessionContext;
  28. }
  29. public async Task RecordUserHandle(List<string> userIds, bool isAdd,string title,string sendContent,int count = 1, CancellationToken cancellationToken= default)
  30. {
  31. foreach (var item in userIds)
  32. {
  33. var userRecord = await _circularRecordRepository.GetAsync(x => x.UserId == item);
  34. if (isAdd)
  35. {
  36. if (userRecord != null)
  37. {
  38. userRecord.RecordCount = userRecord.RecordCount + count;
  39. await _circularRecordRepository.UpdateAsync(userRecord);
  40. }
  41. else
  42. {
  43. userRecord = new CircularRecord();
  44. userRecord.UserId = item;
  45. userRecord.CircularType = Share.Enums.Article.ECircularType.Person;
  46. userRecord.RecordCount = 1;
  47. await _circularRecordRepository.AddAsync(userRecord);
  48. }
  49. }
  50. else
  51. {
  52. if (userRecord != null)
  53. {
  54. if (userRecord.RecordCount > 0)
  55. {
  56. userRecord.RecordCount = userRecord.RecordCount - count;
  57. }
  58. else
  59. {
  60. userRecord.RecordCount = 0;
  61. }
  62. await _circularRecordRepository.UpdateAsync(userRecord);
  63. }
  64. }
  65. try
  66. {
  67. await _realtimeService.CircularRecoordAsync(userRecord.Id,title,sendContent, cancellationToken);
  68. }
  69. catch{}
  70. }
  71. }
  72. public async Task RecordOrgHandle(List<string> orgIds, bool isAdd,string title, string sendContent, int count =1, CancellationToken cancellationToken = default)
  73. {
  74. foreach (var item in orgIds)
  75. {
  76. var orgRecord = await _circularRecordRepository.GetAsync(x => x.OrgId == item);
  77. if (isAdd)
  78. {
  79. if (orgRecord != null)
  80. {
  81. if (orgRecord.RecordCount > 0)
  82. {
  83. orgRecord.RecordCount = orgRecord.RecordCount + count;
  84. }
  85. await _circularRecordRepository.UpdateAsync(orgRecord);
  86. }
  87. else
  88. {
  89. orgRecord = new CircularRecord();
  90. orgRecord.OrgId = item;
  91. orgRecord.CircularType = Share.Enums.Article.ECircularType.Org;
  92. orgRecord.RecordCount = 1;
  93. await _circularRecordRepository.AddAsync(orgRecord);
  94. }
  95. }
  96. else
  97. {
  98. if (orgRecord != null)
  99. {
  100. if (orgRecord.RecordCount > 0)
  101. {
  102. orgRecord.RecordCount = orgRecord.RecordCount - count;
  103. }
  104. else
  105. {
  106. orgRecord.RecordCount = 0;
  107. }
  108. await _circularRecordRepository.UpdateAsync(orgRecord);
  109. }
  110. }
  111. try
  112. {
  113. await _realtimeService.CircularRecoordAsync(orgRecord.Id, title, sendContent, cancellationToken);
  114. }
  115. catch{}
  116. }
  117. }
  118. public async Task AddCircularMessage(AddCircularDto dto, CancellationToken cancellationToken = default)
  119. {
  120. var model = _mapper.Map<Circular>(dto);
  121. model.CommitTime = DateTime.Now;
  122. model.ExaminTime = DateTime.Now;
  123. model.ExaminManId = _sessionContext.UserId;
  124. model.CircularState = ECircularState.ReviewPass;
  125. model.ExaminOpinion = "内部消息,系统默认通过";
  126. model.ReadedNum = 0;
  127. model.NeedReadNum = model.CircularReadGroups.Count;
  128. model.LostEfficacyTime = DateTime.Now.AddYears(50);
  129. var id = await _circularRepository.AddAsync(model,cancellationToken);
  130. //子表
  131. var list = dto.CircularReadGroups;
  132. var readGroupList = new List<CircularReadGroup>();
  133. foreach (var item in list)
  134. {
  135. var readGroup = _mapper.Map<CircularReadGroup>(item);
  136. readGroup.CircularId = id;
  137. readGroup.IsRead = false;
  138. readGroupList.Add(readGroup);
  139. }
  140. await _circularReadGroupRepository.AddRangeAsync(readGroupList);
  141. //更新阅读数量
  142. if (model.CircularType == Share.Enums.Article.ECircularType.Person)
  143. {
  144. //个人
  145. var userlist = await _circularReadGroupRepository.Queryable()
  146. .Where(x => x.CircularId == model.Id)
  147. .Select(x => x.UserId)
  148. .ToListAsync();
  149. if (userlist != null && userlist.Count > 0)
  150. {
  151. await this.RecordUserHandle(userlist, true,model.Title,model.Content);
  152. }
  153. }
  154. else
  155. {
  156. //部门
  157. var orglist = await _circularReadGroupRepository.Queryable()
  158. .Where(x => x.CircularId == model.Id)
  159. .Select(x => x.OrgId)
  160. .ToListAsync();
  161. if (orglist != null && orglist.Count > 0)
  162. {
  163. await this.RecordOrgHandle(orglist, true,model.Title,model.Content);
  164. }
  165. }
  166. }
  167. /// <summary>
  168. /// 特提处理通知公告
  169. /// </summary>
  170. /// <param name="special"></param>
  171. /// <param name="order"></param>
  172. /// <param name="cancellationToken"></param>
  173. /// <returns></returns>
  174. public async Task OrderSpecialCircularMessage(OrderSpecial special,Order order,CancellationToken cancellationToken = default) {
  175. var cMessage = new AddCircularDto
  176. {
  177. Title = "信件特提信息",
  178. Content = $"编号为{order.No}的工单已被特提。",
  179. CircularTypeId = "1",
  180. CircularTypeName = "公告通知",
  181. CircularType = ECircularType.Org,
  182. IsMustRead = false,
  183. SourceOrgId = _sessionContext.RequiredOrgId,
  184. SourceOrgName = _sessionContext.OrgName
  185. };
  186. var groups = new CircularReadGroupDto
  187. {
  188. OrgId = order.ActualHandleOrgCode,
  189. OrgName = order.ActualHandleOrgName
  190. };
  191. cMessage.CircularReadGroups = new List<CircularReadGroupDto> { groups };
  192. }
  193. /// <summary>
  194. /// 信件退回公告通知
  195. /// </summary>
  196. /// <returns></returns>
  197. public async Task OrderSendBackCircularMessage(string userId,string userName, Order order, CancellationToken cancellationToken = default)
  198. {
  199. var cMessage = new AddCircularDto
  200. {
  201. Title = "信件退回信息",
  202. Content = $"工单编码为{order.No}的工单,已被退回,请及时处理!",
  203. CircularTypeId = "1",
  204. CircularTypeName = "公告通知",
  205. CircularType = ECircularType.Person,
  206. IsMustRead = false,
  207. SourceOrgId = _sessionContext.RequiredOrgId,
  208. SourceOrgName = _sessionContext.OrgName
  209. };
  210. var groups = new CircularReadGroupDto
  211. {
  212. UserId = userId,
  213. UserName = userName
  214. };
  215. cMessage.CircularReadGroups = new List<CircularReadGroupDto> { groups };
  216. }
  217. }
  218. }