瀏覽代碼

增加泸州110

tangjiang 3 月之前
父節點
當前提交
11fb9f8683

+ 47 - 13
src/DataSharing.Application/Receivers/ProvinceReceiver.cs

@@ -340,25 +340,51 @@ namespace DataSharing.Application.Receivers
             //热线工单流程开启 --服务工单受理
             await _provinceService.OrderFlowStartedAsync(pushdto, cancellationToken);
 
-            //自贡独有业务,符合要求的工单推送至智慧城市系统
-            if (_sharingConfigurationManager.IsCity(ConfigurationConsts.ZiGong))
+            #region 泸州110独有业务,如果是110派来的工单,流程开启后传签收状态
+            try
             {
-                //自贡110独有业务,如果是110派来的工单,流程开启后传签收状态
-                if (dto.Source == ESource.Police110)
+                if (_sharingConfigurationManager.IsCity(ConfigurationConsts.LuZhou))
                 {
-                    await _policeService.SingForPoliceAsync(dto, cancellationToken);
+                    //泸州110独有业务,如果是110派来的工单,流程开启后传签收状态
+                    if (dto.Source == ESource.Police110)
+                    {
+                        await _policeService.SingForPoliceAsync(dto, cancellationToken);
+                    }
                 }
+            }
+            catch (Exception)
+            {
+            }
+            #endregion
 
-                if (_sharingConfigurationManager.GetZiGongConfig().SmartCitySystem.IsSendPush == true)
+            //自贡独有业务,符合要求的工单推送至智慧城市系统
+            #region 自贡独有业务,符合要求的工单推送至智慧城市系统
+            try
+            {
+                if (_sharingConfigurationManager.IsCity(ConfigurationConsts.ZiGong))
                 {
-                    //自贡智慧城市系统
-                    if (!string.IsNullOrEmpty(dto.OrderTagCode) && dto.OrderTagCode.StartsWith("zgdh") == true)
+                    //自贡110独有业务,如果是110派来的工单,流程开启后传签收状态
+                    if (dto.Source == ESource.Police110)
+                    {
+                        await _policeService.SingForPoliceAsync(dto, cancellationToken);
+                    }
+
+                    if (_sharingConfigurationManager.GetZiGongConfig().SmartCitySystem.IsSendPush == true)
                     {
-                        //其他服务推送
-                        await _sendTaskDataService.OtherSendTask("zgdh", dto, cancellationToken);
+                        //自贡智慧城市系统
+                        if (!string.IsNullOrEmpty(dto.OrderTagCode) && dto.OrderTagCode.StartsWith("zgdh") == true)
+                        {
+                            //其他服务推送
+                            await _sendTaskDataService.OtherSendTask("zgdh", dto, cancellationToken);
+                        }
                     }
                 }
             }
+            catch (Exception)
+            {
+
+            }
+            #endregion
 
             //是否需要往第三方推送
             await OrderDispatchAsync(new OrderFlowDto { Order = pushdto.Order, WorkflowTrace = pushdto.WorkflowTrace, ExpiredTimeChanged = false }, cancellationToken);
@@ -439,16 +465,17 @@ namespace DataSharing.Application.Receivers
             await _provinceService.SubmitVisitInfoDataAsync(dto, cancellationToken);
 
             //组装处理110数据
-            if (_sharingConfigurationManager.IsCity(ConfigurationConsts.YiBin) && dto.Order.Source == ESource.Police110)
+            if (_sharingConfigurationManager.IsCity(ConfigurationConsts.ZiGong) == false && dto.Order.Source == ESource.Police110)
                 await _policeService.Visit(dto, cancellationToken);
 
-            //
+            //自贡110处理回访数据
             if (_sharingConfigurationManager.IsCity(ConfigurationConsts.ZiGong))
             {
                 if (dto.Order.ActualHandleOrgCode == _sharingConfigurationManager.GetPoliceOrgCode()
                     || dto.Order.OrgLevelOneCode == _sharingConfigurationManager.GetPoliceOrgCode() || dto.Order.Source == ESource.Police110)
                     await _policeService.Visit(dto, cancellationToken);
             }
+
         }
 
         /// <summary>
