LuZhou110Service.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  1. using DataSharing.LuZhou.Encrypt;
  2. using DataSharing.LuZhou.LuZhou110;
  3. using DataSharing.LuZhou.LZ110;
  4. using DataSharing.Share.Dtos.LuZhou;
  5. using Hotline.Share.Dtos.Order;
  6. using Hotline.Share.Enums.Order;
  7. using MapsterMapper;
  8. using Microsoft.Extensions.Logging;
  9. using System.Text.Json;
  10. using XF.Domain.Dependency;
  11. using XF.Domain.Repository;
  12. namespace DataSharing.LuZhou
  13. {
  14. public class LuZhou110Service : ILuZhou110Service, IScopeDependency
  15. {
  16. private readonly IMapper _mapper;
  17. private readonly ILogger<LuZhou110Service> _logger;
  18. private readonly IRepository<WaitSendTaskLuzhou110> _waitSendTaskLuZhou110Repository;
  19. private readonly IRepository<SendTaskLuzhou110> _sendTaskLuZhou110Repository;
  20. /// <summary>
  21. ///
  22. /// </summary>
  23. /// <param name="mapper"></param>
  24. /// <param name="logger"></param>
  25. /// <param name="waitSendTaskLuZhou110Repository"></param>
  26. /// <param name="sendTaskLuZhou110Repository"></param>
  27. public LuZhou110Service(IMapper mapper, ILogger<LuZhou110Service> logger,
  28. IRepository<WaitSendTaskLuzhou110> waitSendTaskLuZhou110Repository,
  29. IRepository<SendTaskLuzhou110> sendTaskLuZhou110Repository
  30. )
  31. {
  32. _mapper = mapper;
  33. _logger = logger;
  34. _waitSendTaskLuZhou110Repository = waitSendTaskLuZhou110Repository;
  35. _sendTaskLuZhou110Repository = sendTaskLuZhou110Repository;
  36. }
  37. #region 接受数据汇聚 组装基础参数
  38. /// <summary>
  39. /// 组装基础参数
  40. /// </summary>
  41. /// <param name="dto"></param>
  42. /// <param name="cancellationToken"></param>
  43. /// <returns></returns>
  44. public async Task InitData(OrderFlowDto dto, CancellationToken cancellationToken)
  45. {
  46. var order = dto.Order;
  47. if (order.TransferPhone == "12345")
  48. {
  49. // 泸州110接口地址 http://10.41.1.9:50105
  50. // 泸州边界接口地址 http://59.213.83.7:8123/PSPC/SC/12345/GDLZBL
  51. // 跨网交互平台 能访问 泸州110接口地址
  52. // 泸州110接口地址 能访问 泸州边界平台
  53. #region 接受数据汇聚 工单基础信息
  54. var serializeOptions = new JsonSerializerOptions
  55. {
  56. PropertyNamingPolicy = new JsonPascalNamingPolicy(),
  57. };
  58. var gender = "";
  59. if (order.FromGender == EGender.Female)
  60. gender = "女";
  61. if (order.FromGender == EGender.Male)
  62. gender = "男";
  63. LZ110BasicInfoDto basicInfoDto = new LZ110BasicInfoDto()
  64. {
  65. FlowID = order.Id,
  66. Code = order.No,
  67. PoliceCode = "",
  68. AreaName = order.AreaCode.Substring(0, 6),
  69. AddDate = order.CreationTime.ToString("yyyy/MM/dd HH:mm:ss"),
  70. FromTel = order.FromPhone,
  71. CallerName = order.FromName,
  72. Gender = gender,
  73. ContactTel = order.Contact,
  74. IDCard = order.LicenceNo,
  75. TelHome = "",
  76. Address = order.Province + order.City + order.County + order.Street,
  77. WorkUnit = "",
  78. Title = order.Title,
  79. PurTypeName = order.AcceptType,
  80. FromName = order.SourceChannel,
  81. ConTypeName = order.HotspotSpliceName,
  82. Content = order.Content,
  83. IsSecrecy = order.IsSecret == true ? "1" : "0"
  84. };
  85. var GDJCXXInfoObject = EncryptHandler.AES(basicInfoDto);
  86. GDJCXXInfo GDJCXXInfo = new GDJCXXInfo
  87. {
  88. GDJCXXInfoObject = GDJCXXInfoObject
  89. };
  90. await InitSendData(order.Id, order.No, "0", LZ110Defaults.SendBasicInfo,
  91. System.Text.Json.JsonSerializer.Serialize(basicInfoDto, serializeOptions),
  92. System.Text.Json.JsonSerializer.Serialize(GDJCXXInfo, serializeOptions),
  93. cancellationToken);
  94. #endregion
  95. #region 接受数据汇聚 工单流转信息
  96. var nodeName = "派单组";
  97. var nodeType = "2";
  98. if (!string.IsNullOrEmpty(order.ActualHandleOrgName) && order.ActualHandleOrgName != "001")
  99. {
  100. if (order.ActualHandleOrgName.Length == 6)
  101. {
  102. nodeName = "一级部门受理";
  103. nodeType = "4";
  104. }
  105. else if (order.ActualHandleOrgName.Length == 9)
  106. {
  107. nodeName = "二级部门办理";
  108. nodeType = "4";
  109. }
  110. else if (order.ActualHandleOrgName.Length == 12)
  111. {
  112. nodeName = "三级部门办理";
  113. nodeType = "4";
  114. }
  115. }
  116. LZ110FlowedDto flowedDto = new LZ110FlowedDto()
  117. {
  118. RunID = dto.WorkflowTrace.Id,
  119. FlowID = order.Id,
  120. Code = order.No,
  121. NodeName = nodeName,
  122. NodeType = nodeType,
  123. HandleBMName = order.ActualHandleOrgName,
  124. HandleUserName = order.ActualHandlerName,
  125. HandleTime = order.ActualHandleTime.HasValue == true ? order.ActualHandleTime.Value.ToString("yyyy/MM/dd HH:mm:ss") : DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"),
  126. HandleOpinion = order.ActualOpinion,
  127. IsPolice = "0",
  128. PoliceCode = string.Empty,
  129. HandleState = string.Empty
  130. };
  131. var GDLZBLInfoObject = EncryptHandler.AES(flowedDto);
  132. GDLZBLInfo GDLZBLInfo = new GDLZBLInfo
  133. {
  134. GDLZBLInfoObject = GDLZBLInfoObject
  135. };
  136. await InitSendData(order.Id, order.No, "0", LZ110Defaults.SendFlowed,
  137. JsonSerializer.Serialize(flowedDto, serializeOptions),
  138. JsonSerializer.Serialize(GDLZBLInfo, serializeOptions),
  139. cancellationToken);
  140. #endregion
  141. #region 接受数据汇聚 工单办理结果
  142. LZ110HandResultDto handResultDto = new LZ110HandResultDto()
  143. {
  144. Code = order.No,
  145. HandleUserName = order.ActualHandlerName,
  146. HandleBMName = order.ActualHandleOrgName,
  147. HandleTime = order.FiledTime.HasValue == true ? order.FiledTime.Value.ToString("yyyy/MM/dd HH:mm:ss") : DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"),
  148. HandleOpinion = order.FileOpinion,
  149. HandleState = "办理完成",
  150. PoliceCode = "",
  151. };
  152. var GDBLJGInfoObject = EncryptHandler.AES(handResultDto);
  153. GDBLJGInfo GDBLJGInfo = new GDBLJGInfo
  154. {
  155. GDBLJGInfoObject = GDBLJGInfoObject
  156. };
  157. await InitSendData(order.Id, order.No, "0", LZ110Defaults.SendHandResult,
  158. System.Text.Json.JsonSerializer.Serialize(handResultDto, serializeOptions),
  159. System.Text.Json.JsonSerializer.Serialize(GDBLJGInfo, serializeOptions),
  160. cancellationToken);
  161. #endregion
  162. #region 接受数据汇聚 工单办理状态
  163. LZ110UpdateStatusDto updateStatusDto = new LZ110UpdateStatusDto()
  164. {
  165. Code = order.No,
  166. FlowID = order.Id,
  167. PoliceCode = "",
  168. HandleState = "已归档",
  169. };
  170. var GDBLZTInfoObject = EncryptHandler.AES(updateStatusDto);
  171. GDBLZTInfo GDBLZTInfo = new GDBLZTInfo
  172. {
  173. GDBLZTInfoObject = GDBLZTInfoObject
  174. };
  175. await InitSendData(order.Id, order.No, "0", LZ110Defaults.SendUpdateStatus,
  176. System.Text.Json.JsonSerializer.Serialize(updateStatusDto, serializeOptions),
  177. System.Text.Json.JsonSerializer.Serialize(GDBLZTInfo, serializeOptions),
  178. cancellationToken);
  179. #endregion
  180. #region 接受数据汇聚 工单延期申请
  181. if (dto.OrderSearchDelay != null)
  182. {
  183. var orderSearchDelay = dto.OrderSearchDelay;
  184. LZ110ExtensionRequestDto extensionRequestDto = new LZ110ExtensionRequestDto()
  185. {
  186. FlowID = order.Id,
  187. Code = order.No,
  188. ApplyBMName = orderSearchDelay.ApplyOrgName,
  189. ApplyUserName = orderSearchDelay.EmployeeName,
  190. ApplyTime = orderSearchDelay.ApplyDelayTime.ToString("yyyy/MM/dd HH:mm:ss"),
  191. ApplyTimeLimit = orderSearchDelay.DelayNum.ToString(),
  192. ApplyContent = orderSearchDelay.DelayReason,
  193. FPID = orderSearchDelay.Id,
  194. RunID = orderSearchDelay.WorkflowId,
  195. };
  196. var GDYQSQInfoObject = EncryptHandler.AES(extensionRequestDto);
  197. GDYQSQInfo GDYQSQInfo = new GDYQSQInfo
  198. {
  199. GDYQSQInfoObject = GDYQSQInfoObject
  200. };
  201. await InitSendData(order.Id, order.No, "0", LZ110Defaults.SendExtensionRequest,
  202. System.Text.Json.JsonSerializer.Serialize(extensionRequestDto, serializeOptions),
  203. System.Text.Json.JsonSerializer.Serialize(GDYQSQInfo, serializeOptions),
  204. cancellationToken);
  205. }
  206. #endregion
  207. }
  208. }
  209. #endregion
  210. #region 接受数据汇聚 工单回访信息
  211. /// <summary>
  212. /// 回访
  213. /// </summary>
  214. /// <param name="dto"></param>
  215. /// <param name="cancellationToken"></param>
  216. /// <returns></returns>
  217. public async Task InitVisitData(PublishVisitDto dto, CancellationToken cancellationToken)
  218. {
  219. var order = dto.Order;
  220. if (order != null && order.TransferPhone == "12345")
  221. {
  222. #region 接受数据汇聚 工单回访信息
  223. var serializeOptions = new JsonSerializerOptions
  224. {
  225. PropertyNamingPolicy = new JsonPascalNamingPolicy(),
  226. };
  227. var visitMethod = "3";
  228. if (dto.VisitType == EVisitType.CallVisit)
  229. visitMethod = "1";
  230. else if (dto.VisitType == EVisitType.SmsVisit)
  231. visitMethod = "2";
  232. //坐席
  233. var seatsContent = "满意";
  234. var seatsResult = "2";
  235. //部门
  236. var bmContent = dto.VisitRemark;
  237. var bmResult = dto.SubjectResultSatifyCode switch
  238. {
  239. "5" => "1",
  240. "4" => "2",
  241. "3" => "3",
  242. "2" => "4",
  243. "1" => "5",
  244. _ => "2",
  245. };
  246. LZ110CallBackDto callBackDto = new LZ110CallBackDto()
  247. {
  248. VisitTime = dto.VisitTime.Value.ToString("yyyy/MM/dd HH:mm:ss"),
  249. FlowID = order.Id,
  250. SeatsContent = seatsContent,
  251. SeatsResult = seatsResult,
  252. Code = order.No,
  253. UserName = string.IsNullOrEmpty(dto.VisitName) == true ? "系统管理员" : dto.VisitName,
  254. VisitID = dto.No,
  255. BMContent = bmContent,
  256. BMResult = bmResult,
  257. VisitMethod = visitMethod
  258. };
  259. var GDHFXXInfoObject = EncryptHandler.AES(callBackDto);
  260. GDHFXXInfo GDHFXXInfo = new GDHFXXInfo
  261. {
  262. GDHFXXInfoObject = GDHFXXInfoObject
  263. };
  264. await InitSendData(order.Id, order.No, "0", LZ110Defaults.SendCallBack,
  265. System.Text.Json.JsonSerializer.Serialize(callBackDto, serializeOptions),
  266. System.Text.Json.JsonSerializer.Serialize(GDHFXXInfo, serializeOptions),
  267. cancellationToken);
  268. #endregion
  269. }
  270. }
  271. #endregion
  272. #region 写入待推送
  273. /// <summary>
  274. ///
  275. /// </summary>
  276. /// <param name="OrderId">工单Id</param>
  277. /// <param name="No">工单编号</param>
  278. /// <param name="TaskType">任务类型 0:12345工单推送(汇聚),1:110工单推送</param>
  279. /// <param name="Path">请求地址</param>
  280. /// <param name="RequestData">组装参数</param>
  281. /// <param name="Request">请求参数</param>
  282. /// <param name="cancellationToken"></param>
  283. /// <returns></returns>
  284. public async Task<string> InitSendData(string OrderId, string No, string TaskType, string Path, string RequestData, string Request, CancellationToken cancellationToken)
  285. {
  286. WaitSendTaskLuzhou110 waitTask = new WaitSendTaskLuzhou110()
  287. {
  288. OrderId = OrderId,
  289. No = No,
  290. SendTimes = 0,
  291. TaskType = TaskType,
  292. HttpMethod = "Post",
  293. Path = Path,
  294. RequestData = RequestData,
  295. Request = Request,
  296. };
  297. waitTask.Id = await _waitSendTaskLuZhou110Repository.AddAsync(waitTask, cancellationToken);
  298. var sendTask = _mapper.Map<SendTaskLuzhou110>(waitTask);
  299. sendTask.Id = waitTask.Id;
  300. //写入推送主表
  301. return await _sendTaskLuZhou110Repository.AddAsync(sendTask, cancellationToken);
  302. }
  303. #endregion
  304. }
  305. }