OtherPlatformsYBController.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. using DataSharing.Common;
  2. using DataSharing.ConvergenceMedia;
  3. using DataSharing.FwDataExchange;
  4. using DataSharing.RawData;
  5. using DataSharing.Share.Dtos;
  6. using DataSharing.Share.Dtos.Common;
  7. using DataSharing.Share.Dtos.HotlineSetting;
  8. using DataSharing.Share.Dtos.OtherPlatformsYB;
  9. using DotNetCore.CAP;
  10. using MapsterMapper;
  11. using MediatR;
  12. using Microsoft.AspNetCore.Authorization;
  13. using Microsoft.AspNetCore.Mvc;
  14. using XF.Domain.Filters;
  15. using XF.Domain.Repository;
  16. namespace DataSharing.Host.Controllers
  17. {
  18. /// <summary>
  19. /// 智慧宜宾
  20. /// </summary>
  21. public class OtherPlatformsYBController : BaseDataController
  22. {
  23. private readonly IMapper _mapper;
  24. private readonly IMediator _mediator;
  25. private readonly ICapPublisher _capPublisher;
  26. private readonly IRepository<DsOrder> _dataOrderRepository;
  27. private readonly IRepository<DsOrderWorkFlow> _dataOrderWorkFlowRepository;
  28. private readonly IRepository<DsReceiveMediaData> _dsReceiveMediaDataRepository;
  29. private readonly IRepository<DsUserTokenInfo> _dsUserTokenInfoRepository;
  30. private readonly FwClient _fwClient;
  31. /// <summary>
  32. ///
  33. /// </summary>
  34. /// <param name="mapper"></param>
  35. /// <param name="mediator"></param>
  36. /// <param name="capPublisher"></param>
  37. /// <param name="dataOrderRepository"></param>
  38. /// <param name="dataOrderWorkFlowRepository"></param>
  39. /// <param name="dsReceiveMediaDataRepository"></param>
  40. /// <param name="dsUserTokenInfoRepository"></param>
  41. /// <param name="fwClient"></param>
  42. public OtherPlatformsYBController(IMapper mapper, IMediator mediator,
  43. ICapPublisher capPublisher,
  44. IRepository<DsOrder> dataOrderRepository,
  45. IRepository<DsOrderWorkFlow> dataOrderWorkFlowRepository,
  46. IRepository<DsReceiveMediaData> dsReceiveMediaDataRepository,
  47. IRepository<DsUserTokenInfo> dsUserTokenInfoRepository,
  48. FwClient fwClient)
  49. {
  50. _mapper = mapper;
  51. _mediator = mediator;
  52. _capPublisher = capPublisher;
  53. _dataOrderRepository = dataOrderRepository;
  54. _dataOrderWorkFlowRepository = dataOrderWorkFlowRepository;
  55. _dsReceiveMediaDataRepository = dsReceiveMediaDataRepository;
  56. _dsUserTokenInfoRepository = dsUserTokenInfoRepository;
  57. _fwClient = fwClient;
  58. }
  59. /// <summary>
  60. /// 2.3.1查询受理类型
  61. /// </summary>
  62. /// <param name="strVailCode"></param>
  63. /// <returns></returns>
  64. [HttpPost("e_GetTypeID")]
  65. [AllowAnonymous]
  66. public async Task<OpenResponse> GetAcceptType([FromForm] string strVailCode)
  67. {
  68. var accountDto = await CheckAccountAsync(strVailCode);
  69. if (accountDto is null || accountDto.IsCheckAccount == false)
  70. return OpenResponse.Ok(OtherPlatformsDeResponse<string>.Failed("密钥错误", "-900"));
  71. List<AcceptTypeListDto> acceptTypeListDtos = new()
  72. {
  73. new() { Name = "咨询", Value = "10" },
  74. new() { Name = "建议", Value = "15" },
  75. new() { Name = "求助", Value = "20" },
  76. new() { Name = "表扬", Value = "25" },
  77. new() { Name = "举报", Value = "30" },
  78. new() { Name = "投诉", Value = "35" },
  79. new() { Name = "其他", Value = "40" },
  80. new() { Name = "意见", Value = "1" },
  81. new() { Name = "惠民帮助", Value = "2" },
  82. new() { Name = "大气污染举报", Value = "3" }
  83. };
  84. return OpenResponse.Ok(OtherPlatformsDeResponse<List<AcceptTypeListDto>>.Success(acceptTypeListDtos));
  85. }
  86. /// <summary>
  87. /// 2.3.2网上写信
  88. /// </summary>
  89. /// <param name="dto"></param>
  90. /// <returns></returns>
  91. [HttpPost("e_WriteInfo")]
  92. [AllowAnonymous]
  93. public async Task<OpenResponse> WriteInfo([FromForm] AddWriteInfoDto dto)
  94. {
  95. var accountDto = await CheckAccountAsync(dto.strVailCode);
  96. if (accountDto is null || accountDto.IsCheckAccount == false)
  97. return OpenResponse.Ok(OtherPlatformsDeResponse<string>.Failed("密钥错误", "-900"));
  98. //验证数据
  99. string strResult = dto.Validate();
  100. if (!string.IsNullOrEmpty(strResult))
  101. return OpenResponse.Ok(OtherPlatformsDeResponse<string>.Failed(strResult, "0"));
  102. //写入原始数据
  103. DsReceiveMediaData dsReceiveMediaData = new()
  104. {
  105. ServiceInterface = "e_WriteInfo",
  106. PlatformsName= accountDto.PlatformSource,
  107. ReceiveData = System.Text.Json.JsonSerializer.Serialize(dto)
  108. };
  109. dsReceiveMediaData.Id = await _dsReceiveMediaDataRepository.AddAsync(dsReceiveMediaData, HttpContext.RequestAborted);
  110. Hotline.Share.Dtos.Order.AddOrderDto data = new()
  111. {
  112. Title = dto.strTitle,
  113. FromName = dto.strUserName,
  114. Contact = dto.strPhone,
  115. FullAddress = dto.strAddress,
  116. Content = dto.strContent,
  117. IsSecret = false,
  118. AcceptTypeCode = dto.strTypeID,
  119. Source = (Hotline.Share.Enums.Order.ESource)Enum.Parse(typeof(Hotline.Share.Enums.Order.ESource), accountDto.PlatformSource),
  120. FromGender = dto.strGender switch
  121. {
  122. "1" => Hotline.Share.Enums.Order.EGender.Male,
  123. "2" => Hotline.Share.Enums.Order.EGender.Female,
  124. _ => Hotline.Share.Enums.Order.EGender.Unknown,
  125. },
  126. IdentityType = Hotline.Share.Enums.Order.EIdentityType.Citizen,
  127. Transpond = false,
  128. IsEnforcementOrder = false,
  129. ExternalId = Guid.NewGuid().ToString(),
  130. };
  131. data.SourceChannel = "智慧宜宾";
  132. data.SourceChannelCode = "ZHYB";
  133. //调用工单创建接口
  134. var result = await _fwClient.RequestNoTokenAsync<HotlineClientResponse>("api/v1/Order/add-anonymous", "Post", System.Text.Json.JsonSerializer.Serialize(data));
  135. if (result != null && result.code == 0)
  136. {
  137. dsReceiveMediaData.ExternalId = result.result.id;
  138. dsReceiveMediaData.OrderCode = result.result.no;
  139. await _dsReceiveMediaDataRepository.UpdateAsync(dsReceiveMediaData, HttpContext.RequestAborted);
  140. List<WriteInfoReturnDto> returnData = new()
  141. {
  142. new WriteInfoReturnDto() { LetterCode = result.result.no, LetterPwd = result.result.password }
  143. };
  144. return OpenResponse.Ok(OtherPlatformsDeResponse<List<WriteInfoReturnDto>>.Success(returnData));
  145. }
  146. else
  147. return OpenResponse.Ok(OtherPlatformsDeResponse<string>.Failed("接口调用失败!", "0"));
  148. }
  149. /// <summary>
  150. /// 2.3.3查询办理进度
  151. /// </summary>
  152. /// <param name=""></param>
  153. /// <returns></returns>
  154. [HttpPost("e_GetFlowInfo")]
  155. [AllowAnonymous]
  156. public async Task<OpenResponse> GetFlowInfo([FromForm] GetFlowDetailDto dto)
  157. {
  158. var accountDto = await CheckAccountAsync(dto.strVailCode);
  159. if (accountDto is null || accountDto.IsCheckAccount == false)
  160. return OpenResponse.Ok(OtherPlatformsDeResponse<string>.Failed("密钥错误", "-900"));
  161. //验证数据
  162. string strResult = dto.Validate();
  163. if (!string.IsNullOrEmpty(strResult))
  164. return OpenResponse.Ok(OtherPlatformsDeResponse<string>.Failed(strResult, "0"));
  165. var dataOrder = await _dsReceiveMediaDataRepository.GetAsync(p => p.OrderCode == dto.strCode, HttpContext.RequestAborted);
  166. if (dataOrder == null)
  167. return OpenResponse.Ok(OtherPlatformsDeResponse<string>.Failed("编号或密码错误", "0"));
  168. var data = await _dataOrderRepository.GetAsync(p => p.OrderId == dataOrder.ExternalId, HttpContext.RequestAborted);
  169. if (data == null)
  170. return OpenResponse.Ok(OtherPlatformsDeResponse<string>.Failed("信件正在受理中", "0"));
  171. var dataFlow = await _dataOrderWorkFlowRepository.Queryable()
  172. .Where(p => p.OrderId == dataOrder.ExternalId)
  173. .OrderBy(p => p.CreationTime)
  174. .ToListAsync();
  175. var list = _mapper.Map<List<GetFlowInfoReturnDto>>(dataFlow);
  176. if (list != null && list.Count > 0 && data.HandleState == "办理完成")
  177. list[list.Count - 1].AcceptEnd = "1";
  178. return OpenResponse.Ok(OtherPlatformsDeResponse<List<GetFlowInfoReturnDto>>.Success(list));
  179. }
  180. /// <summary>
  181. /// 2.3.4查询办理结果
  182. /// </summary>
  183. /// <param name=""></param>
  184. /// <returns></returns>
  185. [HttpPost("e_GetFlowDetail")]
  186. [AllowAnonymous]
  187. public async Task<OpenResponse> GetFlowDetail([FromForm] GetFlowDetailDto dto)
  188. {
  189. var accountDto = await CheckAccountAsync(dto.strVailCode);
  190. if (accountDto is null || accountDto.IsCheckAccount == false)
  191. return OpenResponse.Ok(OtherPlatformsDeResponse<string>.Failed("密钥错误", "-900"));
  192. //验证数据
  193. string strResult = dto.Validate();
  194. if (!string.IsNullOrEmpty(strResult))
  195. return OpenResponse.Ok(OtherPlatformsDeResponse<string>.Failed(strResult, "0"));
  196. var dataOrder = await _dsReceiveMediaDataRepository.GetAsync(p => p.OrderCode == dto.strCode, HttpContext.RequestAborted);
  197. if (dataOrder == null)
  198. return OpenResponse.Ok(OtherPlatformsDeResponse<string>.Failed("编号或密码错误", "0"));
  199. var data = await _dataOrderRepository.GetAsync(p => p.OrderId == dataOrder.ExternalId, HttpContext.RequestAborted);
  200. if (data == null)
  201. return OpenResponse.Ok(OtherPlatformsDeResponse<string>.Failed("信件正在受理中", "0"));
  202. GetFlowDetailReturnDto getFlowDetailReturn = new()
  203. {
  204. state = data.HandleState == "办理完成" ? "1" : "0",
  205. content = data.ActualOpinion,
  206. AcceptName = data.ActualHandleOrgName,
  207. AcceptUser = data.ActualHandlerName,
  208. AcceptDate = data.ActualHandleTime
  209. };
  210. return OpenResponse.Ok(OtherPlatformsDeResponse<GetFlowDetailReturnDto>.Success(getFlowDetailReturn));
  211. }
  212. /// <summary>
  213. /// 验证密钥
  214. /// </summary>
  215. /// <param name="Code"></param>
  216. /// <returns></returns>
  217. private async Task<CheckAccountDto> CheckAccountAsync(string Code)
  218. {
  219. CheckAccountDto accountDto = new() { IsCheckAccount = false };
  220. var data = await _dsUserTokenInfoRepository.GetAsync(p => p.AccountId == Code && p.State == "1", HttpContext.RequestAborted);
  221. if (data is not null)
  222. {
  223. accountDto.PlatformSource = data.PlatformSource;
  224. accountDto.IsCheckAccount = true;
  225. return accountDto;
  226. }
  227. accountDto.Message = "授权账号或密码验证不通过";
  228. return accountDto;
  229. }
  230. }
  231. }