@@ -632,7 +659,7 @@ namespace DataSharing.Application.Receivers
             //推省上
             await _provinceService.OrderFiledAsync(dto, cancellationToken);
 
-            //如果是110来源工单,如果非警情退回未true,则退回100,否则就写入办理记录
+            //如果是110来源工单,如果非警情退回未true,则退回110,否则就写入办理记录
             if (dto.Order.Source == ESource.Police110)
             {
                 if (dto.IsNonPoliceReturn == true)
@@ -872,6 +899,13 @@ namespace DataSharing.Application.Receivers
                             await _luZhou110Service.InitVisitData(dto, cancellationToken);
                         }
                     }
+                    //泸州110工单回访
+                    if (dto.Order.Source == ESource.Police110 && !string.IsNullOrEmpty(dto.Order.ExternalId))
+                    {
+                        if (dto.VisitState == EVisitState.Visited)
+                            await _policeService.InitVisitData(dto, cancellationToken);
+
+                    }
                 }
             }
             catch (Exception)

+ 6 - 11
src/DataSharing.Host/Controllers/Police110/PoliceHNDController.cs

@@ -1,14 +1,10 @@
 using DataSharing.FwDataExchange;
 using DataSharing.Police110.DaoShu110;
-using DataSharing.Police110.DCJT110;
 using DataSharing.Police110.Encryption;
 using DataSharing.Police110.HaiNengDa110;
-using DataSharing.Province;
 using DataSharing.RawData;
 using DataSharing.Share.Dtos;
 using DataSharing.Share.Dtos.HotlineSetting;
-using DataSharing.Share.Dtos.Police110;
-using DataSharing.Share.Dtos.Police110.DaoShu110;
 using DataSharing.Share.Dtos.Police110.HaiNengDa110;
 using DataSharing.Share.Enums;
 using DotNetCore.CAP;
@@ -23,7 +19,6 @@ using Newtonsoft.Json.Converters;
 using System.Text;
 using XF.Domain.Filters;
 using XF.Domain.Repository;
-using static Lucene.Net.Util.Fst.Util;
 
 namespace DataSharing.Host.Controllers.Police110
 {
@@ -37,7 +32,6 @@ namespace DataSharing.Host.Controllers.Police110
         #region 注入
         private readonly IMapper _mapper;
         private readonly ICapPublisher _capPublisher;
-        private readonly IMediator _mediator;
         private readonly IRepository<DsReceivePoliceData> _dsReceivePoliceDataRepository;
         private readonly FwClient _fwClient;
         private readonly ISharingConfigurationManager _sharingConfigurationManager;
@@ -52,7 +46,6 @@ namespace DataSharing.Host.Controllers.Police110
         /// </summary>
         /// <param name="mapper"></param>
         /// <param name="capPublisher"></param>
-        /// <param name="mediator"></param>
         /// <param name="dsReceivePoliceDataRepository"></param>
         /// <param name="fwClient"></param>
         /// <param name="sharingConfigurationManager"></param>
@@ -63,7 +56,6 @@ namespace DataSharing.Host.Controllers.Police110
         /// <param name="dsPoliceSendChainDealHndRepository"></param>
         public PoliceHNDController(IMapper mapper,
             ICapPublisher capPublisher,
-            IMediator mediator,
             IRepository<DsReceivePoliceData> dsReceivePoliceDataRepository,
             FwClient fwClient,
             ISharingConfigurationManager sharingConfigurationManager,
@@ -75,7 +67,6 @@ namespace DataSharing.Host.Controllers.Police110
         {
             _mapper = mapper;
             _capPublisher = capPublisher;
-            _mediator = mediator;
             _dsReceivePoliceDataRepository = dsReceivePoliceDataRepository;
             _fwClient = fwClient;
             _sharingConfigurationManager = sharingConfigurationManager;
@@ -175,9 +166,13 @@ namespace DataSharing.Host.Controllers.Police110
                             AcceptType = "咨询",
                             AcceptTypeCode = "10",
                             IsSecret = chainAlarm.IsSecret == "1",
-                            FromGender = EGender.Male,
                         };
-
+                        orderDto.FromGender = chainAlarm.FromGender switch
+                        {
+                            "1" => EGender.Male,
+                            "2" => EGender.Female,
+                            _ => EGender.Unknown,
+                        };
                         bool isSuccess = true;
                         string error = "";
                         //调用工单创建接口

+ 11 - 0
src/DataSharing.Police110/DCJT110/DcjtService.cs

@@ -374,5 +374,16 @@ namespace DataSharing.Police110.DCJT110
             {
             }
         }
+
+        /// <summary>
+        /// 泸州110回访
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task InitVisitData(PublishVisitAllDto dto, CancellationToken cancellationToken)
+        {
+
+        }
     }
 }

