فهرست منبع

新增综治平台接入

tangjiang 11 ماه پیش
والد
کامیت
5d42227f03

+ 78 - 1
src/DataSharing.Application/Receivers/ProvinceReceiver.cs

@@ -1510,6 +1510,10 @@ namespace DataSharing.Application.Receivers
                         //是否向省上派单
                         if (item.Key == "001171" || item.Key == "001178")
                             await SendCaseInfoDataAsync(dto.Order, cancellationToken);
+
+                        //综治平台
+                        if (item.Key == "001143")
+                            await InitZzptPlatformsAsync(dto.Order, cancellationToken);
                     }
                 }
             }
@@ -1701,6 +1705,12 @@ namespace DataSharing.Application.Receivers
             {
                 await InitPoliceSendChainDealDsAsync(dto, cancellationToken);
             }
+
+            //综治平台推送办理结果
+            if (dto.Order.Source == ESource.ZZPT)
+            {
+                await InitZzptPlatformsDetailAsync(dto, cancellationToken);
+            }
         }
 
         /// <summary>
@@ -2320,7 +2330,7 @@ namespace DataSharing.Application.Receivers
                 { "Gender",fromGender},
                 { "Mobile", dto.Contact},
                 { "Mail","" },
-                { "Address", dto.Address },
+                { "Address", dto.FullAddress },
                 { "Content", dto.Content},
                 { "Source",source }
             };
@@ -2357,6 +2367,73 @@ namespace DataSharing.Application.Receivers
         }
         #endregion
 
+        #region 综治平台
+        /// <summary>
+        /// 综治平台--推送工单信息
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        private async Task InitZzptPlatformsAsync(OrderDto dto, CancellationToken cancellationToken)
+        {
+            string fromGender = dto.FromGender switch
+            {
+                EGender.Female => "2",
+                EGender.Male => "1",
+                _ => "0",
+            };
+            string AcceptTypeCode = dto.AcceptTypeCode switch
+            {
+                "10" => "1",
+                "35" => "2",
+                "20" => "3",
+                "15" => "4",
+                "1" => "5",
+                _ => "6",
+            };
+            Dictionary<string, string> dicParam = new Dictionary<string, string>
+            {
+                { "code", dto.No },
+                { "departmentNo", dto.AreaCode },
+                { "userName", dto.FromName },
+                { "gender", fromGender },
+                { "email", "" },
+                { "phome", dto.Contact },
+                { "address", dto.FullAddress },
+                { "type", AcceptTypeCode },
+                { "title", dto.Title },
+                { "content", dto.Content },
+                { "occurDate", Convert.ToDateTime(dto.CreationTime).ToString("yyyy-MM-dd HH:mm:ss") },
+                { "remark", "" }
+            };
+
+            //写入待推送数据
+            await InitPushDataAsync("InitZzptPlatformsAsync", YbEnterpriseDefaults.ZzptPlatformsSendOrder, System.Text.Json.JsonSerializer.Serialize(dicParam), dto.ProvinceNo, platformSource: EPlatformSource.ZZPT, cancellationToken: cancellationToken);
+
+        }
+
+        /// <summary>
+        /// 推送办理信息
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        private async Task InitZzptPlatformsDetailAsync(OrderFlowDto dto, CancellationToken cancellationToken)
+        {
+            Dictionary<string, string> dicParam = new Dictionary<string, string>
+            {
+                { "code", dto.Order.ExternalId },
+                { "action", "9" },
+                { "user", dto.Order.ActualHandlerName },
+                { "date", dto.Order.ActualHandleTime == null ? "" : dto.Order.ActualHandleTime.Value.ToString("yyyy-MM-dd HH:mm:ss") },
+                { "result", dto.Order.ActualOpinion }
+            };
+
+            //写入待推送数据
+            await InitPushDataAsync("InitZzptPlatformsDetailAsync", YbEnterpriseDefaults.ZzptPlatformsSendHandle, System.Text.Json.JsonSerializer.Serialize(dicParam), dto.Order.ProvinceNo, platformSource: EPlatformSource.ZZPT, cancellationToken: cancellationToken);
+
+        }
+        #endregion
+
         #region 初始化待推送数据
         /// 初始化待推送数据
         /// </summary>

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

@@ -121,6 +121,10 @@
       "DownloadUrlAddress": "file/downloadfile",
       "Source": "datasharing"
     },
