ProvinceController.cs 62 KB

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