tangjiang 10 місяців тому
батько
коміт
75b621caef

+ 5 - 4
src/DataSharing.Application/Receivers/ProvinceReceiver.cs

@@ -21,6 +21,7 @@ using Hotline.Share.Dtos.Knowledge;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Dtos.TrCallCenter;
 using Hotline.Share.Enums.CallCenter;
+using Hotline.Share.Enums.DataSharing;
 using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.Order;
 using MapsterMapper;
@@ -1056,7 +1057,7 @@ namespace DataSharing.Application.Receivers
             var dataOrder = await _dsOrderRepository.GetAsync(p => p.OrderId == dto.Order.Id, cancellationToken);
             if (dataOrder != null)
             {
-                dataOrder.IsPublish = dto.PublishState == true ? EDsPublishState.Open : EDsPublishState.NotPublic;
+                dataOrder.IsPublish = dto.PublishState == true ? DataSharing.Share.Enums.EDsPublishState.Open : DataSharing.Share.Enums.EDsPublishState.NotPublic;
                 dataOrder.PublishDate = dto.CreationTime;
                 dataOrder.ArrangeTitle = dto.ArrangeTitle;
                 dataOrder.ArrangeContent = dto.ArrangeContent;
@@ -1224,15 +1225,15 @@ namespace DataSharing.Application.Receivers
                     switch (dto.VisitState)
                     {
                         case EVisitState.WaitForVisit:
-                            orderData.VisitTypeState = EVisitTypeState.Visit;
+                            orderData.VisitTypeState = DataSharing.Share.Enums.EVisitTypeState.Visit;
                             break;
                         case EVisitState.Visited:
-                            orderData.VisitTypeState = EVisitTypeState.Reviewed;
+                            orderData.VisitTypeState = DataSharing.Share.Enums.EVisitTypeState.Reviewed;
                             break;
                         case EVisitState.Visiting:
                         case EVisitState.NoSatisfiedWaitForVisit:
                         case EVisitState.None:
-                            orderData.VisitTypeState = EVisitTypeState.UnVisit;
+                            orderData.VisitTypeState = DataSharing.Share.Enums.EVisitTypeState.UnVisit;
                             break;
                         default:
                             break;

+ 6 - 0
src/DataSharing.Host/config/appsettings.Development.json

@@ -127,6 +127,9 @@
 
       //110对接
       "PoliceDS": {
+        "GXDWDM": "511500000000",
+        "GXDWMC": "宜宾市公安局",
+        "GXDWDH": "0831110",
         //1、非警情分流推送服务_宜宾市
         //   receive-工单受理
         //   http://10.12.185.168:8001/service/api/ds/110To12345/chainAlarm
@@ -193,6 +196,9 @@
     "CityZiGong": {
       //110对接--大成均图
       "PoliceDCJT": {
+        "GXDWDM": "510300000000",
+        "GXDWMC": "自贡市公安局",
+        "GXDWDH": "0813110",
         //1、非警情分流推送服务_自贡
         //   receive-工单受理
         "token1_token": "b8aae0a998f5b79c9a35aecb888e1a58",

+ 66 - 3
src/DataSharing.Host/config/appsettings.json

@@ -44,7 +44,7 @@
     }
   },
   "DatabaseConfiguration": {
-    "ApplyDbMigrations": false,
+    "ApplyDbMigrations": true,
     "ApplySeed": false
   },
   "MqConfiguration": {
@@ -106,7 +106,8 @@
     "CityCode": "511500",
     "CityName": "宜宾市",
 
-    "YiBin": {
+    //宜宾
+    "CityYiBin": {
       //企业服务
       "Enterprise": {
         "AddressUrl": "http://10.12.185.227:8834/",
@@ -133,6 +134,9 @@
 
       //110对接
       "PoliceDS": {
+        "GXDWDM": "511500000000",
+        "GXDWMC": "宜宾市公安局",
+        "GXDWDH": "0831110",
         //1、非警情分流推送服务_宜宾市
         //   receive-工单受理
         //   http://10.12.185.168:8001/service/api/ds/110To12345/chainAlarm
@@ -195,8 +199,67 @@
       }
     },
 
-    "ZiGong": {
+    //自贡
+    "CityZiGong": {
+      //110对接--大成均图
+      "PoliceDCJT": {
+        "GXDWDM": "510300000000",
+        "GXDWMC": "自贡市公安局",
+        "GXDWDH": "0813110",
+        //1、非警情分流推送服务_自贡
+        //   receive-工单受理
+        "token1_token": "b8aae0a998f5b79c9a35aecb888e1a58",
+        "token1_dcsm": "c9bc4e718d1917a9a68add90fecbe5bb60920e5ab85d9ecb6a6167db4352f42b8ae21ac67a6e2aab48b4c99cd9f93ec5fb017e202df969a91f74456c14e8770a",
+        "token1_sm2_public": "BS/H9JVlRdo8vbsZYQLTkeGGZBVjdkX+VJ82CX7n6i4NubmynRIaxvzoSsEAhbbvTDGm2DS96l95nK6Dkd0UZg==",
+        "token1_sm2_private": "GbjU4GFk0yaa/wTdzxeh5BOh8VNlqvnTcb7EUtDVvOY=",
+        "token1_sm4": "BKrW/v4jeRgsFg3HSbxEKnDi6rPceW0AdRiaa1rhEwAnraf8MnHdXzUQoQ7+zyjfghaK5G+zDz+wW+Ob27Jgxt91HkVmyL6+SjqV9ZnqNeGFgTBkQrHDySGz6jHKa12Sv7PZs8pjc716he3NNHZAkCI=",
+        "token1_sm4_mw": "4034d80c19bbd01d",
 
+        //4、警务警情分流推送服务_自贡
+        //   receive-工单办结
+        "token4_token": "8806bfba29b997853bdb059a9ba9a3ae",
+        "token4_dcsm": "f5dce079e0f4acd6b6627b89fb5e72af5fa5775d3ee3b8c7876f546c5ebe723888df4a70c09f9aa5e096bb342d73e0c4793c851a7a8035e8683b07430f132bd3",
+        "token4_sm2_public": "P2IVWpFx38GQTDV3hgrxjlOdfPhLQNW2LyvAKmYqMz9UYHCtm/l3K73UIouMXs4jcmZjXyItepvKFv44g3YnXA==",
+        "token4_sm2_private": "yxIkRALHoOTxpiZ/jrvCDQatcR7k11Xhps7c92peU9w=",
+        "token4_sm4": "BCD88AXnIfMxe8PrUcubSbFRr07cOuDDEPzy754W3CzhOqjcpAcu1B9B6U46jyM4hEFPqkx+SS1PUAfRlG5tzYD1Z8SKsJTBUDGR6bTMRvCc+C/aps+IcRBfzjjRchtT1c5iok4CfiT4LoK5cmOHKKU=",
+        "token4_sm4_mw": "d731ff1282dda792",
+
+        //3、警务警情分流查询服务_自贡
+        //   send-工单受理
+        "token3_token": "b76ba1896c4880998a86b829cf79888a",
+        "token3_dcsm": "3cccc86e021c0ff7827537053ec1b6e4a57cbb49b77c9492257123703c5a6b711000f0842c035fe6d33eb2a947915af53a1ef501916ec7128bff9514d6184e2c",
+        "token3_sm2_public": "qaao4Xh8/eyYGeVOj1K8D7p3+OriP55azWDAbYVoZelMdluNrJuQWM2qPn+hjTHTBnIMAVK2HlHBx4oGfCxGdA==",
+        "token3_sm2_private": "8bSYM8P3b4I94qGt3XVx3bQddNCy/xVKo7o1b5LI4/M=",
+        "token3_sm4": "BIDhFaEu5NILR7byg/JfaPlJEm4dYWC+u9J1IqhtYeYY1AktOxp7cZWqfk/mWjw72pYGT7YRENCULbjZ2bxVG6UUv2pYukZWtYog34Vicu5IgC8ti4VpED9eGzGgtKJ/CT0KtAnjQPQL0PsVbCjTY5M=",
+        "token3_sm4_mw": "bbeb56d247354360",
+
+        //2、非警情分流查询服务_自贡
+        //   send-工单办结
+        "token2_token": "1fbbac1b09b89d11bc569168aabb3c8b",
+        "token2_dcsm": "3873c1b1ff0ce3b8120d63509d3b85169cda4856b0a0d89625a4744641a343951d8ced868bd5c7fc60826403bd6314a02e5a26ba8808dae5a9d9f851555338d0",
+        "token2_sm2_public": "VgjJ7FfA23vY3Hr1pVrdbi3MZt7X0k/nMf9kwEyyC32CXgT2ccWBlxf3kGPXLO56HSBoo9IA7sSEG3eJYVQmLw==",
+        "token2_sm2_private": "QNTPy2nPBe2JY308G0LHO4r42iomDWcdedf81FapkWA=",
+        "token2_sm4": "BKNpLwBCT2MvXwhLRcZ6FoMm4GaXs6LXqVmEa5hMJ3d9G+vC/5j7xtQh9HRKIfSfXkDQI0EQS7UR4inEXks/AnKsLYGhmhRjyzM7AGpEsujr2vJTwcwIWpBmpuc7k0uBQ34bN+kopafIo5UVyk7rIek=",
+        "token2_sm4_mw": "2938d7acb2754a09",
+
+        //5、从公安网侧获取12345政务服务热线平台知识库列表
+        //   send-知识库列表
+        "token5_token": "1fbbac1b09b89d11bc569168aabb3c8b",
+        "token5_dcsm": "3873c1b1ff0ce3b8120d63509d3b85169cda4856b0a0d89625a4744641a343951d8ced868bd5c7fc60826403bd6314a02e5a26ba8808dae5a9d9f851555338d0",
+        "token5_sm2_public": "VgjJ7FfA23vY3Hr1pVrdbi3MZt7X0k/nMf9kwEyyC32CXgT2ccWBlxf3kGPXLO56HSBoo9IA7sSEG3eJYVQmLw==",
+        "token5_sm2_private": "QNTPy2nPBe2JY308G0LHO4r42iomDWcdedf81FapkWA=",
+        "token5_sm4": "BKNpLwBCT2MvXwhLRcZ6FoMm4GaXs6LXqVmEa5hMJ3d9G+vC/5j7xtQh9HRKIfSfXkDQI0EQS7UR4inEXks/AnKsLYGhmhRjyzM7AGpEsujr2vJTwcwIWpBmpuc7k0uBQ34bN+kopafIo5UVyk7rIek=",
+        "token5_sm4_mw": "2938d7acb2754a09",
+
+        //6、从公安网侧获取12345政务服务热线平台知识内容
+        //   send-知识库内容
+        "token6_token": "1fbbac1b09b89d11bc569168aabb3c8b",
+        "token6_dcsm": "3873c1b1ff0ce3b8120d63509d3b85169cda4856b0a0d89625a4744641a343951d8ced868bd5c7fc60826403bd6314a02e5a26ba8808dae5a9d9f851555338d0",
+        "token6_sm2_public": "VgjJ7FfA23vY3Hr1pVrdbi3MZt7X0k/nMf9kwEyyC32CXgT2ccWBlxf3kGPXLO56HSBoo9IA7sSEG3eJYVQmLw==",
+        "token6_sm2_private": "QNTPy2nPBe2JY308G0LHO4r42iomDWcdedf81FapkWA=",
+        "token6_sm4": "BKNpLwBCT2MvXwhLRcZ6FoMm4GaXs6LXqVmEa5hMJ3d9G+vC/5j7xtQh9HRKIfSfXkDQI0EQS7UR4inEXks/AnKsLYGhmhRjyzM7AGpEsujr2vJTwcwIWpBmpuc7k0uBQ34bN+kopafIo5UVyk7rIek=",
+        "token6_sm4_mw": "2938d7acb2754a09"
+      }
     }
   }
 

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

@@ -0,0 +1,212 @@
+using DataSharing.RawData;
+using Hotline.Share.Dtos.Order;
+using Hotline.Share.Enums.DataSharing;
+using MapsterMapper;
+using Microsoft.Extensions.Logging;
+using XF.Domain.Dependency;
+using XF.Domain.Repository;
+
+namespace DataSharing.Police110.DCJT110
+{
+    public class DcjtService : IDcjtService, IScopeDependency
+    {
+        private readonly IMapper _mapper;
+        private readonly ILogger<DcjtService> _logger;
+        private readonly IRepository<DsPoliceSendChainAlarmDcjt> _policeSendChainAlarmDcjtRepository;
+        private readonly IRepository<DsPoliceSendChainDealDcjt> _policeSendChainDealDcjtRepository;
+        private readonly IRepository<DsOrder> _dsOrderRepository;
+        private readonly ISharingConfigurationManager _sharingConfigurationManager;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="mapper"></param>
+        /// <param name="logger"></param>
+        /// <param name="policeSendChainAlarmDcjtRepository"></param>
+        /// <param name="policeSendChainDealDcjtRepository"></param>
+        /// <param name="dsOrderRepository"></param>
+        /// <param name="sharingConfigurationManager"></param>
+        public DcjtService(IMapper mapper, ILogger<DcjtService> logger,
+            IRepository<DsPoliceSendChainAlarmDcjt> policeSendChainAlarmDcjtRepository,
+            IRepository<DsPoliceSendChainDealDcjt> policeSendChainDealDcjtRepository,
+             IRepository<DsOrder> dsOrderRepository,
+             ISharingConfigurationManager sharingConfigurationManager)
+        {
+            _mapper = mapper;
+            _logger = logger;
+            _policeSendChainAlarmDcjtRepository = policeSendChainAlarmDcjtRepository;
+            _policeSendChainDealDcjtRepository = policeSendChainDealDcjtRepository;
+            _dsOrderRepository = dsOrderRepository;
+            _sharingConfigurationManager = sharingConfigurationManager;
+        }
+
+        /// <summary>
+        /// 组装110数据,12345警情工单推送到110
+        /// </summary>
+        /// <param name="orderDto"></param>
+        /// <returns></returns>
+        public async Task InitPoliceSendChainAlarmDsAsync(OrderDto orderDto, CancellationToken cancellationToken)
+        {
+            var areaCodeDefu = _sharingConfigurationManager.GetCityCode();
+            var config = _sharingConfigurationManager.GetZiGongConfig().PoliceDCJT;
+            DsPoliceSendChainAlarmDcjt policeSend = new()
+            {
+                SerialNumber = orderDto.ExternalId,
+                AlarmReceiptNumber = orderDto.ExternalId,
+                RegisterNo = orderDto.AcceptorStaffNo,
+                RegisterName = orderDto.AcceptorName,
+                CallPoliceNumber = string.IsNullOrEmpty(orderDto.FromPhone) == true ? orderDto.Contact : orderDto.FromPhone,
+                CallPoliceName = orderDto.FromName,
+                PhoneNumber = orderDto.Contact,
+                CallPoliceContent = orderDto.Content,
+                PoliceTypeCode = "",
+                PoliceTypeName = "",
+                JurisdictionalUnitCode = config.GXDWDM,
+                JurisdictionalUnitName = config.GXDWMC,
+                JurisdictionalUnitNumber = config.GXDWDH,
+                AlarmReceivingUnitCode = "",
+                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 + "12345" + orderDto.No;
+                policeSend.SerialNumber = areaCodeDefu + "12345" + orderDto.No;
+            }
+
+            //修改外部唯一ID
+            var orderData = await _dsOrderRepository.GetAsync(p => p.OrderId == orderDto.Id, cancellationToken);
+            if (orderData != null)
+            {
+                orderData.ExternalId = policeSend.AlarmReceiptNumber;
+                await _dsOrderRepository.UpdateAsync(orderData, cancellationToken);
+            }
+
+            //查询是否有此工单,如果没有新增此工单
+            var data = await _policeSendChainAlarmDcjtRepository.GetAsync(p => p.OrderId == orderDto.Id, cancellationToken);
+            if (data == null)
+                await _policeSendChainAlarmDcjtRepository.AddAsync(policeSend, cancellationToken);
+        }
+
+        /// <summary>
+        /// 110的非警情工单获取办理信息
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task InitPoliceSendChainDealDsAsync(OrderFlowDto dto, CancellationToken cancellationToken)
+        {
+            var data = await _policeSendChainDealDcjtRepository.GetAsync(p => p.OrderId == dto.Order.Id && p.DisposalType == (int)EDsDisposalType.OrderFiled, cancellationToken);
+            if (data == null)
+            {
+                data = new()
+                {
+                    AlarmReceiptNumber = dto.Order.ExternalId,
+                    FeedbackTime = dto.Order.ActualHandleTime,
+                    DisposalSituation = dto.Order.ActualOpinion,
+                    ResultDescription = dto.Order.ActualOpinion,
+                    FeedbackPersonNumber = dto.Order.ActualHandlerId,
+                    FeedbackPersonName = dto.Order.ActualHandlerName,
+                    FeedbackUnitCode = dto.Order.ActualHandleOrgCode,
+                    FeedbackUnitName = dto.Order.ActualHandleOrgName,
+                    WarehousingTime = DateTime.Now,
+                    DisposalType = 1,
+                    OrderId = dto.Order.Id
+                };
+                await _policeSendChainDealDcjtRepository.AddAsync(data, cancellationToken);
+            }
+            else
+            {
+                data.AlarmReceiptNumber = dto.Order.ExternalId;
+                data.FeedbackTime = dto.Order.ActualHandleTime;
+                data.DisposalSituation = dto.Order.ActualOpinion;
+                data.ResultDescription = dto.Order.ActualOpinion;
+                data.FeedbackPersonNumber = dto.Order.ActualHandlerId;
+                data.FeedbackPersonName = dto.Order.ActualHandlerName;
+                data.FeedbackUnitCode = dto.Order.ActualHandleOrgCode;
+                data.FeedbackUnitName = dto.Order.ActualHandleOrgName;
+                data.WarehousingTime = DateTime.Now;
+                await _policeSendChainDealDcjtRepository.UpdateAsync(data, cancellationToken);
+            }
+        }
+
+        /// <summary>
+        /// 110警情工单退回
+        /// </summary>
+        /// <param name="orderDto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task ReturnPoliceAsync(OrderDto orderDto, CancellationToken cancellationToken)
+        {
+            var checkData = await _policeSendChainDealDcjtRepository.AnyAsync(p => p.AlarmReceiptNumber == orderDto.ExternalId && p.DisposalType == (int)EDsDisposalType.Return, cancellationToken);
+            if (!checkData)
+            {
+                var dataPolice = new DsPoliceSendChainDealDcjt()
+                {
+                    OrderId = orderDto.Id,
+                    AlarmReceiptNumber = orderDto.ExternalId,
+                    ReturnName = orderDto.ActualHandlerName,
+                    ReturnUnit = orderDto.ActualHandleOrgName,
+                    ReturnOpinion = orderDto.ActualOpinion,
+                    ReturnTime = orderDto.ActualHandleTime,
+                    WarehousingTime = DateTime.Now,
+                    DisposalType = 2
+                };
+                await _policeSendChainDealDcjtRepository.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",
+            };
+            var checkData = await _policeSendChainDealDcjtRepository.GetAsync(p => p.AlarmReceiptNumber == dto.Order.ExternalId && p.DisposalType == (int)EDsDisposalType.Visit, cancellationToken);
+            if (checkData == null)
+            {
+                checkData = new()
+                {
+                    AlarmReceiptNumber = dto?.Order?.ExternalId,
+                    RevisitTime = dto.VisitTime,
+                    CheckingContent = dto.VisitRemark,
+                    VisitContent = dto.VisitRemark,
+                    VisitResult = VisitResult,
+                    DisposalType = 3
+                };
+                await _policeSendChainDealDcjtRepository.AddAsync(checkData, cancellationToken);
+            }
+            else
+            {
+                checkData.AlarmReceiptNumber = dto?.Order?.ExternalId;
+                checkData.RevisitTime = dto.VisitTime;
+                checkData.CheckingContent = dto.VisitRemark;
+                checkData.VisitContent = dto.VisitRemark;
+                checkData.VisitResult = VisitResult;
+                await _policeSendChainDealDcjtRepository.UpdateAsync(checkData, cancellationToken);
+            }
+        }
+
+    }
+}

+ 2 - 2
src/DataSharing.Police110/DCJT110/DsPoliceSendChainAlarmDcjt.cs

@@ -13,7 +13,7 @@ namespace DataSharing.Police110.DCJT110
         /// <summary>
         /// 流水号   
         /// </summary>
-        [SugarColumn(ColumnDescription = "接警单编号", ColumnDataType = "varchar(35)")]
+        [SugarColumn(ColumnDescription = "接警单编号", ColumnDataType = "varchar(50)")]
         public string SerialNumber { get; set; }
 
         /// <summary>
@@ -31,7 +31,7 @@ namespace DataSharing.Police110.DCJT110
         /// <summary>
         /// 接警单编号
         /// </summary>
-        [SugarColumn(ColumnDescription = "接警单编号", ColumnDataType = "varchar(35)")]
+        [SugarColumn(ColumnDescription = "接警单编号", ColumnDataType = "varchar(50)")]
         public string AlarmReceiptNumber { get; set; }
 
         /// <summary>

+ 1 - 1
src/DataSharing.Police110/DCJT110/DsPoliceSendChainDealDcjt.cs

@@ -114,7 +114,7 @@ namespace DataSharing.Police110.DCJT110
         public DateTime? ReturnTime { get; set; }
 
         /// <summary>
-        /// 处置类型 1正常 2退回 3回访
+        /// 处置类型 1正常 2退回 3回访 4警情签收状态 5是结果签收状态  
         /// </summary>
         [SugarColumn(ColumnDescription = "处置类型")]
         public int DisposalType { get; set; }

+ 37 - 0
src/DataSharing.Police110/DCJT110/IDcjtService.cs

@@ -0,0 +1,37 @@
+using Hotline.Share.Dtos.Order;
+
+namespace DataSharing.Police110.DCJT110
+{
+    public interface IDcjtService
+    {
+        /// <summary>
+        /// 组装110数据,12345警情工单推送到110
+        /// </summary>
+        /// <param name="orderDto"></param>
+        /// <returns></returns>
+        Task InitPoliceSendChainAlarmDsAsync(OrderDto orderDto, CancellationToken cancellationToken);
+
+        /// <summary>
+        /// 110的非警情工单获取办理信息
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        Task InitPoliceSendChainDealDsAsync(OrderFlowDto dto, CancellationToken cancellationToken);
+
+        /// <summary>
+        /// 110警情工单退回
+        /// </summary>
+        /// <param name="orderDto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        Task ReturnPoliceAsync(OrderDto orderDto, CancellationToken cancellationToken);
+
+        /// <summary>
+        /// 110回访数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        Task Visit(PublishVisitDto dto, CancellationToken cancellationToken);
+    }
+}

+ 73 - 6
src/DataSharing.Police110/DaoShu110/DaoShuService.cs

@@ -1,8 +1,9 @@
 using DataSharing.RawData;
-using DataSharing.Share.Enums;
 using Hotline.Share.Dtos.Order;
+using Hotline.Share.Enums.DataSharing;
 using MapsterMapper;
 using Microsoft.Extensions.Logging;
+using System.Threading;
 using XF.Domain.Dependency;
 using XF.Domain.Repository;
 
@@ -52,6 +53,7 @@ namespace DataSharing.Police110.DaoShu110
         public async Task InitPoliceSendChainAlarmDsAsync(OrderDto orderDto, CancellationToken cancellationToken)
         {
             var areaCodeDefu = _sharingConfigurationManager.GetCityCode();
+            var config = _sharingConfigurationManager.GetYiBinConfig().PoliceDS;
             DsPoliceSendChainAlarmDs policeSend = new()
             {
                 SerialNumber = orderDto.ExternalId,
@@ -63,9 +65,9 @@ namespace DataSharing.Police110.DaoShu110
                 CallPoliceContent = orderDto.Content,
                 PoliceTypeCode = "",
                 PoliceTypeName = "",
-                JurisdictionalUnitCode = "511500000000",
-                JurisdictionalUnitName = "宜宾市公安局",
-                JurisdictionalUnitNumber = "0831110",
+                JurisdictionalUnitCode = config.GXDWDM,
+                JurisdictionalUnitName = config.GXDWMC,
+                JurisdictionalUnitNumber = config.GXDWDH,
                 AlarmReceivingUnitCode = "",
                 AlarmReceivingUnitName = "",
                 CallPoliceTime = Convert.ToDateTime(orderDto.CreationTime),
@@ -78,8 +80,8 @@ namespace DataSharing.Police110.DaoShu110
 
             if (string.IsNullOrEmpty(policeSend.AlarmReceiptNumber))
             {
-                policeSend.AlarmReceiptNumber = areaCodeDefu + orderDto.No + "12345";
-                policeSend.SerialNumber = areaCodeDefu + orderDto.No + "12345";
+                policeSend.AlarmReceiptNumber = areaCodeDefu + "12345" + orderDto.No;
+                policeSend.SerialNumber = areaCodeDefu + "12345" + orderDto.No;
             }
 
             //修改外部唯一ID
@@ -138,5 +140,70 @@ namespace DataSharing.Police110.DaoShu110
             }
         }
 
+        /// <summary>
+        /// 110警情工单退回
+        /// </summary>
+        /// <param name="orderDto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task ReturnPoliceAsync(OrderDto orderDto, CancellationToken cancellationToken)
+        {
+            var checkData = await _policeSendChainDealDsRepository.AnyAsync(p => p.AlarmReceiptNumber == orderDto.ExternalId && p.DisposalType == (int)EDsDisposalType.Return, cancellationToken);
+            if (!checkData)
+            {
+                var dataPolice = new DsPoliceSendChainDealDs()
+                {
+                    OrderId = orderDto.Id,
+                    AlarmReceiptNumber = orderDto.ExternalId,
+                    ReturnName = orderDto.ActualHandlerName,
+                    ReturnUnit = orderDto.ActualHandleOrgName,
+                    ReturnOpinion = orderDto.ActualOpinion,
+                    ReturnTime = orderDto.ActualHandleTime,
+                    WarehousingTime = DateTime.Now,
+                    DisposalType = 2
+                };
+                await _policeSendChainDealDsRepository.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",
+            };
+            var checkData = await _policeSendChainDealDsRepository.GetAsync(p => p.AlarmReceiptNumber == dto.Order.ExternalId && p.DisposalType == (int)EDsDisposalType.Visit, cancellationToken);
+            if (checkData == null)
+            {
+                checkData = new()
+                {
+                    AlarmReceiptNumber = dto?.Order?.ExternalId,
+                    RevisitTime = dto.VisitTime,
+                    CheckingContent = dto.VisitRemark,
+                    VisitContent = dto.VisitRemark,
+                    VisitResult = VisitResult,
+                    DisposalType = 3
+                };
+                await _policeSendChainDealDsRepository.AddAsync(checkData, cancellationToken);
+            }
+            else
+            {
+                checkData.AlarmReceiptNumber = dto?.Order?.ExternalId;
+                checkData.RevisitTime = dto.VisitTime;
+                checkData.CheckingContent = dto.VisitRemark;
+                checkData.VisitContent = dto.VisitRemark;
+                checkData.VisitResult = VisitResult;
+                await _policeSendChainDealDsRepository.UpdateAsync(checkData, cancellationToken);
+            }
+        }
+
     }
 }

+ 16 - 0
src/DataSharing.Police110/DaoShu110/IDaoShuService.cs

@@ -20,5 +20,21 @@ namespace DataSharing.Police110.DaoShu110
         /// <param name="dto"></param>
         /// <returns></returns>
         Task InitPoliceSendChainDealDsAsync(OrderFlowDto dto, CancellationToken cancellationToken);
+
+        /// <summary>
+        /// 110警情工单退回
+        /// </summary>
+        /// <param name="orderDto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        Task ReturnPoliceAsync(OrderDto orderDto, CancellationToken cancellationToken);
+
+        /// <summary>
+        /// 110回访数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        Task Visit(PublishVisitDto dto, CancellationToken cancellationToken);
     }
 }

+ 0 - 25
src/DataSharing.Share/Enums/EDsDisposalType.cs

@@ -1,25 +0,0 @@
-using System.ComponentModel;
-
-namespace DataSharing.Share.Enums
-{
-    public enum EDsDisposalType
-    {
-        /// <summary>
-        /// 正常  
-        /// </summary>
-        [Description("正常")]
-        OrderFiled = 1,
-
-        /// <summary>
-        /// 退回
-        /// </summary>
-        [Description("退回")]
-        Return = 2,
-
-        /// <summary>
-        /// 回访
-        /// </summary>
-        [Description("回访")]
-        Visit = 3,
-    }
-}

+ 30 - 0
src/DataSharing/ChannelConfiguration.cs

@@ -136,6 +136,21 @@
     /// </summary>
     public class ConfigurationPoliceDS
     {
+        /// <summary>
+        /// 管辖单位代码
+        /// </summary>
+        public string GXDWDM {  get; set; } = string.Empty;
+
+        /// <summary>
+        /// 管辖单位名称
+        /// </summary>
+        public string GXDWMC { get; set; } = string.Empty;
+
+        /// <summary>
+        /// 管辖单位电话
+        /// </summary>
+        public string GXDWDH { get; set; } = string.Empty;
+
         //1、非警情分流推送服务_宜宾市
         //   receive-工单受理
         //   http://10.12.185.168:8001/service/api/ds/110To12345/chainAlarm
@@ -202,6 +217,21 @@
     /// </summary>
     public class ConfigurationPoliceDCJT
     {
+        /// <summary>
+        /// 管辖单位代码
+        /// </summary>
+        public string GXDWDM { get; set; } = string.Empty;
+
+        /// <summary>
+        /// 管辖单位名称
+        /// </summary>
+        public string GXDWMC { get; set; } = string.Empty;
+
+        /// <summary>
+        /// 管辖单位电话
+        /// </summary>
+        public string GXDWDH { get; set; } = string.Empty;
+
         //1、非警情分流推送服务_XX市
         //   receive-工单受理
         public string token1_token { get; set; }