TANG JIANG 1 year ago
parent
commit
1aadbe9378

+ 64 - 77
src/DataSharing.Application/Mappers/MapperConfigs.cs

@@ -14,6 +14,7 @@ using DataSharing.Share.Dtos.Enterprise;
 using DataSharing.Share.Dtos.Province.Extend;
 using DataSharing.Share.Dtos.Province.XieTong.Receive;
 using DataSharing.RawData;
+using DataSharing.WebPortal;
 
 namespace DataSharing.Application.Mappers
 {
@@ -122,29 +123,29 @@ namespace DataSharing.Application.Mappers
             .Map(d => d.AreaCode, x => x.Order.AreaCode)
             ;
 
-            // //接收
-            // //工单交办
-            // config.ForType<ReceiveCaseInfoModel, AddOrderDto>()
-            //.Map(d => d.ProvinceNo, x => x.CaseSerial)
-            //.Map(d => d.Title, x => x.CaseTitle)
-            ////.Map(d => d.AcceptorName, x => x.CaseRegister)
-            ////.Map(d => d.AcceptorStaffNo, x => x.CaseRegisterNo)
-            //// .Map(d => d.CreationTime, x => x.CaseDate)
-            //.Map(d => d.Contact, x => x.PhoneNumber)
-            //.Map(d => d.FromName, x => x.AppLicantName)
-            //.Map(d => d.AgeRangeCode, x => x.AppLicantAge)
-            //.Map(d => d.LicenceNo, x => x.AppLicantId)
-            ////.Map(d => d.Hotspot.ProvinceCode, x => x.CaseAccord)
-            //.Map(d => d.Content, x => x.CaseContent)
-            //.Map(d => d.AcceptTypeCode, x => x.CaseType)
-            //.Map(d => d.IsSecret, x => x.CaseIsSecrect == "1" ? true : false)
-            ////  .Map(d => d.IsPublicity, x => x.CaseIsPublic == "1" ? true : false)
-            //.Map(d => d.ExpiredTimeProvince, x => x.TfdBackTimeBf)
-            //.Map(d => d.AreaCode, x => x.AreaCode)
-            //.Map(d => d.Street, x => x.CaseAddress)
-            //.Map(d => d.IncidentTime, x => x.EventDate)
-            //.Map(d => d.SourceChannelCode, x => x.CaseSource)
-            //  ;
+            //接收
+            //工单交办
+            config.ForType<ReceiveCaseInfoModel, AddOrderDto>()
+           .Map(d => d.ProvinceNo, x => x.CaseSerial)
+           .Map(d => d.Title, x => x.CaseTitle)
+           //.Map(d => d.AcceptorName, x => x.CaseRegister)
+           //.Map(d => d.AcceptorStaffNo, x => x.CaseRegisterNo)
+           // .Map(d => d.CreationTime, x => x.CaseDate)
+           .Map(d => d.Contact, x => x.PhoneNumber)
+           .Map(d => d.FromName, x => x.AppLicantName)
+           .Map(d => d.AgeRangeCode, x => x.AppLicantAge)
+           .Map(d => d.LicenceNo, x => x.AppLicantId)
+           //.Map(d => d.Hotspot.ProvinceCode, x => x.CaseAccord)
+           .Map(d => d.Content, x => x.CaseContent)
+           .Map(d => d.AcceptTypeCode, x => x.CaseType)
+           .Map(d => d.IsSecret, x => x.CaseIsSecrect == "1" ? true : false)
+           //  .Map(d => d.IsPublicity, x => x.CaseIsPublic == "1" ? true : false)
+           .Map(d => d.ExpiredTimeProvince, x => x.TfdBackTimeBf)
+           .Map(d => d.AreaCode, x => x.AreaCode)
+           .Map(d => d.Street, x => x.CaseAddress)
+           .Map(d => d.IncidentTime, x => x.EventDate)
+           .Map(d => d.SourceChannelCode, x => x.CaseSource)
+             ;
 
             //服务工单处理结果
             config.ForType<OrderFlowDto, SubmitCaseResultInfo>()
@@ -612,7 +613,6 @@ namespace DataSharing.Application.Mappers
               ;
             #endregion
 
-
             #region 门户网站数据
             //办件摘编列表
             config.ForType<DsOrder, OrderListDto>()
@@ -648,59 +648,46 @@ namespace DataSharing.Application.Mappers
             .Map(d => d.FlowContent, x => string.IsNullOrEmpty(x.ArrangeContent) ? x.Content : x.ArrangeContent)
             .Map(d => d.FlowResult, x => string.IsNullOrEmpty(x.ArrangeOpinion) ? x.ActualOpinion : x.ArrangeOpinion)
        ;
-            ////注册用户数据
-            //config.ForType<UserModelDto, DsWebUserRegister>()
-            //.Map(d => d.WebUserName, x => x.name)
-            //.Map(d => d.WebLoginName, x => x.username)
-            //.Map(d => d.PhoneNum, x => x.employeeMobile)
-            //.Map(d => d.IDCard, x => x.idNumber)
-            //.Map(d => d.Address, x => x.address)
-            //.Map(d => d.Gender, x => x.sex)
-            //;
-
-            ////统一认证数据
-            //config.ForType<UserModelDto, DsWebUserAuth>()
-            //.Map(d => d.DataId, x => x.id)
-            //.Map(d => d.Type, x => x.type)
-            //.Map(d => d.Address, x => x.address)
-            //.Map(d => d.Birth, x => x.birth)
-            //.Map(d => d.DocumentType, x => x.document_type)
-            //.Map(d => d.IdNumber, x => x.idNumber)
-            //.Map(d => d.Nationality, x => x.nationality)
-            //.Map(d => d.Name, x => x.name)
-            //.Map(d => d.Sex, x => x.sex)
-            //.Map(d => d.DisplayName, x => x.displayName)
-            //.Map(d => d.Username, x => x.username)
-            //.Map(d => d.EmployeeMobile, x => x.employeeMobile)
-            //;
-
-            ////门户网站写信
-            //config.ForType<DsWebFlowAccept, AddOrderDto>()
-            //.Map(d => d.FromName, x => x.LKName)
-            //.Map(d => d.FromGender, x => x.Sex == "男" ? EGender.Male : x.Sex == "女" ? EGender.Female : EGender.Unknown)
-            //.Map(d => d.IsSecret, x => x.IsSecret == "1" ? true : false)
-            //.Map(d => d.LicenceNo, x => x.IDCard)
-            //.Map(d => d.Contact, x => x.Mobile)
-            //// .Map(d => d.FullAddress, x => x.Address)
-            //.Map(d => d.Title, x => x.Title)
-            //.Map(d => d.Content, x => x.Content)
-            //.Map(d => d.AcceptType, x => x.PurTypeName)
-            //.Map(d => d.AcceptTypeCode, x => x.PurTypeID)
-            //;
-
-            //  //用户中心用户写信数据
-            //  config.ForType<DsWebFlowAccept, OrderListDto>()
-            //     .Ignore(d => d.Source)
-            //     .Map(d => d.FlowID, x => x.OrderId)
-            //     .Map(d => d.FlowCode, x => x.Code)
-            //     .Map(d => d.FlowPwd, x => x.Pwd)
-            //     .Map(d => d.FlowTitle, x => x.Title)
-            //     .Map(d => d.FlowFromName, x => x.Order.CaseSource)
-            //     .Map(d => d.FlowPurTypeName, x => x.PurTypeName)
-            //     .Map(d => d.ConTypeName, x => x.Order.HotspotName)
-            //     .Map(d => d.FlowAddDate, x => x.CreationTime)
-            //     .Map(d => d.RSFlagName, x => x.Order.HandleState)
-            //;
+            //注册用户数据
+            config.ForType<UserModelDto, DsWebUserRegister>()
+            .Map(d => d.WebUserName, x => x.name)
+            .Map(d => d.WebLoginName, x => x.username)
+            .Map(d => d.PhoneNum, x => x.employeeMobile)
+            .Map(d => d.IDCard, x => x.idNumber)
+            .Map(d => d.Address, x => x.address)
+            .Map(d => d.Gender, x => x.sex)
+            ;
+
+            //统一认证数据
+            config.ForType<UserModelDto, DsWebUserAuth>()
+            .Map(d => d.DataId, x => x.id)
+            .Map(d => d.Type, x => x.type)
+            .Map(d => d.Address, x => x.address)
+            .Map(d => d.Birth, x => x.birth)
+            .Map(d => d.DocumentType, x => x.document_type)
+            .Map(d => d.IdNumber, x => x.idNumber)
+            .Map(d => d.Nationality, x => x.nationality)
+            .Map(d => d.Name, x => x.name)
+            .Map(d => d.Sex, x => x.sex)
+            .Map(d => d.DisplayName, x => x.displayName)
+            .Map(d => d.Username, x => x.username)
+            .Map(d => d.EmployeeMobile, x => x.employeeMobile)
+            ;
+
+            //门户网站写信
+            config.ForType<DsWebFlowAccept, AddOrderDto>()
+            .Map(d => d.FromName, x => x.LKName)
+            .Map(d => d.FromGender, x => x.Sex == "男" ? EGender.Male : x.Sex == "女" ? EGender.Female : EGender.Unknown)
+            .Map(d => d.IsSecret, x => x.IsSecret == "1" ? true : false)
+            .Map(d => d.LicenceNo, x => x.IDCard)
+            .Map(d => d.Contact, x => x.Mobile)
+            // .Map(d => d.FullAddress, x => x.Address)
+            .Map(d => d.Title, x => x.Title)
+            .Map(d => d.Content, x => x.Content)
+            .Map(d => d.AcceptType, x => x.PurTypeName)
+            .Map(d => d.AcceptTypeCode, x => x.PurTypeID)
+            ;
+
             #endregion
         }
     }

