ProvinceController.cs 45 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010
  1. using Hotline.DataSharing;
  2. using Hotline.DataSharing.Province;
  3. using Hotline.DataSharing.Province.Notifications;
  4. using Hotline.DataSharing.Province.XieTong.Receive;
  5. using Hotline.DataSharing.Province.XieTong.Send;
  6. using Hotline.Share.Dtos.DataSharing;
  7. using Hotline.Share.Dtos.DataSharing.Province;
  8. using Hotline.Share.Dtos.DataSharing.Province.XieTong.Receive;
  9. using Hotline.Share.Dtos.File;
  10. using Hotline.Share.Dtos.Order;
  11. using Hotline.Share.Enums.Order;
  12. using MapsterMapper;
  13. using MediatR;
  14. using Microsoft.AspNetCore.Authorization;
  15. using Microsoft.AspNetCore.Mvc;
  16. using System.Collections.Generic;
  17. using XF.Domain.Filters;
  18. using XF.Domain.Repository;
  19. using static System.Runtime.InteropServices.JavaScript.JSType;
  20. namespace Hotline.Api.Controllers.DataSharing
  21. {
  22. /// <summary>
  23. /// 下行,省平台调用
  24. /// </summary>
  25. public class ProvinceController : BaseController
  26. {
  27. #region 注入
  28. private readonly IMapper _mapper;
  29. private readonly IMediator _mediator;
  30. private readonly IRepository<DsGetCaseMaterialInfo> _getCaseMaterialInfoRepository;
  31. private readonly IRepository<DsSendCaseInfo> _sendCaseInfoRepository;
  32. private readonly IRepository<DsGetCaseBackApply> _getCaseBackApplyRepository;
  33. private readonly IChannelConfigurationManager _channelConfigurationManager;
  34. private readonly IRepository<DsReceiveProvinceData> _dsReceiveProvinceDataRepository;
  35. /// <summary>
  36. ///
  37. /// </summary>
  38. /// <param name="mapper"></param>
  39. /// <param name="mediator"></param>
  40. /// <param name="getCaseMaterialInfoRepository"></param>
  41. /// <param name="sendCaseInfoRepository"></param>
  42. /// <param name="getCaseBackApplyRepository"></param>
  43. /// <param name="channelConfigurationManager"></param>
  44. /// <param name="dsReceiveProvinceDataRepository"></param>
  45. public ProvinceController(IMapper mapper,
  46. IMediator mediator,
  47. IRepository<DsGetCaseMaterialInfo> getCaseMaterialInfoRepository,
  48. IRepository<DsSendCaseInfo> sendCaseInfoRepository,
  49. IRepository<DsGetCaseBackApply> getCaseBackApplyRepository,
  50. IChannelConfigurationManager channelConfigurationManager,
  51. IRepository<DsReceiveProvinceData> dsReceiveProvinceDataRepository)
  52. {
  53. _mapper = mapper;
  54. _mediator = mediator;
  55. _getCaseMaterialInfoRepository = getCaseMaterialInfoRepository;
  56. _sendCaseInfoRepository = sendCaseInfoRepository;
  57. _getCaseBackApplyRepository = getCaseBackApplyRepository;
  58. _channelConfigurationManager = channelConfigurationManager;
  59. _dsReceiveProvinceDataRepository = dsReceiveProvinceDataRepository;
  60. }
  61. #endregion
  62. /// <summary>
  63. /// 服务工单交办接口--已完成-----1
  64. /// </summary>
  65. /// <param name="receiveCaseInfo"></param>
  66. /// <returns></returns>
  67. [HttpPost("rest/receive_case_info")]
  68. [AllowAnonymous]
  69. public async Task<OpenResponse> ReceiveCaseInfo([FromBody] ReceiveCaseInfoRequest receiveCaseInfo)
  70. {
  71. // 验证
  72. if (receiveCaseInfo is null || receiveCaseInfo.paras is null)
  73. {
  74. return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
  75. }
  76. //验证接收的数据是否正确
  77. string strResult = receiveCaseInfo.paras.Validate();
  78. if (!string.IsNullOrEmpty(strResult))
  79. return OpenResponse.Ok(Reponse.Failed(strResult));
  80. //转换数据
  81. var dto = receiveCaseInfo.paras;
  82. var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "receive_case_info", System.Text.Json.JsonSerializer.Serialize(dto));
  83. //处理组装数据,推送数据
  84. var data = _mapper.Map<AddOrderDto>(dto);
  85. if (dto.TrowGuid != "【政民互动直派】")
  86. data.IsProvince = true;
  87. //处理性别
  88. switch (dto.AppLicantSex)
  89. {
  90. case "0":
  91. data.FromGender = EGender.Female;
  92. break;
  93. case "1":
  94. data.FromGender = EGender.Male;
  95. break;
  96. case "2":
  97. data.FromGender = EGender.Unknown;
  98. break;
  99. default:
  100. data.FromGender = EGender.Unknown;
  101. break;
  102. }
  103. //处理证件类型
  104. switch (dto.CertifiCateType)
  105. {
  106. case "10":
  107. data.LicenceTypeCode = "10";
  108. break;
  109. case "20":
  110. data.LicenceTypeCode = "40";
  111. break;
  112. case "30":
  113. data.LicenceTypeCode = "55";
  114. break;
  115. case "40":
  116. data.LicenceTypeCode = "57";
  117. break;
  118. }
  119. data.AcceptTypeCode = dto.CaseType;
  120. //处理紧急程度
  121. switch (dto.CaseIsUrgent)
  122. {
  123. case "10":
  124. data.EmergencyLevel = EEmergencyLevel.QuiteEmergency;
  125. break;
  126. case "20":
  127. data.EmergencyLevel = EEmergencyLevel.Emergency;
  128. break;
  129. case "30":
  130. data.EmergencyLevel = EEmergencyLevel.Normal;
  131. break;
  132. }
  133. //经纬度处理
  134. var lngLat = dto.CaseLngLat.Split(',');
  135. if (lngLat != null && lngLat.Length == 2)
  136. {
  137. data.Longitude = Convert.ToDouble(lngLat[0]);
  138. data.Latitude = Convert.ToDouble(lngLat[1]);
  139. }
  140. if (!string.IsNullOrEmpty(id))
  141. {
  142. var listFiles = await GetFileData(dto.CliengGuid, dto.CaseSerial, "受理上传");
  143. //调用工单创建接口
  144. var result = await _mediator.Send(new ReceiveOrderNotify { AddOrderDto = data, Files = listFiles }, HttpContext.RequestAborted);
  145. if (result != null && !string.IsNullOrEmpty(result.Id))
  146. {
  147. return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
  148. }
  149. else
  150. return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
  151. }
  152. else
  153. return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
  154. }
  155. /// <summary>
  156. /// 服务工单退回反馈接口--已完成-----1
  157. /// </summary>
  158. /// <param name="receiveBackResult">退回反馈</param>
  159. /// <returns></returns>
  160. [HttpPost("get_case_back_result")]
  161. [AllowAnonymous]
  162. public async Task<OpenResponse> GetCaseBackResult([FromBody] GetCaseBackResultRequest receiveBackResult)
  163. {
  164. // 验证
  165. if (receiveBackResult is null || receiveBackResult.paras is null)
  166. return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
  167. //验证接收的数据是否正确
  168. string strResult = receiveBackResult.paras.Validate();
  169. if (!string.IsNullOrEmpty(strResult))
  170. OpenResponse.Ok(Reponse.Failed(strResult));
  171. //转换数据
  172. var dto = receiveBackResult.paras;
  173. var data = await _getCaseBackApplyRepository.GetAsync(p => p.CaseSerial == dto.CaseSerial, HttpContext.RequestAborted);
  174. if (data == null)
  175. return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
  176. //添加数据
  177. var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "get_case_back_result", System.Text.Json.JsonSerializer.Serialize(dto));
  178. if (!string.IsNullOrEmpty(id))
  179. {
  180. await _mediator.Send(new OrderSendBackResultNotify
  181. {
  182. OrderSendBackResultDto = new OrderSendBackResultDto()
  183. {
  184. Id = data.OrderSendBackId,
  185. Reason = dto.BackReason,
  186. Result = dto.Result == "1" ? 1 : 0
  187. }
  188. }, HttpContext.RequestAborted);
  189. return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
  190. }
  191. else
  192. return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
  193. }
  194. /// <summary>
  195. /// 督办工单派发接口--已完成-----1
  196. /// </summary>
  197. /// <param name="receiveSendSuperviseInfo">督办工单对象</param>
  198. /// <returns></returns>
  199. [HttpPost("send_supervise_info")]
  200. [AllowAnonymous]
  201. public async Task<OpenResponse> SendSuperviseInfo([FromBody] SendSuperviseInfoRequest receiveSendSuperviseInfo)
  202. {
  203. // 验证
  204. if (receiveSendSuperviseInfo is null || receiveSendSuperviseInfo.paras is null)
  205. return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
  206. string strResult = receiveSendSuperviseInfo.paras.Validate();
  207. if (!string.IsNullOrEmpty(strResult))
  208. return OpenResponse.Ok(Reponse.Failed(strResult));
  209. //转换数据
  210. var dto = receiveSendSuperviseInfo.paras;
  211. //添加数据
  212. var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "send_supervise_info", System.Text.Json.JsonSerializer.Serialize(dto));
  213. if (!string.IsNullOrEmpty(id))
  214. {
  215. //向业务系统推送消息
  216. await _mediator.Send(new ProvinceOrderSuperviseNotify { ProvinceOrderSuperviseDto = _mapper.Map<ProvinceOrderSuperviseDto>(dto) }, HttpContext.RequestAborted);
  217. return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
  218. }
  219. else
  220. return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
  221. }
  222. /// <summary>
  223. /// 服务工单催单接口--已完成-----1
  224. /// </summary>
  225. /// <param name="receiveRemindCaseInfo">催单对象</param>
  226. /// <returns></returns>
  227. [HttpPost("remind_case_info")]
  228. [AllowAnonymous]
  229. public async Task<OpenResponse> RemindCaseInfo([FromBody] RemindCaseInfoRequest receiveRemindCaseInfo)
  230. {
  231. // 验证
  232. if (receiveRemindCaseInfo is null || receiveRemindCaseInfo.paras is null)
  233. return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
  234. string strResult = receiveRemindCaseInfo.paras.Validate();
  235. if (!string.IsNullOrEmpty(strResult))
  236. return OpenResponse.Ok(Reponse.Failed(strResult));
  237. //转换数据
  238. var dto = receiveRemindCaseInfo.paras;
  239. //添加数据
  240. var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "remind_case_info", System.Text.Json.JsonSerializer.Serialize(dto));
  241. // var id = await _remindCaseInfoRepository.AddAsync(dto, HttpContext.RequestAborted);
  242. if (!string.IsNullOrEmpty(id))
  243. {
  244. //向业务系统推送消息
  245. await _mediator.Send(new ProvinceOrderUrgeNotify { ProvinceOrderUrgeDto = _mapper.Map<ProvinceOrderUrgeDto>(dto) }, HttpContext.RequestAborted);
  246. return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
  247. }
  248. else
  249. return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
  250. }
  251. /// <summary>
  252. /// 服务工单甄别结果接口--已完成-----1
  253. /// </summary>
  254. /// <param name="receiveScreenCaseResultReceive">服务工单甄别结果对象</param>
  255. /// <returns></returns>
  256. [HttpPost("screen_case_result_receive")]
  257. [AllowAnonymous]
  258. public async Task<OpenResponse> ScreenCaseResultReceive([FromBody] ScreenCaseResultReceiveRequest receiveScreenCaseResultReceive)
  259. {
  260. // 验证
  261. if (receiveScreenCaseResultReceive is null || receiveScreenCaseResultReceive.paras is null)
  262. return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
  263. string strResult = receiveScreenCaseResultReceive.paras.Validate();
  264. if (!string.IsNullOrEmpty(strResult))
  265. return OpenResponse.Ok(Reponse.Failed(strResult));
  266. //转换数据
  267. var dto = receiveScreenCaseResultReceive.paras;
  268. //添加数据
  269. var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "screen_case_result_receive", System.Text.Json.JsonSerializer.Serialize(dto));
  270. if (!string.IsNullOrEmpty(id))
  271. {
  272. await _mediator.Send(new ScreenProvinceResultNotify { ProvinceScreenResult = _mapper.Map<ProvinceScreenResult>(dto) }, HttpContext.RequestAborted);
  273. return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
  274. }
  275. else
  276. return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
  277. }
  278. /// <summary>
  279. /// 服务工单延时审核结果接口---已完成-----1
  280. /// </summary>
  281. /// <param name="receiveDelayCaseResult">延时审核结果对象</param>
  282. /// <returns></returns>
  283. [HttpPost("delay_case_result_receive")]
  284. [AllowAnonymous]
  285. public async Task<OpenResponse> DelayCaseResultReceive([FromBody] DelayCaseResultRequest receiveDelayCaseResult)
  286. {
  287. // 验证
  288. if (receiveDelayCaseResult is null || receiveDelayCaseResult.paras is null)
  289. return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
  290. string strResult = receiveDelayCaseResult.paras.Validate();
  291. if (!string.IsNullOrEmpty(strResult))
  292. return OpenResponse.Ok(Reponse.Failed(strResult));
  293. //转换数据
  294. var dto = receiveDelayCaseResult.paras;
  295. //添加数据
  296. var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "delay_case_result_receive", System.Text.Json.JsonSerializer.Serialize(dto));
  297. if (!string.IsNullOrEmpty(id))
  298. {
  299. //向业务系统推送消息
  300. await _mediator.Send(new DelayProvinceResultNotify { IsPass = dto.AuditResult == "1", Opinion = dto.AuditOpinion, No = dto.CaseSerial }, HttpContext.RequestAborted);
  301. return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
  302. }
  303. else
  304. return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
  305. }
  306. /// <summary>
  307. /// 服务工单交办补充诉求接口
  308. /// </summary>
  309. /// <param name="receiveSupplyCaseInfo">交办补充诉求对象</param>
  310. /// <returns></returns>
  311. [HttpPost("supply_case_info_receive")]
  312. [AllowAnonymous]
  313. public async Task<OpenResponse> SupplyCaseInfoReceive([FromBody] SupplyCaseInfoRequest receiveSupplyCaseInfo)
  314. {
  315. // 验证
  316. if (receiveSupplyCaseInfo is null || receiveSupplyCaseInfo.paras is null)
  317. return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
  318. string strResult = receiveSupplyCaseInfo.paras.Validate();
  319. if (!string.IsNullOrEmpty(strResult))
  320. return OpenResponse.Ok(Reponse.Failed(strResult));
  321. //转换数据
  322. var dto = receiveSupplyCaseInfo.paras;
  323. //添加数据
  324. var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "supply_case_info_receive", System.Text.Json.JsonSerializer.Serialize(dto));
  325. if (!string.IsNullOrEmpty(id))
  326. {
  327. //向业务系统推送消息
  328. //await _capPublisher.PublishAsync(Sharing.Share.Mq.EventNames.SharingOrderSupplements, _mapper.Map<SupplementsDto>(dto), cancellationToken: HttpContext.RequestAborted);
  329. return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
  330. }
  331. else
  332. return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
  333. }
  334. /// <summary>
  335. /// 服务工单撤单接口
  336. /// </summary>
  337. /// <param name="receiveRevokeCaseInfo">撤单对象</param>
  338. /// <returns></returns>
  339. [HttpPost("revoke_case_info")]
  340. [AllowAnonymous]
  341. public async Task<OpenResponse> RevokeCaseInfo([FromBody] RevokeCaseInfoRequest receiveRevokeCaseInfo)
  342. {
  343. // 验证
  344. if (receiveRevokeCaseInfo is null || receiveRevokeCaseInfo.paras is null)
  345. return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
  346. string strResult = receiveRevokeCaseInfo.paras.Validate();
  347. if (!string.IsNullOrEmpty(strResult))
  348. return OpenResponse.Ok(Reponse.Failed(strResult));
  349. //转换数据
  350. var dto = receiveRevokeCaseInfo.paras;
  351. //添加数据
  352. var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "revoke_case_info", System.Text.Json.JsonSerializer.Serialize(dto));
  353. if (!string.IsNullOrEmpty(id))
  354. {
  355. //向业务系统推送消息
  356. // await _capPublisher.PublishAsync(Sharing.Share.Mq.EventNames.SharingOrderRevoke, _mapper.Map<RevokeDto>(dto), cancellationToken: HttpContext.RequestAborted);
  357. return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
  358. }
  359. else
  360. return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
  361. }
  362. /// <summary>
  363. /// 服务工单预警接口
  364. /// </summary>
  365. /// <param name="receiveSendWarnInfo">预警对象</param>
  366. /// <returns></returns>
  367. [HttpPost("send_warn_info")]
  368. [AllowAnonymous]
  369. public async Task<OpenResponse> SendWarnInfo([FromBody] SendWarnInfoRequest receiveSendWarnInfo)
  370. {
  371. // 验证
  372. if (receiveSendWarnInfo is null || receiveSendWarnInfo.paras is null)
  373. return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
  374. string strResult = receiveSendWarnInfo.paras.Validate();
  375. if (!string.IsNullOrEmpty(strResult))
  376. return OpenResponse.Ok(Reponse.Failed(strResult));
  377. //转换数据
  378. var dto = receiveSendWarnInfo.paras;
  379. //添加数据
  380. var id = await InitReceiveProvinceData(dto.CaseSerial, null, "send_warn_info", System.Text.Json.JsonSerializer.Serialize(dto));
  381. if (!string.IsNullOrEmpty(id))
  382. {
  383. //向业务系统推送消息
  384. //await _capPublisher.PublishAsync(Sharing.Share.Mq.EventNames.SharingOrderWarning, _mapper.Map<WarningDto>(dto), cancellationToken: HttpContext.RequestAborted);
  385. return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
  386. }
  387. else
  388. return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
  389. }
  390. /// <summary>
  391. /// 交办工单满意度接收接口
  392. /// </summary>
  393. /// <param name="receiveSendCaseEvlResult">交办工单满意度对象</param>
  394. /// <returns></returns>
  395. [HttpPost("send_case_evl_result")]
  396. [AllowAnonymous]
  397. public async Task<OpenResponse> SendCaseEvlResult([FromBody] SendCaseEvlResultRequest receiveSendCaseEvlResult)
  398. {
  399. // 验证
  400. if (receiveSendCaseEvlResult is null || receiveSendCaseEvlResult.paras is null)
  401. return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
  402. string strResult = receiveSendCaseEvlResult.paras.Validate();
  403. if (!string.IsNullOrEmpty(strResult))
  404. return OpenResponse.Ok(Reponse.Failed(strResult));
  405. //转换数据
  406. var dto = receiveSendCaseEvlResult.paras;
  407. //添加数据
  408. var id = await InitReceiveProvinceData(dto.CaseSerial, null, "send_case_evl_result", System.Text.Json.JsonSerializer.Serialize(dto));
  409. if (!string.IsNullOrEmpty(id))
  410. {
  411. //向业务系统推送消息
  412. //await _capPublisher.PublishAsync(Sharing.Share.Mq.EventNames.SharingOrderEvlResult, _mapper.Map<EvlResultDto>(dto), cancellationToken: HttpContext.RequestAborted);
  413. return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
  414. }
  415. else
  416. return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
  417. }
  418. /// <summary>
  419. /// 上报工单处理结果/退回接口
  420. /// </summary>
  421. /// <param name="receiveGetCaseReultSend">上报工单处理结果/退回对象</param>
  422. /// <returns></returns>
  423. [HttpPost]
  424. [Route("get_case_result_send")]
  425. public async Task<OpenResponse> GetCaseReultSend([FromBody] GetCaseReultSendRequest receiveGetCaseReultSend)
  426. {
  427. // 验证
  428. if (receiveGetCaseReultSend is null || receiveGetCaseReultSend.paras is null)
  429. return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
  430. string strResult = receiveGetCaseReultSend.paras.Validate();
  431. if (!string.IsNullOrEmpty(strResult))
  432. return OpenResponse.Ok(Reponse.Failed(strResult));
  433. //转换数据
  434. var dto = receiveGetCaseReultSend.paras;
  435. //添加数据
  436. var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "get_case_result_send", System.Text.Json.JsonSerializer.Serialize(dto));
  437. if (!string.IsNullOrEmpty(id))
  438. {
  439. //查询此工单
  440. var tempData = await _sendCaseInfoRepository.GetAsync(p => p.CaseSerial == dto.CaseSerial, HttpContext.RequestAborted);
  441. if (tempData != null)
  442. {
  443. //将工单的办理状态改为办理完成,终止拉取办理信息
  444. tempData.IsEnd = true;
  445. await _sendCaseInfoRepository.UpdateAsync(tempData, HttpContext.RequestAborted);
  446. }
  447. //向业务系统推送消息
  448. //await _capPublisher.PublishAsync(Sharing.Share.Mq.EventNames.SharingOrderReultSend, _mapper.Map<ReultSendDto>(dto), cancellationToken: HttpContext.RequestAborted);
  449. return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
  450. }
  451. else
  452. return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
  453. }
  454. /// <summary>
  455. /// 上报工单评价接口
  456. /// </summary>
  457. /// <param name="receiveGetVisitInfoSend">上报工单评价对象</param>
  458. /// <returns></returns>
  459. [HttpPost]
  460. [Route("get_visit_info_send")]
  461. [AllowAnonymous]
  462. public async Task<OpenResponse> GetVisitInfoSend([FromBody] GetVisitInfoSendRequest receiveGetVisitInfoSend)
  463. {
  464. // 验证
  465. if (receiveGetVisitInfoSend is null || receiveGetVisitInfoSend.paras is null)
  466. return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
  467. string strResult = receiveGetVisitInfoSend.paras.Validate();
  468. if (!string.IsNullOrEmpty(strResult))
  469. return OpenResponse.Ok(Reponse.Failed(strResult));
  470. //转换数据
  471. var dto = receiveGetVisitInfoSend.paras;
  472. //添加数据
  473. var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "get_visit_info_send", System.Text.Json.JsonSerializer.Serialize(dto));
  474. if (!string.IsNullOrEmpty(id))
  475. {
  476. //向业务系统推送消息
  477. // await _capPublisher.PublishAsync(Sharing.Share.Mq.EventNames.SharingOrderVisitInfo, _mapper.Map<VisitInfoDto>(dto), cancellationToken: HttpContext.RequestAborted);
  478. return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
  479. }
  480. else
  481. return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
  482. }
  483. /// <summary>
  484. /// 服务工单拓展信息交办---已完成-----1
  485. /// </summary>
  486. /// <param name="receiveCaseExtendsRequest">服务工单拓展信息交办</param>
  487. /// <returns></returns>
  488. [HttpPost]
  489. [Route("rest/receive_case_extends")]
  490. [AllowAnonymous]
  491. public async Task<OpenResponse> ReceiveCaseExtends([FromBody] ReceiveCaseExtendsRequest receiveCaseExtendsRequest)
  492. {
  493. // 验证
  494. if (receiveCaseExtendsRequest is null || receiveCaseExtendsRequest.paras is null)
  495. return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
  496. string strResult = receiveCaseExtendsRequest.paras.Validate();
  497. if (!string.IsNullOrEmpty(strResult))
  498. return OpenResponse.Ok(Reponse.Failed(strResult));
  499. var data = receiveCaseExtendsRequest.paras;
  500. //添加数据
  501. var id = await InitReceiveProvinceData(data.CaseSerial, null, "receive_case_extends", System.Text.Json.JsonSerializer.Serialize(data));
  502. OrderExtensionDto orderExtension = new()
  503. {
  504. ProvinceNo = data.CaseSerial,
  505. OrderTypeCode = data.FormType.ToLower()
  506. };
  507. //扩展信息写入
  508. switch (data.FormType.ToLower())
  509. {
  510. case "yl"://医疗表单
  511. //转换数据
  512. orderExtension = _mapper.Map<OrderExtensionDto>(data.FormMedical);
  513. orderExtension.OrderType = "医疗服务中心受理单";
  514. break;
  515. case "zwfw"://四川政务服务网技术工单
  516. //转换数据
  517. orderExtension = _mapper.Map<OrderExtensionDto>(data.FormNetWorktec);
  518. orderExtension.OrderType = "四川政务服务网技术中心受理单";
  519. break;
  520. case "th"://电视购物及商铺购买退换货工单
  521. //转换数据
  522. orderExtension = _mapper.Map<OrderExtensionDto>(data.FormReturnexChange);
  523. orderExtension.OrderType = "电视购物及商铺购买退换货中心受理单";
  524. break;
  525. case "gsgl"://高速公路工单
  526. //转换数据
  527. orderExtension = _mapper.Map<OrderExtensionDto>(data.FormExpressWay);
  528. orderExtension.OrderType = "高速公路投诉中心受理单";
  529. break;
  530. case "xjgg"://电视台虚假广告工单
  531. //转换数据
  532. orderExtension = _mapper.Map<OrderExtensionDto>(data.FormShamPub);
  533. orderExtension.OrderType = "电视台虚假广告中心受理单";
  534. break;
  535. case "swfwsq"://12366热线诉求交办
  536. //转换数据
  537. orderExtension = _mapper.Map<OrderExtensionDto>(data.FormTaxationComplaint);
  538. orderExtension.OrderType = "四川省12366热线诉求交办单";
  539. break;
  540. case "swfwzx"://12366热线咨询交办
  541. //转换数据
  542. orderExtension = _mapper.Map<OrderExtensionDto>(data.FormTaxationConsulting);
  543. orderExtension.OrderType = "四川省12366热线咨询交办单";
  544. break;
  545. case "jtfwjd"://12328服务监督
  546. //转换数据
  547. orderExtension = _mapper.Map<OrderExtensionDto>(data.FormTraffic);
  548. orderExtension.OrderType = "12328服务监督中心受理单";
  549. break;
  550. case "yzxf"://邮政业消费者申诉
  551. //转换数据
  552. orderExtension = _mapper.Map<OrderExtensionDto>(data.FormPost);
  553. orderExtension.OrderType = "邮政业消费者申诉受理单";
  554. break;
  555. case "hbjb"://环保举报业务
  556. //转换数据
  557. orderExtension = _mapper.Map<OrderExtensionDto>(data.FormEnvironMent);
  558. orderExtension.OrderType = "环保举报业务受理单";
  559. break;
  560. case "scjgj"://12315个性化表单
  561. break;
  562. default:
  563. break;
  564. }
  565. if (!string.IsNullOrEmpty(id))
  566. {
  567. //向业务系统推送消息
  568. await _mediator.Send(new ReceiveOrderExtensionNotify { OrderExtensionDto = orderExtension }, HttpContext.RequestAborted);
  569. return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
  570. }
  571. else
  572. return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
  573. }
  574. /// <summary>
  575. /// 服务工单材料接口
  576. /// </summary>
  577. /// <param name="params">工单材料信息</param>
  578. /// <param name="files">材料文件</param>
  579. /// <returns></returns>
  580. [HttpPost]
  581. [Route("get_case_material_info")]
  582. [AllowAnonymous]
  583. public async Task<OpenResponse> GetCaseMaterialInfo([FromForm] string @params, List<IFormFile> files)
  584. {
  585. // 上传文件为必须
  586. if (files is null || files.Count <= 0)
  587. {
  588. return OpenResponse.Ok(Reponse.Failed("上传文件为必须"));
  589. }
  590. // 解析附件信息
  591. var vmCaseMaterialInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<GetCaseMaterialInfoRequest>(@params);
  592. if (vmCaseMaterialInfo is null || vmCaseMaterialInfo.paras is null)
  593. {
  594. return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
  595. }
  596. GetCaseMaterialInfoModel tmpCaseMaterialInfo = vmCaseMaterialInfo.paras;
  597. // 验证
  598. string strResult = tmpCaseMaterialInfo.Validate();
  599. if (false == string.IsNullOrEmpty(strResult))
  600. {
  601. return OpenResponse.Ok(Reponse.Failed(strResult));
  602. }
  603. List<DsGetCaseMaterialInfo> listData = new();
  604. // 文件列表
  605. foreach (var file in files)
  606. {
  607. //这里需要上文件服务器上传
  608. var businessFileDto = await SendFileData(file);
  609. string strFileName = file.FileName;
  610. string strSuffix = strFileName.LastIndexOf(".") > 0 ? strFileName.Substring(strFileName.LastIndexOf(".")) : "";
  611. // 新增文件到列表
  612. var materialInfo = new DsGetCaseMaterialInfo()
  613. {
  614. CaseSerial = tmpCaseMaterialInfo.CaseSerial,
  615. MaterialType = tmpCaseMaterialInfo.MaterialType,
  616. CliengGuid = tmpCaseMaterialInfo.CliengGuid,
  617. AreaCode = tmpCaseMaterialInfo.AreaCode,
  618. FileName = file.FileName,
  619. FileSize = file.Length,
  620. Type = strSuffix.Trim('.'),
  621. Additions = businessFileDto.id,
  622. Path = businessFileDto.path,
  623. Direction = "2",
  624. SyncState = "1"
  625. };
  626. listData.Add(materialInfo);
  627. await _getCaseMaterialInfoRepository.AddAsync(materialInfo, HttpContext.RequestAborted);
  628. //向业务系统推送消息
  629. // await _capPublisher.PublishAsync(Sharing.Share.Mq.EventNames.SharingFileData, _mapper.Map<FileDto>(materialInfo), cancellationToken: HttpContext.RequestAborted);
  630. }
  631. if (listData != null && listData.Count > 0)
  632. {
  633. //处理附件数据
  634. var receiveData = await _dsReceiveProvinceDataRepository.GetAsync(p => p.CliengGuid == tmpCaseMaterialInfo.CliengGuid && p.CaseSerial == tmpCaseMaterialInfo.CaseSerial, HttpContext.RequestAborted);
  635. if (receiveData != null)
  636. {
  637. List<FileDto> listFiles = new();
  638. //根据接口处理数据
  639. switch (receiveData.ServiceInterface)
  640. {
  641. case "receive_case_info":
  642. listFiles = await InitFileData(listData, "工单受理");
  643. await _mediator.Send(new ReceiveOrderNotify { AddOrderDto = new() { ProvinceNo = tmpCaseMaterialInfo.CaseSerial }, Files = listFiles }, HttpContext.RequestAborted);
  644. break;
  645. case "get_case_back_result":
  646. var data = await _getCaseBackApplyRepository.GetAsync(p => p.CaseSerial == tmpCaseMaterialInfo.CaseSerial, HttpContext.RequestAborted);
  647. if (data != null)
  648. {
  649. listFiles = await InitFileData(listData, "工单退回审核");
  650. await _mediator.Send(new OrderSendBackResultNotify { OrderSendBackResultDto = new() { Id = data.OrderSendBackId } }, HttpContext.RequestAborted);
  651. }
  652. break;
  653. case "send_supervise_info":
  654. listFiles = await InitFileData(listData, "督办工单派发");
  655. await _mediator.Send(new ProvinceOrderSuperviseNotify { ProvinceOrderSuperviseDto = new() { CaseSerial = tmpCaseMaterialInfo.CaseSerial }, Files = listFiles }, HttpContext.RequestAborted);
  656. break;
  657. case "remind_case_info":
  658. listFiles = await InitFileData(listData, "工单催单");
  659. await _mediator.Send(new ProvinceOrderUrgeNotify { ProvinceOrderUrgeDto = new() { CaseSerial = tmpCaseMaterialInfo.CaseSerial } }, HttpContext.RequestAborted);
  660. break;
  661. case "screen_case_result_receive":
  662. listFiles = await InitFileData(listData, "工单甄别结果");
  663. await _mediator.Send(new ScreenProvinceResultNotify { ProvinceScreenResult = new() { CaseSerial = tmpCaseMaterialInfo.CaseSerial } }, HttpContext.RequestAborted);
  664. break;
  665. case "delay_case_result_receive":
  666. listFiles = await InitFileData(listData, "工单延期审核结果");
  667. await _mediator.Send(new DelayProvinceResultNotify { No = tmpCaseMaterialInfo.CaseSerial }, HttpContext.RequestAborted);
  668. break;
  669. case "supply_case_info_receive":
  670. listFiles = await InitFileData(listData, "工单补充");
  671. break;
  672. case "revoke_case_info":
  673. listFiles = await InitFileData(listData, "工单撤单");
  674. break;
  675. case "send_warn_info":
  676. listFiles = await InitFileData(listData, "工单预警");
  677. break;
  678. case "send_case_evl_result":
  679. listFiles = await InitFileData(listData, "工单满意度");
  680. break;
  681. case "get_case_result_send":
  682. listFiles = await InitFileData(listData, "工单处理结果");
  683. break;
  684. case "get_visit_info_send":
  685. listFiles = await InitFileData(listData, "上报工单评价");
  686. break;
  687. default:
  688. break;
  689. }
  690. }
  691. }
  692. return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
  693. }
  694. /// <summary>
  695. /// 服务工单材料接口--测试
  696. /// </summary>
  697. /// <returns></returns>
  698. [HttpPost]
  699. [Route("get_case_material_info_test")]
  700. [AllowAnonymous]
  701. public async Task<OpenResponse> GetCaseMaterialInfotest([FromForm] string @params, List<IFormFile> files)
  702. {
  703. return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
  704. // return OpenResponse.Ok("ok");
  705. //var businessFile = _channelConfigurationManager.GetConfigurationBusinessFile();
  706. //string result = "";
  707. //byte[] fileContentBytes = null;
  708. //try
  709. //{
  710. // string url = string.Format("{0}{1}?Source={2}&Id={3}", businessFile.BaseUrl, businessFile.DownloadUrlAddress, businessFile.Source, "08dbf49c-85cd-414b-8f1d-c16a811ed96e");
  711. // using (var client = _httpClientFactory.CreateClient())
  712. // using (var response = await client.GetAsync(url))
  713. // {
  714. // if (response.StatusCode == HttpStatusCode.OK)
  715. // {
  716. // using var memoryStream = new MemoryStream();
  717. // //await file.CopyToAsync(memoryStream);
  718. // //memoryStream.Seek(0, SeekOrigin.Begin);
  719. // //byte[] fileContentBytes = memoryStream.ToArray();
  720. // await response.Content.CopyToAsync(memoryStream);
  721. // memoryStream.Seek(0, SeekOrigin.Begin);
  722. // fileContentBytes = memoryStream.ToArray();
  723. // }
  724. // }
  725. //}
  726. //catch (Exception)
  727. //{ }
  728. //GetCaseMaterialInfoModel dto = new GetCaseMaterialInfoModel()
  729. //{
  730. // CaseSerial = "1111111111",
  731. // MaterialType = "10",
  732. // CliengGuid = "1122222",
  733. // AreaCode = "510000"
  734. //};
  735. ////组装请求参数
  736. //var model = new GetCaseMaterialInfoRequest
  737. //{
  738. // paras = dto,
  739. // token = new ClientInfo("11111", "22222")
  740. //};
  741. //Dictionary<string, object> dicParam = new Dictionary<string, object>();
  742. ////{
  743. //// { "params", "111111" } // 第一个接口参数,json格式字符串
  744. ////};
  745. //// 文件内容
  746. //// byte[] file = Convert.FromBase64String(result);//这里需要获取附件的流
  747. //// 构造字典文件数据
  748. //// 接口参数名称为files
  749. //CFormUpload.FileParameter fileParameter = new CFormUpload.FileParameter("files", fileContentBytes, "测试", null);
  750. //dicParam.Add("测试", fileParameter);
  751. //dicParam.Add("params", System.Text.Json.JsonSerializer.Serialize(model));
  752. //string strUrl = "http://localhost:7051/api/receive/get_case_material_info";
  753. //// 上传附件
  754. //string strResult = CFormUpload.MultipartFormDataPost(strUrl, null, dicParam, "");
  755. //var responseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ProvinceResponse>(strResult);
  756. //if (responseData != null && responseData.ReturnInfo != null)
  757. //{
  758. //}
  759. //return OpenResponse.Ok(Reponse.Failed("成功"));
  760. //Dictionary<string, object> dic = new Dictionary<string, object>();
  761. //dic.Add("MATERIAL_SERIAL", "1234567890"); //服务工单编号
  762. //dic.Add("MATERIAL_TYPE", "1"); //材料类型
  763. //dic.Add("CLIENG_GUID", Guid.NewGuid().ToString()); //材料标识
  764. //dic.Add("AREA_CODE", "510000"); //行政区划代码
  765. //string strParam = e_DicConvertToJson(dic, true);
  766. //Dictionary<string, object> dicParam = new Dictionary<string, object>();
  767. //// 第一个接口参数,json格式字符串
  768. //dicParam.Add("params", strParam);
  769. //// 文件名称
  770. //string fileName = "测试一个附件上传.txt";
  771. //foreach (var file in files)
  772. //{
  773. // // 文件内容字节数据
  774. // using var memoryStream = new MemoryStream();
  775. // await file.CopyToAsync(memoryStream);
  776. // memoryStream.Seek(0, SeekOrigin.Begin);
  777. // byte[] fileContentBytes = memoryStream.ToArray();
  778. // // 构造字典文件数据
  779. // // 接口参数名称为files
  780. // CFormUpload.FileParameter fileParameter = new CFormUpload.FileParameter("files", fileContentBytes, fileName, null);
  781. // dicParam.Add(fileName, fileParameter);
  782. // var a = CFormUpload.MultipartFormDataPost("http://localhost:50100/api/v1/Province/get_case_material_info", null, dicParam, null);
  783. //}
  784. }
  785. #region 私有方法
  786. /// <summary>
  787. /// 组装附件参数
  788. /// </summary>
  789. /// <param name="listData"></param>
  790. /// <param name="Classify"></param>
  791. /// <returns></returns>
  792. private async Task<List<FileDto>> InitFileData(List<DsGetCaseMaterialInfo> listData, string Classify)
  793. {
  794. List<FileDto> fileDtos = new();
  795. foreach (var item in listData)
  796. {
  797. fileDtos.Add(new FileDto()
  798. {
  799. Name = item.FileName,
  800. Type = item.Type,
  801. Classify = Classify,
  802. Additions = item.Additions,
  803. Path = item.Path
  804. });
  805. }
  806. return fileDtos;
  807. }
  808. /// <summary>
  809. /// 根据附件Id,工单编号查询所有附件
  810. /// </summary>
  811. /// <param name="CliengGuid">材料标识ID</param>
  812. /// <param name="CaseSerial">工单编号</param>
  813. /// <param name="Classify">材料分类</param>
  814. /// <returns></returns>
  815. private async Task<List<FileDto>> GetFileData(string CliengGuid, string CaseSerial, string Classify)
  816. {
  817. var list = await _getCaseMaterialInfoRepository.Queryable().Where(p => p.CliengGuid == CliengGuid && p.CaseSerial == CaseSerial).ToListAsync();
  818. List<FileDto> fileDtos = new();
  819. if (fileDtos == null || fileDtos.Count == 0)
  820. return fileDtos;
  821. foreach (var item in list)
  822. {
  823. fileDtos.Add(new FileDto()
  824. {
  825. Name = item.FileName,
  826. Type = item.Type,
  827. Classify = Classify,
  828. Additions = item.Additions,
  829. Path = item.Path
  830. });
  831. }
  832. return fileDtos;
  833. }
  834. /// <summary>
  835. /// 将数据写入表格
  836. /// </summary>
  837. /// <param name="CaseSerial">工单编号</param>
  838. /// <param name="CliengGuid">材料标识</param>
  839. /// <param name="ServiceInterface">接口名称</param>
  840. /// <param name="ReceiveData">数据</param>
  841. /// <returns></returns>
  842. private async Task<string> InitReceiveProvinceData(string CaseSerial, string CliengGuid, string ServiceInterface, string ReceiveData)
  843. {
  844. DsReceiveProvinceData dsReceive = new DsReceiveProvinceData()
  845. {
  846. CaseSerial = CaseSerial,
  847. CliengGuid = CliengGuid,
  848. ServiceInterface = ServiceInterface,
  849. ReceiveData = ReceiveData
  850. };
  851. return await _dsReceiveProvinceDataRepository.AddAsync(dsReceive, HttpContext.RequestAborted);
  852. }
  853. /// <summary>
  854. /// 将文件流上传到附件服务器
  855. /// </summary>
  856. /// <param name="file"></param>
  857. /// <returns></returns>
  858. private async Task<BusinessFileDto> SendFileData(IFormFile file)
  859. {
  860. var businessFile = _channelConfigurationManager.GetConfigurationBusinessFile();
  861. // 文件名称
  862. string fileName = file.FileName;
  863. // 文件内容字节数据
  864. using var memoryStream = new MemoryStream();
  865. await file.CopyToAsync(memoryStream);
  866. memoryStream.Seek(0, SeekOrigin.Begin);
  867. byte[] fileContentBytes = memoryStream.ToArray();
  868. // 构造字典文件数据
  869. // 接口参数名称为files
  870. CFormUpload.FileParameter fileParameter = new CFormUpload.FileParameter("fileData", fileContentBytes, fileName, "multipart/form-data");
  871. Dictionary<string, object> dicParam = new()
  872. {
  873. { fileName, fileParameter }
  874. };
  875. string url = string.Format("{0}{1}?source={2}", businessFile.BaseUrl, businessFile.UploadUrlAddress, businessFile.Source);
  876. var result = CFormUpload.MultipartFormDataPost(url, null, dicParam, "");
  877. if (!string.IsNullOrEmpty(result))
  878. {
  879. var resultData = Newtonsoft.Json.JsonConvert.DeserializeObject<BusinessFileResponse>(result);
  880. if (resultData != null && resultData.code == 0)
  881. {
  882. return resultData.result;
  883. }
  884. }
  885. return new BusinessFileDto();
  886. }
  887. #endregion
  888. }
  889. }