ProvinceController.cs 57 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221
  1. using DataSharing.FwDataExchange;
  2. using DataSharing.Province;
  3. using DataSharing.RawData;
  4. using DataSharing.Share.Dtos;
  5. using DataSharing.Share.Dtos.FwDataExchange;
  6. using DataSharing.Share.Dtos.HotlineSetting;
  7. using DataSharing.Share.Dtos.Province.XieTong.Receive;
  8. using DotNetCore.CAP;
  9. using Hotline.Share.Dtos.DataSharing.PusherHotlineDto;
  10. using Hotline.Share.Dtos.File;
  11. using Hotline.Share.Dtos.Order;
  12. using Hotline.Share.Enums.Order;
  13. using MapsterMapper;
  14. using MediatR;
  15. using Microsoft.AspNetCore.Mvc;
  16. using XF.Domain.Filters;
  17. using XF.Domain.Repository;
  18. namespace DataSharing.Host.Controllers
  19. {
  20. /// <summary>
  21. /// 下行,省平台调用
  22. /// </summary>
  23. public class ProvinceController : BaseController
  24. {
  25. #region 注入
  26. private readonly IMapper _mapper;
  27. private readonly IMediator _mediator;
  28. private readonly ICapPublisher _capPublisher;
  29. private readonly IChannelConfigurationManager _channelConfigurationManager;
  30. private readonly IRepository<DsOrder> _dataOrderRepository;
  31. private readonly IRepository<DsReceiveProvinceData> _dsReceiveProvinceDataRepository;
  32. private readonly IRepository<DsGetCaseMaterialInfo> _getCaseMaterialInfoRepository;
  33. private readonly IRepository<DsGetCaseBackApply> _getCaseBackApplyRepository;
  34. private readonly IRepository<DsSendCaseInfo> _sendCaseInfoRepository;
  35. private readonly FwClient _fwClient;
  36. private readonly IRepository<SendFwErrorData> _sendFwErrorDataRepository;
  37. /// <summary>
  38. ///
  39. /// </summary>
  40. /// <param name="mapper"></param>
  41. /// <param name="mediator"></param>
  42. /// <param name="capPublisher"></param>
  43. /// <param name="channelConfigurationManager"></param>
  44. /// <param name="dataOrderRepository"></param>
  45. /// <param name="dsReceiveProvinceDataRepository"></param>
  46. /// <param name="getCaseMaterialInfoRepository"></param>
  47. /// <param name="getCaseBackApplyRepository"></param>
  48. /// <param name="sendCaseInfoRepository"></param>
  49. /// <param name="fwClient"></param>
  50. /// <param name="sendFwErrorDataRepository"></param>
  51. public ProvinceController(IMapper mapper,
  52. IMediator mediator,
  53. ICapPublisher capPublisher,
  54. IChannelConfigurationManager channelConfigurationManager,
  55. IRepository<DsOrder> dataOrderRepository,
  56. IRepository<DsReceiveProvinceData> dsReceiveProvinceDataRepository,
  57. IRepository<DsGetCaseMaterialInfo> getCaseMaterialInfoRepository,
  58. IRepository<DsGetCaseBackApply> getCaseBackApplyRepository,
  59. IRepository<DsSendCaseInfo> sendCaseInfoRepository,
  60. FwClient fwClient,
  61. IRepository<SendFwErrorData> sendFwErrorDataRepository)
  62. {
  63. _mapper = mapper;
  64. _mediator = mediator;
  65. _capPublisher = capPublisher;
  66. _channelConfigurationManager = channelConfigurationManager;
  67. _dataOrderRepository = dataOrderRepository;
  68. _dsReceiveProvinceDataRepository = dsReceiveProvinceDataRepository;
  69. _getCaseMaterialInfoRepository = getCaseMaterialInfoRepository;
  70. _getCaseBackApplyRepository = getCaseBackApplyRepository;
  71. _sendCaseInfoRepository = sendCaseInfoRepository;
  72. _fwClient = fwClient;
  73. _sendFwErrorDataRepository = sendFwErrorDataRepository;
  74. }
  75. #endregion
  76. /// <summary>
  77. /// 服务工单交办接口--已完成-----1
  78. /// </summary>
  79. /// <param name="receiveCaseInfo"></param>
  80. /// <returns></returns>
  81. [HttpPost("rest/receive_case_info")]
  82. public async Task<OpenResponse> ReceiveCaseInfo([FromBody] ReceiveCaseInfoRequest receiveCaseInfo)
  83. {
  84. // 验证
  85. if (receiveCaseInfo is null || receiveCaseInfo.paras is null)
  86. {
  87. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("数据解析失败"));
  88. }
  89. //验证接收的数据是否正确
  90. string strResult = receiveCaseInfo.paras.Validate();
  91. if (!string.IsNullOrEmpty(strResult))
  92. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed(strResult));
  93. //转换数据
  94. var dto = receiveCaseInfo.paras;
  95. var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "receive_case_info", System.Text.Json.JsonSerializer.Serialize(dto));
  96. //处理组装数据,推送数据
  97. var data = _mapper.Map<Hotline.Share.Dtos.Order.AddOrderDto>(dto);
  98. data.IsProvince = true;
  99. if (dto.CaseSource.ToLower() == "zmhd".ToLower())
  100. {
  101. data.SourceChannel = "省政民互动";
  102. data.SourceChannelCode = "SZMHD";
  103. if (dto.TrowGuid == "【政民互动直派】")
  104. data.IsProvince = false;
  105. }
  106. else
  107. {
  108. data.SourceChannel = "省12345平台";
  109. data.SourceChannelCode = "S12345";
  110. }
  111. data.Source = Hotline.Share.Enums.Order.ESource.ProvinceStraight;
  112. //处理性别
  113. data.FromGender = dto.AppLicantSex switch
  114. {
  115. "0" => Hotline.Share.Enums.Order.EGender.Female,
  116. "1" => Hotline.Share.Enums.Order.EGender.Male,
  117. "2" => Hotline.Share.Enums.Order.EGender.Unknown,
  118. _ => Hotline.Share.Enums.Order.EGender.Unknown,
  119. };
  120. //处理证件类型
  121. switch (dto.CertifiCateType)
  122. {
  123. case "10":
  124. data.LicenceTypeCode = "10";
  125. break;
  126. case "20":
  127. data.LicenceTypeCode = "40";
  128. break;
  129. case "30":
  130. data.LicenceTypeCode = "55";
  131. break;
  132. case "40":
  133. data.LicenceTypeCode = "57";
  134. break;
  135. }
  136. data.AcceptTypeCode = dto.CaseType;
  137. //处理紧急程度
  138. switch (dto.CaseIsUrgent)
  139. {
  140. case "10":
  141. data.EmergencyLevel = Hotline.Share.Enums.Order.EEmergencyLevel.QuiteEmergency;
  142. break;
  143. case "20":
  144. data.EmergencyLevel = Hotline.Share.Enums.Order.EEmergencyLevel.Emergency;
  145. break;
  146. case "30":
  147. data.EmergencyLevel = Hotline.Share.Enums.Order.EEmergencyLevel.Normal;
  148. break;
  149. }
  150. //经纬度处理
  151. var lngLat = dto.CaseLngLat.Split(',');
  152. if (lngLat != null && lngLat.Length == 2)
  153. {
  154. data.Longitude = Convert.ToDouble(lngLat[0]);
  155. data.Latitude = Convert.ToDouble(lngLat[1]);
  156. }
  157. if (data.Contact == "信息保密")
  158. data.Contact = "";
  159. data.City = "宜宾市";
  160. //处理热点
  161. if (!string.IsNullOrEmpty(dto.CaseAccord))
  162. {
  163. data.HotspotExternal = dto.CaseAccord;
  164. string hotspotExternal = "";
  165. var length = dto.CaseAccord.Length - 2;
  166. if (dto.CaseAccord.Length - 2 > 0)
  167. {
  168. for (int i = length; i > 0; i = i - 2)
  169. {
  170. hotspotExternal += dto.CaseAccord.Substring(0, i) + ",";
  171. }
  172. }
  173. if (!string.IsNullOrEmpty(hotspotExternal))
  174. {
  175. data.HotspotExternal = hotspotExternal.Substring(0, hotspotExternal.Length - 1);
  176. }
  177. }
  178. data.IdentityType = Hotline.Share.Enums.Order.EIdentityType.Citizen;
  179. data.Transpond = false;
  180. data.IsEnforcementOrder = false;
  181. if (!string.IsNullOrEmpty(id))
  182. {
  183. data.Files = await GetFileData(dto.CliengGuid, dto.CaseSerial, "受理上传");
  184. //await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderCreation, data, cancellationToken: HttpContext.RequestAborted);
  185. //var result = await _hotlineClient.ReceiveOrderAsync(data, HttpContext.RequestAborted);
  186. var result = await _fwClient.RequestNoTokenAsync<HotlineClientResponse>("api/v1/Order/add-anonymous", "Post", System.Text.Json.JsonSerializer.Serialize(data));
  187. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  188. }
  189. else
  190. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("接口调用失败!"));
  191. }
  192. /// <summary>
  193. /// 服务工单退回反馈接口--已完成-----1
  194. /// </summary>
  195. /// <param name="receiveBackResult">退回反馈</param>
  196. /// <returns></returns>
  197. [HttpPost("get_case_back_result")]
  198. public async Task<OpenResponse> GetCaseBackResult([FromBody] GetCaseBackResultRequest receiveBackResult)
  199. {
  200. // 验证
  201. if (receiveBackResult is null || receiveBackResult.paras is null)
  202. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("数据解析失败"));
  203. //验证接收的数据是否正确
  204. string strResult = receiveBackResult.paras.Validate();
  205. if (!string.IsNullOrEmpty(strResult))
  206. OpenResponse.Ok(GetDataBaseReponse<string>.Failed(strResult));
  207. //推送老系统数据
  208. var isCheck = await SendDataFw(receiveBackResult.paras.CaseSerial, "api/receive/get_case_back_result", System.Text.Json.JsonSerializer.Serialize(receiveBackResult), "Post");
  209. if (isCheck)
  210. {
  211. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  212. }
  213. //转换数据
  214. var dto = receiveBackResult.paras;
  215. var data = await _getCaseBackApplyRepository.GetAsync(p => p.CaseSerial == dto.CaseSerial, HttpContext.RequestAborted);
  216. if (data == null)
  217. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("接口调用失败!"));
  218. //添加数据
  219. var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "get_case_back_result", System.Text.Json.JsonSerializer.Serialize(dto));
  220. if (!string.IsNullOrEmpty(id))
  221. {
  222. var dataBack = new OrderSendBackResultDto()
  223. {
  224. Id = data.OrderSendBackId,
  225. Reason = dto.BackReason,
  226. Result = dto.Result == "1" ? 1 : 0,
  227. Source = "province",
  228. Files = await GetFileData(dto.CliengGuid, dto.CaseSerial, "工单退回审核")
  229. };
  230. //向业务系统推送消息
  231. await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderReturnFeedback, dataBack, cancellationToken: HttpContext.RequestAborted);
  232. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  233. }
  234. else
  235. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("接口调用失败!"));
  236. }
  237. /// <summary>
  238. /// 督办工单派发接口--已完成-----1
  239. /// </summary>
  240. /// <param name="receiveSendSuperviseInfo">督办工单对象</param>
  241. /// <returns></returns>
  242. [HttpPost("send_supervise_info")]
  243. public async Task<OpenResponse> SendSuperviseInfo([FromBody] SendSuperviseInfoRequest receiveSendSuperviseInfo)
  244. {
  245. // 验证
  246. if (receiveSendSuperviseInfo is null || receiveSendSuperviseInfo.paras is null)
  247. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("数据解析失败"));
  248. string strResult = receiveSendSuperviseInfo.paras.Validate();
  249. if (!string.IsNullOrEmpty(strResult))
  250. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed(strResult));
  251. //推送老系统数据
  252. var isCheck = await SendDataFw(receiveSendSuperviseInfo.paras.CaseSerial, "api/receive/send_supervise_info", System.Text.Json.JsonSerializer.Serialize(receiveSendSuperviseInfo), "Post");
  253. if (isCheck)
  254. {
  255. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  256. }
  257. //转换数据
  258. var dto = receiveSendSuperviseInfo.paras;
  259. //添加数据
  260. var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "send_supervise_info", System.Text.Json.JsonSerializer.Serialize(dto));
  261. if (!string.IsNullOrEmpty(id))
  262. {
  263. ProvinceSendOrderSuperviseDto orderSuperviseDto = new ProvinceSendOrderSuperviseDto()
  264. {
  265. ProvinceOrderSuperviseDto = _mapper.Map<ProvinceOrderSuperviseDto>(dto),
  266. Files = await GetFileData(dto.CliengGuid, dto.CaseSerial, "督办工单派发")
  267. };
  268. //向业务系统推送消息
  269. await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderSupervise, orderSuperviseDto, cancellationToken: HttpContext.RequestAborted);
  270. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  271. }
  272. else
  273. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("接口调用失败!"));
  274. }
  275. /// <summary>
  276. /// 服务工单催单接口--已完成-----1
  277. /// </summary>
  278. /// <param name="receiveRemindCaseInfo">催单对象</param>
  279. /// <returns></returns>
  280. [HttpPost("remind_case_info")]
  281. public async Task<OpenResponse> RemindCaseInfo([FromBody] RemindCaseInfoRequest receiveRemindCaseInfo)
  282. {
  283. // 验证
  284. if (receiveRemindCaseInfo is null || receiveRemindCaseInfo.paras is null)
  285. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("数据解析失败"));
  286. string strResult = receiveRemindCaseInfo.paras.Validate();
  287. if (!string.IsNullOrEmpty(strResult))
  288. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed(strResult));
  289. //推送老系统数据
  290. var isCheck = await SendDataFw(receiveRemindCaseInfo.paras.CaseSerial, "api/receive/remind_case_info", System.Text.Json.JsonSerializer.Serialize(receiveRemindCaseInfo), "Post");
  291. if (isCheck)
  292. {
  293. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  294. }
  295. //转换数据
  296. var dto = receiveRemindCaseInfo.paras;
  297. //添加数据
  298. var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "remind_case_info", System.Text.Json.JsonSerializer.Serialize(dto));
  299. if (!string.IsNullOrEmpty(id))
  300. {
  301. var data = _mapper.Map<ProvinceOrderUrgeDto>(dto);
  302. data.DsBisId = dto.CliengGuid;
  303. data.Files = await GetFileData(dto.CliengGuid, dto.CaseSerial, "工单催单");
  304. //向业务系统推送消息
  305. await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderRemind, data, cancellationToken: HttpContext.RequestAborted);
  306. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  307. }
  308. else
  309. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("接口调用失败!"));
  310. }
  311. /// <summary>
  312. /// 服务工单甄别结果接口--已完成-----1
  313. /// </summary>
  314. /// <param name="receiveScreenCaseResultReceive">服务工单甄别结果对象</param>
  315. /// <returns></returns>
  316. [HttpPost("screen_case_result_receive")]
  317. public async Task<OpenResponse> ScreenCaseResultReceive([FromBody] ScreenCaseResultReceiveRequest receiveScreenCaseResultReceive)
  318. {
  319. // 验证
  320. if (receiveScreenCaseResultReceive is null || receiveScreenCaseResultReceive.paras is null)
  321. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("数据解析失败"));
  322. string strResult = receiveScreenCaseResultReceive.paras.Validate();
  323. if (!string.IsNullOrEmpty(strResult))
  324. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed(strResult));
  325. //推送老系统数据
  326. var isCheck = await SendDataFw(receiveScreenCaseResultReceive.paras.CaseSerial, "api/receive/screen_case_result_receive", System.Text.Json.JsonSerializer.Serialize(receiveScreenCaseResultReceive), "Post");
  327. if (isCheck)
  328. {
  329. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  330. }
  331. //转换数据
  332. var dto = receiveScreenCaseResultReceive.paras;
  333. //添加数据
  334. var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "screen_case_result_receive", System.Text.Json.JsonSerializer.Serialize(dto));
  335. if (!string.IsNullOrEmpty(id))
  336. {
  337. ProvinceSendScreenResultDto screenResultDto = new ProvinceSendScreenResultDto()
  338. {
  339. ProvinceScreenResult = _mapper.Map<ProvinceScreenResult>(dto),
  340. Source = "province",
  341. Files = await GetFileData(dto.CliengGuid, dto.CaseSerial, "工单甄别结果")
  342. };
  343. //向业务系统推送消息
  344. await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderScreen, screenResultDto, cancellationToken: HttpContext.RequestAborted);
  345. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  346. }
  347. else
  348. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("接口调用失败!"));
  349. }
  350. /// <summary>
  351. /// 服务工单延时审核结果接口---已完成-----1
  352. /// </summary>
  353. /// <param name="receiveDelayCaseResult">延时审核结果对象</param>
  354. /// <returns></returns>
  355. [HttpPost("delay_case_result_receive")]
  356. public async Task<OpenResponse> DelayCaseResultReceive([FromBody] DelayCaseResultRequest receiveDelayCaseResult)
  357. {
  358. // 验证
  359. if (receiveDelayCaseResult is null || receiveDelayCaseResult.paras is null)
  360. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("数据解析失败"));
  361. string strResult = receiveDelayCaseResult.paras.Validate();
  362. if (!string.IsNullOrEmpty(strResult))
  363. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed(strResult));
  364. //推送老系统数据
  365. var isCheck = await SendDataFw(receiveDelayCaseResult.paras.CaseSerial, "api/receive/delay_case_result_receive", System.Text.Json.JsonSerializer.Serialize(receiveDelayCaseResult), "Post");
  366. if (isCheck)
  367. {
  368. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  369. }
  370. //转换数据
  371. var dto = receiveDelayCaseResult.paras;
  372. //添加数据
  373. var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "delay_case_result_receive", System.Text.Json.JsonSerializer.Serialize(dto));
  374. if (!string.IsNullOrEmpty(id))
  375. {
  376. var listFiles = await GetFileData(dto.CliengGuid, dto.CaseSerial, "工单延期审核结果");
  377. ProvinceSendDelayResultDto delayResultDto = new()
  378. {
  379. IsPass = dto.AuditResult == "1",
  380. Opinion = dto.AuditOpinion,
  381. No = dto.CaseSerial,
  382. Files = listFiles,
  383. Source = "province"
  384. };
  385. //向业务系统推送消息
  386. await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderDelayResult, delayResultDto, cancellationToken: HttpContext.RequestAborted);
  387. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  388. }
  389. else
  390. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("接口调用失败!"));
  391. }
  392. /// <summary>
  393. /// 服务工单交办补充诉求接口---已完成-----1
  394. /// </summary>
  395. /// <param name="receiveSupplyCaseInfo">交办补充诉求对象</param>
  396. /// <returns></returns>
  397. [HttpPost("supply_case_info_receive")]
  398. public async Task<OpenResponse> SupplyCaseInfoReceive([FromBody] SupplyCaseInfoRequest receiveSupplyCaseInfo)
  399. {
  400. // 验证
  401. if (receiveSupplyCaseInfo is null || receiveSupplyCaseInfo.paras is null)
  402. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("数据解析失败"));
  403. string strResult = receiveSupplyCaseInfo.paras.Validate();
  404. if (!string.IsNullOrEmpty(strResult))
  405. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed(strResult));
  406. //推送老系统数据
  407. var isCheck = await SendDataFw(receiveSupplyCaseInfo.paras.CaseSerial, "api/receive/supply_case_info_receive", System.Text.Json.JsonSerializer.Serialize(receiveSupplyCaseInfo), "Post");
  408. if (isCheck)
  409. {
  410. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  411. }
  412. //转换数据
  413. var dto = receiveSupplyCaseInfo.paras;
  414. //添加数据
  415. var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "supply_case_info_receive", System.Text.Json.JsonSerializer.Serialize(dto));
  416. if (!string.IsNullOrEmpty(id))
  417. {
  418. //向业务系统推送消息
  419. var dataOrder = await _dataOrderRepository.GetAsync(p => p.ProvinceNo == dto.CaseSerial, HttpContext.RequestAborted);
  420. if (dataOrder != null)
  421. {
  422. var listFiles = await GetFileData(dto.CliengGuid, dto.CaseSerial, "工单补充");
  423. AddOrderComplementDto complementDto = new AddOrderComplementDto
  424. {
  425. Opinion = dto.SupplyContent,
  426. OrderId = dataOrder.OrderId,
  427. DsBisId = dto.CliengGuid,
  428. Files = listFiles
  429. };
  430. //向业务系统推送消息
  431. await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderSupplements, complementDto, cancellationToken: HttpContext.RequestAborted);
  432. }
  433. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  434. }
  435. else
  436. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("接口调用失败!"));
  437. }
  438. /// <summary>
  439. /// 服务工单撤单接口---已完成-----1
  440. /// </summary>
  441. /// <param name="receiveRevokeCaseInfo">撤单对象</param>
  442. /// <returns></returns>
  443. [HttpPost("revoke_case_info")]
  444. public async Task<OpenResponse> RevokeCaseInfo([FromBody] RevokeCaseInfoRequest receiveRevokeCaseInfo)
  445. {
  446. // 验证
  447. if (receiveRevokeCaseInfo is null || receiveRevokeCaseInfo.paras is null)
  448. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("数据解析失败"));
  449. string strResult = receiveRevokeCaseInfo.paras.Validate();
  450. if (!string.IsNullOrEmpty(strResult))
  451. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed(strResult));
  452. //推送老系统数据
  453. var isCheck = await SendDataFw(receiveRevokeCaseInfo.paras.CaseSerial, "api/receive/revoke_case_info", System.Text.Json.JsonSerializer.Serialize(receiveRevokeCaseInfo), "Post");
  454. if (isCheck)
  455. {
  456. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  457. }
  458. //转换数据
  459. var dto = receiveRevokeCaseInfo.paras;
  460. //添加数据
  461. var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "revoke_case_info", System.Text.Json.JsonSerializer.Serialize(dto));
  462. if (!string.IsNullOrEmpty(id))
  463. {
  464. CancelOrderDto cancelOrder = new()
  465. {
  466. Opinion = dto.RevokeReasion,
  467. ProvinceNo = dto.CaseSerial,
  468. Source = "province"
  469. };
  470. //向业务系统推送消息
  471. await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderRevoke, cancelOrder, cancellationToken: HttpContext.RequestAborted);
  472. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  473. }
  474. else
  475. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("接口调用失败!"));
  476. }
  477. /// <summary>
  478. /// 服务工单预警接口
  479. /// </summary>
  480. /// <param name="receiveSendWarnInfo">预警对象</param>
  481. /// <returns></returns>
  482. [HttpPost("send_warn_info")]
  483. public async Task<OpenResponse> SendWarnInfo([FromBody] SendWarnInfoRequest receiveSendWarnInfo)
  484. {
  485. // 验证
  486. if (receiveSendWarnInfo is null || receiveSendWarnInfo.paras is null)
  487. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("数据解析失败"));
  488. string strResult = receiveSendWarnInfo.paras.Validate();
  489. if (!string.IsNullOrEmpty(strResult))
  490. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed(strResult));
  491. //推送老系统数据
  492. var isCheck = await SendDataFw(receiveSendWarnInfo.paras.CaseSerial, "api/receive/send_warn_info", System.Text.Json.JsonSerializer.Serialize(receiveSendWarnInfo), "Post");
  493. if (isCheck)
  494. {
  495. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  496. }
  497. //转换数据
  498. var dto = receiveSendWarnInfo.paras;
  499. //添加数据
  500. var id = await InitReceiveProvinceData(dto.CaseSerial, null, "send_warn_info", System.Text.Json.JsonSerializer.Serialize(dto));
  501. if (!string.IsNullOrEmpty(id))
  502. {
  503. //向业务系统推送消息
  504. await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderWarning, _mapper.Map<WarningDto>(dto), cancellationToken: HttpContext.RequestAborted);
  505. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  506. }
  507. else
  508. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("接口调用失败!"));
  509. }
  510. /// <summary>
  511. /// 交办工单满意度接收接口---已完成-----1
  512. /// </summary>
  513. /// <param name="receiveSendCaseEvlResult">交办工单满意度对象</param>
  514. /// <returns></returns>
  515. [HttpPost("send_case_evl_result")]
  516. public async Task<OpenResponse> SendCaseEvlResult([FromBody] SendCaseEvlResultRequest receiveSendCaseEvlResult)
  517. {
  518. // 验证
  519. if (receiveSendCaseEvlResult is null || receiveSendCaseEvlResult.paras is null)
  520. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("数据解析失败"));
  521. string strResult = receiveSendCaseEvlResult.paras.Validate();
  522. if (!string.IsNullOrEmpty(strResult))
  523. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed(strResult));
  524. //推送老系统数据
  525. var isCheck = await SendDataFw(receiveSendCaseEvlResult.paras.CaseSerial, "api/receive/send_case_evl_result", System.Text.Json.JsonSerializer.Serialize(receiveSendCaseEvlResult), "Post");
  526. if (isCheck)
  527. {
  528. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  529. }
  530. //转换数据
  531. var dto = receiveSendCaseEvlResult.paras;
  532. //添加数据
  533. var id = await InitReceiveProvinceData(dto.CaseSerial, null, "send_case_evl_result", System.Text.Json.JsonSerializer.Serialize(dto));
  534. if (!string.IsNullOrEmpty(id))
  535. {
  536. ProvinceOrderVisitDto orderVisitDto = new()
  537. {
  538. ProvinceNo = dto.CaseSerial,
  539. VisitTime = Convert.ToDateTime(dto.ReplyTime),
  540. VisitContent = dto.ReplyContent,
  541. OrgProcessingResults = dto.ResultEvl,
  542. VisitType = Hotline.Share.Enums.Order.EVisitType.ArtificialVisit
  543. };
  544. switch (orderVisitDto.OrgProcessingResults)
  545. {
  546. case "5":
  547. case "4":
  548. case "2":
  549. break;
  550. case "3":
  551. orderVisitDto.OrgProcessingResults = "4";
  552. break;
  553. case "1":
  554. orderVisitDto.OrgProcessingResults = "2";
  555. break;
  556. default:
  557. orderVisitDto.OrgProcessingResults = "4";
  558. break;
  559. }
  560. //向业务系统推送消息
  561. await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderEvlResult, orderVisitDto, cancellationToken: HttpContext.RequestAborted);
  562. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  563. }
  564. else
  565. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("接口调用失败!"));
  566. }
  567. /// <summary>
  568. /// 上报工单处理结果/退回接口---已完成-----1
  569. /// </summary>
  570. /// <param name="receiveGetCaseReultSend">上报工单处理结果/退回对象</param>
  571. /// <returns></returns>
  572. [HttpPost("get_case_result_send")]
  573. public async Task<OpenResponse> GetCaseReultSend([FromBody] GetCaseReultSendRequest receiveGetCaseReultSend)
  574. {
  575. // 验证
  576. if (receiveGetCaseReultSend is null || receiveGetCaseReultSend.paras is null)
  577. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("数据解析失败"));
  578. string strResult = receiveGetCaseReultSend.paras.Validate();
  579. if (!string.IsNullOrEmpty(strResult))
  580. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed(strResult));
  581. //推送老系统数据
  582. var isCheck = await SendDataFw(receiveGetCaseReultSend.paras.CaseSerial, "api/send/get_case_result_send", System.Text.Json.JsonSerializer.Serialize(receiveGetCaseReultSend), "Post");
  583. if (isCheck)
  584. {
  585. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  586. }
  587. //转换数据
  588. var dto = receiveGetCaseReultSend.paras;
  589. //添加数据
  590. var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "get_case_result_send", System.Text.Json.JsonSerializer.Serialize(dto));
  591. if (!string.IsNullOrEmpty(id))
  592. {
  593. //查询此工单
  594. var tempData = await _sendCaseInfoRepository.GetAsync(p => p.CaseSerial == dto.CaseSerial, HttpContext.RequestAborted);
  595. if (tempData != null)
  596. {
  597. //将工单的办理状态改为办理完成,终止拉取办理信息
  598. tempData.IsEnd = true;
  599. await _sendCaseInfoRepository.UpdateAsync(tempData, HttpContext.RequestAborted);
  600. var listFiles = await GetFileData(dto.CliengGuid, dto.CaseSerial, "办理上传");
  601. OrderResultDto orderResult = new()
  602. {
  603. OrderId = tempData.OrderID,
  604. FinishType = dto.FinishType,
  605. Opinion = dto.FdBack,
  606. Files = listFiles,
  607. Source = "province"
  608. };
  609. //向业务系统推送消息
  610. await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderReultSend, orderResult, cancellationToken: HttpContext.RequestAborted);
  611. }
  612. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  613. }
  614. else
  615. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("接口调用失败!"));
  616. }
  617. /// <summary>
  618. /// 上报工单评价接口
  619. /// </summary>
  620. /// <param name="receiveGetVisitInfoSend">上报工单评价对象</param>
  621. /// <returns></returns>
  622. [HttpPost("get_visit_info_send")]
  623. public async Task<OpenResponse> GetVisitInfoSend([FromBody] GetVisitInfoSendRequest receiveGetVisitInfoSend)
  624. {
  625. // 验证
  626. if (receiveGetVisitInfoSend is null || receiveGetVisitInfoSend.paras is null)
  627. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("数据解析失败"));
  628. string strResult = receiveGetVisitInfoSend.paras.Validate();
  629. if (!string.IsNullOrEmpty(strResult))
  630. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed(strResult));
  631. //推送老系统数据
  632. var isCheck = await SendDataFw(receiveGetVisitInfoSend.paras.CaseSerial, "api/send/get_visit_info_send", System.Text.Json.JsonSerializer.Serialize(receiveGetVisitInfoSend), "Post");
  633. if (isCheck)
  634. {
  635. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  636. }
  637. //转换数据
  638. var dto = receiveGetVisitInfoSend.paras;
  639. //添加数据
  640. var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "get_visit_info_send", System.Text.Json.JsonSerializer.Serialize(dto));
  641. if (!string.IsNullOrEmpty(id))
  642. {
  643. ProvinceOrderVisitDto orderVisitDto = new()
  644. {
  645. ProvinceNo = dto.CaseSerial,
  646. VisitTime = Convert.ToDateTime(dto.VisitTime),
  647. VisitContent = dto.VisitRemark,
  648. OrgProcessingResults = dto.SubjectResultSatify,
  649. VisitType = dto.VisitType switch
  650. {
  651. "DH" => Hotline.Share.Enums.Order.EVisitType.ArtificialVisit,
  652. "DX" => Hotline.Share.Enums.Order.EVisitType.SmsVisit,
  653. "WZ" => Hotline.Share.Enums.Order.EVisitType.WebVisit,
  654. "WX" => Hotline.Share.Enums.Order.EVisitType.WeChatVisit,
  655. "AP" => Hotline.Share.Enums.Order.EVisitType.AppVisit,
  656. _ => Hotline.Share.Enums.Order.EVisitType.OtherVisit,
  657. }
  658. };
  659. //向业务系统推送消息
  660. await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderEvlResult, orderVisitDto, cancellationToken: HttpContext.RequestAborted);
  661. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  662. }
  663. else
  664. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("接口调用失败!"));
  665. }
  666. /// <summary>
  667. /// 服务工单拓展信息交办---已完成-----1
  668. /// </summary>
  669. /// <param name="receiveCaseExtendsRequest">服务工单拓展信息交办</param>
  670. /// <returns></returns>
  671. [HttpPost("rest/receive_case_extends")]
  672. public async Task<OpenResponse> ReceiveCaseExtends([FromBody] ReceiveCaseExtendsRequest receiveCaseExtendsRequest)
  673. {
  674. // 验证
  675. if (receiveCaseExtendsRequest is null || receiveCaseExtendsRequest.paras is null)
  676. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("数据解析失败"));
  677. string strResult = receiveCaseExtendsRequest.paras.Validate();
  678. if (!string.IsNullOrEmpty(strResult))
  679. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed(strResult));
  680. //推送老系统数据
  681. var isCheck = await SendDataFw(receiveCaseExtendsRequest.paras.CaseSerial, "api/receive/receive_case_extends", System.Text.Json.JsonSerializer.Serialize(receiveCaseExtendsRequest), "Post");
  682. if (isCheck)
  683. {
  684. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  685. }
  686. var data = receiveCaseExtendsRequest.paras;
  687. //添加数据
  688. var id = await InitReceiveProvinceData(data.CaseSerial, null, "receive_case_extends", System.Text.Json.JsonSerializer.Serialize(data));
  689. OrderExtensionDto orderExtension = new();
  690. //扩展信息写入
  691. switch (data.FormType.ToLower())
  692. {
  693. case "yl"://医疗表单
  694. //转换数据
  695. orderExtension = _mapper.Map<OrderExtensionDto>(data.FormMedical);
  696. orderExtension.OrderType = "医疗服务中心受理单";
  697. break;
  698. case "zwfw"://四川政务服务网技术工单
  699. //转换数据
  700. orderExtension = _mapper.Map<OrderExtensionDto>(data.FormNetWorktec);
  701. orderExtension.OrderType = "四川政务服务网技术中心受理单";
  702. break;
  703. case "th"://电视购物及商铺购买退换货工单
  704. //转换数据
  705. orderExtension = _mapper.Map<OrderExtensionDto>(data.FormReturnexChange);
  706. orderExtension.OrderType = "电视购物及商铺购买退换货中心受理单";
  707. break;
  708. case "gsgl"://高速公路工单
  709. //转换数据
  710. orderExtension = _mapper.Map<OrderExtensionDto>(data.FormExpressWay);
  711. orderExtension.OrderType = "高速公路投诉中心受理单";
  712. break;
  713. case "xjgg"://电视台虚假广告工单
  714. //转换数据
  715. orderExtension = _mapper.Map<OrderExtensionDto>(data.FormShamPub);
  716. orderExtension.OrderType = "电视台虚假广告中心受理单";
  717. break;
  718. case "swfwsq"://12366热线诉求交办
  719. //转换数据
  720. orderExtension = _mapper.Map<OrderExtensionDto>(data.FormTaxationComplaint);
  721. orderExtension.OrderType = "四川省12366热线诉求交办单";
  722. break;
  723. case "swfwzx"://12366热线咨询交办
  724. //转换数据
  725. orderExtension = _mapper.Map<OrderExtensionDto>(data.FormTaxationConsulting);
  726. orderExtension.OrderType = "四川省12366热线咨询交办单";
  727. break;
  728. case "jtfwjd"://12328服务监督
  729. //转换数据
  730. orderExtension = _mapper.Map<OrderExtensionDto>(data.FormTraffic);
  731. orderExtension.OrderType = "12328服务监督中心受理单";
  732. break;
  733. case "yzxf"://邮政业消费者申诉
  734. //转换数据
  735. orderExtension = _mapper.Map<OrderExtensionDto>(data.FormPost);
  736. orderExtension.OrderType = "邮政业消费者申诉受理单";
  737. break;
  738. case "hbjb"://环保举报业务
  739. //转换数据
  740. orderExtension = _mapper.Map<OrderExtensionDto>(data.FormEnvironMent);
  741. orderExtension.OrderType = "环保举报业务受理单";
  742. break;
  743. case "scjgj"://12315个性化表单
  744. break;
  745. default:
  746. break;
  747. }
  748. orderExtension.ProvinceNo = data.CaseSerial;
  749. orderExtension.OrderTypeCode = data.FormType.ToLower();
  750. if (!string.IsNullOrEmpty(id))
  751. {
  752. //向业务系统推送消息
  753. await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderExtends, orderExtension, cancellationToken: HttpContext.RequestAborted);
  754. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  755. }
  756. else
  757. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("接口调用失败!"));
  758. }
  759. /// <summary>
  760. /// 服务工单材料接口
  761. /// </summary>
  762. /// <param name="params">工单材料信息</param>
  763. /// <param name="files">材料文件</param>
  764. /// <returns></returns>
  765. [HttpPost("get_case_material_info")]
  766. public async Task<OpenResponse> GetCaseMaterialInfo([FromForm] string @params, List<IFormFile> files)
  767. {
  768. // 上传文件为必须
  769. if (files is null || files.Count <= 0)
  770. {
  771. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("上传文件为必须"));
  772. }
  773. // @params = "{ \"token\": \"\", \"paras\":{ \"CaseSerial\":\"RGDH99511500240304000100\", \"MaterialType\":\"10\", \"CliengGuid\":\"91541fea-e1a5-4798-bc43-b25cc77ec6b7\", \"AreaCode\":\"511500\"} }";
  774. // 解析附件信息
  775. var vmCaseMaterialInfo = System.Text.Json.JsonSerializer.Deserialize<GetCaseMaterialInfoRequest>(@params);
  776. if (vmCaseMaterialInfo is null || vmCaseMaterialInfo.paras is null)
  777. {
  778. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed("数据解析失败"));
  779. }
  780. GetCaseMaterialInfoModel tmpCaseMaterialInfo = vmCaseMaterialInfo.paras;
  781. // 验证
  782. string strResult = tmpCaseMaterialInfo.Validate();
  783. if (false == string.IsNullOrEmpty(strResult))
  784. {
  785. return OpenResponse.Ok(GetDataBaseReponse<string>.Failed(strResult));
  786. }
  787. //是否推送旧系统
  788. var isCheck = await SendFileDataFw(vmCaseMaterialInfo.paras.CaseSerial, @params, files);
  789. if (isCheck)
  790. {
  791. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  792. }
  793. List<DsGetCaseMaterialInfo> listData = new();
  794. // 文件列表
  795. foreach (var file in files)
  796. {
  797. //这里需要上文件服务器上传
  798. var businessFileDto = await SendFileData(file);
  799. string strFileName = file.FileName;
  800. string strSuffix = strFileName.LastIndexOf(".") > 0 ? strFileName.Substring(strFileName.LastIndexOf(".")) : "";
  801. // 新增文件到列表
  802. var materialInfo = new DsGetCaseMaterialInfo()
  803. {
  804. CaseSerial = tmpCaseMaterialInfo.CaseSerial,
  805. MaterialType = tmpCaseMaterialInfo.MaterialType,
  806. CliengGuid = tmpCaseMaterialInfo.CliengGuid,
  807. AreaCode = tmpCaseMaterialInfo.AreaCode,
  808. FileName = file.FileName,
  809. Type = strSuffix.Trim('.'),
  810. Additions = businessFileDto.id,
  811. Path = businessFileDto.path,
  812. Direction = "2",
  813. SyncState = "1"
  814. };
  815. listData.Add(materialInfo);
  816. await _getCaseMaterialInfoRepository.AddAsync(materialInfo, HttpContext.RequestAborted);
  817. }
  818. if (listData != null && listData.Count > 0)
  819. {
  820. //处理附件数据
  821. var receiveData = await _dsReceiveProvinceDataRepository.GetAsync(p => p.CliengGuid == tmpCaseMaterialInfo.CliengGuid && p.CaseSerial == tmpCaseMaterialInfo.CaseSerial, HttpContext.RequestAborted);
  822. if (receiveData != null)
  823. {
  824. List<FileDto> listFiles = new();
  825. ReceiveFilesFromDsDto receiveFilesFromDsDto = new ReceiveFilesFromDsDto()
  826. {
  827. DsBisId = tmpCaseMaterialInfo.CliengGuid,
  828. ProvinceNo = tmpCaseMaterialInfo.CaseSerial
  829. };
  830. //根据接口处理数据
  831. switch (receiveData.ServiceInterface)
  832. {
  833. case "receive_case_info":
  834. listFiles = await InitFileData(listData, "工单受理");
  835. receiveFilesFromDsDto.DsBisType = EDsBisType.AcceptOrder;
  836. break;
  837. case "get_case_back_result":
  838. listFiles = await InitFileData(listData, "工单退回审核");
  839. receiveFilesFromDsDto.DsBisType = EDsBisType.OrderPreviousResult;
  840. break;
  841. case "send_supervise_info":
  842. listFiles = await InitFileData(listData, "督办申请");
  843. receiveFilesFromDsDto.DsBisType = EDsBisType.SendOrderSupervise;
  844. receiveFilesFromDsDto.SuperviseId = tmpCaseMaterialInfo.CaseSerial;
  845. break;
  846. case "remind_case_info":
  847. listFiles = await InitFileData(listData, "催办申请");
  848. receiveFilesFromDsDto.DsBisType = EDsBisType.SendOrderUrge;
  849. break;
  850. case "screen_case_result_receive":
  851. listFiles = await InitFileData(listData, "甄别上传");
  852. receiveFilesFromDsDto.DsBisType = EDsBisType.OrderScreenResult;
  853. break;
  854. case "delay_case_result_receive":
  855. listFiles = await InitFileData(listData, "延期上传");
  856. receiveFilesFromDsDto.DsBisType = EDsBisType.OrderDelayResult;
  857. break;
  858. case "supply_case_info_receive":
  859. listFiles = await InitFileData(listData, "补充上传");
  860. receiveFilesFromDsDto.DsBisType = EDsBisType.SendOrderComplement;
  861. break;
  862. case "revoke_case_info":
  863. // listFiles = await InitFileData(listData, "工单撤单");//暂无附件
  864. break;
  865. case "send_warn_info":
  866. // listFiles = await InitFileData(listData, "工单预警");
  867. break;
  868. case "send_case_evl_result":
  869. // listFiles = await InitFileData(listData, "工单满意度");
  870. break;
  871. case "get_case_result_send":
  872. listFiles = await InitFileData(listData, "办理上传");
  873. receiveFilesFromDsDto.DsBisType = EDsBisType.OrderHandleResult;
  874. break;
  875. case "get_visit_info_send":
  876. // listFiles = await InitFileData(listData, "上报工单评价");
  877. break;
  878. default:
  879. break;
  880. }
  881. receiveFilesFromDsDto.Files = listFiles;
  882. //推送数据
  883. if (receiveFilesFromDsDto.Files != null && receiveFilesFromDsDto.Files.Count > 0)
  884. await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingFileInfo, receiveFilesFromDsDto, cancellationToken: HttpContext.RequestAborted);
  885. }
  886. }
  887. return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
  888. }
  889. #region 私有方法
  890. /// <summary>
  891. /// 组装附件参数
  892. /// </summary>
  893. /// <param name="listData"></param>
  894. /// <param name="Classify"></param>
  895. /// <returns></returns>
  896. private async Task<List<FileDto>> InitFileData(List<DsGetCaseMaterialInfo> listData, string Classify)
  897. {
  898. List<FileDto> fileDtos = new();
  899. foreach (var item in listData)
  900. {
  901. string strSubFileName = item.FileName.LastIndexOf(".") > 0 ? item.FileName.Substring(0, item.FileName.LastIndexOf(".")) : item.FileName;
  902. fileDtos.Add(new FileDto()
  903. {
  904. Name = strSubFileName,
  905. Type = item.Type,
  906. Classify = Classify,
  907. Additions = item.Additions,
  908. Path = item.Path
  909. });
  910. }
  911. return fileDtos;
  912. }
  913. /// <summary>
  914. /// 根据附件Id,工单编号查询所有附件
  915. /// </summary>
  916. /// <param name="CliengGuid">材料标识ID</param>
  917. /// <param name="CaseSerial">工单编号</param>
  918. /// <param name="Classify">材料分类</param>
  919. /// <returns></returns>
  920. private async Task<List<FileDto>> GetFileData(string CliengGuid, string CaseSerial, string Classify)
  921. {
  922. var list = await _getCaseMaterialInfoRepository.Queryable().Where(p => p.CliengGuid == CliengGuid && p.CaseSerial == CaseSerial).ToListAsync();
  923. List<FileDto> fileDtos = new();
  924. if (fileDtos == null || fileDtos.Count == 0)
  925. return fileDtos;
  926. foreach (var item in list)
  927. {
  928. fileDtos.Add(new FileDto()
  929. {
  930. Name = item.FileName,
  931. Type = item.Type,
  932. Classify = Classify,
  933. Additions = item.Additions,
  934. Path = item.Path
  935. });
  936. }
  937. return fileDtos;
  938. }
  939. /// <summary>
  940. /// 将数据写入本地
  941. /// </summary>
  942. /// <param name="CaseSerial">工单编号</param>
  943. /// <param name="CliengGuid">材料标识</param>
  944. /// <param name="ServiceInterface">接口名称</param>
  945. /// <param name="ReceiveData">数据</param>
  946. /// <returns></returns>
  947. private async Task<string> InitReceiveProvinceData(string CaseSerial, string CliengGuid, string ServiceInterface, string ReceiveData)
  948. {
  949. DsReceiveProvinceData dsReceive = new()
  950. {
  951. CaseSerial = CaseSerial,
  952. CliengGuid = CliengGuid,
  953. ServiceInterface = ServiceInterface,
  954. ReceiveData = ReceiveData
  955. };
  956. return await _dsReceiveProvinceDataRepository.AddAsync(dsReceive, HttpContext.RequestAborted);
  957. }
  958. /// <summary>
  959. /// 将文件流上传到附件服务器
  960. /// </summary>
  961. /// <param name="file"></param>
  962. /// <returns></returns>
  963. private async Task<BusinessFileDto> SendFileData(IFormFile file)
  964. {
  965. var businessFile = _channelConfigurationManager.GetConfigurationBusinessFile();
  966. // 文件名称
  967. string fileName = file.FileName;
  968. // 文件内容字节数据
  969. using var memoryStream = new MemoryStream();
  970. await file.CopyToAsync(memoryStream);
  971. memoryStream.Seek(0, SeekOrigin.Begin);
  972. byte[] fileContentBytes = memoryStream.ToArray();
  973. // 构造字典文件数据
  974. // 接口参数名称为files
  975. CFormUpload.FileParameter fileParameter = new CFormUpload.FileParameter("fileData", fileContentBytes, fileName, "multipart/form-data");
  976. Dictionary<string, object> dicParam = new()
  977. {
  978. { fileName, fileParameter }
  979. };
  980. string url = string.Format("{0}{1}?source={2}", businessFile.BaseUrl, businessFile.UploadUrlAddress, businessFile.Source);
  981. var result = CFormUpload.MultipartFormDataPost(url, null, dicParam, "");
  982. if (!string.IsNullOrEmpty(result))
  983. {
  984. var resultData = Newtonsoft.Json.JsonConvert.DeserializeObject<BusinessFileResponse>(result);
  985. if (resultData != null && resultData.code == 0)
  986. {
  987. return resultData.result;
  988. }
  989. }
  990. return new BusinessFileDto();
  991. }
  992. /// <summary>
  993. /// 下行数据推送到旧系统中
  994. /// </summary>
  995. /// <param name="CaseSerial">省工单编号</param>
  996. /// <param name="api">接口名称</param>
  997. /// <param name="jsonData">请求参数</param>
  998. /// <param name="httpMethod">请求方式</param>
  999. /// <returns></returns>
  1000. private async Task<bool> SendDataFw(string CaseSerial, string api, string jsonData, string httpMethod = "Post")
  1001. {
  1002. var configSendDataOld = _channelConfigurationManager.GetConfigurationSendDataOld();
  1003. //先验证是否开启推送
  1004. if (configSendDataOld == null || !configSendDataOld.IsSend)
  1005. return false;
  1006. //查询是否是本地工单,如果是本地工单不需要推送,如果是旧系统数据则推送
  1007. // var isCheck = await _dataOrderRepository.AnyAsync(p => p.ProvinceNo == CaseSerial, HttpContext.RequestAborted);
  1008. var isCheck = await _dsReceiveProvinceDataRepository.AnyAsync(p => p.CaseSerial == CaseSerial && p.ServiceInterface == "receive_case_info", HttpContext.RequestAborted);
  1009. if (!isCheck)
  1010. {
  1011. var url = configSendDataOld.AddressUrl + api;
  1012. var response = await _fwClient.RequestAsync<FwResponse>(url, httpMethod, jsonData, HttpContext.RequestAborted);
  1013. if (response != null && response.code != 1)
  1014. {
  1015. SendFwErrorData sendFwError = new()
  1016. {
  1017. HttpMethod = httpMethod,
  1018. ServiceInterface = url,
  1019. SendData = jsonData
  1020. };
  1021. await _sendFwErrorDataRepository.AddAsync(sendFwError, HttpContext.RequestAborted);
  1022. }
  1023. return true;
  1024. }
  1025. return false;
  1026. }
  1027. /// <summary>
  1028. /// 上传附件
  1029. /// </summary>
  1030. /// <param name="CaseSerial"></param>
  1031. /// <param name="strParams"></param>
  1032. /// <param name="files"></param>
  1033. /// <returns></returns>
  1034. private async Task<bool> SendFileDataFw(string CaseSerial, string strParams, List<IFormFile> files)
  1035. {
  1036. var configSendDataOld = _channelConfigurationManager.GetConfigurationSendDataOld();
  1037. //先验证是否开启推送
  1038. if (!configSendDataOld.IsSend)
  1039. return false;
  1040. var isCheck = await _dataOrderRepository.AnyAsync(p => p.ProvinceNo == CaseSerial, HttpContext.RequestAborted);
  1041. if (!isCheck)
  1042. {
  1043. foreach (var file in files)
  1044. {
  1045. // 文件名称
  1046. string fileName = file.FileName;
  1047. // 文件内容字节数据
  1048. using var memoryStream = new MemoryStream();
  1049. await file.CopyToAsync(memoryStream);
  1050. memoryStream.Seek(0, SeekOrigin.Begin);
  1051. byte[] fileContentBytes = memoryStream.ToArray();
  1052. // 构造字典文件数据
  1053. // 接口参数名称为files
  1054. CFormUpload.FileParameter fileParameter = new CFormUpload.FileParameter("files", fileContentBytes, fileName, null);
  1055. strParams = "{ \"token\": \"\", \"paras\":{ \"MATERIAL_SERIAL\":\"RGDH99511500240304000100\", \"MATERIAL_TYPE\":\"10\", \"CLIENG_GUID\":\"91541fea-e1a5-4798-bc43-b25cc77ec6b7\", \"AREA_CODE\":\"511500\"} }";
  1056. Dictionary<string, object> dicParam = new()
  1057. {
  1058. { "params", strParams } // 第一个接口参数,json格式字符串
  1059. };
  1060. dicParam.Add(fileName, fileParameter);
  1061. var token = await _fwClient.GetFileToken(HttpContext.RequestAborted);
  1062. string strUrl = configSendDataOld.AddressUrl + "api/receive/get_case_material_info";
  1063. // 上传附件
  1064. string strResult = CFormUpload.MultipartFormDataPost(strUrl, null, dicParam, token?.Token);
  1065. }
  1066. return true;
  1067. }
  1068. return false;
  1069. }
  1070. #endregion
  1071. }
  1072. }