AddPassTheBuckOrderNotifyHandler.cs 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. using Hotline.Caching.Interfaces;
  2. using Hotline.DI;
  3. using Hotline.EventBus;
  4. using Hotline.JudicialManagement;
  5. using Hotline.JudicialManagement.Notifies;
  6. using Hotline.Settings;
  7. using Hotline.Share.Dtos;
  8. using Hotline.Share.Enums.JudicialManagement;
  9. using MapsterMapper;
  10. using MediatR;
  11. using XF.Domain.Repository;
  12. namespace Hotline.Application.JudicialManagement
  13. {
  14. [Injection(AppScopes = EAppScope.YiBin)]
  15. public class AddPassTheBuckOrderNotifyHandler : INotificationHandler<AddPassTheBuckOrderNotify>
  16. {
  17. private readonly IRepository<EnforcementOrderHander> _enforcementOrderHanderRepository;
  18. private readonly ISystemDicDataCacheManager _sysDicDataCacheManager;
  19. private readonly ISystemSettingCacheManager _systemSettingCacheManager;
  20. private readonly IRepository<JudicialManagementOrders> _judicialManagementOrdersRepository;
  21. private readonly IRepository<EnforcementOrdersHandler> _enforcementOrdersHandlerRepository;
  22. private readonly IMapper _mapper;
  23. /// <summary>
  24. ///
  25. /// </summary>
  26. /// <param name="enforcementOrderHanderRepository"></param>
  27. /// <param name="sysDicDataCacheManager"></param>
  28. /// <param name="systemSettingCacheManager"></param>
  29. /// <param name="judicialManagementOrdersRepository"></param>
  30. /// <param name="enforcementOrdersHandlerRepository"></param>
  31. /// <param name="mapper"></param>
  32. public AddPassTheBuckOrderNotifyHandler(IRepository<EnforcementOrderHander> enforcementOrderHanderRepository,
  33. ISystemDicDataCacheManager sysDicDataCacheManager,
  34. ISystemSettingCacheManager systemSettingCacheManager,
  35. IRepository<JudicialManagementOrders> judicialManagementOrdersRepository,
  36. IRepository<EnforcementOrdersHandler> enforcementOrdersHandlerRepository,
  37. IMapper mapper)
  38. {
  39. _enforcementOrderHanderRepository = enforcementOrderHanderRepository;
  40. _sysDicDataCacheManager = sysDicDataCacheManager;
  41. _systemSettingCacheManager = systemSettingCacheManager;
  42. _judicialManagementOrdersRepository = judicialManagementOrdersRepository;
  43. _enforcementOrdersHandlerRepository = enforcementOrdersHandlerRepository;
  44. _mapper = mapper;
  45. }
  46. /// <summary>
  47. ///
  48. /// </summary>
  49. /// <param name="notification"></param>
  50. /// <param name="cancellationToken"></param>
  51. /// <returns></returns>
  52. public async Task Handle(AddPassTheBuckOrderNotify notification, CancellationToken cancellationToken)
  53. {
  54. var orgCode = notification.orgCode;
  55. var orgName = notification.orgName;
  56. var order = notification.order;
  57. if (string.IsNullOrEmpty(orgCode) || string.IsNullOrEmpty(orgName))
  58. return;
  59. //排除咨询件
  60. if (order.AcceptTypeCode != "35")
  61. return;
  62. //如果部门为空排除
  63. if (string.IsNullOrEmpty(order.OrgLevelOneName) || string.IsNullOrEmpty(order.OrgLevelOneCode))
  64. return;
  65. //如果没开启则不处理
  66. var isOpenJudicialManagement = _systemSettingCacheManager.GetSetting(SettingConstants.IsOpenJudicialManagement)?.SettingValue[0];
  67. if (isOpenJudicialManagement != "true")
  68. return;
  69. ///获取系统配置的推诿次数
  70. var enforcementPassTheBuckNum = _systemSettingCacheManager.GetSetting(SettingConstants.EnforcementPassTheBuckNum)?.SettingValue[0];
  71. int CountNum = 2;
  72. if (enforcementPassTheBuckNum != null)
  73. CountNum = int.Parse(enforcementPassTheBuckNum);
  74. //如果是特定部门办理写入数据
  75. var JudicialManagementOrg = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.JudicialManagementOrg).Where(p => p.DicDataValue == orgCode);
  76. if (JudicialManagementOrg != null && JudicialManagementOrg.Any())
  77. {
  78. //第一次办理,直接写入数据
  79. var enforcementOrder = await _enforcementOrderHanderRepository.GetAsync(p => p.OrderId == order.Id && p.ActualHandleOrgCode == orgCode, cancellationToken);
  80. if (enforcementOrder == null)
  81. {
  82. enforcementOrder = new EnforcementOrderHander()
  83. {
  84. OrderId = order.Id,
  85. ActualHandleOrgName = orgName,
  86. ActualHandleOrgCode = orgCode,
  87. HandleNum = 1
  88. };
  89. await _enforcementOrderHanderRepository.AddAsync(enforcementOrder, cancellationToken);
  90. }
  91. else
  92. {
  93. //多次办理,修改数据
  94. enforcementOrder.ActualHandleOrgName = orgName;
  95. enforcementOrder.ActualHandleOrgCode = orgCode;
  96. enforcementOrder.HandleNum = enforcementOrder.HandleNum + 1;
  97. await _enforcementOrderHanderRepository.UpdateAsync(enforcementOrder, cancellationToken);
  98. }
  99. //达到工单推诿计算次数
  100. if (enforcementOrder.HandleNum >= CountNum)
  101. {
  102. //查找工单数据
  103. var orderData = await _judicialManagementOrdersRepository.GetAsync(p => p.Id == order.Id, cancellationToken);
  104. if (orderData == null)
  105. {
  106. orderData = new JudicialManagementOrders();
  107. //处理工单
  108. _mapper.Map(order, orderData);
  109. orderData.Id = order.Id;
  110. orderData.IsEnforcementOrder = order.IsEnforcementOrder.HasValue ? order.IsEnforcementOrder.Value : false;
  111. orderData.IsTheClueTrue = null;
  112. orderData.IsPassTheBuckOrder = true;
  113. orderData.OrderSoure = EOrderSoure.Hotline;
  114. List<Kv> kvs = new()
  115. {
  116. new Kv { Key = order.OrgLevelOneName, Value = order.OrgLevelOneCode }
  117. };
  118. orderData.EnforcementOrdersHandler = kvs;
  119. await _judicialManagementOrdersRepository.AddAsync(orderData, cancellationToken);
  120. //处理部门
  121. EnforcementOrdersHandler enforcementOrdersHandler = new()
  122. {
  123. OrderId = order.Id,
  124. OrderNo = order.No,
  125. OrderSoure = EOrderSoure.Hotline,
  126. OrgCode = order.OrgLevelOneCode,
  127. OrgName = order.OrgLevelOneName
  128. };
  129. await _enforcementOrdersHandlerRepository.AddAsync(enforcementOrdersHandler, cancellationToken);
  130. }
  131. else
  132. {
  133. //有工单数据修改为推诿
  134. if (orderData.IsPassTheBuckOrder != true)
  135. {
  136. orderData.IsPassTheBuckOrder = true;
  137. await _judicialManagementOrdersRepository.UpdateAsync(orderData, cancellationToken);
  138. }
  139. }
  140. }
  141. }
  142. }
  143. }
  144. }