ProvinceService.cs 88 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924
  1. using Hotline.DataSharing.DaoShu110;
  2. using Hotline.DataSharing.DataExchange;
  3. using Hotline.DataSharing.Enterprise;
  4. using Hotline.DataSharing.Order;
  5. using Hotline.DataSharing.Province.Extend;
  6. using Hotline.DataSharing.Province.HuiJu.Send;
  7. using Hotline.DataSharing.Province.Other;
  8. using Hotline.DataSharing.Province.XieTong.Knowledge;
  9. using Hotline.DataSharing.Province.XieTong.Receive;
  10. using Hotline.DataSharing.Province.XieTong.Send;
  11. using Hotline.File;
  12. using Hotline.Share.Dtos.DataSharing.DataExchange;
  13. using Hotline.Share.Dtos.DataSharing.Province.Extend;
  14. using Hotline.Share.Dtos.DataSharing.Province.XieTong.Send;
  15. using Hotline.Share.Dtos.File;
  16. using Hotline.Share.Dtos.Knowledge;
  17. using Hotline.Share.Dtos.Order;
  18. using Hotline.Share.Enums.DataSharing;
  19. using Hotline.Share.Enums.FlowEngine;
  20. using Hotline.Share.Enums.Order;
  21. using MapsterMapper;
  22. using MediatR;
  23. using Microsoft.AspNetCore.Http;
  24. using Microsoft.Extensions.Logging;
  25. using Newtonsoft.Json;
  26. using Sharing.Province.Dtos.HuiJu.Send;
  27. using Sharing.Share.Dtos.DataSharing.DataExchange;
  28. using System.Net;
  29. using System.Security.Cryptography;
  30. using System.Text;
  31. using XF.Domain.Dependency;
  32. using XF.Domain.Repository;
  33. namespace Hotline.DataSharing.Province.Services
  34. {
  35. public class ProvinceService : IProvinceService, IScopeDependency
  36. {
  37. #region 注入
  38. private readonly IRepository<DsSubmitCaseInfo> _submitCaseInfoRepository;
  39. private readonly IMapper _mapper;
  40. private readonly IMediator _mediator;
  41. private readonly IRepository<DsPoliceSendChainAlarmDs> _policeSendChainAlarmDsRepository;
  42. private readonly IRepository<DsSubmitVisitInfo> _submitVisitInfoRepository;
  43. private readonly IRepository<DsWaitingPushData> _waitingPushDataRepository;
  44. private readonly IRepository<DsSubmitCaseProcess> _submitCaseProcessRepository;
  45. private readonly IRepository<DsPoliceSendChainDealDs> _policeSendChainDealDsRepository;
  46. private readonly IRepository<DsSubmitCaseResult> _submitCaseResultRepository;
  47. private readonly IRepository<DsReceiveCaseExtends> _receiveCaseExtendsRepository;
  48. private readonly IRepository<DsFormEnvironMent> _formEnvironMentRepository;
  49. private readonly IRepository<DsFormTraffic> _formTrafficRepository;
  50. private readonly IRepository<DsFormExpressWay> _formExpressWayRepository;
  51. private readonly IRepository<DsFormMedical> _formMedicalRepository;
  52. private readonly IRepository<DsFormNetWorktec> _formNetWorktecRepository;
  53. private readonly IRepository<DsFormPost> _formPostRepository;
  54. private readonly IRepository<DsFormReturnexChange> _formReturnexChangeRepository;
  55. private readonly IRepository<DsFormShamPub> _formShamPubRepository;
  56. private readonly IRepository<DsFormTaxationComplaint> _formTaxationComplaintRepository;
  57. private readonly IRepository<DsFormTaxationConsulting> _formTaxationConsultingRepository;
  58. private readonly IRepository<DsFormMarket> _formMarketRepository;
  59. private readonly IRepository<DsDataWorkOrderSend> _dataWorkOrderSendRepository;
  60. private readonly IRepository<DsCityDataSend> _cityDataSendRepository;
  61. private readonly IRepository<DsSendCaseInfo> _sendCaseInfoRepository;
  62. private readonly IRepository<DsGetCaseMaterialInfo> _getCaseMaterialInfoRepository;
  63. private readonly IRepository<DsGetCaseProcessReceive> _getCaseProcessReceiveRepository;
  64. private readonly IRepository<DsGetVisitInfoReceive> _getVisitInfoReceiveRepository;
  65. private readonly IRepository<DsGetCaseBackApply> _getCaseBackApplyRepository;
  66. private readonly IRepository<DsDelayCaseInfoSend> _delayCaseInfoSendRepository;
  67. private readonly IRepository<DsSendSuperviseProcessInfo> _sendSuperviseProcessInfoRepository;
  68. private readonly IRepository<DsSendSuperviseResultInfo> _sendSuperviseResultInfoRepository;
  69. private readonly IRepository<DsSubmitCaseRecord> _submitCaseRecordRepository;
  70. private readonly IRepository<DsSubmitCaseTotal> _submitCaseTotalRepository;
  71. private readonly IRepository<DsSupplyCaseInfoSend> _supplyCaseInfoSendRepository;
  72. private readonly IRepository<DsRevokeCaseInfo> _revokeCaseInfoRepository;
  73. private readonly IRepository<DsRemindCaseInfo> _remindCaseInfoRepository;
  74. private readonly IRepository<DsGetKnowledgeInfoSend> _getKnowledgeInfoSendRepository;
  75. private readonly IRepository<DsGetKnowledgeInfoUpdate> _getKnowledgeInfoUpdateRepository;
  76. private readonly IRepository<DsGetKnowledgeInfoAbandon> _getKnowledgeInfoAbandonRepository;
  77. private readonly IRepository<DsSendRealTimeStatus> _sendRealTimeStatusRepository;
  78. private readonly IRepository<DsScreenCaseInfoSend> _screenCaseInfoSendRepository;
  79. private readonly IRepository<DsZmhdCaseInfoPublic> _zMHDCaseInfoPublicRepository;
  80. private readonly IRepository<DsKnowledgeRawData> _knowledgeRawDataRepository;
  81. private readonly IChannelConfigurationManager _channelConfigurationManager;
  82. private readonly IRepository<DsOrder> _dataOrderRepository;
  83. private readonly IRepository<DsOrderWorkFlow> _dataOrderWorkFlowRepository;
  84. private readonly IHttpClientFactory _httpClientFactory;
  85. private readonly IPusherProviderService _pusherProviderService;
  86. private readonly IEnterpriseService _enterpriseService;
  87. private readonly ILogger<ProvinceService> _logger;
  88. private readonly IFileRepository _fileRepository;
  89. private readonly IRepository<DsGetCaseResultReceive> _getCaseResultReceiveRepository;
  90. /// <summary>
  91. /// 注入
  92. /// </summary>
  93. /// <param name="submitCaseInfoRepository"></param>
  94. /// <param name="mapper"></param>
  95. /// <param name="mediator"></param>
  96. /// <param name="policeSendChainAlarmDsRepository"></param>
  97. /// <param name="submitVisitInfoRepository"></param>
  98. /// <param name="waitingPushDataRepository"></param>
  99. /// <param name="submitCaseProcessRepository"></param>
  100. /// <param name="policeSendChainDealDsRepository"></param>
  101. /// <param name="submitCaseResultRepository"></param>
  102. /// <param name="receiveCaseExtendsRepository"></param>
  103. /// <param name="formEnvironMentRepository"></param>
  104. /// <param name="formTrafficRepository"></param>
  105. /// <param name="formExpressWayRepository"></param>
  106. /// <param name="formMedicalRepository"></param>
  107. /// <param name="formNetWorktecRepository"></param>
  108. /// <param name="formPostRepository"></param>
  109. /// <param name="formReturnexChangeRepository"></param>
  110. /// <param name="formShamPubRepository"></param>
  111. /// <param name="formTaxationComplaintRepository"></param>
  112. /// <param name="formTaxationConsultingRepository"></param>
  113. /// <param name="formMarketRepository"></param>
  114. /// <param name="dataWorkOrderSendRepository"></param>
  115. /// <param name="cityDataSendRepository"></param>
  116. /// <param name="sendCaseInfoRepository"></param>
  117. /// <param name="getCaseMaterialInfoRepository"></param>
  118. /// <param name="getCaseProcessReceiveRepository"></param>
  119. /// <param name="getVisitInfoReceiveRepository"></param>
  120. /// <param name="getCaseBackApplyRepository"></param>
  121. /// <param name="delayCaseInfoSendRepository"></param>
  122. /// <param name="sendSuperviseProcessInfoRepository"></param>
  123. /// <param name="sendSuperviseResultInfoRepository"></param>
  124. /// <param name="submitCaseRecordRepository"></param>
  125. /// <param name="submitCaseTotalRepository"></param>
  126. /// <param name="supplyCaseInfoSendRepository"></param>
  127. /// <param name="revokeCaseInfoRepository"></param>
  128. /// <param name="remindCaseInfoRepository"></param>
  129. /// <param name="getKnowledgeInfoSendRepository"></param>
  130. /// <param name="getKnowledgeInfoUpdateRepository"></param>
  131. /// <param name="getKnowledgeInfoAbandonRepository"></param>
  132. /// <param name="sendRealTimeStatusRepository"></param>
  133. /// <param name="screenCaseInfoSendRepository"></param>
  134. /// <param name="zMHDCaseInfoPublicRepository"></param>
  135. /// <param name="knowledgeRawDataRepository"></param>
  136. /// <param name="channelConfigurationManager"></param>
  137. /// <param name="dataOrderRepository"></param>
  138. /// <param name="dataOrderWorkFlowRepository"></param>
  139. /// <param name="httpClientFactory"></param>
  140. /// <param name="pusherProviderService"></param>
  141. /// <param name="enterpriseService"></param>
  142. public ProvinceService(IRepository<DsSubmitCaseInfo> submitCaseInfoRepository,
  143. IMapper mapper,
  144. IMediator mediator,
  145. IRepository<DsPoliceSendChainAlarmDs> policeSendChainAlarmDsRepository,
  146. IRepository<DsSubmitVisitInfo> submitVisitInfoRepository,
  147. IRepository<DsWaitingPushData> waitingPushDataRepository,
  148. IRepository<DsSubmitCaseProcess> submitCaseProcessRepository,
  149. IRepository<DsPoliceSendChainDealDs> policeSendChainDealDsRepository,
  150. IRepository<DsSubmitCaseResult> submitCaseResultRepository,
  151. IRepository<DsReceiveCaseExtends> receiveCaseExtendsRepository,
  152. IRepository<DsFormEnvironMent> formEnvironMentRepository,
  153. IRepository<DsFormTraffic> formTrafficRepository,
  154. IRepository<DsFormExpressWay> formExpressWayRepository,
  155. IRepository<DsFormMedical> formMedicalRepository,
  156. IRepository<DsFormNetWorktec> formNetWorktecRepository,
  157. IRepository<DsFormPost> formPostRepository,
  158. IRepository<DsFormReturnexChange> formReturnexChangeRepository,
  159. IRepository<DsFormShamPub> formShamPubRepository,
  160. IRepository<DsFormTaxationComplaint> formTaxationComplaintRepository,
  161. IRepository<DsFormTaxationConsulting> formTaxationConsultingRepository,
  162. IRepository<DsFormMarket> formMarketRepository,
  163. IRepository<DsDataWorkOrderSend> dataWorkOrderSendRepository,
  164. IRepository<DsCityDataSend> cityDataSendRepository,
  165. IRepository<DsSendCaseInfo> sendCaseInfoRepository,
  166. IRepository<DsGetCaseMaterialInfo> getCaseMaterialInfoRepository,
  167. IRepository<DsGetCaseProcessReceive> getCaseProcessReceiveRepository,
  168. IRepository<DsGetVisitInfoReceive> getVisitInfoReceiveRepository,
  169. IRepository<DsGetCaseBackApply> getCaseBackApplyRepository,
  170. IRepository<DsDelayCaseInfoSend> delayCaseInfoSendRepository,
  171. IRepository<DsSendSuperviseProcessInfo> sendSuperviseProcessInfoRepository,
  172. IRepository<DsSendSuperviseResultInfo> sendSuperviseResultInfoRepository,
  173. IRepository<DsSubmitCaseRecord> submitCaseRecordRepository,
  174. IRepository<DsSubmitCaseTotal> submitCaseTotalRepository,
  175. IRepository<DsSupplyCaseInfoSend> supplyCaseInfoSendRepository,
  176. IRepository<DsRevokeCaseInfo> revokeCaseInfoRepository,
  177. IRepository<DsRemindCaseInfo> remindCaseInfoRepository,
  178. IRepository<DsGetKnowledgeInfoSend> getKnowledgeInfoSendRepository,
  179. IRepository<DsGetKnowledgeInfoUpdate> getKnowledgeInfoUpdateRepository,
  180. IRepository<DsGetKnowledgeInfoAbandon> getKnowledgeInfoAbandonRepository,
  181. IRepository<DsSendRealTimeStatus> sendRealTimeStatusRepository,
  182. IRepository<DsScreenCaseInfoSend> screenCaseInfoSendRepository,
  183. IRepository<DsZmhdCaseInfoPublic> zMHDCaseInfoPublicRepository,
  184. IRepository<DsKnowledgeRawData> knowledgeRawDataRepository,
  185. IChannelConfigurationManager channelConfigurationManager,
  186. IRepository<DsOrder> dataOrderRepository,
  187. IRepository<DsOrderWorkFlow> dataOrderWorkFlowRepository,
  188. IHttpClientFactory httpClientFactory,
  189. IPusherProviderService pusherProviderService,
  190. IEnterpriseService enterpriseService,
  191. ILogger<ProvinceService> logger,
  192. IFileRepository fileRepository,
  193. IRepository<DsGetCaseResultReceive> getCaseResultReceiveRepository)
  194. {
  195. _submitCaseInfoRepository = submitCaseInfoRepository;
  196. _mapper = mapper;
  197. _mediator = mediator;
  198. _policeSendChainAlarmDsRepository = policeSendChainAlarmDsRepository;
  199. _submitVisitInfoRepository = submitVisitInfoRepository;
  200. _waitingPushDataRepository = waitingPushDataRepository;
  201. _submitCaseProcessRepository = submitCaseProcessRepository;
  202. _policeSendChainDealDsRepository = policeSendChainDealDsRepository;
  203. _submitCaseResultRepository = submitCaseResultRepository;
  204. _receiveCaseExtendsRepository = receiveCaseExtendsRepository;
  205. _formEnvironMentRepository = formEnvironMentRepository;
  206. _formTrafficRepository = formTrafficRepository;
  207. _formExpressWayRepository = formExpressWayRepository;
  208. _formMedicalRepository = formMedicalRepository;
  209. _formNetWorktecRepository = formNetWorktecRepository;
  210. _formPostRepository = formPostRepository;
  211. _formReturnexChangeRepository = formReturnexChangeRepository;
  212. _formShamPubRepository = formShamPubRepository;
  213. _formTaxationComplaintRepository = formTaxationComplaintRepository;
  214. _formTaxationConsultingRepository = formTaxationConsultingRepository;
  215. _formMarketRepository = formMarketRepository;
  216. _dataWorkOrderSendRepository = dataWorkOrderSendRepository;
  217. _cityDataSendRepository = cityDataSendRepository;
  218. _sendCaseInfoRepository = sendCaseInfoRepository;
  219. _getCaseMaterialInfoRepository = getCaseMaterialInfoRepository;
  220. _getCaseProcessReceiveRepository = getCaseProcessReceiveRepository;
  221. _getVisitInfoReceiveRepository = getVisitInfoReceiveRepository;
  222. _getCaseBackApplyRepository = getCaseBackApplyRepository;
  223. _delayCaseInfoSendRepository = delayCaseInfoSendRepository;
  224. _sendSuperviseProcessInfoRepository = sendSuperviseProcessInfoRepository;
  225. _sendSuperviseResultInfoRepository = sendSuperviseResultInfoRepository;
  226. _submitCaseRecordRepository = submitCaseRecordRepository;
  227. _submitCaseTotalRepository = submitCaseTotalRepository;
  228. _supplyCaseInfoSendRepository = supplyCaseInfoSendRepository;
  229. _revokeCaseInfoRepository = revokeCaseInfoRepository;
  230. _remindCaseInfoRepository = remindCaseInfoRepository;
  231. _getKnowledgeInfoSendRepository = getKnowledgeInfoSendRepository;
  232. _getKnowledgeInfoUpdateRepository = getKnowledgeInfoUpdateRepository;
  233. _getKnowledgeInfoAbandonRepository = getKnowledgeInfoAbandonRepository;
  234. _sendRealTimeStatusRepository = sendRealTimeStatusRepository;
  235. _screenCaseInfoSendRepository = screenCaseInfoSendRepository;
  236. _zMHDCaseInfoPublicRepository = zMHDCaseInfoPublicRepository;
  237. _knowledgeRawDataRepository = knowledgeRawDataRepository;
  238. _channelConfigurationManager = channelConfigurationManager;
  239. _dataOrderRepository = dataOrderRepository;
  240. _dataOrderWorkFlowRepository = dataOrderWorkFlowRepository;
  241. _httpClientFactory = httpClientFactory;
  242. _pusherProviderService = pusherProviderService;
  243. _enterpriseService = enterpriseService;
  244. _logger = logger;
  245. _fileRepository = fileRepository;
  246. _getCaseResultReceiveRepository = getCaseResultReceiveRepository;
  247. }
  248. #endregion
  249. #region 协同-第一批次
  250. /// <summary>
  251. /// 退回申请 --已对接---1
  252. /// </summary>
  253. /// <param name="dto"></param>
  254. /// <returns></returns>
  255. public async Task GetCaseBackApply(PublishOrderSendBackDto dto, CancellationToken cancellationToken)
  256. {
  257. //处理110退回事件
  258. if (dto.Order.Source == ESource.Police110)
  259. {
  260. var checkData = await _policeSendChainDealDsRepository.AnyAsync(p => p.AlarmReceiptNumber == dto.Order.ExternalId && p.DisposalType == (int)EDsDisposalType.Return, cancellationToken);
  261. if (!checkData)
  262. {
  263. var data = new DsPoliceSendChainDealDs()
  264. {
  265. OrderId = dto.Order.Id,
  266. AlarmReceiptNumber = dto.Order.ExternalId,
  267. ReturnName = dto.SendBack.CreatorName,
  268. ReturnUnit = dto.SendBack.CreatorOrgName,
  269. ReturnOpinion = dto.SendBack.Content,
  270. ReturnTime = dto.SendBack.CreationTime,
  271. WarehousingTime = DateTime.Now,
  272. DisposalType = 2
  273. };
  274. var id = await _policeSendChainDealDsRepository.AddAsync(data, cancellationToken);
  275. if (!string.IsNullOrEmpty(id))//如果数据新增成功直接调用业务系统退回接口,反馈退回成功
  276. { } // await _hotlineClient.OrderSendBackResultAsync(new() { Id = dto.SendBack.Id }, default);
  277. }
  278. }
  279. //处理省上的退回申请
  280. if (dto.Order.Source == ESource.ProvinceStraight)
  281. {
  282. var data = _mapper.Map<DsGetCaseBackApply>(dto);
  283. data.CliengGuid = Guid.NewGuid().ToString();
  284. //将上报信息写入本地库
  285. data.Id = await _getCaseBackApplyRepository.AddAsync(data, cancellationToken);
  286. //将待推送数据写入待推送表
  287. await InitPushData("GetCaseBackApply", System.Text.Json.JsonSerializer.Serialize(data), "get_case_back_apply", data.Id, 0, cancellationToken);
  288. // await _pusherProviderService.GetCaseBackApplyPusher(data, cancellationToken);
  289. //处理附件
  290. await FileData(dto.SendBack.FileJson, dto.Order.ProvinceNo, data.CliengGuid, dto.Order.AreaCode, cancellationToken);
  291. }
  292. }
  293. /// <summary>
  294. /// 服务工单督办过程 --已对接-----1
  295. /// </summary>
  296. /// <param name="dto"></param>
  297. /// <returns></returns>
  298. public async Task SendSuperviseProcessInfo(PublishSuperviseDto dto, CancellationToken cancellationToken)
  299. {
  300. //工单是省上派下来的,才能进行督办回复
  301. if (dto.Order.Source == ESource.ProvinceStraight && dto.Order.IsProvince)
  302. {
  303. var data = _mapper.Map<DsSendSuperviseProcessInfo>(dto);
  304. //将上报信息写入本地库
  305. data.Id = await _sendSuperviseProcessInfoRepository.AddAsync(data, cancellationToken);
  306. //将待推送数据写入待推送表
  307. await InitPushData("SendSuperviseProcessInfo", System.Text.Json.JsonSerializer.Serialize(data), "send_supervise_process_info", data.Id, 0, cancellationToken);
  308. //推送数据
  309. // await _pusherProviderService.SendSuperviseProcessInfoPusher(data, cancellationToken);
  310. }
  311. }
  312. /// <summary>
  313. /// 服务工单督办结果 --已对接----1
  314. /// </summary>
  315. /// <param name="dto"></param>
  316. /// <returns></returns>
  317. public async Task SendSuperviseResultInfo(PublishSuperviseDto dto, CancellationToken cancellationToken)
  318. {
  319. //工单是省上派下来的,才能进行督办回复
  320. if (dto.Order.Source == ESource.ProvinceStraight && dto.Order.IsProvince)
  321. {
  322. var data = _mapper.Map<DsSendSuperviseResultInfo>(dto);
  323. data.CliengGuid = Guid.NewGuid().ToString();
  324. //将上报信息写入本地库
  325. data.Id = await _sendSuperviseResultInfoRepository.AddAsync(data, cancellationToken);
  326. //将待推送数据写入待推送表
  327. await InitPushData("SendSuperviseResultInfo", System.Text.Json.JsonSerializer.Serialize(data), "send_supervise_result_info", data.Id, 0, cancellationToken);
  328. //处理附件
  329. await FileData(dto.Supervise.FileJson, dto.Order.ProvinceNo, data.CliengGuid, dto.Order.AreaCode, cancellationToken);
  330. // await _pusherProviderService.SendSuperviseResultInfoPusher(data, cancellationToken);
  331. }
  332. }
  333. /// <summary>
  334. /// 工单发起甄别 --已对接---1
  335. /// </summary>
  336. /// <param name="dto"></param>
  337. /// <returns></returns>
  338. public async Task ScreenCaseInfoSend(PublishScreenDto dto, CancellationToken cancellationToken)
  339. {
  340. //如果是省上派下来的工单,才能调发起甄别的接口
  341. if (dto.Order.Source == ESource.ProvinceStraight && dto.Order.IsProvince)
  342. {
  343. var data = _mapper.Map<DsScreenCaseInfoSend>(dto);
  344. data.CliengGuid = Guid.NewGuid().ToString();
  345. data.ApplyType = dto.Screen.TypeDicName switch
  346. {
  347. "违反法律法规" => "10",
  348. "按正常流程处理" => "20",
  349. _ => "30",
  350. };
  351. //将上报信息写入本地库
  352. data.Id = await _screenCaseInfoSendRepository.AddAsync(data, cancellationToken);
  353. //将待推送数据写入待推送表
  354. await InitPushData("ScreenCaseInfoSend", System.Text.Json.JsonSerializer.Serialize(data), "screen_case_info_send", data.Id, 0, cancellationToken);
  355. //处理附件
  356. await FileData(dto.Screen.FileJson, dto.Order.ProvinceNo, data.CliengGuid, dto.Order.AreaCode, cancellationToken);
  357. // await _pusherProviderService.ScreenCaseInfoSendPusher(data, cancellationToken);
  358. }
  359. }
  360. /// <summary>
  361. /// 服务工单申请延时 --已对接---1
  362. /// </summary>
  363. /// <param name="dto"></param>
  364. /// <returns></returns>
  365. public async Task DelayCaseInfoSend(PublishOrderDelayDto dto, CancellationToken cancellationToken)
  366. {
  367. var data = _mapper.Map<DsDelayCaseInfoSend>(dto);
  368. data.CliengGuid = Guid.NewGuid().ToString();
  369. data.ApplyType = "1";
  370. //将上报信息写入本地库
  371. data.Id = await _delayCaseInfoSendRepository.AddAsync(data);
  372. //将待推送数据写入待推送表
  373. await InitPushData("DelayCaseInfoSend", System.Text.Json.JsonSerializer.Serialize(data), "delay_case_info_send", data.Id, 0, cancellationToken);
  374. //信息上报
  375. // await _pusherProviderService.DelayCaseInfoSendPusher(data, cancellationToken);
  376. //处理附件
  377. await FileData(dto.FileJson, data.CaseSerial, data.CliengGuid, data.AreaCode, cancellationToken);
  378. }
  379. /// <summary>
  380. /// 政民互动提交公开---已在接收大补数据中实现
  381. /// </summary>
  382. /// <param name="dto"></param>
  383. /// <returns></returns>
  384. public async Task ZmhdCaseInfoPublic(ZmhdCaseInfoPublicInfo dto, CancellationToken cancellationToken)
  385. {
  386. var data = _mapper.Map<DsZmhdCaseInfoPublic>(dto);
  387. data.AreaCode = _channelConfigurationManager.GetConfigurationCityCode().AreaCode;
  388. //将上报信息写入本地库
  389. data.Id = await _zMHDCaseInfoPublicRepository.AddAsync(data);
  390. //将待推送数据写入待推送表
  391. await InitPushData("ZmhdCaseInfoPublic", System.Text.Json.JsonSerializer.Serialize(data), "zmhd_case_info_public", data.Id, 0, cancellationToken);
  392. //信息上报
  393. // await _pusherProviderService.ZmhdCaseInfoPublicPusher(data, cancellationToken);
  394. }
  395. #endregion
  396. #region 汇聚-第二批次
  397. /// <summary>
  398. /// 热线工单流程开启 --服务工单受理----1
  399. /// </summary>
  400. /// <param name="dto"></param>
  401. /// <returns></returns>
  402. public async Task OrderFlowStarted(OrderDto dto, CancellationToken cancellationToken)
  403. {
  404. //如果不是省上派下来的工单,需要汇聚到省上
  405. if (!dto.IsProvince)
  406. {
  407. var submitCaseInfo = await InitData(dto, cancellationToken);
  408. //处理数据
  409. var dataOrder = await _dataOrderRepository.GetAsync(p => p.OrderId == submitCaseInfo.OrderID, cancellationToken);
  410. if (dataOrder == null)
  411. {
  412. dataOrder = new()
  413. {
  414. OrderId = submitCaseInfo.OrderID,
  415. OrderNo = submitCaseInfo.No,
  416. ProvinceNo = submitCaseInfo.CaseSerial,
  417. CaseDate = submitCaseInfo.CaseDate,
  418. FirstSyncProvinceTime = DateTime.Now,
  419. SyncInterval = 0,
  420. IsTimelyUpload = true,
  421. CaseSource = dto.SourceChannel,
  422. CaseSourceCode = dto.SourceChannelCode,
  423. ExpiredTime = submitCaseInfo.TfdBackTimeBf,
  424. CaseType = submitCaseInfo.CaseType,
  425. CaseTypeCode = dto.AcceptTypeCode,
  426. AllDuration = 0,
  427. IsProvince = false,
  428. HandleState = "办理中",
  429. Title = dto.Title,
  430. FromName = dto.FromName,
  431. Contact = dto.Contact,
  432. Content = dto.Content,
  433. HotspotId = dto.HotspotId,
  434. HotspotName = dto.HotspotName,
  435. HotspotSpliceName = dto.HotspotSpliceName,
  436. Source = dto.Source.ToString(),
  437. Password = dto.Password
  438. };
  439. await _dataOrderRepository.AddAsync(dataOrder, cancellationToken);
  440. }
  441. else
  442. {
  443. //修改
  444. dataOrder.NewSyncProvinceTime = DateTime.Now;
  445. dataOrder.SyncInterval = new TimeSpan(DateTime.Now.Ticks - dataOrder.FirstSyncProvinceTime.Value.Ticks).TotalSeconds;
  446. dataOrder.IsTimelyUpload = false;
  447. await _dataOrderRepository.UpdateAsync(dataOrder, cancellationToken);
  448. }
  449. //将待推送数据写入待推送表
  450. await InitPushData("SubmitCaseInfo", System.Text.Json.JsonSerializer.Serialize(submitCaseInfo), "submit_case_info", submitCaseInfo.Id, 10, cancellationToken);
  451. //推送数据
  452. // await _pusherProviderService.ProvinceOrderCreatedPusher(submitCaseInfo, cancellationToken);
  453. //处理附件
  454. await FileData(dto.FileJson, submitCaseInfo.CaseSerial, submitCaseInfo.CliengGuid, submitCaseInfo.AreaCode, cancellationToken);
  455. }
  456. }
  457. /// <summary>
  458. ///热线工单期满时间变更--推送服务工单受理---1
  459. /// </summary>
  460. /// <param name="dto"></param>
  461. /// <returns></returns>
  462. public async Task HotlineOrderFlowRecalled(OrderDto dto, CancellationToken cancellationToken)
  463. {
  464. //如果不是省上派下来的工单,需要汇聚到省上
  465. if (!dto.IsProvince)
  466. {
  467. var submitCaseInfo = await InitData(dto, cancellationToken);
  468. //将待推送数据写入待推送表
  469. await InitPushData("SubmitCaseInfo", System.Text.Json.JsonSerializer.Serialize(submitCaseInfo), "submit_case_info", submitCaseInfo.Id, 10, cancellationToken);
  470. //推送数据
  471. //await _pusherProviderService.ProvinceOrderCreatedPusher(submitCaseInfo, cancellationToken);
  472. }
  473. }
  474. /// <summary>
  475. /// 热线工单办理---服务工单处理/服务工单交办处理过程----1
  476. /// </summary>
  477. /// <param name="dto"></param>
  478. /// <returns></returns>
  479. public async Task SubmitCaseProcess(OrderFlowDto dto, CancellationToken cancellationToken)
  480. {
  481. //判断是否是热线中心
  482. if (!string.IsNullOrEmpty(dto.Order.ActualHandleOrgCode))
  483. {
  484. if (dto.Order.ActualHandleOrgCode.Substring(0, 3) == "001")
  485. {
  486. dto.Order.ActualHandleOrgName = "热线中心";
  487. }
  488. }
  489. //写本地办理数据-用于查询办理流程
  490. var orderWorkFlow = _mapper.Map<DsOrderWorkFlow>(dto.WorkflowTrace);
  491. orderWorkFlow.OrderId = dto.Order.Id;
  492. _logger.LogInformation("流程转换前数据", System.Text.Json.JsonSerializer.Serialize(dto));
  493. _logger.LogInformation("流程转换后数据", System.Text.Json.JsonSerializer.Serialize(orderWorkFlow));
  494. await _dataOrderWorkFlowRepository.AddAsync(orderWorkFlow, cancellationToken);
  495. //省上下来的工单走协同的接口
  496. if (dto.Order.Source == ESource.ProvinceStraight && dto.Order.IsProvince)
  497. {
  498. var data = _mapper.Map<DsGetCaseProcessReceive>(dto);
  499. data.TacheName = "70:" + data.DeptName;
  500. data.CliengGuid = Guid.NewGuid().ToString();
  501. //将上报信息写入本地库
  502. data.Id = await _getCaseProcessReceiveRepository.AddAsync(data, cancellationToken);
  503. //将待推送数据写入待推送表
  504. await InitPushData("GetCaseProcessReceive", System.Text.Json.JsonSerializer.Serialize(data), "get_case_process_receive", data.Id, 0, cancellationToken);
  505. //信息上报
  506. //await _pusherProviderService.GetCaseProcessReceivePusher(data, cancellationToken);
  507. //处理附件
  508. await FileData(dto.WorkflowTrace.FileJson, data.CaseSerial, data.CliengGuid, dto.Order.AreaCode, cancellationToken);
  509. }
  510. else //如果不是省上派下来的工单
  511. {
  512. //期满时间变更,重新推送数据
  513. if (dto.ExpiredTimeChanged)
  514. {
  515. var submitCaseInfo = await InitData(dto.Order, cancellationToken);
  516. //将待推送数据写入待推送表
  517. await InitPushData("SubmitCaseInfo", System.Text.Json.JsonSerializer.Serialize(submitCaseInfo), "submit_case_info", submitCaseInfo.Id, 10, cancellationToken);
  518. //推送数据
  519. // await _pusherProviderService.ProvinceOrderCreatedPusher(submitCaseInfo, cancellationToken);
  520. }
  521. //推送办理记录
  522. await SubmitCaseProcessData(dto, cancellationToken);//本地工单走市州接口
  523. }
  524. //这里判断是否需要往其他平台推送数据
  525. await OrderDispatch(dto, cancellationToken);
  526. }
  527. /// <summary>
  528. /// 回访完成---服务工单回访评价/服务工单交办评价-----1
  529. /// </summary>
  530. /// <param name="dto"></param>
  531. /// <returns></returns>
  532. public async Task SubmitVisitInfo(PublishVisitDto dto, CancellationToken cancellationToken)
  533. {
  534. await SubmitVisitInfoData(dto, cancellationToken);
  535. }
  536. /// <summary>
  537. /// 甄别通过---服务工单回访评价//服务工单交办评价----1
  538. /// </summary>
  539. /// <param name="dto"></param>
  540. /// <returns></returns>
  541. public async Task SubmitOrderScreenSuccess(PublishVisitDto dto, CancellationToken cancellationToken)
  542. {
  543. await SubmitVisitInfoData(dto, cancellationToken);
  544. }
  545. /// <summary>
  546. ///热线工单归档---服务工单结果/服务工单交办处理结果----1
  547. /// </summary>
  548. /// <param name="dto"></param>
  549. /// <returns></returns>
  550. public async Task OrderFiled(OrderFlowDto dto, CancellationToken cancellationToken)
  551. {
  552. //判断是否是热线中心
  553. if (!string.IsNullOrEmpty(dto.Order.ActualHandleOrgCode))
  554. {
  555. if (dto.Order.ActualHandleOrgCode.Substring(0, 3) == "001")
  556. {
  557. dto.Order.ActualHandleOrgName = "热线中心";
  558. }
  559. }
  560. //IsProvince 如果是false 则推送服务工单受理
  561. if (dto != null && dto.Order != null && !dto.Order.IsProvince)
  562. {
  563. //推送工单信息
  564. var submitCaseInfo = await InitData(dto.Order, cancellationToken);
  565. await InitPushData("SubmitCaseInfo", System.Text.Json.JsonSerializer.Serialize(submitCaseInfo), "submit_case_info", submitCaseInfo.Id, 10, cancellationToken);
  566. // await _pusherProviderService.ProvinceOrderCreatedPusher(submitCaseInfo, cancellationToken);
  567. //推送服务工单结果信息-组装110数据
  568. await SubmitCaseResult(dto, cancellationToken);
  569. }
  570. //修改本地工单数据
  571. var data = await _dataOrderRepository.GetAsync(p => p.OrderId == dto.Order.Id, cancellationToken);
  572. if (data != null)
  573. {
  574. data.HandleState = "办理完成";
  575. data.ActualHandleOrgName = dto.WorkflowTrace.HandlerOrgName;
  576. data.ActualHandleOrgCode = dto.WorkflowTrace.HandlerOrgAreaCode;
  577. data.ActualOpinion = dto.WorkflowTrace.Opinion;
  578. data.ActualHandleTime = dto.WorkflowTrace.HandleTime;
  579. await _dataOrderRepository.UpdateAsync(data, cancellationToken);
  580. }
  581. }
  582. /// <summary>
  583. /// 挂电话推送----电话记录---1
  584. /// </summary>
  585. /// <param name="dtos"></param>
  586. /// <returns></returns>
  587. public async Task SubmitCaseRecord(List<CallConnectOrderDto> dtos, CancellationToken cancellationToken)
  588. {
  589. List<DsSubmitCaseRecord> recordList = new();
  590. foreach (var item in dtos)
  591. {
  592. var record = _mapper.Map<DsSubmitCaseRecord>(item);
  593. record.AreaCode = _channelConfigurationManager.GetConfigurationCityCode().AreaCode;
  594. if (item.Order != null && !string.IsNullOrEmpty(item.Order.ProvinceNo))
  595. record.CaseSerial = item.Order.ProvinceNo;
  596. //将上报信息写入本地库
  597. record.Id = await _submitCaseRecordRepository.AddAsync(record, cancellationToken);
  598. if (!string.IsNullOrEmpty(record.Id))
  599. await InitPushData("SubmitCaseRecord", System.Text.Json.JsonSerializer.Serialize(record), "submit_case_record", record.Id, 11, cancellationToken);
  600. // recordList.Add(record);
  601. }
  602. //if (recordList != null && recordList.Count > 0)
  603. // //信息上报
  604. // await _pusherProviderService.SubmitCaseRecordPusher(recordList, cancellationToken);
  605. }
  606. /// <summary>
  607. /// 关联工单了推送----电话记录---1
  608. /// </summary>
  609. /// <param name="dto"></param>
  610. /// <returns></returns>
  611. public async Task SubmitCaseRecordOrder(CallConnectOrderDto dto, CancellationToken cancellationToken)
  612. {
  613. var data = _mapper.Map<DsSubmitCaseRecord>(dto);
  614. data.AreaCode = _channelConfigurationManager.GetConfigurationCityCode().AreaCode;
  615. data.CaseSerial = dto.Order.ProvinceNo;
  616. //将上报信息写入本地库
  617. data.Id = await _submitCaseRecordRepository.AddAsync(data, cancellationToken);
  618. await InitPushData("SubmitCaseRecord", System.Text.Json.JsonSerializer.Serialize(data), "submit_case_record", data.Id, 11, cancellationToken);
  619. //信息上报
  620. // await _pusherProviderService.SubmitCaseRecordPusher(new List<DsSubmitCaseRecord> { data }, cancellationToken);
  621. }
  622. /// <summary>
  623. /// 统计数据
  624. /// </summary>
  625. /// <param name="dto"></param>
  626. /// <returns></returns>
  627. public async Task SubmitCaseTotal(CaseTotal dto, CancellationToken cancellationToken)
  628. {
  629. var data = _mapper.Map<DsSubmitCaseTotal>(dto);
  630. //将上报信息写入本地库
  631. var id = await _submitCaseTotalRepository.AddAsync(data);
  632. data.Id = id;
  633. await InitPushData("SubmitCaseTotal", System.Text.Json.JsonSerializer.Serialize(data), "submit_case_total", data.Id, 0, cancellationToken);
  634. //信息上报
  635. //await _pusherProviderService.SubmitCaseTotalPusher(data, cancellationToken);
  636. }
  637. #endregion
  638. #region 协同-第三批次
  639. /// <summary>
  640. /// 服务工单上报 --- 在派单的时候,确定需不需要往各个平台推送数据--已在工单办理推送事件中处理完成
  641. /// </summary>
  642. /// <param name="dto"></param>
  643. /// <returns></returns>
  644. public async Task SendCaseInfo(OrderDto dto, CancellationToken cancellationToken)
  645. {
  646. var sendCaseInfo = _mapper.Map<DsSendCaseInfo>(dto);
  647. //处理性别
  648. switch (dto.FromGender)
  649. {
  650. case EGender.Female:
  651. sendCaseInfo.AppLicantSex = "0";
  652. break;
  653. case EGender.Male:
  654. sendCaseInfo.AppLicantSex = "1";
  655. break;
  656. case EGender.Unknown:
  657. sendCaseInfo.AppLicantSex = "2";
  658. break;
  659. default:
  660. sendCaseInfo.AppLicantSex = "2";
  661. break;
  662. }
  663. //处理证件类型
  664. sendCaseInfo.CertifiCateType = dto.LicenceTypeCode switch
  665. {
  666. "10" => "10",
  667. "40" => "20",
  668. "55" => "30",
  669. "57" => "40",
  670. _ => "50",
  671. };
  672. //处理紧急程度
  673. sendCaseInfo.CaseIsUrgent = dto.EmergencyLevel switch
  674. {
  675. EEmergencyLevel.QuiteEmergency => "10",
  676. EEmergencyLevel.Emergency => "20",
  677. _ => "30",
  678. };
  679. //处理诉求类型
  680. switch (sendCaseInfo.CaseType)
  681. {
  682. case "10":
  683. case "15":
  684. case "20":
  685. case "25":
  686. case "30":
  687. case "35":
  688. break;
  689. default:
  690. sendCaseInfo.CaseType = "40";
  691. break;
  692. }
  693. sendCaseInfo.Id = await _sendCaseInfoRepository.AddAsync(sendCaseInfo, cancellationToken);
  694. // await _mediator.Publish(new SendCaseInfoNotification(sendCaseInfo));
  695. }
  696. /// <summary>
  697. /// 上报补充诉求---需要再次确认
  698. /// </summary>
  699. /// <param name="dto"></param>
  700. /// <returns></returns>
  701. public async Task SupplyCaseInfoSend(SupplyCaseInfoSendInfo dto, CancellationToken cancellationToken)
  702. {
  703. var data = _mapper.Map<DsSupplyCaseInfoSend>(dto);
  704. data.AreaCode = _channelConfigurationManager.GetConfigurationCityCode().AreaCode;
  705. data.CliengGuid = Guid.NewGuid().ToString();
  706. //将上报信息写入本地库
  707. data.Id = await _supplyCaseInfoSendRepository.AddAsync(data);
  708. await InitPushData("SupplyCaseInfoSend", System.Text.Json.JsonSerializer.Serialize(data), "supply_case_info_send", data.Id, 0, cancellationToken);
  709. //信息上报
  710. //await _pusherProviderService.SupplyCaseInfoSendPusher(data, cancellationToken);
  711. //处理附件
  712. await FileData(new List<FileJson>(), dto.CaseSerial, data.CliengGuid, dto.AreaCode, cancellationToken);
  713. }
  714. /// <summary>
  715. /// 撤单----1
  716. /// </summary>
  717. /// <param name="dto"></param>
  718. /// <param name="cancellationToken"></param>
  719. /// <returns></returns>
  720. public async Task RevokeOrder(PublishSpecialDto dto, CancellationToken cancellationToken)
  721. {
  722. //企业服务
  723. if (dto.Order.CurrentHandleOrgCode == "001180")
  724. {
  725. DsDataWorkOrderCancel dsDataWork = new()
  726. {
  727. WorkOrderNo = dto.Order.No,
  728. Reason = dto.Special.Reason
  729. };
  730. await _enterpriseService.EnterpriseCancelPusher(dsDataWork, cancellationToken);
  731. }
  732. //省12345
  733. if (dto.Order.CurrentHandleOrgCode == "001170")
  734. {
  735. DsRevokeCaseInfo dsRevoke = new()
  736. {
  737. CaseSerial = dto.Order.ProvinceNo,
  738. AreaCode = dto.Order.AreaCode,
  739. RevokeTime = dto.Special.CreationTime,
  740. RevokeName = dto.Special.CreatorName,
  741. RevokeReasion = dto.Special.Reason,
  742. Direction = "1",
  743. CliengGuid = Guid.NewGuid().ToString()
  744. };
  745. if (string.IsNullOrEmpty(dto.Special.Cause))
  746. dsRevoke.RevokeType = "other";
  747. else if (dto.Special.Cause.Contains("内容错误"))
  748. dsRevoke.RevokeType = "2";
  749. else if (dto.Special.Cause == "撤销工单")
  750. dsRevoke.RevokeType = "1";
  751. else
  752. dsRevoke.RevokeType = "other";
  753. //将上报信息写入本地库
  754. dsRevoke.Id = await _revokeCaseInfoRepository.AddAsync(dsRevoke);
  755. await InitPushData("SendRevokeCaseInfo", System.Text.Json.JsonSerializer.Serialize(dsRevoke), "revoke_case_info", dsRevoke.Id, 0, cancellationToken);
  756. await FileData(dto.Special.FileJson, dsRevoke.CaseSerial, dsRevoke.CliengGuid, dsRevoke.AreaCode, cancellationToken);
  757. }
  758. }
  759. /// <summary>
  760. /// 服务工单催单--已对接----1
  761. /// </summary>
  762. /// <param name="dto"></param>
  763. /// <returns></returns>
  764. public async Task SendRemindCaseInfo(PublishUrgeDto dto, CancellationToken cancellationToken)
  765. {
  766. //被催办部门为省上,才能调用接口
  767. if (dto.Urge.OrgName == "")
  768. {
  769. var data = _mapper.Map<DsRemindCaseInfo>(dto);
  770. data.Direction = "1";
  771. data.CliengGuid = Guid.NewGuid().ToString();
  772. //将上报信息写入本地库
  773. data.Id = await _remindCaseInfoRepository.AddAsync(data);
  774. //信息上报
  775. await InitPushData("SendRemindCaseInfo", System.Text.Json.JsonSerializer.Serialize(data), "remind_case_info", data.Id, 0, cancellationToken);
  776. //await _pusherProviderService.SendRemindCaseInfoPusher(data, cancellationToken);
  777. //处理附件
  778. await FileData(dto.Urge.FileJson, dto.Order.ProvinceNo, data.CliengGuid, dto.Order.AreaCode, cancellationToken);
  779. }
  780. }
  781. #endregion
  782. #region 协同-第四批次
  783. #region 知识库--已对接附件
  784. /// <summary>
  785. /// 知识库上报----1
  786. /// </summary>
  787. /// <param name="dto"></param>
  788. /// <returns></returns>
  789. public async Task GetKnowledgeInfoSend(KnowledgeSendDto dto, CancellationToken cancellationToken)
  790. {
  791. var data = _mapper.Map<DsGetKnowledgeInfoSend>(dto);
  792. data.AreaCode = _channelConfigurationManager.GetConfigurationCityCode().AreaCode;
  793. data.CliengGuid = Guid.NewGuid().ToString();
  794. if (data.DisableDate == null)//如果没得有失效时间,默认在生效日期上面加10年
  795. data.DisableDate = data.BeginDate.Value.AddYears(10);
  796. //将上报信息写入本地库
  797. data.Id = await _getKnowledgeInfoSendRepository.AddAsync(data);
  798. //查询原有数据,如果有修改原始数据,没有直接新增
  799. var dataRaw = await _knowledgeRawDataRepository.GetAsync(p => p.UID == data.UID);
  800. var raw = _mapper.Map<DsKnowledgeRawData>(data);
  801. if (dataRaw != null)
  802. {
  803. raw.Id = dataRaw.Id;
  804. await _knowledgeRawDataRepository.UpdateAsync(raw);
  805. }
  806. else
  807. await _knowledgeRawDataRepository.AddAsync(raw);
  808. //信息上报
  809. await InitPushData("GetKnowledgeInfoSend", System.Text.Json.JsonSerializer.Serialize(data), "get_knowledge_info_send", data.Id, 0, cancellationToken);
  810. // await _pusherProviderService.GetKnowledgeInfoSendPusher(data, cancellationToken);
  811. //知识附件处理
  812. await FileData(dto.FileJson, dto.UID, data.CliengGuid, data.AreaCode, cancellationToken);
  813. }
  814. /// <summary>
  815. /// 知识库变更---1
  816. /// </summary>
  817. /// <param name="dto"></param>
  818. /// <returns></returns>
  819. public async Task GetKnowledgeInfoUpdate(KnowledgeSendDto dto, CancellationToken cancellationToken)
  820. {
  821. var data = _mapper.Map<DsGetKnowledgeInfoUpdate>(dto);
  822. data.AreaCode = _channelConfigurationManager.GetConfigurationCityCode().AreaCode;
  823. data.CliengGuid = Guid.NewGuid().ToString();
  824. if (data.DisableDate == null)//如果没得有失效时间,默认在生效日期上面加10年
  825. data.DisableDate = data.BeginDate.Value.AddYears(10);
  826. //将上报信息写入本地库
  827. data.Id = await _getKnowledgeInfoUpdateRepository.AddAsync(data);
  828. //查询原有数据,如果有修改原始数据,没有直接新增
  829. var dataRaw = await _knowledgeRawDataRepository.GetAsync(p => p.UID == data.UID);
  830. var raw = _mapper.Map<DsKnowledgeRawData>(data);
  831. if (dataRaw != null)
  832. {
  833. raw.Id = dataRaw.Id;
  834. await _knowledgeRawDataRepository.UpdateAsync(raw);
  835. }
  836. else
  837. await _knowledgeRawDataRepository.AddAsync(raw);
  838. //信息上报
  839. await InitPushData("GetKnowledgeInfoUpdate", System.Text.Json.JsonSerializer.Serialize(data), "get_knowledge_info_update", data.Id, 0, cancellationToken);
  840. // await _pusherProviderService.GetKnowledgeInfoUpdatePusher(data, cancellationToken);
  841. //知识附件处理
  842. await FileData(dto.FileJson, dto.UID, data.CliengGuid, data.AreaCode, cancellationToken);
  843. }
  844. /// <summary>
  845. /// 知识库下架---1
  846. /// </summary>
  847. /// <param name="dto"></param>
  848. /// <returns></returns>
  849. public async Task GetKnowledgeInfoAbandon(KnowledgeSendDto dto, CancellationToken cancellationToken)
  850. {
  851. var data = _mapper.Map<DsGetKnowledgeInfoAbandon>(dto);
  852. data.AreaCode = _channelConfigurationManager.GetConfigurationCityCode().AreaCode;
  853. //将上报信息写入本地库
  854. data.Id = await _getKnowledgeInfoAbandonRepository.AddAsync(data);
  855. //知识下架删除原有原始数据
  856. await _knowledgeRawDataRepository.RemoveAsync(p => p.UID == data.UID, false);
  857. //信息上报
  858. await InitPushData("GetKnowledgeInfoAbandon", System.Text.Json.JsonSerializer.Serialize(data), "get_knowledge_info_abandon", data.Id, 0, cancellationToken);
  859. // await _pusherProviderService.GetKnowledgeInfoAbandonPusher(data, cancellationToken);
  860. }
  861. #endregion
  862. /// <summary>
  863. /// 实时服务上报
  864. /// </summary>
  865. /// <param name="dto"></param>
  866. /// <returns></returns>
  867. public async Task SendRealTimeStatus(SendRealTimeStatusInfo dto, CancellationToken cancellationToken)
  868. {
  869. var data = _mapper.Map<DsSendRealTimeStatus>(dto);
  870. data.AreaCode = _channelConfigurationManager.GetConfigurationCityCode().AreaCode;
  871. //将上报信息写入本地库
  872. data.Id = await _sendRealTimeStatusRepository.AddAsync(data);
  873. //信息上报
  874. await InitPushData("SendRealTimeStatus", System.Text.Json.JsonSerializer.Serialize(data), "sendrealtimestatus", data.Id, 0, cancellationToken);
  875. // await _pusherProviderService.SendRealTimeStatusPusher(data, cancellationToken);
  876. }
  877. #endregion
  878. /// <summary>
  879. /// 接收发布数据
  880. /// </summary>
  881. /// <param name="dto"></param>
  882. /// <param name="cancellationToken"></param>
  883. /// <returns></returns>
  884. public async Task PublishOrder(PublishPublishOrderDto dto, CancellationToken cancellationToken)
  885. {
  886. if (dto.Order.IsProvince && dto.Order.Source == ESource.ProvinceStraight)
  887. {
  888. #region 服务工单交办处理结果
  889. //判断是否是热线中心
  890. if (!string.IsNullOrEmpty(dto.Order.ActualHandleOrgCode) && dto.Order.ActualHandleOrgCode.Substring(0, 3) == "001")
  891. dto.Order.ActualHandleOrgName = "热线中心";
  892. var data = _mapper.Map<DsGetCaseResultReceive>(dto.Order);
  893. data.ConcactType = "40";
  894. data.FinishType = "1";
  895. data.HandleTimeLong = dto.Order.AllDuration;
  896. switch (dto.Order.RealCommunicationMode)
  897. {
  898. case ERealCommunicationMode.Phone:
  899. data.ConcactType = "10";
  900. break;
  901. case ERealCommunicationMode.Locale:
  902. data.ConcactType = "20";
  903. break;
  904. default:
  905. data.ConcactType = "40";
  906. break;
  907. }
  908. data.CliengGuid = Guid.NewGuid().ToString();
  909. //中国政府网的数据处理
  910. if (dto.Order.SourceChannelCode == "ZGZFW")
  911. {
  912. data.Notes = "无";
  913. data.MsgOpenByArea = dto.ProPublishState == true ? "1" : "0";
  914. data.AreaNotPublicReason = dto.NoPubReason;
  915. data.FeedBackAnswerContent = dto.ArrangeOpinion;
  916. data.FeedBackTel = dto.FeedBackPhone;
  917. data.EventType = "";
  918. data.Eventname = "";
  919. data.ContactFlag = "1";
  920. data.AssessFlag = "1";
  921. data.AssessOpinion = "1";
  922. data.AssessContent = "";
  923. }
  924. //将上报信息写入本地库
  925. data.Id = await _getCaseResultReceiveRepository.AddAsync(data, cancellationToken);
  926. //将待推送数据写入待推送表
  927. DsWaitingPushData pushData = new()
  928. {
  929. ServiceInterface = "GetCaseResultReceive",
  930. Data = System.Text.Json.JsonSerializer.Serialize(data),
  931. Priority = 0,
  932. PushUrl = "get_case_result_receive",
  933. Method = HttpMethods.Post,
  934. SyncID = data.Id
  935. };
  936. await _waitingPushDataRepository.AddAsync(pushData, cancellationToken);
  937. //处理附件
  938. await FileData(new List<FileJson>(), data.CaseSerial, data.CliengGuid, dto.Order.AreaCode, cancellationToken);
  939. #endregion
  940. }
  941. //政民互动提交公开
  942. if (dto.Order.SourceChannelCode == "ZMHD")
  943. {
  944. var data = _mapper.Map<DsZmhdCaseInfoPublic>(dto);
  945. //将上报信息写入本地库
  946. data.Id = await _zMHDCaseInfoPublicRepository.AddAsync(data);
  947. //将待推送数据写入待推送表
  948. await InitPushData("ZmhdCaseInfoPublic", System.Text.Json.JsonSerializer.Serialize(data), "zmhd_case_info_public", data.Id, 0, cancellationToken);
  949. }
  950. }
  951. #region 私有方法
  952. /// <summary>
  953. /// 服务工单回访评价/服务工单交办评价
  954. /// </summary>
  955. /// <param name="dto"></param>
  956. /// <param name="cancellationToken"></param>
  957. /// <returns></returns>
  958. private async Task SubmitVisitInfoData(PublishVisitDto dto, CancellationToken cancellationToken)
  959. {
  960. string visitType = "";
  961. switch (dto.VisitType)
  962. {
  963. case EVisitType.ArtificialVisit:
  964. visitType = "DH";
  965. break;
  966. case EVisitType.SmsVisit:
  967. visitType = "DX";
  968. break;
  969. case EVisitType.WebVisit:
  970. visitType = "WZ";
  971. break;
  972. case EVisitType.WeChatVisit:
  973. visitType = "WX";
  974. break;
  975. case EVisitType.AppVisit:
  976. visitType = "AP";
  977. break;
  978. default:
  979. break;
  980. }
  981. //将未接通未做评价的默认为满意
  982. switch (dto.SubjectResultSatifyCode)
  983. {
  984. case "1":
  985. case "2":
  986. case "3":
  987. case "4":
  988. case "5":
  989. break;
  990. default:
  991. dto.SubjectResultSatifyCode = "3";
  992. break;
  993. }
  994. //如果省上下来的工单走服务工单交办评价接口,不是省上派下来的工单,走服务工单评价接口
  995. if (dto.Order.IsProvince && dto.Order.Source == ESource.ProvinceStraight)
  996. {
  997. var data = _mapper.Map<DsGetVisitInfoReceive>(dto);
  998. data.VisitType = visitType;
  999. data.CliengGuid = Guid.NewGuid().ToString();
  1000. //将上报信息写入本地库
  1001. data.Id = await _getVisitInfoReceiveRepository.AddAsync(data, cancellationToken);
  1002. //服务工单交办评价请求
  1003. await InitPushData("GetVisitInfoReceive", System.Text.Json.JsonSerializer.Serialize(data), "get_visit_info_receive", data.Id, 5, cancellationToken);
  1004. await _pusherProviderService.GetVisitInfoReceivePusher(data, cancellationToken);
  1005. //处理附件
  1006. await FileData(new List<FileJson>(), data.CaseSerial, data.CliengGuid, data.AreaCode, cancellationToken);
  1007. }
  1008. else
  1009. {
  1010. var data = _mapper.Map<DsSubmitVisitInfo>(dto);
  1011. data.VisitType = visitType;
  1012. data.CliengGuid = Guid.NewGuid().ToString();
  1013. //将上报信息写入本地库
  1014. data.Id = await _submitVisitInfoRepository.AddAsync(data, cancellationToken);
  1015. //将待推送数据写入待推送表
  1016. await InitPushData("SubmitVisitInfo", System.Text.Json.JsonSerializer.Serialize(data), "submit_visit_info", data.Id, 0, cancellationToken);
  1017. //处理附件
  1018. await FileData(new List<FileJson>(), data.CaseSerial, data.CliengGuid, data.AreaCode, cancellationToken);
  1019. //组装110数据
  1020. if (dto.Order.Source == ESource.Police110)
  1021. {
  1022. var checkData = await _policeSendChainDealDsRepository.GetAsync(p => p.AlarmReceiptNumber == dto.Order.ExternalId && p.DisposalType == (int)EDsDisposalType.Visit, cancellationToken);
  1023. if (checkData == null)
  1024. {
  1025. checkData = new()
  1026. {
  1027. AlarmReceiptNumber = dto?.Order?.ExternalId,
  1028. RevisitTime = dto.VisitTime,
  1029. CheckingContent = dto.VisitRemark,
  1030. VisitContent = dto.VisitRemark,
  1031. VisitResult = dto.SubjectResultSatifyCode + "",
  1032. DisposalType = 3
  1033. };
  1034. await _policeSendChainDealDsRepository.AddAsync(checkData, cancellationToken);
  1035. }
  1036. else
  1037. {
  1038. checkData.AlarmReceiptNumber = dto?.Order?.ExternalId;
  1039. checkData.RevisitTime = dto.VisitTime;
  1040. checkData.CheckingContent = dto.VisitRemark;
  1041. checkData.VisitContent = dto.VisitRemark;
  1042. checkData.VisitResult = dto.SubjectResultSatifyCode + "";
  1043. await _policeSendChainDealDsRepository.UpdateAsync(checkData, cancellationToken);
  1044. }
  1045. }
  1046. }
  1047. }
  1048. /// <summary>
  1049. /// 工单创建数据处理
  1050. /// </summary>
  1051. /// <param name="dto"></param>
  1052. /// <returns></returns>
  1053. private async Task<DsSubmitCaseInfo> InitData(OrderDto dto, CancellationToken cancellationToken)
  1054. {
  1055. var submitCaseInfo = _mapper.Map<DsSubmitCaseInfo>(dto);
  1056. //处理性别
  1057. submitCaseInfo.AppLicantSex = dto.FromGender switch
  1058. {
  1059. EGender.Female => "0",
  1060. EGender.Male => "1",
  1061. EGender.Unknown => "2",
  1062. _ => "2",
  1063. };
  1064. //处理证件类型
  1065. submitCaseInfo.CertifiCateType = dto.LicenceTypeCode switch
  1066. {
  1067. "10" => "10",
  1068. "40" => "20",
  1069. "55" => "30",
  1070. "57" => "40",
  1071. _ => "50",
  1072. };
  1073. //处理紧急程度
  1074. submitCaseInfo.CaseIsUrgent = dto.EmergencyLevel switch
  1075. {
  1076. EEmergencyLevel.QuiteEmergency => "10",
  1077. EEmergencyLevel.Emergency => "20",
  1078. _ => "30",
  1079. };
  1080. //处理诉求类型
  1081. switch (submitCaseInfo.CaseType)
  1082. {
  1083. case "10":
  1084. case "15":
  1085. case "20":
  1086. case "25":
  1087. case "30":
  1088. case "35":
  1089. break;
  1090. default:
  1091. submitCaseInfo.CaseType = "40";
  1092. break;
  1093. }
  1094. var data = await _submitCaseInfoRepository.GetAsync(p => p.CaseSerial == dto.ProvinceNo, cancellationToken);
  1095. if (data != null)
  1096. submitCaseInfo.CliengGuid = data.CliengGuid;
  1097. else
  1098. submitCaseInfo.CliengGuid = Guid.NewGuid().ToString();
  1099. submitCaseInfo.Id = await _submitCaseInfoRepository.AddAsync(submitCaseInfo, cancellationToken);
  1100. return submitCaseInfo;
  1101. }
  1102. /// <summary>
  1103. /// 服务工单处理-写入数据
  1104. /// </summary>
  1105. /// <param name="dto"></param>
  1106. /// <returns></returns>
  1107. private async Task SubmitCaseProcessData(OrderFlowDto dto, CancellationToken cancellationToken)
  1108. {
  1109. var data = _mapper.Map<DsSubmitCaseProcess>(dto);
  1110. data.TacheName = "70:" + data.DeptName;
  1111. data.CaseId = dto.WorkflowTrace.Id;
  1112. data.CliengGuid = Guid.NewGuid().ToString();
  1113. //将上报信息写入本地库
  1114. data.Id = await _submitCaseProcessRepository.AddAsync(data, cancellationToken);
  1115. //将待推送数据写入待推送表
  1116. DsWaitingPushData pushData = new()
  1117. {
  1118. ServiceInterface = "SubmitCaseProcess",
  1119. Data = System.Text.Json.JsonSerializer.Serialize(data),
  1120. Priority = 0,
  1121. PushUrl = "submit_case_process",
  1122. Method = HttpMethods.Post,
  1123. SyncID = data.Id
  1124. };
  1125. await _waitingPushDataRepository.AddAsync(pushData, cancellationToken);
  1126. //处理附件
  1127. await FileData(dto.WorkflowTrace.FileJson, data.CaseSerial, data.CliengGuid, dto.Order.AreaCode, cancellationToken);
  1128. }
  1129. /// <summary>
  1130. /// 服务工单拓展信息
  1131. /// </summary>
  1132. /// <param name="dto"></param>
  1133. /// <returns></returns>
  1134. private async Task SubmitCaseExtends(OrderDto dto, CancellationToken cancellationToken)
  1135. {
  1136. var orderExtension = dto.OrderExtension;
  1137. if (orderExtension is null)
  1138. return;
  1139. //工单类型
  1140. string formType = orderExtension.OrderTypeCode;
  1141. //扩展主表信息
  1142. DsReceiveCaseExtends receiveCaseExtends = new()
  1143. {
  1144. CaseSerial = dto.ProvinceNo,
  1145. FormType = formType,
  1146. SyncState = "0",
  1147. Direction = "1"
  1148. };
  1149. //将上报信息写入本地库
  1150. var id = await _receiveCaseExtendsRepository.AddAsync(receiveCaseExtends, cancellationToken);
  1151. receiveCaseExtends.Id = id;
  1152. //处理为统一的市场监管表单
  1153. if (formType == "scjgjts" || formType == "scjgjjb")
  1154. formType = "scjgj";
  1155. SubmitCaseExtendsInfo submitCaseExtendsInfo = new()
  1156. {
  1157. CaseSerial = dto.ProvinceNo,
  1158. FormType = formType
  1159. };
  1160. //处理扩展信息
  1161. switch (formType.ToLower())
  1162. {
  1163. case "yl"://医疗表单
  1164. //转换数据
  1165. var dtoyl = _mapper.Map<DsFormMedical>(orderExtension);
  1166. dtoyl.RCEId = id;
  1167. //添加数据
  1168. await _formMedicalRepository.AddAsync(dtoyl, cancellationToken);
  1169. submitCaseExtendsInfo.FormMedical = _mapper.Map<FormMedicalInfo>(dtoyl);
  1170. break;
  1171. case "zwfw"://四川政务服务网技术工单
  1172. //转换数据
  1173. var dtozwfw = _mapper.Map<DsFormNetWorktec>(orderExtension);
  1174. dtozwfw.RCEId = id;
  1175. //添加数据
  1176. await _formNetWorktecRepository.AddAsync(dtozwfw, cancellationToken);
  1177. submitCaseExtendsInfo.FormNetWorktec = _mapper.Map<FormNetWorktecInfo>(dtozwfw);
  1178. break;
  1179. case "th"://电视购物及商铺购买退换货工单
  1180. //转换数据
  1181. var dtoth = _mapper.Map<DsFormReturnexChange>(orderExtension);
  1182. dtoth.RCEId = id;
  1183. //添加数据
  1184. await _formReturnexChangeRepository.AddAsync(dtoth, cancellationToken);
  1185. submitCaseExtendsInfo.FormReturnexChange = _mapper.Map<FormReturnexChangeInfo>(dtoth);
  1186. break;
  1187. case "gsgl"://高速公路工单
  1188. //转换数据
  1189. var dtogsgl = _mapper.Map<DsFormExpressWay>(orderExtension);
  1190. dtogsgl.RCEId = id;
  1191. //添加数据
  1192. await _formExpressWayRepository.AddAsync(dtogsgl, cancellationToken);
  1193. submitCaseExtendsInfo.FormExpressWay = _mapper.Map<FormExpressWayInfo>(dtogsgl);
  1194. break;
  1195. case "xjgg"://电视台虚假广告工单
  1196. //转换数据
  1197. var dtoxjgg = _mapper.Map<DsFormShamPub>(orderExtension);
  1198. dtoxjgg.RCEId = id;
  1199. //添加数据
  1200. await _formShamPubRepository.AddAsync(dtoxjgg, cancellationToken);
  1201. submitCaseExtendsInfo.FormShamPub = _mapper.Map<FormShamPubInfo>(dtoxjgg);
  1202. break;
  1203. case "swfwsq"://12366热线诉求交办
  1204. //转换数据
  1205. var dtoswfwsq = _mapper.Map<DsFormTaxationComplaint>(orderExtension);
  1206. dtoswfwsq.RCEId = id;
  1207. //添加数据
  1208. await _formTaxationComplaintRepository.AddAsync(dtoswfwsq, cancellationToken);
  1209. submitCaseExtendsInfo.FormTaxationComplaint = _mapper.Map<FormTaxationComplaintInfo>(dtoswfwsq);
  1210. break;
  1211. case "swfwzx"://12366热线咨询交办
  1212. //转换数据
  1213. var dtoswfwzx = _mapper.Map<DsFormTaxationConsulting>(orderExtension);
  1214. dtoswfwzx.RCEId = id;
  1215. //添加数据
  1216. await _formTaxationConsultingRepository.AddAsync(dtoswfwzx, cancellationToken);
  1217. submitCaseExtendsInfo.FormTaxationConsulting = _mapper.Map<FormTaxationConsultingInfo>(dtoswfwzx);
  1218. break;
  1219. case "jtfwjd"://12328服务监督
  1220. //转换数据
  1221. var dtojtfwjd = _mapper.Map<DsFormTraffic>(orderExtension);
  1222. dtojtfwjd.RCEId = id;
  1223. //添加数据
  1224. await _formTrafficRepository.AddAsync(dtojtfwjd, cancellationToken);
  1225. submitCaseExtendsInfo.FormTraffic = _mapper.Map<FormTrafficInfo>(dtojtfwjd);
  1226. break;
  1227. case "yzxf"://邮政业消费者申诉
  1228. //转换数据
  1229. var dtoyzxf = _mapper.Map<DsFormPost>(orderExtension);
  1230. dtoyzxf.RCEId = id;
  1231. //添加数据
  1232. await _formPostRepository.AddAsync(dtoyzxf, cancellationToken);
  1233. submitCaseExtendsInfo.FormPost = _mapper.Map<FormPostInfo>(dtoyzxf);
  1234. break;
  1235. case "hbjb"://环保举报业务
  1236. //转换数据
  1237. var dtohbjb = _mapper.Map<DsFormEnvironMent>(orderExtension);
  1238. dtohbjb.RCEId = id;
  1239. //添加数据
  1240. await _formEnvironMentRepository.AddAsync(dtohbjb, cancellationToken);
  1241. submitCaseExtendsInfo.FormEnvironMent = _mapper.Map<FormEnvironMentInfo>(dtohbjb);
  1242. break;
  1243. case "scjgj"://12315个性化表单
  1244. var dtoscjgj = _mapper.Map<DsFormMarket>(orderExtension);
  1245. //转换数据
  1246. switch (orderExtension.OrderTypeCode)
  1247. {
  1248. case "scjgjjb":
  1249. dtoscjgj.Rqsttypy = "25";
  1250. break;
  1251. case "scjgjts":
  1252. dtoscjgj.Rqsttypy = "20";
  1253. foreach (var item in orderExtension.ComplainTypes)
  1254. dtoscjgj.AppealContent += item.Value + ",";
  1255. dtoscjgj.AppealContent = dtoscjgj.AppealContent.TrimEnd(',');
  1256. break;
  1257. default:
  1258. break;
  1259. }
  1260. dtoscjgj.HandDepCode = dto.AcceptorOrgCode;
  1261. dtoscjgj.HandDep = dto.AcceptorOrgName;
  1262. dtoscjgj.Zxgh = dto.AcceptorStaffNo;
  1263. dtoscjgj.AccregperId = dto.AcceptorId;
  1264. dtoscjgj.AccregperName = dto.AcceptorName;
  1265. dtoscjgj.RegTime = Convert.ToDateTime(dto.CreationTime);
  1266. dtoscjgj.CmTime = dto.StartTime;
  1267. dtoscjgj.RCEId = id;
  1268. //添加数据
  1269. await _formMarketRepository.AddAsync(dtoscjgj, cancellationToken);
  1270. submitCaseExtendsInfo.FormMarket = _mapper.Map<FormMarketInfo>(dtoscjgj);
  1271. break;
  1272. default:
  1273. break;
  1274. }
  1275. //组装数据
  1276. SubmitCaseExtendsInfoId submitCaseExtendsInfoId = new()
  1277. {
  1278. Id = id,
  1279. Info = submitCaseExtendsInfo
  1280. };
  1281. //推送数据
  1282. await _pusherProviderService.SubmitCaseExtendsPusher(submitCaseExtendsInfoId, cancellationToken);
  1283. }
  1284. /// <summary>
  1285. /// 派单是判断需要往第三方推送数据
  1286. /// </summary>
  1287. /// <param name="dto"></param>
  1288. /// <returns></returns>
  1289. private async Task OrderDispatch(OrderFlowDto dto, CancellationToken cancellationToken)
  1290. {
  1291. if (dto.WorkflowTrace.NextHandlers != null && dto.WorkflowTrace.NextHandlers.Count > 0)
  1292. {
  1293. foreach (var item in dto.WorkflowTrace.NextHandlers)
  1294. {
  1295. if (!string.IsNullOrEmpty(item.Key))
  1296. {
  1297. //需要判断是否需要往110推送
  1298. if (item.Key == "001179")
  1299. //写入110本地数据库
  1300. await InitPoliceSendChainAlarmDs(dto.Order, cancellationToken);
  1301. //需要判断是否需要往宜宾等地市州推送数据
  1302. if (item.Key == "泸州12345")
  1303. //市州数据提交
  1304. await InitCityDataYB(dto.Order, cancellationToken);
  1305. //需要判断是否需要往企业专班提交数据
  1306. if (item.Key == "001180")
  1307. //企业专班提交数据
  1308. await InitEnterpriseData(dto.Order, cancellationToken);
  1309. //是否向省上派单
  1310. if (item.Key == "001170")
  1311. await SendCaseInfo(dto.Order, cancellationToken);
  1312. }
  1313. }
  1314. }
  1315. }
  1316. /// <summary>
  1317. /// 服务工单结果
  1318. /// </summary>
  1319. /// <param name="dto"></param>
  1320. /// <returns></returns>
  1321. private async Task SubmitCaseResult(OrderFlowDto dto, CancellationToken cancellationToken)
  1322. {
  1323. var data = _mapper.Map<DsSubmitCaseResult>(dto);
  1324. data.ConcactType = "40";
  1325. data.FinishType = "1";
  1326. data.HandleTimeLong = dto.Order.AllDuration;
  1327. data.CliengGuid = Guid.NewGuid().ToString();
  1328. //将上报信息写入本地库
  1329. data.Id = await _submitCaseResultRepository.AddAsync(data, cancellationToken);
  1330. //将待推送数据写入待推送表
  1331. DsWaitingPushData pushData = new()
  1332. {
  1333. ServiceInterface = "SubmitCaseResult",
  1334. Data = System.Text.Json.JsonSerializer.Serialize(data),
  1335. Priority = 0,
  1336. PushUrl = "submit_case_result",
  1337. Method = HttpMethods.Post,
  1338. SyncID = data.Id
  1339. };
  1340. await _waitingPushDataRepository.AddAsync(pushData, cancellationToken);
  1341. //处理附件
  1342. await FileData(new List<FileJson>(), data.CaseSerial, data.CliengGuid, dto.Order.AreaCode, cancellationToken);
  1343. //判断如果是110过来的数据,就组装数据
  1344. //组装110
  1345. if (dto.Order.Source == ESource.Police110)
  1346. {
  1347. await InitPoliceSendChainDealDs(dto, cancellationToken);
  1348. }
  1349. }
  1350. #region 组装110数据
  1351. /// <summary>
  1352. /// 组装110数据,12345警情工单推送到110
  1353. /// </summary>
  1354. /// <param name="orderDto"></param>
  1355. /// <returns></returns>
  1356. private async Task InitPoliceSendChainAlarmDs(OrderDto orderDto, CancellationToken cancellationToken)
  1357. {
  1358. DsPoliceSendChainAlarmDs policeSend = new()
  1359. {
  1360. SerialNumber = orderDto.ExternalId,
  1361. AlarmReceiptNumber = orderDto.ExternalId,
  1362. RegisterNo = orderDto.AcceptorStaffNo,
  1363. CallPoliceNumber = orderDto.FromPhone,
  1364. CallPoliceName = orderDto.FromName,
  1365. PhoneNumber = orderDto.Contact,
  1366. CallPoliceContent = orderDto.Content,
  1367. PoliceTypeCode = "",
  1368. PoliceTypeName = "",
  1369. JurisdictionalUnitCode = "511500000000",
  1370. JurisdictionalUnitName = "宜宾市公安局",
  1371. JurisdictionalUnitNumber = "0831110",
  1372. AlarmReceivingUnitCode = "",
  1373. AlarmReceivingUnitName = "",
  1374. CallPoliceTime = Convert.ToDateTime(orderDto.CreationTime),
  1375. PushTime = DateTime.Now,
  1376. AlarmReceptionType = "0",
  1377. AreaCode = orderDto.AreaCode,
  1378. CallPoliceAddress = orderDto.FullAddress,
  1379. OrderId = orderDto.Id
  1380. };
  1381. if (string.IsNullOrEmpty(policeSend.AlarmReceiptNumber))
  1382. {
  1383. policeSend.AlarmReceiptNumber = orderDto.No;
  1384. policeSend.SerialNumber = orderDto.No;
  1385. }
  1386. //查询是否有此工单,如果没有新增此工单
  1387. var data = await _policeSendChainAlarmDsRepository.GetAsync(p => p.OrderId == orderDto.Id, cancellationToken);
  1388. if (data == null)
  1389. await _policeSendChainAlarmDsRepository.AddAsync(policeSend, cancellationToken);
  1390. }
  1391. /// <summary>
  1392. /// 110的非警情工单获取办理信息
  1393. /// </summary>
  1394. /// <param name="dto"></param>
  1395. /// <returns></returns>
  1396. private async Task InitPoliceSendChainDealDs(OrderFlowDto dto, CancellationToken cancellationToken)
  1397. {
  1398. var data = await _policeSendChainDealDsRepository.GetAsync(p => p.OrderId == dto.Order.Id && p.DisposalType == (int)EDsDisposalType.OrderFiled, cancellationToken);
  1399. if (data == null)
  1400. {
  1401. data = new()
  1402. {
  1403. AlarmReceiptNumber = dto.Order.ExternalId,
  1404. FeedbackTime = dto.Order.ActualHandleTime,
  1405. DisposalSituation = dto.Order.ActualOpinion,
  1406. ResultDescription = dto.Order.ActualOpinion,
  1407. FeedbackPersonNumber = dto.Order.ActualHandlerId,
  1408. FeedbackPersonName = dto.Order.ActualHandlerName,
  1409. FeedbackUnitCode = dto.Order.ActualHandleOrgCode,
  1410. FeedbackUnitName = dto.Order.ActualHandleOrgName,
  1411. WarehousingTime = DateTime.Now,
  1412. DisposalType = 1,
  1413. OrderId = dto.Order.Id
  1414. };
  1415. await _policeSendChainDealDsRepository.AddAsync(data, cancellationToken);
  1416. }
  1417. else
  1418. {
  1419. data.AlarmReceiptNumber = dto.Order.ExternalId;
  1420. data.FeedbackTime = dto.Order.ActualHandleTime;
  1421. data.DisposalSituation = dto.Order.ActualOpinion;
  1422. data.ResultDescription = dto.Order.ActualOpinion;
  1423. data.FeedbackPersonNumber = dto.Order.ActualHandlerId;
  1424. data.FeedbackPersonName = dto.Order.ActualHandlerName;
  1425. data.FeedbackUnitCode = dto.Order.ActualHandleOrgCode;
  1426. data.FeedbackUnitName = dto.Order.ActualHandleOrgName;
  1427. data.WarehousingTime = DateTime.Now;
  1428. await _policeSendChainDealDsRepository.UpdateAsync(data, cancellationToken);
  1429. }
  1430. }
  1431. #endregion
  1432. #region 宜宾泸州市州数据提交
  1433. /// <summary>
  1434. /// 宜宾泸州市州数据提交
  1435. /// </summary>
  1436. /// <param name="dto"></param>
  1437. /// <returns></returns>
  1438. private async Task InitCityDataYB(OrderDto dto, CancellationToken cancellationToken)
  1439. {
  1440. var cityDataSend = _mapper.Map<DsCityDataSend>(dto);
  1441. cityDataSend.ServerName = string.IsNullOrEmpty(cityDataSend.ServerName) ? "市民" : cityDataSend.ServerName;
  1442. //写入本地数据库
  1443. cityDataSend.Id = await _cityDataSendRepository.AddAsync(cityDataSend, cancellationToken);
  1444. #region 提交请求
  1445. var cityHandOver = _channelConfigurationManager.GetConfigurationCityHandOver();
  1446. cityDataSend.Source = string.IsNullOrEmpty(cityDataSend.Source) ? cityHandOver.SendCityName : cityDataSend.Source;
  1447. string secretKey = GetMD5(cityDataSend.Source + cityHandOver.SecretKey);
  1448. Dictionary<string, string> dicParam = new()
  1449. {
  1450. { "Code", secretKey },
  1451. { "FSHCode", cityDataSend.FSHCode },
  1452. { "ServerName", cityDataSend.ServerName},
  1453. { "PurTypeName",cityDataSend.PurTypeName },
  1454. { "ConTypeName", cityDataSend.ConTypeName},
  1455. { "Title", cityDataSend.Title},
  1456. { "LinkName", cityDataSend.LinkName},
  1457. { "Gender",cityDataSend.Gender},
  1458. { "Mobile", cityDataSend.Mobile},
  1459. { "Mail",cityDataSend.Mail },
  1460. { "Address", cityDataSend.Address },
  1461. { "Content", cityDataSend.Content},
  1462. { "Source", cityDataSend.Source }
  1463. };
  1464. // 将参数转化为HttpContent
  1465. HttpContent content = new FormUrlEncodedContent(dicParam);
  1466. string result = "";
  1467. try
  1468. {
  1469. using (var client = _httpClientFactory.CreateClient())
  1470. using (var response = await client.PostAsync(cityHandOver.BaseUrl + cityHandOver.UrlAddress, content))
  1471. {
  1472. if (response.StatusCode == HttpStatusCode.OK)
  1473. {
  1474. result = await response.Content.ReadAsStringAsync();
  1475. }
  1476. }
  1477. }
  1478. catch (Exception)
  1479. { }
  1480. #endregion
  1481. //处理返回信息
  1482. if (!string.IsNullOrEmpty(result))
  1483. {
  1484. var responseData = JsonConvert.DeserializeObject<DataExchangeResponseDto>(result);
  1485. if (responseData != null)
  1486. {
  1487. if (responseData.Code == "1")
  1488. cityDataSend.SyncState = "1";
  1489. else
  1490. cityDataSend.SyncState = "2";
  1491. cityDataSend.ReturnResult = result;
  1492. await _cityDataSendRepository.UpdateAsync(cityDataSend, cancellationToken);
  1493. }
  1494. }
  1495. }
  1496. #endregion
  1497. #region 宜宾企业专班数据提交
  1498. /// <summary>
  1499. /// 企业专班数据提交
  1500. /// </summary>
  1501. /// <param name="dto"></param>
  1502. /// <returns></returns>
  1503. private async Task InitEnterpriseData(OrderDto dto, CancellationToken cancellationToken)
  1504. {
  1505. var enterpriseData = _mapper.Map<DsDataWorkOrderSend>(dto);
  1506. var businessFile = _channelConfigurationManager.GetConfigurationBusinessFile();
  1507. //附件处理
  1508. List<ReplyFiles> replyFiles = new();
  1509. if (dto.FileJson != null && dto.FileJson.Count > 0)
  1510. {
  1511. foreach (var item in dto.FileJson)
  1512. {
  1513. var data = await _fileRepository.GetAsync(p => p.Id == item.Id);
  1514. if (data != null)
  1515. {
  1516. #region 根据附件Id拉取附件文件流
  1517. byte[] fileContentBytes = null;
  1518. try
  1519. {
  1520. #region 读取数据
  1521. string url = string.Format("{0}{1}?Source={2}&Id={3}", businessFile.BaseUrl, businessFile.DownloadUrlAddress, businessFile.Source, data.Additions);
  1522. using (var client = _httpClientFactory.CreateClient())
  1523. using (var response = await client.GetAsync(url))
  1524. {
  1525. if (response.StatusCode == HttpStatusCode.OK)
  1526. {
  1527. using var memoryStream = new MemoryStream();
  1528. await response.Content.CopyToAsync(memoryStream);
  1529. memoryStream.Seek(0, SeekOrigin.Begin);
  1530. fileContentBytes = memoryStream.ToArray();
  1531. }
  1532. }
  1533. #endregion
  1534. #region 组装附件参数
  1535. //组装附件参数
  1536. if (fileContentBytes != null && fileContentBytes.Length > 0)
  1537. {
  1538. ReplyFiles files = new ReplyFiles
  1539. {
  1540. Filename = data.Name,
  1541. Fileformat = data.Type,
  1542. FileText = Convert.ToBase64String(fileContentBytes)
  1543. };
  1544. //拉取文件流
  1545. replyFiles.Add(files);
  1546. }
  1547. #endregion
  1548. }
  1549. catch (Exception)
  1550. {
  1551. }
  1552. #endregion
  1553. }
  1554. enterpriseData.ReplyFiles = replyFiles;
  1555. }
  1556. }
  1557. //添加本地数据
  1558. enterpriseData.Id = await _dataWorkOrderSendRepository.AddAsync(enterpriseData, cancellationToken);
  1559. //推送数据
  1560. await _enterpriseService.EnterpriseSendPusher(enterpriseData, cancellationToken);
  1561. }
  1562. #endregion
  1563. #region 往省上派单
  1564. /// <summary>
  1565. /// 往省上派单
  1566. /// </summary>
  1567. /// <param name="dto"></param>
  1568. /// <returns></returns>
  1569. private async Task SendCaseInfoData(OrderDto dto, CancellationToken cancellationToken)
  1570. {
  1571. //先上传拓展信息
  1572. if (dto.OrderExtension != null)
  1573. await SubmitCaseExtends(dto, cancellationToken);
  1574. //在处理工单信息
  1575. var sendCaseInfo = _mapper.Map<DsSendCaseInfo>(dto);
  1576. if (dto.OrderExtension != null)
  1577. sendCaseInfo.IsExtends = "1";
  1578. else
  1579. sendCaseInfo.IsExtends = "0";
  1580. #region 处理数据
  1581. //处理性别
  1582. switch (dto.FromGender)
  1583. {
  1584. case EGender.Female:
  1585. sendCaseInfo.AppLicantSex = "0";
  1586. break;
  1587. case EGender.Male:
  1588. sendCaseInfo.AppLicantSex = "1";
  1589. break;
  1590. case EGender.Unknown:
  1591. sendCaseInfo.AppLicantSex = "2";
  1592. break;
  1593. default:
  1594. sendCaseInfo.AppLicantSex = "2";
  1595. break;
  1596. }
  1597. //处理证件类型
  1598. sendCaseInfo.CertifiCateType = dto.LicenceTypeCode switch
  1599. {
  1600. "10" => "10",
  1601. "40" => "20",
  1602. "55" => "30",
  1603. "57" => "40",
  1604. _ => "50",
  1605. };
  1606. //处理紧急程度
  1607. sendCaseInfo.CaseIsUrgent = dto.EmergencyLevel switch
  1608. {
  1609. EEmergencyLevel.QuiteEmergency => "10",
  1610. EEmergencyLevel.Emergency => "20",
  1611. _ => "30",
  1612. };
  1613. //处理诉求类型
  1614. switch (sendCaseInfo.CaseType)
  1615. {
  1616. case "10":
  1617. case "15":
  1618. case "20":
  1619. case "25":
  1620. case "30":
  1621. case "35":
  1622. break;
  1623. default:
  1624. sendCaseInfo.CaseType = "40";
  1625. break;
  1626. }
  1627. #endregion
  1628. sendCaseInfo.Id = await _sendCaseInfoRepository.AddAsync(sendCaseInfo, cancellationToken);
  1629. //推送数据
  1630. await _pusherProviderService.SendCaseInfoDataPusher(sendCaseInfo, cancellationToken);
  1631. }
  1632. #endregion
  1633. /// <summary>
  1634. /// 附件处理
  1635. /// </summary>
  1636. /// <param name="dto"></param>
  1637. /// <param name="CaseSerial">工单编号或者督办编号</param>
  1638. /// <param name="CliengGuid">附件</param>
  1639. /// <param name="AreaCode">区域Code</param>
  1640. /// <returns></returns>
  1641. private async Task FileData(List<FileJson> dto, string CaseSerial, string CliengGuid, string AreaCode, CancellationToken cancellationToken)
  1642. {
  1643. if (dto != null && dto.Count > 0)
  1644. {
  1645. //往附件推送表中写入数据
  1646. foreach (var item in dto)
  1647. {
  1648. var data = await _fileRepository.GetAsync(p => p.Id == item.Id);
  1649. //将受到的数据写入本地数据库
  1650. DsGetCaseMaterialInfo materialInfo = new()
  1651. {
  1652. CaseSerial = CaseSerial,
  1653. CliengGuid = CliengGuid,
  1654. AreaCode = AreaCode,
  1655. FileName = data.Name,
  1656. Key = data.Key,
  1657. Type = data.Type,
  1658. Additions = data.Additions,
  1659. Path = data.Path,
  1660. Direction = "1",
  1661. SyncState = "0"
  1662. };
  1663. //材料类型
  1664. switch (data.Classify)
  1665. {
  1666. case "办理上传":
  1667. materialInfo.MaterialType = "10";//受理材料
  1668. break;
  1669. //case "2":
  1670. // materialInfo.MaterialType = "20";//环节材料
  1671. // break;
  1672. //case "3":
  1673. // materialInfo.MaterialType = "30";//结果材料
  1674. // break;
  1675. case "回访附件":
  1676. materialInfo.MaterialType = "40";//回访评价材料
  1677. break;
  1678. case "督办申请":
  1679. case "督办回复":
  1680. materialInfo.MaterialType = "50";//督办材料
  1681. break;
  1682. case "知识附件":
  1683. materialInfo.MaterialType = "60";//知识库材料
  1684. break;
  1685. default:
  1686. materialInfo.MaterialType = "20";//环节材料
  1687. break;
  1688. }
  1689. //将数据写入本地
  1690. materialInfo.Id = await _getCaseMaterialInfoRepository.AddAsync(materialInfo, cancellationToken);
  1691. if (!string.IsNullOrEmpty(materialInfo.Id))
  1692. {
  1693. //写入待发表
  1694. DsWaitingPushData pushData = new()
  1695. {
  1696. ServiceInterface = "GetCaseMaterialInfo",
  1697. Data = System.Text.Json.JsonSerializer.Serialize(materialInfo),
  1698. Priority = 0,
  1699. PushUrl = "get_case_material_info",
  1700. Method = HttpMethods.Post,
  1701. SyncID = materialInfo.Id
  1702. };
  1703. await _waitingPushDataRepository.AddAsync(pushData, cancellationToken);
  1704. }
  1705. }
  1706. }
  1707. }
  1708. #region MD5 32位加密
  1709. /// <summary>
  1710. /// MD5 32位加密
  1711. /// </summary>
  1712. /// <param name="myString"></param>
  1713. /// <returns></returns>
  1714. private static string GetMD5(string myString)
  1715. {
  1716. string cl = myString;
  1717. string pwd = "";
  1718. try
  1719. {
  1720. MD5 md5 = MD5.Create();//实例化一个md5对像
  1721. // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
  1722. byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
  1723. // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
  1724. for (int i = 0; i < s.Length; i++)
  1725. {
  1726. // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符
  1727. pwd = pwd + s[i].ToString("X2");
  1728. }
  1729. }
  1730. catch (Exception)
  1731. {
  1732. }
  1733. return pwd;
  1734. }
  1735. #endregion
  1736. /// <summary>
  1737. /// 初始化待推送数据
  1738. /// </summary>
  1739. /// <param name="ServiceInterface"></param>
  1740. /// <param name="Data"></param>
  1741. /// <param name="PushUrl"></param>
  1742. /// <param name="SyncID"></param>
  1743. /// <param name="Priority"></param>
  1744. /// <param name="cancellationToken"></param>
  1745. /// <returns></returns>
  1746. private async Task InitPushData(string ServiceInterface, string Data, string PushUrl, string SyncID, int Priority, CancellationToken cancellationToken)
  1747. {
  1748. //将待推送数据写入待推送表
  1749. DsWaitingPushData pushData = new()
  1750. {
  1751. ServiceInterface = ServiceInterface,
  1752. Data = Data,
  1753. Priority = Priority,
  1754. PushUrl = PushUrl,
  1755. Method = HttpMethods.Post,
  1756. SyncID = SyncID
  1757. };
  1758. await _waitingPushDataRepository.AddAsync(pushData, cancellationToken);
  1759. }
  1760. #endregion
  1761. }
  1762. }