+    //综治平台
+    "ZzptPlatforms": {
+      "AddressUrl": "http://www.x157123.xyz:80/"
+    },
     //110对接
     "PoliceDS": {
       //1、非警情分流推送服务_宜宾市

+ 4 - 0
src/DataSharing.Host/config/appsettings.json

@@ -127,6 +127,10 @@
       // "SystemSettingsTheme": "class=gray2",
       "SystemSettingsTheme": ""
     },
+    //综治平台
+    "ZzptPlatforms": {
+      "AddressUrl": "http://www.x157123.xyz:80/"
+    },
     //业务系统附件上传配置
     "BusinessFile": {
       "BaseUrl": "http://218.6.151.146:50106/",

+ 10 - 0
src/DataSharing.Share/Dtos/Enterprise/YbEnterpriseDefaults.cs

@@ -21,5 +21,15 @@
         /// 撤单
         /// </summary>
         public const string PathEnterprisesCancelWorkOrder = "platform/12345/cancelWorkOrder";
+
+        /// <summary>
+        /// 综治平台-推送工单
+        /// </summary>
+        public const string ZzptPlatformsSendOrder = "appeal/exchangeManagement/addAppeal.action";
+
+        /// <summary>
+        /// 综治平台-推送结果
+        /// </summary>
+        public const string ZzptPlatformsSendHandle = "appeal/exchangeManagement/addStep.action";
     }
 }

+ 18 - 0
src/DataSharing.Share/Dtos/OtherPlatformsYB/ZzptDeResponse.cs

@@ -0,0 +1,18 @@
+namespace DataSharing.Share.Dtos.OtherPlatformsYB
+{
+    /// <summary>
+    /// 综治平台请求返回
+    /// </summary>
+    public class ZzptDeResponse
+    {
+        /// <summary>
+        /// 状态
+        /// </summary>
+        public bool code { get; set; }
+
+        /// <summary>
+        /// 消息
+        /// </summary>
+        public string msg { get; set; }
+    }
+}

+ 5 - 0
src/DataSharing.Share/Enums/EPlatformSource.cs

@@ -34,5 +34,10 @@
         /// i宜宾
         /// </summary>
         IYIBIN = 5,
+
+        /// <summary>
+        /// 综治平台
+        /// </summary>
+        ZZPT = 6,
     }
 }

+ 16 - 0
src/DataSharing/ChannelConfiguration.cs

@@ -51,6 +51,11 @@
         /// 写入工单数据
         /// </summary>
         public ConfigurationHotlineClient HotlineClient { get; set; }
+
+        /// <summary>
+        /// 综治平台
+        /// </summary>
+        public ConvergenceZzptPlatforms ZzptPlatforms { get; set; }
     }
 
     /// <summary>
@@ -290,4 +295,15 @@
         public string AddressUrl { get; set; } = string.Empty;
 
     }
+
+    /// <summary>
+    ///综治平台
+    /// </summary>
+    public class ConvergenceZzptPlatforms
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public string AddressUrl { get; set; } = string.Empty;
+    }
 }

+ 8 - 1
src/DataSharing/ChannelConfigurationManager.cs

@@ -109,6 +109,13 @@ namespace DataSharing
             return _channelOption.Value.HotlineClient;
         }
 
-        
+        /// <summary>
+        /// 综治平台
+        /// </summary>
+        /// <returns></returns>
+        public ConvergenceZzptPlatforms GetConfigurationZzptPlatforms()
+        {
+            return _channelOption.Value.ZzptPlatforms;
+        }
     }
 }

+ 14 - 3
src/DataSharing/DataExchange/DataExchangePusherProviderService.cs

@@ -1,7 +1,6 @@
 using DataSharing.SendTask;
 using DataSharing.Share.Dtos.DataExchange;
 using DotNetCore.CAP;
-using Microsoft.AspNetCore.Http;
 using Microsoft.Extensions.Logging;
 using XF.Domain.Dependency;
 using XF.Domain.Repository;
@@ -16,6 +15,7 @@ namespace DataSharing.DataExchange
         private readonly IChannelConfigurationManager _channelConfigurationManager;
         private readonly IRepository<DsReceiveDataExchangeData> _dsReceiveDataExchangeDataRepository;
         private readonly ICapPublisher _capPublisher;
+        private readonly IRepository<DsSendTaskInfo> _dsSendTaskInfoRepository;
 
         /// <summary>
         /// 
@@ -23,12 +23,17 @@ namespace DataSharing.DataExchange
         /// <param name="logger"></param>
         /// <param name="dataExchangeClient"></param>
         /// <param name="dsSendTaskRepository"></param>