+ 2 - 2
src/DataSharing.Application/Receivers/BulletinReceiver.cs

@@ -14,7 +14,7 @@ namespace DataSharing.Application.Receivers
     public class BulletinReceiver : ICapSubscribe, IScopeDependency
     {
         private readonly IMapper _mapper;
-        private readonly ILogger<ProvinceReceiver> _logger;
+        private readonly ILogger<BulletinReceiver> _logger;
         private readonly IRepository<DsBulletin> _dsBulletinRepository;
 
         /// <summary>
@@ -23,7 +23,7 @@ namespace DataSharing.Application.Receivers
         /// <param name="mapper"></param>
         /// <param name="logger"></param>
         /// <param name="dsBulletinRepository"></param>
-        public BulletinReceiver(IMapper mapper, ILogger<ProvinceReceiver> logger, IRepository<DsBulletin> dsBulletinRepository)
+        public BulletinReceiver(IMapper mapper, ILogger<BulletinReceiver> logger, IRepository<DsBulletin> dsBulletinRepository)
         {
             _mapper = mapper;
             _logger = logger;

+ 78 - 0
src/DataSharing.Share/Dtos/Province/ProvinceDistrecordResponse.cs

@@ -0,0 +1,78 @@
+using DataSharing.Share.Dtos.Province.XieTong.Receive;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DataSharing.Share.Dtos.Province
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class ProvinceDistrecordResponse
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public StatusModel status { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public CustomModel custom { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public ReturnInfoModel ReturnInfo { get; set; }
+    }
+
+    /// <summary>
+    /// 
+    /// </summary>
+    public class StatusModel
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public string code { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public string text { get; set; }
+    }
+
+    /// <summary>
+    /// 
+    /// </summary>
+    public class CustomModel
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public List<GetCaseDistrecordSendModel> STEP_List { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public string CASE_SERIAL { get; set; }
+    }
+
+    /// <summary>
+    /// 
+    /// </summary>
+    public class ReturnInfoModel
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Description { get; set; }
+    }
+}

+ 41 - 0
src/DataSharing.Share/Dtos/Province/XieTong/SharingAddOrderTracesDto.cs

@@ -0,0 +1,41 @@
+namespace DataSharing.Share.Dtos.Province.XieTong
+{
+    public class SharingAddOrderTracesDto
+    {
+        /// <summary>
+        /// 工单ID
+        /// </summary>
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 流程数据
+        /// </summary>
+        public ICollection<SharingWorkflowTraceDto> Traces { get; set; }
+    }
+
+    /// <summary>
+    /// 流程数据
+    /// </summary>
+    public class SharingWorkflowTraceDto
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public string? HandlerName { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public string? HandlerOrgName { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public DateTime? HandleTime { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public string? Opinion { get; set; }
+    }
+}

+ 144 - 0
src/DataSharing/Province/DsGetCaseDistrecordSend.cs

@@ -0,0 +1,144 @@
+using SqlSugar;
+using System.ComponentModel;
+using XF.Domain.Repository;
+
+namespace DataSharing.Province
+{
+    /// <summary>
+    /// 服务工单上报12315过程信息查询
+    /// </summary>
+    [Description("服务工单上报12315过程信息查询")]
+    public class DsGetCaseDistrecordSend : CreationModificationEntity
+    {
+        /// <summary>
+        ///  
+        /// </summary>
+        [SugarColumn(ColumnDataType = "varchar(50)")]
+        public string OperatorGuid { get; set; }
+
+        /// <summary>
+        ///  
+        /// </summary>
+        [SugarColumn(ColumnDataType = "varchar(50)")]
+        public string CliengGuid { get; set; }
+
+        /// <summary>
+        ///  收到时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "收到时间")]
+        public DateTime? CreateTime { get; set; }
+
+        /// <summary>
+        ///  
+        /// </summary>
+        [SugarColumn(ColumnDataType = "varchar(50)")]
+        public string? BatchNo { get; set; }
+
+        /// <summary>
+        ///  节点
+        /// </summary>
+        [SugarColumn(ColumnDataType = "varchar(50)", ColumnDescription = "节点")]
+        public string? NodeType { get; set; }
+
+        /// <summary>
+        ///  操作
+        /// </summary>
+        [SugarColumn(ColumnDataType = "varchar(50)", ColumnDescription = "操作")]
+        public string? OperateStatus { get; set; }
+
+        /// <summary>
+        ///  
+        /// </summary>
+        [SugarColumn(ColumnDataType = "varchar(50)")]
+        public string? OperatorouGuid { get; set; }
+
+        /// <summary>
+        ///  步骤
+        /// </summary>
+        [SugarColumn(ColumnDataType = "varchar(200)", ColumnDescription = "步骤")]
+        public string? ActivityGuid { get; set; }
+
+        /// <summary>
+        ///  操作人名
+        /// </summary>
+        [SugarColumn(ColumnDataType = "varchar(200)", ColumnDescription = "操作人名")]
+        public string? OperateUserName { get; set; }
+
+        /// <summary>
+        ///  操作部门
+        /// </summary>
+        [SugarColumn(ColumnDataType = "varchar(200)", ColumnDescription = "操作部门")]
+        public string? OperatorouName { get; set; }
+
+        /// <summary>
+        ///  唯一ID
+        /// </summary>
+        [SugarColumn(ColumnDataType = "varchar(50)")]
+        public string? RowGuid { get; set; }
+
+        /// <summary>
+        ///  
+        /// </summary>
+        [SugarColumn(ColumnDataType = "varchar(50)")]
+        public string? Tguid { get; set; }
+
+        /// <summary>
+        ///  
+        /// </summary>
+        [SugarColumn(ColumnDataType = "varchar(50)")]
+        public string? Cguid { get; set; }
+
+        /// <summary>
+        ///  
+        /// </summary>
+        public DateTime? OperateDate { get; set; }
+
+        /// <summary>
+        ///  
+        /// </summary>
+        [SugarColumn(ColumnDataType = "varchar(50)")]
+        public string? FirstTguid { get; set; }
+
+        /// <summary>
+        ///处理时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "处理时间")]
+        public DateTime? HandleTime { get; set; }
+
+        /// <summary>
+        ///  处理意见
+        /// </summary>
+        [SugarColumn(ColumnDataType = "varchar(5000)", ColumnDescription = "处理意见")]
+        public string? HandleOpinion { get; set; }
+
+        /// <summary>
+        ///  
+        /// </summary>
+        [SugarColumn(ColumnDataType = "varchar(50)")]
+        public string? OperateType { get; set; }
+
+        /// <summary>
+        ///  处理人员
+        /// </summary>
+        [SugarColumn(ColumnDescription = "处理人员")]
+        public string? OperatorName { get; set; }
+
+        /// <summary>
+        /// 服务工单编号  
+        /// </summary>
+        [SugarColumn(ColumnDescription = "服务工单编号", ColumnDataType = "varchar(50)")]
+        public string CaseSerial { get; set; }
+
+        /// <summary>
+        /// 行政区划代码
+        /// </summary>
+        [SugarColumn(ColumnDescription = "行政区划代码", ColumnDataType = "varchar(24)")]
+        public string AreaCode { get; set; }
+
+        /// <summary>
+        /// 同步状态 0:待同步;	  1:同步成功;	 2:同步失败;
+        /// </summary>
+        [SugarColumn(ColumnDescription = "同步状态", ColumnDataType = "varchar(1)", IsNullable = true)]
+        public string SyncState { get; set; } = "1";
+    }
+}

+ 98 - 2
src/DataSharing/Province/PusherProviderService.cs

@@ -1,44 +1,68 @@
 using DataSharing.SendTask;
+using DataSharing.Share.Dtos.Province;
+using DataSharing.Share.Dtos.Province.XieTong;
+using DataSharing.Share.Dtos.Province.XieTong.Receive;
+using DataSharing.Share.Dtos.Province.XieTong.Send;
 using DataSharing.Share.Enums;
+using DotNetCore.CAP;
+using MapsterMapper;
+using Microsoft.AspNetCore.Http;
 using Microsoft.Extensions.Logging;
 using Newtonsoft.Json;
+using StackExchange.Redis;
 using System.Net;
 using XF.Domain.Dependency;
 using XF.Domain.Repository;
+using static System.Runtime.InteropServices.JavaScript.JSType;
 
 namespace DataSharing.Province
 {
     public class PusherProviderService : IPusherProviderService, IScopeDependency
     {
+        private readonly IMapper _mapper;
         private readonly ILogger<PusherProviderService> _logger;
         private readonly IChannelConfigurationManager _channelConfigurationManager;
         private readonly IHttpClientFactory _httpClientFactory;
         private readonly XieTongClient _xieTongClient;
         private readonly HuiJuClient _huiJuClient;
         private readonly IRepository<DsSendTask> _dsSendTaskRepository;
+        private readonly IRepository<DsSendCaseInfo> _sendCaseInfoRepository;
+        private readonly IRepository<DsGetCaseDistrecordSend> _getCaseDistrecordSendRepository;
+        private readonly ICapPublisher _capPublisher;
 
         /// <summary>
         /// 
         /// </summary>
+        /// <param name="mapper"></param>
         /// <param name="logger"></param>
         /// <param name="channelConfigurationManager"></param>
         /// <param name="httpClientFactory"></param>
         /// <param name="xieTongClient"></param>
         /// <param name="huiJuClient"></param>
         /// <param name="dsSendTaskRepository"></param>
-        public PusherProviderService(ILogger<PusherProviderService> logger,
+        /// <param name="sendCaseInfoRepository"></param>
+        /// <param name="getCaseDistrecordSendRepository"></param>
+        /// <param name="capPublisher"></param>
+        public PusherProviderService(IMapper mapper, ILogger<PusherProviderService> logger,
             IChannelConfigurationManager channelConfigurationManager,
             IHttpClientFactory httpClientFactory,
             XieTongClient xieTongClient,
             HuiJuClient huiJuClient,
-            IRepository<DsSendTask> dsSendTaskRepository)
+            IRepository<DsSendTask> dsSendTaskRepository,
+            IRepository<DsSendCaseInfo> sendCaseInfoRepository,
+            IRepository<DsGetCaseDistrecordSend> getCaseDistrecordSendRepository,
+            ICapPublisher capPublisher)
         {
+            _mapper = mapper;
             _logger = logger;
             _channelConfigurationManager = channelConfigurationManager;
             _httpClientFactory = httpClientFactory;
             _xieTongClient = xieTongClient;
             _huiJuClient = huiJuClient;
             _dsSendTaskRepository = dsSendTaskRepository;
+            _sendCaseInfoRepository = sendCaseInfoRepository;
+            _getCaseDistrecordSendRepository = getCaseDistrecordSendRepository;
+            _capPublisher = capPublisher;
         }
 
         /// <summary>
@@ -85,6 +109,78 @@ namespace DataSharing.Province
             }
         }
 
+
+        /// <summary>
+        /// 拉取12315工单办理信息
+        /// </summary>
+        /// <param name="CaseSerial"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task GetCaseDistrecordSendPusher(CancellationToken cancellationToken)
+        {
+            var listSendCaseInfo = await _sendCaseInfoRepository
+                    .Queryable()
+                    .Where(p => p.IsEnd == false)
+                    .OrderBy(p => p.CreationTime)
+                    .ToListAsync();
+            //处理数据
+            if (listSendCaseInfo != null && listSendCaseInfo.Count > 0)
+            {
+                foreach (var itemData in listSendCaseInfo)
+                {
+                    GetCaseDistrecordSendInfo distrecordSendInfo = new() { CaseSerial = itemData.CaseSerial };
+
+                    #region 处理请求参数
+                    var configProvince = _channelConfigurationManager.GetConfigurationProvince();
+                    var request = new ProvinceRequest<GetCaseDistrecordSendInfo>(configProvince.ClientId, configProvince.ClientSecret);
+                    request.SetData(distrecordSendInfo);
+                    var jsonData = request.ToString();
+                    var url = configProvince.XieTong + "rest/market/get_case_distrecord_send";
+                    #endregion
+
+                    var response = await _xieTongClient.RequestAsync<ProvinceDistrecordResponse>(url, "Post", jsonData, cancellationToken);
+
+                    if (response is null || response.status is null || response.custom is null)
+                        continue;
+
+                    if (response.status.code != "1")
+                        continue;
+
+                    //这里处理业务
+                    if (response.custom.STEP_List != null && response.custom.STEP_List.Count > 0)
+                    {
+                        //这里调用业务接口,推送办理数据
+                        List<SharingWorkflowTraceDto> Traces = new();
+                        //遍历返回的数据
+                        foreach (var item in response.custom.STEP_List)
+                        {
+                            //检测当前数据是否存在,如果存在不处理,不存在新增到数据库并推送到业务系统
+                            if (!await _getCaseDistrecordSendRepository.AnyAsync(p => p.CaseSerial == response.custom.CASE_SERIAL && p.RowGuid == item.RowGuid, cancellationToken))
+                            {
+                                var tempData = _mapper.Map<DsGetCaseDistrecordSend>(item);
+                                await _getCaseDistrecordSendRepository.AddAsync(tempData);
+
+                                Traces.Add(new()
+                                {
+                                    HandlerName = item.OperatorName,
+                                    HandlerOrgName = item.OperatorouName,
+                                    HandleTime = item.HandleTime,
+                                    Opinion = item.HandleOpinion
+                                });
+                            }
+                        }
+                        SharingAddOrderTracesDto addOrderTracesDto = new()
+                        {
+                            OrderId = itemData.OrderID,
+                            Traces = Traces
+                        };
+                        //往业务系统推送数据
+                        await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderAddTraces, addOrderTracesDto, cancellationToken: cancellationToken);
+                    }
+                }
+            }
+        }
+
         /// <summary>
         /// 附件读取以及附件上传 
         /// </summary>