ProvinceController.cs 42 KB

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