+ 11 - 0
src/DataSharing.Police110/DaoShu110/DaoShuService.cs

@@ -266,5 +266,16 @@ namespace DataSharing.Police110.DaoShu110
         {
 
         }
+
+        /// <summary>
+        /// 泸州110回访
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task InitVisitData(PublishVisitAllDto dto, CancellationToken cancellationToken)
+        {
+
+        }
     }
 }

+ 1 - 0
src/DataSharing.Police110/DataSharing.Police110.csproj

@@ -7,6 +7,7 @@
   </PropertyGroup>
 
   <ItemGroup>
+    <ProjectReference Include="..\DataSharing.LuZhou\DataSharing.LuZhou.csproj" />
     <ProjectReference Include="..\DataSharing\DataSharing.csproj" />
   </ItemGroup>
 

+ 590 - 0
src/DataSharing.Police110/HaiNengDa110/HndService.cs

@@ -0,0 +1,590 @@
+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 Newtonsoft.Json;
+using StackExchange.Redis;
+using XF.Domain.Repository;
+using static System.Runtime.CompilerServices.RuntimeHelpers;
+
+namespace DataSharing.Police110.HaiNengDa110
+{
+    public class HndService : IPoliceService
+    {
+        private readonly IMapper _mapper;
+        private readonly ILogger<HndService> _logger;
+        private readonly IRepository<DsPoliceSendChainAlarmHnd> _policeSendChainAlarmHndRepository;
+        private readonly IRepository<DsPoliceSendChainDealHnd> _policeSendChainDealHndRepository;
+        private readonly ISharingConfigurationManager _sharingConfigurationManager;
+        private readonly IRepository<WaitSendTaskLuZhou110> _waitSendTaskLuZhou110Repository;
+        private readonly IRepository<SendTaskLuZhou110> _sendTaskLuZhou110Repository;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="mapper"></param>
+        /// <param name="logger"></param>
+        /// <param name="policeSendChainAlarmHndRepository"></param>
+        /// <param name="policeSendChainDealHndRepository"></param>
+        /// <param name="sharingConfigurationManager"></param>
+        /// <param name="waitSendTaskLuZhou110Repository"></param>
+        /// <param name="sendTaskLuZhou110Repository"></param>
+        public HndService(IMapper mapper, ILogger<HndService> logger,
+            IRepository<DsPoliceSendChainAlarmHnd> policeSendChainAlarmHndRepository,
+            IRepository<DsPoliceSendChainDealHnd> policeSendChainDealHndRepository,
+            ISharingConfigurationManager sharingConfigurationManager,
+            IRepository<WaitSendTaskLuZhou110> waitSendTaskLuZhou110Repository,
+            IRepository<SendTaskLuZhou110> sendTaskLuZhou110Repository)
+        {
+            _mapper = mapper;
+            _logger = logger;
+            _policeSendChainAlarmHndRepository = policeSendChainAlarmHndRepository;
+            _policeSendChainDealHndRepository = policeSendChainDealHndRepository;
+            _sharingConfigurationManager = sharingConfigurationManager;
+            _waitSendTaskLuZhou110Repository = waitSendTaskLuZhou110Repository;
+            _sendTaskLuZhou110Repository = sendTaskLuZhou110Repository;
+        }
+
+        /// <summary>
+        /// 组装110数据,12345警情工单推送到110
+        /// </summary>
+        /// <param name="orderDto"></param>
+        /// <returns></returns>
+        public async Task InitPoliceSendChainAlarmAsync(Hotline.Share.Dtos.Order.OrderDto orderDto, CancellationToken cancellationToken)
+        {
+            var areaCodeDefu = _sharingConfigurationManager.GetCityCode();
+            var config = _sharingConfigurationManager.GetLuZhouConfig().PoliceHND;
+            var registerNo = "10001";
+            if (!string.IsNullOrEmpty(orderDto.AcceptorStaffNo))
+                registerNo = orderDto.AcceptorStaffNo;
+            else
+            {
+                if (!string.IsNullOrEmpty(orderDto.AcceptorId))
+                    registerNo = orderDto.AcceptorId.Substring(orderDto.AcceptorId.Length - 6);
+            }
+            var Content = orderDto.Content.Length > 1900 ? orderDto.Content.Substring(0, 300) : orderDto.Content;
+            var policeTypeCode = "01";
+            if (!string.IsNullOrEmpty(orderDto.HotspotId))
+                policeTypeCode = orderDto.HotspotId.Length > 8 ? orderDto.HotspotId.Substring(0, 7) : orderDto.HotspotId;
+
+            DsPoliceSendChainAlarmHnd policeSend = new()
+            {
+                SerialNumber = orderDto.ExternalId,
+                AlarmReceiptNumber = orderDto.ExternalId,
+                RegisterNo = registerNo,
+                RegisterName = orderDto.AcceptorName,
+                CallPoliceNumber = string.IsNullOrEmpty(orderDto.FromPhone) == true ? orderDto.Contact : orderDto.FromPhone,
+                CallPoliceName = orderDto.FromName,
+                PhoneNumber = orderDto.Contact,
+                CallPoliceContent = Content,
+                PoliceTypeCode = policeTypeCode,
+                PoliceTypeName = orderDto.HotspotSpliceName,
+                JurisdictionalUnitCode = config.GXDWDM,
+                JurisdictionalUnitName = config.GXDWMC,
+                JurisdictionalUnitNumber = config.GXDWDH,
+                AlarmReceivingUnitCode = "510300010000",
+                AlarmReceivingUnitName = "四川省自贡市公安局指挥中心",
+                CallPoliceTime = Convert.ToDateTime(orderDto.CreationTime),
+                PushTime = DateTime.Now,
+                AlarmReceptionType = "0",
+                AreaCode = orderDto.AreaCode.Substring(0, 6),
+                CallPoliceAddress = orderDto.FullAddress,
+                OrderId = orderDto.Id
+            };
+
+            policeSend.FromGender = orderDto.FromGender switch
+            {
+                Hotline.Share.Enums.Order.EGender.Female => "0",
+                Hotline.Share.Enums.Order.EGender.Male => "1",
+                Hotline.Share.Enums.Order.EGender.Unknown => "2",
+                _ => "2",
+            };
+
+            if (string.IsNullOrEmpty(policeSend.AlarmReceiptNumber))
+            {
+                policeSend.AlarmReceiptNumber = areaCodeDefu + "1234512345" + orderDto.No;
+                policeSend.SerialNumber = areaCodeDefu + "1234512345" + orderDto.No;
+            }
+
+            //这里网泸州110待推送表写入数据
+            #region 接受数据汇聚 工单基础信息
+            var order = orderDto;
+            var gender = "";
+            if (order.FromGender == EGender.Female)
+                gender = "女";
+            if (order.FromGender == EGender.Male)
+                gender = "男";
+            LZ110ZBasicInfoDto basicInfoDto = new LZ110ZBasicInfoDto()
+            {
+                FlowID = order.Id,
+                Code = order.No,
+                PoliceCode = order.ExternalId,
+                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);
+
+            await InitSendData(order.Id, order.No, "1", LZ110Defaults.InteractiveBasicInfo, JsonConvert.SerializeObject(basicInfoDto), JsonConvert.SerializeObject(GDJCXXInfoObject), cancellationToken);
+            #endregion
+
+            //查询是否有此工单,如果没有新增此工单
+            var data = await _policeSendChainAlarmHndRepository.GetAsync(p => p.OrderId == orderDto.Id && p.AlarmReceptionType == "1", cancellationToken);
+            if (data == null)
+                await _policeSendChainAlarmHndRepository.AddAsync(policeSend, cancellationToken);
+        }
+
+        /// <summary>
+        /// 110的非警情工单获取办理信息
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task InitPoliceSendChainDealAsync(OrderFlowDto dto, CancellationToken cancellationToken)
+        {
+            var order = dto.Order;
+            //工单流转办理
+            //工单延期申请
+            //工单办理结果
+            //工单办理状态
+            #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";
+                }
+            }
+
+            LZ110ZFlowedDto flowedDto = new LZ110ZFlowedDto()
+            {
+                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 = order.ExternalId,
+                HandleState = string.Empty
+            };
+
+            var GdblztInfoObject = EncryptHandler.AES(flowedDto);
+            await InitSendData(order.Id, order.No, "1", LZ110Defaults.InteractiveFlowed, JsonConvert.SerializeObject(flowedDto), JsonConvert.SerializeObject(GdblztInfoObject), cancellationToken);
+            #endregion
+
+            #region 接受数据 工单办理结果
+
+            LZ110ZHandResultDto handResultDto = new LZ110ZHandResultDto()
+            {
+                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 = order.ExternalId,
+            };
+            var GDBLJGInfoObject = EncryptHandler.AES(handResultDto);
+            await InitSendData(order.Id, order.No, "1", LZ110Defaults.InteractiveHandResult, JsonConvert.SerializeObject(handResultDto), JsonConvert.SerializeObject(GDBLJGInfoObject), cancellationToken);
+
+            #endregion
+
+            #region 接受数据 工单办理状态
+            LZ110ZUpdateStatusDto updateStatusDto = new LZ110ZUpdateStatusDto()
+            {
+                Code = order.No,
+                FlowID = order.Id,
+                PoliceCode = order.ExternalId,
+                HandleState = "1",
+            };
+            var GDBLZTInfoObject = EncryptHandler.AES(updateStatusDto);
+            await InitSendData(order.Id, order.No, "1", LZ110Defaults.InteractiveUpdateStatus, JsonConvert.SerializeObject(updateStatusDto), JsonConvert.SerializeObject(GDBLZTInfoObject), cancellationToken);
+
+            #endregion
+
+            #region 接受数据 工单延期申请
+            if (dto.OrderSearchDelay != null)
+            {
+                var orderSearchDelay = dto.OrderSearchDelay;
+                LZ110ZExtensionRequestDto extensionRequestDto = new LZ110ZExtensionRequestDto()
+                {
+                    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,
+                    PoliceCode = order.ExternalId
+                };
+                var GDYQSQInfoObject = EncryptHandler.AES(extensionRequestDto);
+                await InitSendData(order.Id, order.No, "1", LZ110Defaults.InteractiveExtensionRequest, JsonConvert.SerializeObject(extensionRequestDto), JsonConvert.SerializeObject(GDYQSQInfoObject), cancellationToken);
+
+            }
+
+            #endregion
+
+            var data = await _policeSendChainDealHndRepository.GetAsync(p => p.OrderId == dto.Order.Id && p.DisposalType == "1", cancellationToken);
+            var actualOpinion = dto.Order.ActualOpinion.Length > 1500 ? dto.Order.ActualOpinion.Substring(0, 1500) : dto.Order.ActualOpinion;
+            var feedbackPersonNumber = "10001";
+            if (!string.IsNullOrEmpty(dto.Order.AcceptorStaffNo))
+                feedbackPersonNumber = dto.Order.AcceptorStaffNo;
+            else
+            {
+                if (!string.IsNullOrEmpty(dto.Order.AcceptorId))
+                    feedbackPersonNumber = dto.Order.AcceptorId.Substring(dto.Order.AcceptorId.Length - 6);
+            }
+            //var feedbackPersonNumber = string.IsNullOrEmpty(dto.Order.AcceptorId) == true ? "1001" : dto.Order.AcceptorId.Substring(dto.Order.AcceptorId.Length - 12);
+            var actualHandleOrgCode = "001";
+            if (!string.IsNullOrEmpty(dto.Order.ActualHandleOrgCode))
+                actualHandleOrgCode = dto.Order.ActualHandleOrgCode.Length > 12 ? dto.Order.ActualHandleOrgCode.Substring(0, 12) : dto.Order.ActualHandleOrgCode;
+
+            if (data == null)
+            {
+                data = new()
+                {
+                    AlarmReceiptNumber = dto.Order.ExternalId,
+                    FeedbackTime = dto.Order.ActualHandleTime,
+                    DisposalSituation = actualOpinion,
+                    ResultDescription = actualOpinion,
+                    FeedbackPersonNumber = feedbackPersonNumber,
+                    FeedbackPersonName = dto.Order.ActualHandlerName,
+                    FeedbackUnitCode = actualHandleOrgCode,
+                    FeedbackUnitName = dto.Order.ActualHandleOrgName,
+                    WarehousingTime = DateTime.Now,
+                    DisposalType = "1",
+                    OrderId = dto.Order.Id
+                };
+                await _policeSendChainDealHndRepository.AddAsync(data, cancellationToken);
+            }
+            else
+            {
+                data.AlarmReceiptNumber = dto.Order.ExternalId;
+                data.FeedbackTime = dto.Order.ActualHandleTime;
+                data.DisposalSituation = actualOpinion;
+                data.ResultDescription = actualOpinion;
+                data.FeedbackPersonNumber = feedbackPersonNumber;
+                data.FeedbackPersonName = dto.Order.ActualHandlerName;
+                data.FeedbackUnitCode = actualHandleOrgCode;
+                data.FeedbackUnitName = dto.Order.ActualHandleOrgName;
+                data.WarehousingTime = DateTime.Now;
+                await _policeSendChainDealHndRepository.UpdateAsync(data, cancellationToken);
+            }
+        }
+
+        /// <summary>
+        /// 110警情工单退回
+        /// </summary>
+        /// <param name="orderDto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task ReturnPoliceAsync(Hotline.Share.Dtos.Order.OrderDto orderDto, CancellationToken cancellationToken)
+        {
+            var checkData = await _policeSendChainDealHndRepository.AnyAsync(p => p.AlarmReceiptNumber == orderDto.ExternalId && p.DisposalType == "2", cancellationToken);
+            if (!checkData)
+            {
+                var actualOpinion = orderDto.ActualOpinion.Length > 100 ? orderDto.ActualOpinion.Substring(0, 80) : orderDto.ActualOpinion;
+                #region 接受数据 工单办理结果
+
+                LZ110ZHandResultDto handResultDto = new LZ110ZHandResultDto()
+                {
+                    Code = orderDto.No,
+                    HandleUserName = orderDto.ActualHandlerName,
+                    HandleBMName = orderDto.ActualHandleOrgName,
+                    HandleTime = orderDto.ActualHandleTime.HasValue == true ? orderDto.ActualHandleTime.Value.ToString("yyyy/MM/dd HH:mm:ss") : DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"),
+                    HandleOpinion = actualOpinion,
+                    HandleState = "2",
+                    PoliceCode = orderDto.ExternalId,
+                };
+                var GDBLJGInfoObject = EncryptHandler.AES(handResultDto);
+                await InitSendData(orderDto.Id, orderDto.No, "1", LZ110Defaults.InteractiveHandResult, JsonConvert.SerializeObject(handResultDto), JsonConvert.SerializeObject(GDBLJGInfoObject), cancellationToken);
+
+                #endregion
+
+                var dataPolice = new DsPoliceSendChainDealHnd()
+                {
+                    OrderId = orderDto.Id,
+                    AlarmReceiptNumber = orderDto.ExternalId,
+                    ReturnName = orderDto.ActualHandlerName,
+                    ReturnUnit = orderDto.ActualHandleOrgName,
+                    ReturnOpinion = actualOpinion,
+                    ReturnTime = orderDto.ActualHandleTime,
+                    WarehousingTime = DateTime.Now,
+                    DisposalType = "2"
+                };
+                await _policeSendChainDealHndRepository.AddAsync(dataPolice, cancellationToken);
+            }
+        }
+
+        /// <summary>
+        /// 110回访数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task Visit(PublishVisitDto dto, CancellationToken cancellationToken)
+        {
+
+            var VisitResult = dto.SubjectResultSatifyCode switch
+            {
+                "2" => "3",
+                "4" or "5" => "1",
+                _ => "2",
+            };
+            //如果来源是110,直接取工单里面的编号
+            var alarmReceiptNumber = dto.Order.ExternalId;
+            if (string.IsNullOrEmpty(alarmReceiptNumber))
+            {
+                var checkDataAlarm = await _policeSendChainAlarmHndRepository.GetAsync(p => p.OrderId == dto.Order.Id && p.AlarmReceptionType == "0", cancellationToken);
+                if (checkDataAlarm != null)
+                {
+                    alarmReceiptNumber = checkDataAlarm.AlarmReceiptNumber;
+                }
+            }
+
+            var checkData = await _policeSendChainDealHndRepository.GetAsync(p => p.AlarmReceiptNumber == alarmReceiptNumber && p.DisposalType == "3", cancellationToken);
+            string visitRemark = "默认评价";
+            if (!string.IsNullOrEmpty(dto.VisitRemark))
+            {
+                visitRemark = visitRemark.Length > 140 ? dto.VisitRemark.Substring(0, 140) : dto.VisitRemark;
+            }
+
+            if (checkData == null)
+            {
+                checkData = new()
+                {
+                    OrderId = dto.Order.Id,
+                    AlarmReceiptNumber = alarmReceiptNumber,
+                    RevisitTime = dto.VisitTime,
+                    CheckingContent = visitRemark,
+                    VisitContent = visitRemark,
+                    VisitResult = VisitResult,
+                    DisposalType = "3",
+                    CreatorName = dto.VisitName,
+                    WarehousingTime = DateTime.Now,
+                };
+                await _policeSendChainDealHndRepository.AddAsync(checkData, cancellationToken);
+            }
+            else
+            {
+                checkData.AlarmReceiptNumber = alarmReceiptNumber;
+                checkData.RevisitTime = dto.VisitTime;
+                checkData.CheckingContent = visitRemark;
+                checkData.VisitContent = visitRemark;
+                checkData.VisitResult = VisitResult;
+                checkData.CreatorName = dto.VisitName;
+                checkData.WarehousingTime = DateTime.Now;
+                await _policeSendChainDealHndRepository.UpdateAsync(checkData, cancellationToken);
+            }
+        }
+
+        /// <summary>
+        /// 泸州110回访
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task InitVisitData(PublishVisitAllDto dto, CancellationToken cancellationToken)
+        {
+            var order = dto.Order;
+            if (order != null && order.Source == ESource.Police110 && !string.IsNullOrEmpty(order.ExternalId))
+            {
+                #region 接受数据汇聚 工单回访信息
+                if (dto.VisitState == EVisitState.Visited)
+                {
+                    if (dto.OrderVisitDetails != null && dto.OrderVisitDetails.Count > 0)
+                    {
+                        var visitMethod = "3";
+                        if (dto.VisitType == EVisitType.CallVisit)
+                            visitMethod = "1";
+                        else if (dto.VisitType == EVisitType.SmsVisit)
+                            visitMethod = "2";
+
+                        #region 坐席
+                        //坐席
+                        var seat = dto.OrderVisitDetails.Where(p => p.VisitTarget == EVisitTarget.Seat).FirstOrDefault();
+                        var seatsContent = "";
+                        var seatsResult = "";
+                        if (seat != null)
+                        {
+                            seatsContent = seat.VisitContent;
+                            seatsResult = seat.SeatEvaluate switch
+                            {
+                                ESeatEvaluate.VerySatisfied => "1",
+                                ESeatEvaluate.Satisfied => "2",
+                                ESeatEvaluate.Normal => "3",
+                                ESeatEvaluate.NoSatisfied => "4",
+                                ESeatEvaluate.VeryNoSatisfied => "5",
+                                _ => "2",
+                            };
+                        }
+                        #endregion
+
+                        #region 部门
+                        //部门
+                        var bm = dto.OrderVisitDetails.Where(p => p.VisitTarget == EVisitTarget.Org).FirstOrDefault();
+                        var bmContent = "";
+                        var bmResult = "";
+                        if (bm != null)
+                        {
+                            bmContent = bm.VisitContent;
+                            bmResult = bm.OrgProcessingResults.Key switch
+                            {
+                                "5" => "1",
+                                "4" => "2",
+                                "3" => "3",
+                                "2" => "4",
+                                "1" => "5",
+                                _ => "2",
+                            };
+                        }
+                        #endregion
+
+                        LZ110ZCallBackDto callBackDto = new LZ110ZCallBackDto()
+                        {
+                            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.Id,
+                            BMContent = bmContent,
+                            BMResult = bmResult,
+                            VisitMethod = visitMethod,
+                            PoliceCode = order.ExternalId
+                        };
+                        var GDYQSQInfoObject = EncryptHandler.AES(callBackDto);
+                        await InitSendData(order.Id, order.No, "1", LZ110Defaults.InteractiveCallBack, JsonConvert.SerializeObject(callBackDto), JsonConvert.SerializeObject(GDYQSQInfoObject), cancellationToken);
+                    }
+                }
+
+                #endregion
+            }
+        }
+
+        /// <summary>
+        /// 签收状态
+        /// </summary>
+        /// <param name="orderDto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task SingForPoliceAsync(Hotline.Share.Dtos.Order.OrderDto orderDto, CancellationToken cancellationToken)
+        {
+            var checkData = await _policeSendChainDealHndRepository.AnyAsync(p => p.AlarmReceiptNumber == orderDto.ExternalId && p.DisposalType == "4", cancellationToken);
+            if (!checkData)
+            {
+                //泸州110签收
+                LZ110ZUpdateStatusDto lusm = new LZ110ZUpdateStatusDto()
+                {
+                    Code = orderDto.No,
+                    FlowID = orderDto.Id,
+                    PoliceCode = orderDto.ExternalId,
+                    HandleState = "1",
+                };
+                var GDYQSQInfoObject = EncryptHandler.AES(lusm);
+                await InitSendData(orderDto.Id, orderDto.No, "1", LZ110Defaults.InteractiveUpdateStatus, JsonConvert.SerializeObject(lusm), JsonConvert.SerializeObject(GDYQSQInfoObject), cancellationToken);
+
+
+                var dataPolice = new DsPoliceSendChainDealHnd()
+                {
+                    OrderId = orderDto.Id,
+                    AlarmReceiptNumber = orderDto.ExternalId,
+                    DisposalType = "4",
+                    WarehousingTime = DateTime.Now,
+                };
+                await _policeSendChainDealHndRepository.AddAsync(dataPolice, cancellationToken);
+            }
+        }
+
+        /// <summary>
+        /// 结果签收
+        /// </summary>
+        /// <param name="orderDto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public Task FileEndPoliceAsync(Hotline.Share.Dtos.Order.OrderDto orderDto, CancellationToken cancellationToken)
+        {
+            return Task.CompletedTask;
+        }
+
+        /// <summary>
+        /// 给110推送行政审批工单(自贡独有)
+        /// </summary>
+        /// <param name="orderDto"></param>
+        /// <returns></returns>
+        public Task InitPoliceAdministrativeApproval(Hotline.Share.Dtos.Order.OrderDto orderDto, CancellationToken cancellationToken)
+        {
+            return Task.CompletedTask;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="OrderId">工单Id</param>
+        /// <param name="No">工单编号</param>
+        /// <param name="TaskType">任务类型  0:12345工单推送(汇聚),1:110工单推送</param>
+        /// <param name="Path">请求地址</param>
+        /// <param name="RequestData">组装参数</param>
+        /// <param name="Request">请求参数</param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        private async Task<string> 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<SendTaskLuZhou110>(waitTask);
+            sendTask.Id = waitTask.Id;
+            //写入推送主表
+            return await _sendTaskLuZhou110Repository.AddAsync(sendTask, cancellationToken);
+
+        }
+
+    }
+}

+ 8 - 0
src/DataSharing.Police110/IPoliceService.cs

@@ -56,5 +56,13 @@ namespace DataSharing.Police110
         /// <param name="orderDto"></param>
         /// <returns></returns>
         Task InitPoliceAdministrativeApproval(Hotline.Share.Dtos.Order.OrderDto orderDto, CancellationToken cancellationToken);
+
+        /// <summary>
+        /// 泸州110回访
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        Task InitVisitData(PublishVisitAllDto dto, CancellationToken cancellationToken);
     }
 }