ProvinceController.cs 40 KB

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