using DataSharing.LuZhou.Encrypt; using DataSharing.LuZhou.LuZhou110; using DataSharing.LuZhou.LZ110; using DataSharing.Share.Dtos.LuZhou; using Hotline.Share.Dtos.Order; using Hotline.Share.Enums.Order; using MapsterMapper; using Microsoft.Extensions.Logging; using System.Text.Json; using XF.Domain.Dependency; using XF.Domain.Repository; namespace DataSharing.LuZhou { public class LuZhou110Service : ILuZhou110Service, IScopeDependency { private readonly IMapper _mapper; private readonly ILogger _logger; private readonly IRepository _waitSendTaskLuZhou110Repository; private readonly IRepository _sendTaskLuZhou110Repository; /// /// /// /// /// /// /// public LuZhou110Service(IMapper mapper, ILogger logger, IRepository waitSendTaskLuZhou110Repository, IRepository sendTaskLuZhou110Repository ) { _mapper = mapper; _logger = logger; _waitSendTaskLuZhou110Repository = waitSendTaskLuZhou110Repository; _sendTaskLuZhou110Repository = sendTaskLuZhou110Repository; } #region 接受数据汇聚 组装基础参数 /// /// 组装基础参数 /// /// /// /// public async Task InitData(OrderFlowDto dto, CancellationToken cancellationToken) { var order = dto.Order; if (order.TransferPhone == "12345") { // 泸州110接口地址 http://10.41.1.9:50105 // 泸州边界接口地址 http://59.213.83.7:8123/PSPC/SC/12345/GDLZBL // 跨网交互平台 能访问 泸州110接口地址 // 泸州110接口地址 能访问 泸州边界平台 #region 接受数据汇聚 工单基础信息 var serializeOptions = new JsonSerializerOptions { PropertyNamingPolicy = new JsonPascalNamingPolicy(), }; var gender = ""; if (order.FromGender == EGender.Female) gender = "女"; if (order.FromGender == EGender.Male) gender = "男"; LZ110BasicInfoDto basicInfoDto = new LZ110BasicInfoDto() { FlowID = order.Id, Code = order.No, PoliceCode = "", AreaName = order.AreaCode.Substring(0, 6), AddDate = order.CreationTime.ToString("yyyy/MM/dd HH:mm:ss"), FromTel = order.FromPhone, CallerName = order.FromName, Gender = gender, ContactTel = order.Contact, IDCard = order.LicenceNo, TelHome = "", Address = order.Province + order.City + order.County + order.Street, WorkUnit = "", Title = order.Title, PurTypeName = order.AcceptType, FromName = order.SourceChannel, ConTypeName = order.HotspotSpliceName, Content = order.Content, IsSecrecy = order.IsSecret == true ? "1" : "0" }; var GDJCXXInfoObject = EncryptHandler.AES(basicInfoDto); GDJCXXInfo GDJCXXInfo = new GDJCXXInfo { GDJCXXInfoObject = GDJCXXInfoObject }; await InitSendData(order.Id, order.No, "0", LZ110Defaults.SendBasicInfo, System.Text.Json.JsonSerializer.Serialize(basicInfoDto, serializeOptions), System.Text.Json.JsonSerializer.Serialize(GDJCXXInfo, serializeOptions), cancellationToken); #endregion #region 接受数据汇聚 工单流转信息 var nodeName = "派单组"; var nodeType = "2"; if (!string.IsNullOrEmpty(order.ActualHandleOrgName) && order.ActualHandleOrgName != "001") { if (order.ActualHandleOrgName.Length == 6) { nodeName = "一级部门受理"; nodeType = "4"; } else if (order.ActualHandleOrgName.Length == 9) { nodeName = "二级部门办理"; nodeType = "4"; } else if (order.ActualHandleOrgName.Length == 12) { nodeName = "三级部门办理"; nodeType = "4"; } } LZ110FlowedDto flowedDto = new LZ110FlowedDto() { RunID = dto.WorkflowTrace.Id, FlowID = order.Id, Code = order.No, NodeName = nodeName, NodeType = nodeType, HandleBMName = order.ActualHandleOrgName, HandleUserName = order.ActualHandlerName, HandleTime = order.ActualHandleTime.HasValue == true ? order.ActualHandleTime.Value.ToString("yyyy/MM/dd HH:mm:ss") : DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), HandleOpinion = order.ActualOpinion, IsPolice = "0", PoliceCode = string.Empty, HandleState = string.Empty }; var GDLZBLInfoObject = EncryptHandler.AES(flowedDto); GDLZBLInfo GDLZBLInfo = new GDLZBLInfo { GDLZBLInfoObject = GDLZBLInfoObject }; await InitSendData(order.Id, order.No, "0", LZ110Defaults.SendFlowed, JsonSerializer.Serialize(flowedDto, serializeOptions), JsonSerializer.Serialize(GDLZBLInfo, serializeOptions), cancellationToken); #endregion #region 接受数据汇聚 工单办理结果 LZ110HandResultDto handResultDto = new LZ110HandResultDto() { Code = order.No, HandleUserName = order.ActualHandlerName, HandleBMName = order.ActualHandleOrgName, HandleTime = order.FiledTime.HasValue == true ? order.FiledTime.Value.ToString("yyyy/MM/dd HH:mm:ss") : DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), HandleOpinion = order.FileOpinion, HandleState = "办理完成", PoliceCode = "", }; var GDBLJGInfoObject = EncryptHandler.AES(handResultDto); GDBLJGInfo GDBLJGInfo = new GDBLJGInfo { GDBLJGInfoObject = GDBLJGInfoObject }; await InitSendData(order.Id, order.No, "0", LZ110Defaults.SendHandResult, System.Text.Json.JsonSerializer.Serialize(handResultDto, serializeOptions), System.Text.Json.JsonSerializer.Serialize(GDBLJGInfo, serializeOptions), cancellationToken); #endregion #region 接受数据汇聚 工单办理状态 LZ110UpdateStatusDto updateStatusDto = new LZ110UpdateStatusDto() { Code = order.No, FlowID = order.Id, PoliceCode = "", HandleState = "已归档", }; var GDBLZTInfoObject = EncryptHandler.AES(updateStatusDto); GDBLZTInfo GDBLZTInfo = new GDBLZTInfo { GDBLZTInfoObject = GDBLZTInfoObject }; await InitSendData(order.Id, order.No, "0", LZ110Defaults.SendUpdateStatus, System.Text.Json.JsonSerializer.Serialize(updateStatusDto, serializeOptions), System.Text.Json.JsonSerializer.Serialize(GDBLZTInfo, serializeOptions), cancellationToken); #endregion #region 接受数据汇聚 工单延期申请 if (dto.OrderSearchDelay != null) { var orderSearchDelay = dto.OrderSearchDelay; LZ110ExtensionRequestDto extensionRequestDto = new LZ110ExtensionRequestDto() { FlowID = order.Id, Code = order.No, ApplyBMName = orderSearchDelay.ApplyOrgName, ApplyUserName = orderSearchDelay.EmployeeName, ApplyTime = orderSearchDelay.ApplyDelayTime.ToString("yyyy/MM/dd HH:mm:ss"), ApplyTimeLimit = orderSearchDelay.DelayNum.ToString(), ApplyContent = orderSearchDelay.DelayReason, FPID = orderSearchDelay.Id, RunID = orderSearchDelay.WorkflowId, }; var GDYQSQInfoObject = EncryptHandler.AES(extensionRequestDto); GDYQSQInfo GDYQSQInfo = new GDYQSQInfo { GDYQSQInfoObject = GDYQSQInfoObject }; await InitSendData(order.Id, order.No, "0", LZ110Defaults.SendExtensionRequest, System.Text.Json.JsonSerializer.Serialize(extensionRequestDto, serializeOptions), System.Text.Json.JsonSerializer.Serialize(GDYQSQInfo, serializeOptions), cancellationToken); } #endregion } } #endregion #region 接受数据汇聚 工单回访信息 /// /// 回访 /// /// /// /// public async Task InitVisitData(PublishVisitDto dto, CancellationToken cancellationToken) { var order = dto.Order; if (order != null && order.TransferPhone == "12345") { #region 接受数据汇聚 工单回访信息 var serializeOptions = new JsonSerializerOptions { PropertyNamingPolicy = new JsonPascalNamingPolicy(), }; var visitMethod = "3"; if (dto.VisitType == EVisitType.CallVisit) visitMethod = "1"; else if (dto.VisitType == EVisitType.SmsVisit) visitMethod = "2"; //坐席 var seatsContent = "满意"; var seatsResult = "2"; //部门 var bmContent = dto.VisitRemark; var bmResult = dto.SubjectResultSatifyCode switch { "5" => "1", "4" => "2", "3" => "3", "2" => "4", "1" => "5", _ => "2", }; LZ110CallBackDto callBackDto = new LZ110CallBackDto() { VisitTime = dto.VisitTime.Value.ToString("yyyy/MM/dd HH:mm:ss"), FlowID = order.Id, SeatsContent = seatsContent, SeatsResult = seatsResult, Code = order.No, UserName = string.IsNullOrEmpty(dto.VisitName) == true ? "系统管理员" : dto.VisitName, VisitID = dto.No, BMContent = bmContent, BMResult = bmResult, VisitMethod = visitMethod }; var GDHFXXInfoObject = EncryptHandler.AES(callBackDto); GDHFXXInfo GDHFXXInfo = new GDHFXXInfo { GDHFXXInfoObject = GDHFXXInfoObject }; await InitSendData(order.Id, order.No, "0", LZ110Defaults.SendCallBack, System.Text.Json.JsonSerializer.Serialize(callBackDto, serializeOptions), System.Text.Json.JsonSerializer.Serialize(GDHFXXInfo, serializeOptions), cancellationToken); #endregion } } #endregion #region 写入待推送 /// /// /// /// 工单Id /// 工单编号 /// 任务类型 0:12345工单推送(汇聚),1:110工单推送 /// 请求地址 /// 组装参数 /// 请求参数 /// /// public async Task InitSendData(string OrderId, string No, string TaskType, string Path, string RequestData, string Request, CancellationToken cancellationToken) { WaitSendTaskLuzhou110 waitTask = new WaitSendTaskLuzhou110() { OrderId = OrderId, No = No, SendTimes = 0, TaskType = TaskType, HttpMethod = "Post", Path = Path, RequestData = RequestData, Request = Request, }; waitTask.Id = await _waitSendTaskLuZhou110Repository.AddAsync(waitTask, cancellationToken); var sendTask = _mapper.Map(waitTask); sendTask.Id = waitTask.Id; //写入推送主表 return await _sendTaskLuZhou110Repository.AddAsync(sendTask, cancellationToken); } #endregion } }