+        /// <param name="channelConfigurationManager"></param>
+        /// <param name="dsReceiveDataExchangeDataRepository"></param>
+        /// <param name="capPublisher"></param>
+        /// <param name="dsSendTaskInfoRepository"></param>
         public DataExchangePusherProviderService(ILogger<DataExchangePusherProviderService> logger,
              DataExchangeClient dataExchangeClient,
             IRepository<DsSendTask> dsSendTaskRepository,
             IChannelConfigurationManager channelConfigurationManager,
             IRepository<DsReceiveDataExchangeData> dsReceiveDataExchangeDataRepository,
-            ICapPublisher capPublisher)
+            ICapPublisher capPublisher,
+            IRepository<DsSendTaskInfo> dsSendTaskInfoRepository)
         {
             _logger = logger;
             _dataExchangeClient = dataExchangeClient;
@@ -36,6 +41,7 @@ namespace DataSharing.DataExchange
             _channelConfigurationManager = channelConfigurationManager;
             _dsReceiveDataExchangeDataRepository = dsReceiveDataExchangeDataRepository;
             _capPublisher = capPublisher;
+            _dsSendTaskInfoRepository = dsSendTaskInfoRepository;
         }
 
         /// <summary>
@@ -56,7 +62,8 @@ namespace DataSharing.DataExchange
                 baseAddress += "/";
 
             var response = await _dataExchangeClient.ExecuteAsync<DataExchangeResponseDto>(baseAddress + dto.Path, dto.HttpMethod, dto.Request, cancellationToken);
-
+            //写入推送明细表
+            DsSendTaskInfo dsSendTaskInfo = new() { TaskId = dto.Id, RequestInfo = System.Text.Json.JsonSerializer.Serialize(response) };
             //如果推送成功修改数据状态
             if (response != null)
             {
@@ -68,7 +75,10 @@ namespace DataSharing.DataExchange
                     dto.FirstTime = DateTime.Now;
 
                 if (response.Code == "1")
+                {
                     dto.IsSuccess = true;
+                    dsSendTaskInfo.IsSuccess = true;
+                }
 
                 var datarow = await _dsReceiveDataExchangeDataRepository.GetAsync(p => p.ReceiveData == dto.Id, cancellationToken);
                 if (datarow != null)
@@ -86,6 +96,7 @@ namespace DataSharing.DataExchange
 
                 await _dsSendTaskRepository.UpdateAsync(dto, cancellationToken);
             }
+            await _dsSendTaskInfoRepository.AddAsync(dsSendTaskInfo, cancellationToken);
         }
     }
 }

+ 0 - 4
src/DataSharing/DataSharing.csproj

@@ -25,8 +25,4 @@
     <ProjectReference Include="..\DataSharing.Share\DataSharing.Share.csproj" />
   </ItemGroup>
 
-  <ItemGroup>
-    <Folder Include="OtherPlatformsYB\" />
-  </ItemGroup>
-
 </Project>

+ 11 - 2
src/DataSharing/Enterprise/EnterprisePusherProviderService.cs

@@ -15,6 +15,7 @@ namespace DataSharing.Enterprise
         private readonly IHttpClientFactory _httpClientFactory;
         private readonly EnterpriseClient _enterpriseClient;
         private readonly IRepository<DsSendTask> _dsSendTaskRepository;
+        private readonly IRepository<DsSendTaskInfo> _dsSendTaskInfoRepository;
 
         /// <summary>
         /// 
@@ -28,13 +29,15 @@ namespace DataSharing.Enterprise
             IChannelConfigurationManager channelConfigurationManager,
             IHttpClientFactory httpClientFactory,
            EnterpriseClient enterpriseClient,
-            IRepository<DsSendTask> dsSendTaskRepository)
+            IRepository<DsSendTask> dsSendTaskRepository,
+            IRepository<DsSendTaskInfo> dsSendTaskInfoRepository)
         {
             _logger = logger;
             _channelConfigurationManager = channelConfigurationManager;
             _httpClientFactory = httpClientFactory;
             _enterpriseClient = enterpriseClient;
             _dsSendTaskRepository = dsSendTaskRepository;
+            _dsSendTaskInfoRepository = dsSendTaskInfoRepository;
         }
 
         /// <summary>
@@ -115,6 +118,8 @@ namespace DataSharing.Enterprise
                 baseAddress += "/";
 
             var enterprise = await _enterpriseClient.RequestAsync<EnterpriseResponse>(baseAddress + dto.Path, dto.HttpMethod, request, cancellationToken);
+            //写入推送明细表
+            DsSendTaskInfo dsSendTaskInfo = new() { TaskId = dto.Id, RequestInfo = System.Text.Json.JsonSerializer.Serialize(enterprise) };
             //如果推送成功修改数据状态
             if (enterprise != null)
             {
@@ -126,10 +131,14 @@ namespace DataSharing.Enterprise
                     dto.FirstTime = DateTime.Now;
 
                 if (enterprise.code == 200 && enterprise.success)
+                {
                     dto.IsSuccess = true;
-
+                    dsSendTaskInfo.IsSuccess = true;
+                }
                 await _dsSendTaskRepository.UpdateAsync(dto, cancellationToken);
             }
+
+            await _dsSendTaskInfoRepository.AddAsync(dsSendTaskInfo, cancellationToken);
         }
     }
 }

+ 6 - 0
src/DataSharing/IChannelConfigurationManager.cs

@@ -61,5 +61,11 @@
         /// </summary>
         /// <returns></returns>
         ConfigurationHotlineClient GetConfigurationHotlineClient();
+
+        /// <summary>
+        /// 综治平台
+        /// </summary>
+        /// <returns></returns>
+        ConvergenceZzptPlatforms GetConfigurationZzptPlatforms();
     }
 }

+ 15 - 0
src/DataSharing/OtherPlatformsYB/IZzptPusherProviderService.cs

@@ -0,0 +1,15 @@
+using DataSharing.SendTask;
+
+namespace DataSharing.OtherPlatformsYB
+{
+    public interface IZzptPusherProviderService
+    {
+        /// <summary>
+        /// 综治平台推送数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        Task SendDataPusher(DsSendTask dto, CancellationToken cancellationToken);
+    }
+}

+ 128 - 0
src/DataSharing/OtherPlatformsYB/ZzptPusherProviderService.cs

@@ -0,0 +1,128 @@
+using DataSharing.SendTask;
+using DataSharing.Share.Dtos.OtherPlatformsYB;
+using Microsoft.Extensions.Logging;
+using System.Net;
+using System.Text;
+using XF.Domain.Dependency;
+using XF.Domain.Repository;
+
+namespace DataSharing.OtherPlatformsYB
+{
+    public class ZzptPusherProviderService : IZzptPusherProviderService, IScopeDependency
+    {
+        private readonly ILogger<ZzptPusherProviderService> _logger;
+        private readonly IChannelConfigurationManager _channelConfigurationManager;
+        private readonly IRepository<DsSendTask> _dsSendTaskRepository;
+        private readonly IRepository<DsSendTaskInfo> _dsSendTaskInfoRepository;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="logger"></param>
+        /// <param name="channelConfigurationManager"></param>
+        /// <param name="dsSendTaskRepository"></param>
+        /// <param name="dsSendTaskInfoRepository"></param>
+        public ZzptPusherProviderService(ILogger<ZzptPusherProviderService> logger,
+            IChannelConfigurationManager channelConfigurationManager,
+            IRepository<DsSendTask> dsSendTaskRepository,
+            IRepository<DsSendTaskInfo> dsSendTaskInfoRepository)
+        {
+            _logger = logger;
+            _channelConfigurationManager = channelConfigurationManager;
+            _dsSendTaskRepository = dsSendTaskRepository;
+            _dsSendTaskInfoRepository = dsSendTaskInfoRepository;
+        }
+
+        /// <summary>
+        /// 综治平台推送数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task SendDataPusher(DsSendTask dto, CancellationToken cancellationToken)
+        {
+            if (dto is null || string.IsNullOrEmpty(dto.Request))
+                return;
+
+            var request = dto.Request;
+
+            var dicParam = System.Text.Json.JsonSerializer.Deserialize<Dictionary<string, string>>(request);
+            if (dicParam == null || dicParam.Count == 0)
+                return;
+
+            var config = _channelConfigurationManager.GetConfigurationZzptPlatforms();
+            string baseAddress = config.AddressUrl;
+            if (!baseAddress.EndsWith('/'))
+                baseAddress += "/";
+
+            string strResultJson = PostWebServiceByJson(baseAddress + dto.Path, dto.HttpMethod, dicParam);
+
+            //写入推送明细表
+            DsSendTaskInfo dsSendTaskInfo = new() { TaskId = dto.Id, RequestInfo = strResultJson };
+            if (false == string.IsNullOrEmpty(strResultJson))
+            {
+                var respone = System.Text.Json.JsonSerializer.Deserialize<ZzptDeResponse>(strResultJson);
+                if (respone != null)
+                {
+                    #region 处理推送任务表,
+
+                    dto.LastTime = DateTime.Now;
+                    dto.SendTimes = dto.SendTimes + 1;
+
+                    if (dto.FirstTime is null)
+                        dto.FirstTime = DateTime.Now;
+
+                    if (respone.code)
+                    {
+                        dto.IsSuccess = true;
+                        dsSendTaskInfo.IsSuccess = true;
+                    }
+                    await _dsSendTaskRepository.UpdateAsync(dto, cancellationToken);
+                    #endregion
+                }
+            }
+            await _dsSendTaskInfoRepository.AddAsync(dsSendTaskInfo, cancellationToken);
+        }
+
+        /// <summary>
+        /// 需要WebService支持Post调用
+        /// </summary>
+        private string PostWebServiceByJson(string URL, string Method, Dictionary<string, string> Pars)
+        {
+            try
+            {
+                string strPars = "";
+                int nIndex = 0;
+                foreach (var item in Pars)
+                {
+                    if (0 == nIndex)
+                        strPars += "?" + item.Key + "=" + item.Value;
+                    else
+                        strPars += "&" + item.Key + "=" + item.Value;
+                    nIndex++;
+                }
+                string strUrl = URL + strPars;
+                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(strUrl);
+                if (Method.ToUpper() == "POST")
+                    request.Method = "POST";
+                request.Credentials = CredentialCache.DefaultCredentials;
+                request.Timeout = 10000;
+                byte[] data = Encoding.UTF8.GetBytes(strPars);
+                request.ContentLength = data.Length;
+                Stream writer = request.GetRequestStream();
+                writer.Write(data, 0, data.Length);
+                writer.Close();
+
+                StreamReader sr = new StreamReader(request.GetResponse().GetResponseStream(), Encoding.UTF8);
+                String retXml = sr.ReadToEnd();
+                sr.Close();
+                return retXml;
+            }
+            catch (Exception ex)
+            {
+                return ex.Message;
+            }
+        }
+
+    }
+}

+ 6 - 0
src/DataSharing/SendTask/DsSendTaskInfo.cs

@@ -28,5 +28,11 @@ namespace DataSharing.SendTask
         /// </summary>
         [SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true, ColumnDescription = "返回数据")]
         public ProvinceResponse? Result { get; set; }
+
+        /// <summary>
+        /// 其他平台返回数据
+        /// </summary>
+        [SugarColumn(ColumnDataType = "text", IsNullable = true, ColumnDescription = "其他平台返回数据")]
+        public string? RequestInfo { get; set; }
     }
 }

+ 9 - 1
src/DataSharing/SendTask/SendTaskDataService.cs

@@ -1,5 +1,6 @@
 using DataSharing.DataExchange;
 using DataSharing.Enterprise;
+using DataSharing.OtherPlatformsYB;
 using DataSharing.Province;
 using Microsoft.Extensions.Logging;
 using XF.Domain.Dependency;
@@ -15,6 +16,7 @@ namespace DataSharing.SendTask
         private readonly IPusherProviderService _pusherProviderService;
         private readonly IEnterprisePusherProviderService _enterprisePusherProviderService;
         private readonly IDataExchangePusherProviderService _dataExchangePusherProviderService;
+        private readonly IZzptPusherProviderService _zzptPusherProviderService;
 
         /// <summary>
         /// 
@@ -23,15 +25,18 @@ namespace DataSharing.SendTask
         /// <param name="pusherProviderService"></param>
         /// <param name="enterprisePusherProviderService"></param>
         /// <param name="dataExchangePusherProviderService"></param>
+        /// <param name="zzptPusherProviderService"></param>
         public SendTaskDataService(ILogger<SendTaskDataService> logger,
          IPusherProviderService pusherProviderService,
          IEnterprisePusherProviderService enterprisePusherProviderService,
-         IDataExchangePusherProviderService dataExchangePusherProviderService)
+         IDataExchangePusherProviderService dataExchangePusherProviderService,
+         IZzptPusherProviderService zzptPusherProviderService)
         {
             _logger = logger;
             _pusherProviderService = pusherProviderService;
             _enterprisePusherProviderService = enterprisePusherProviderService;
             _dataExchangePusherProviderService = dataExchangePusherProviderService;
+            _zzptPusherProviderService = zzptPusherProviderService;
         }
 
         /// <summary>
@@ -60,6 +65,9 @@ namespace DataSharing.SendTask
                 case Share.Enums.EPlatformSource.Enterprise:
                     await _enterprisePusherProviderService.SendEnterpriseDataPusher(dto, cancellationToken);
                     break;
+                case Share.Enums.EPlatformSource.ZZPT:
+                    await _zzptPusherProviderService.SendDataPusher(dto, cancellationToken);
+                    break;
                 default:
                     break;
             }