tangjiang 11 kuukautta sitten
vanhempi
commit
ffa23fdf07

+ 18 - 3
src/DataSharing.Application/Receivers/ProvinceReceiver.cs

@@ -5,9 +5,11 @@ using DataSharing.DataExchange;
 using DataSharing.Province;
 using DataSharing.RawData;
 using DataSharing.SendTask;
+using DataSharing.Share.Consts;
 using DataSharing.Share.Dtos;
 using DataSharing.Share.Dtos.DataExchange;
 using DataSharing.Share.Dtos.Enterprise;
+using DataSharing.Share.Dtos.HotlineWeb;
 using DataSharing.Share.Dtos.Province;
 using DataSharing.Share.Dtos.Province.Extend;
 using DataSharing.Share.Dtos.Province.HuiJu;
@@ -55,6 +57,7 @@ namespace DataSharing.Application.Receivers
         private readonly ICapPublisher _capPublisher;
         private readonly IRepository<DsTelCall> _dsTelCallRepository;
         private readonly IRepository<DsReceiveDataExchangeData> _dsReceiveDataExchangeDataRepository;
+        private readonly ITypedCache<ConfigurationInformationDto> _configurationInformationCache;
 
         /// <summary>
         /// 
@@ -89,7 +92,8 @@ namespace DataSharing.Application.Receivers
              IRepository<DsGetCaseBackApply> getCaseBackApplyRepository,
              ICapPublisher capPublisher,
              IRepository<DsTelCall> dsTelCallRepository,
-             IRepository<DsReceiveDataExchangeData> dsReceiveDataExchangeDataRepository)
+             IRepository<DsReceiveDataExchangeData> dsReceiveDataExchangeDataRepository,
+             ITypedCache<ConfigurationInformationDto> configurationInformationCache)
         {
             _mapper = mapper;
             _logger = logger;
@@ -107,6 +111,7 @@ namespace DataSharing.Application.Receivers
             _capPublisher = capPublisher;
             _dsTelCallRepository = dsTelCallRepository;
             _dsReceiveDataExchangeDataRepository = dsReceiveDataExchangeDataRepository;
+            _configurationInformationCache = configurationInformationCache;
         }
         #endregion
 
@@ -2083,8 +2088,18 @@ namespace DataSharing.Application.Receivers
         private async Task<bool> IsPublishMissedCall(TrCallDto dto, CancellationToken cancellationToken)
         {
             var key = MissedCallKey + DateTime.Now.ToString("yyyyMMdd");
-            var provinceConfiguration = _channelConfigurationManager.GetConfigurationProvince();
-            var missedCallCount = provinceConfiguration.MissedCallCount;
+            int missedCallCount;
+            //获取系统配置
+            var configurationInformation = await _configurationInformationCache.GetAsync(ConstantSettings.ConfigurationInformationCacheKey, cancellationToken);
+            if (configurationInformation == null)
+            {
+                //获取配置信息
+                var provinceConfiguration = _channelConfigurationManager.GetConfigurationProvince();
+                missedCallCount = provinceConfiguration.MissedCallCount;
+            }
+            else
+                missedCallCount = configurationInformation.MissedCallCount;
+
 
             var dataCache = await _missedCallModelCache.GetAsync(key, cancellationToken);
             if (dataCache != null)

+ 0 - 1
src/DataSharing.Host/Controllers/ConvergenceMediaController.cs

@@ -10,7 +10,6 @@ using DataSharing.Share.Dtos.WebPortal;
 using DataSharing.Share.Enums;
 using DataSharing.WebPortal;
 using DotNetCore.CAP;
-using Fw.Utility.UnifyResponse;
 using Hotline.Api.Sdk;
 using Hotline.Share.Dtos.File;
 using Hotline.Share.Dtos.Order;

+ 59 - 2
src/DataSharing.Host/Controllers/HotlineWebController.cs

@@ -1,17 +1,22 @@
-using DataSharing.Province;
+using DataSharing.HotlineWeb;
+using DataSharing.Province;
 using DataSharing.RawData;
 using DataSharing.SendTask;
+using DataSharing.Share.Consts;
 using DataSharing.Share.Dtos.HotlineWeb;
 using DataSharing.Share.Dtos.Province;
 using DataSharing.Share.Dtos.Province.HuiJu;
 using DotNetCore.CAP;
 using Hotline.Share.Dtos;
+using Hotline.Share.Dtos.Knowledge;
 using MapsterMapper;
 using MediatR;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
 using Newtonsoft.Json;
 using SqlSugar;
+using System.Security.Permissions;
+using XF.Domain.Cache;
 using XF.Domain.Repository;
 
 namespace DataSharing.Host.Controllers
@@ -26,6 +31,8 @@ namespace DataSharing.Host.Controllers
         private readonly IRepository<DsSendTask> _taskRepository;
         private readonly IRepository<DsSendTaskInfo> _taskInfoRepository;
         private readonly IPusherProviderService _pusherProviderService;
+        private readonly IRepository<ConfigurationInformation> _configurationInformationRepository;
+        private readonly ITypedCache<ConfigurationInformationDto> _configurationInformationCache;
 
         public HotlineWebController(IMapper mapper,
             IMediator mediator,
@@ -34,7 +41,9 @@ namespace DataSharing.Host.Controllers
             IRepository<DsTelCall> dsTelCallRepository,
             IRepository<DsSendTask> taskRepository,
             IRepository<DsSendTaskInfo> taskInfoRepository,
-             IPusherProviderService pusherProviderService
+             IPusherProviderService pusherProviderService,
+             IRepository<ConfigurationInformation> configurationInformationRepository,
+             ITypedCache<ConfigurationInformationDto> configurationInformationCache
             )
         {
             _mapper = mapper;
@@ -45,6 +54,8 @@ namespace DataSharing.Host.Controllers
             _taskRepository = taskRepository;
             _taskInfoRepository = taskInfoRepository;
             _pusherProviderService = pusherProviderService;
+            _configurationInformationRepository = configurationInformationRepository;
+            _configurationInformationCache = configurationInformationCache;
         }
 
         /// <summary>
@@ -402,5 +413,51 @@ namespace DataSharing.Host.Controllers
 
             return calculateUploadRateDto;
         }
+
+        #region 系统配置
+
+        /// <summary>
+        /// 上传数据系统配置-查询详情
+        /// </summary>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpGet("info-configurationinformation")]
+        public async Task<ConfigurationInformation> GetStandard()
+        {
+            var sandard = await _configurationInformationRepository.Queryable().FirstAsync();
+            if (sandard == null)
+            {
+                ConfigurationInformation configuration = new()
+                {
+                    CrntSeatNum = 0,
+                    CrntTelNum = 0,
+                    SeatNum = 0,
+                    SeatHwyNum = 0,
+                    MissedCallCount = 0
+                };
+                var Id = await _configurationInformationRepository.AddAsync(configuration, HttpContext.RequestAborted);
+                return await _configurationInformationRepository.GetAsync(Id, HttpContext.RequestAborted);
+            }
+            return sandard;
+        }
+
+        /// <summary>
+        /// 上传数据系统配置-修改
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpPut("update-configurationinformation")]
+        public async Task UpdateStandard([FromBody] ConfigurationInformationDto dto)
+        {
+            var standard = await _configurationInformationRepository.GetAsync(dto.Id);
+            if (standard != null)
+            {
+                _mapper.Map(dto, standard);
+                await _configurationInformationRepository.UpdateAsync(standard, HttpContext.RequestAborted);
+                await _configurationInformationCache.GetOrSetAsync(ConstantSettings.ConfigurationInformationCacheKey, dto, cancellationToken: HttpContext.RequestAborted);
+            }
+        }
+        #endregion
     }
 }

+ 10 - 9
src/DataSharing.Host/Controllers/PoliceDSController.cs

@@ -6,8 +6,7 @@ using DataSharing.Share.Dtos;
 using DataSharing.Share.Dtos.DaoShu110;
 using DataSharing.Share.Dtos.HotlineSetting;
 using DotNetCore.CAP;
-using Fw.Utility.UnifyResponse;
-using Hotline.Share.Dtos.Order;
+using Hotline.Share.Enums.Order;
 using MapsterMapper;
 using MediatR;
 using Microsoft.AspNetCore.Authorization;
@@ -75,7 +74,7 @@ namespace DataSharing.Host.Controllers
         }
         #endregion
 
-        #region receive-工单受理-已完成
+        #region receive-工单受理-已完成---110推送受理工单给12345
 
         /// <summary>
         /// 工单受理
@@ -143,9 +142,11 @@ namespace DataSharing.Host.Controllers
                             Street = chainAlarm.CallPoliceAddress,
                             SourceChannel = "宜宾110平台",
                             SourceChannelCode = "YB110",
+                            Source = ESource.Police110,
                             IdentityType = Hotline.Share.Enums.Order.EIdentityType.Citizen,
                             Transpond = false,
-                            IsEnforcementOrder = false
+                            IsEnforcementOrder = false,
+                            Title = string.Empty
                         };
 
                         //调用工单创建接口
@@ -181,7 +182,7 @@ namespace DataSharing.Host.Controllers
 
         #endregion
 
-        #region receive-工单办结
+        #region receive-工单办结---110推送办理结果给12345
 
         /// <summary>
         /// 工单办结
@@ -265,7 +266,7 @@ namespace DataSharing.Host.Controllers
 
         #endregion
 
-        #region send-工单受理-已完成
+        #region send-工单受理-已完成---12345将警情工单推送给110
 
         /// <summary>
         /// 工单受理
@@ -318,7 +319,7 @@ namespace DataSharing.Host.Controllers
                     {
                         var listData = await _dsPoliceSendChainAlarmDsRepository.Queryable()
                              .WhereIF(!string.IsNullOrEmpty(openData.StartDate), p => p.CallPoliceTime >= Convert.ToDateTime(openData.StartDate))
-                             .WhereIF(!string.IsNullOrEmpty(openData.EndDate), p => p.CallPoliceTime >= Convert.ToDateTime(openData.EndDate))
+                             .WhereIF(!string.IsNullOrEmpty(openData.EndDate), p => p.CallPoliceTime <= Convert.ToDateTime(openData.EndDate))
                              .OrderBy(p => p.CallPoliceTime)
                              .Take(50)
                              .ToListAsync();
@@ -351,7 +352,7 @@ namespace DataSharing.Host.Controllers
 
         #endregion
 
-        #region send-工单办结
+        #region send-工单办结---12345将110推过来的工单办理结果推送给110
 
         /// <summary>
         /// 工单办结
@@ -409,7 +410,7 @@ namespace DataSharing.Host.Controllers
                     {
                         var listData = await _dsPoliceSendChainDealDsRepository.Queryable()
                                  .WhereIF(!string.IsNullOrEmpty(openData.StartDate), p => p.WarehousingTime >= Convert.ToDateTime(openData.StartDate))
-                                 .WhereIF(!string.IsNullOrEmpty(openData.EndDate), p => p.WarehousingTime >= Convert.ToDateTime(openData.EndDate))
+                                 .WhereIF(!string.IsNullOrEmpty(openData.EndDate), p => p.WarehousingTime <= Convert.ToDateTime(openData.EndDate))
                                  .WhereIF(!string.IsNullOrEmpty(openData.AlarmReceiptNumber), p => p.AlarmReceiptNumber == openData.AlarmReceiptNumber)
                                  .Where(p => p.DisposalType == openData.DisposalType)
                                  .OrderBy(p => p.WarehousingTime)

+ 22 - 0
src/DataSharing.Host/StartupHelper.cs

@@ -200,7 +200,29 @@ namespace DataSharing.Host
                     .StartNow()
                     .WithCronSchedule("0/1 * * * * ? ")
                 );
+
+                //2小时定时拉取12315的办理过程
+                var taskCaseDistrecordJobKey = new JobKey("task-case-distrecord-job", "task case distrecord job");
+                d.AddJob<TaskCaseDistrecordJob>(taskCaseDistrecordJobKey);
+                d.AddTrigger(t => t
+                    .WithIdentity("task-case-distrecord-job-trigger")
+                    .ForJob(taskCaseDistrecordJobKey)
+                    .StartNow()
+                    .WithCronSchedule("0 0/2 * * * ?")//0 0 */2 * * ?
+                );
+
+                //每天凌晨1点推送业务汇聚-统计数据
+                var taskSubmitCaseTotalJobKey = new JobKey("task-submit-case-total-job", "task submit case total job");
+                d.AddJob<TaskSubmitCaseTotalJob>(taskSubmitCaseTotalJobKey);
+                d.AddTrigger(t => t
+                    .WithIdentity("task-submit-case-total-job-trigger")
+                    .ForJob(taskSubmitCaseTotalJobKey)
+                    .StartNow()
+                    .WithCronSchedule("0 0/2 * * * ?")//0 0 1 * * ?
+                );
+
             });
+            ///
 
             services.AddQuartzServer(d =>
             {

+ 3 - 2
src/DataSharing.Host/config/appsettings.Development.json

@@ -68,7 +68,7 @@
   },
   "ChannelConfiguration": {
     "HotlineClient": {
-      "AddressUrl": "http://110.188.24.28:50300/"
+      "AddressUrl": "http://localhost:50100/"
     },
     //省12345配置
     "Province": {
@@ -100,7 +100,8 @@
     },
     //系统市州编码
     "CityCode": {
-      "AreaCode": "511500"
+      "AreaCode": "511500",
+      "AreaName": "宜宾市"
     },
     "WebPortal": {
       // "SystemSettingsTheme": "class=gray2",

+ 2 - 1
src/DataSharing.Host/config/appsettings.json

@@ -113,7 +113,8 @@
     },
     //系统市州编码
     "CityCode": {
-      "AreaCode": "511500"
+      "AreaCode": "511500",
+      "AreaName": "宜宾市"
     },
     //新老数据交换配置
     "SendDataOld": {

+ 7 - 0
src/DataSharing.Share/Consts/ConstantSettings.cs

@@ -0,0 +1,7 @@
+namespace DataSharing.Share.Consts
+{
+    public class ConstantSettings
+    {
+        public const string ConfigurationInformationCacheKey = "configurationInformationCacheKey";
+    }
+}

+ 14 - 8
src/DataSharing.Share/Dtos/HotlineSetting/HotlineClientResponse.cs

@@ -1,11 +1,4 @@
-using DataSharing.Share.Enums;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace DataSharing.Share.Dtos.HotlineSetting
+namespace DataSharing.Share.Dtos.HotlineSetting
 {
     public class HotlineClientResponse
     {
@@ -23,4 +16,17 @@ namespace DataSharing.Share.Dtos.HotlineSetting
 
         public string password { get; set; }
     }
+
+    public class SubmitCaseTotalnfoResponse
+    {
+        public SubmitCaseTotalnfo result { get; set; }
+        public int code { get; set; }
+        public string message { get; set; }
+        public string error { get; set; }
+    }
+
+    public class SubmitCaseTotalnfo
+    {
+        public int Totle { get; set; }
+    }
 }

+ 38 - 0
src/DataSharing.Share/Dtos/HotlineWeb/ConfigurationInformationDto.cs

@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DataSharing.Share.Dtos.HotlineWeb
+{
+    public class ConfigurationInformationDto
+    {
+        public string Id { get; set; }
+
+        /// <summary>
+        /// 在线服务代表数
+        /// </summary>
+        public int CrntSeatNum { get; set; }
+
+        /// <summary>
+        /// 通话服务代表数
+        /// </summary>
+        public int CrntTelNum { get; set; }
+
+        /// <summary>
+        /// 坐席数(个)
+        /// </summary>
+        public int SeatNum { get; set; }
+
+        /// <summary>
+        /// 坐席话务员数(个)
+        /// </summary>
+        public int SeatHwyNum { get; set; }
+
+        /// <summary>
+        /// 未接通通话记录最多上传条数
+        /// </summary>
+        public int MissedCallCount { get; set; }
+    }
+}

+ 29 - 0
src/DataSharing.Share/Dtos/HotlineWeb/TelCallInfoDto.cs

@@ -0,0 +1,29 @@
+namespace DataSharing.Share.Dtos.HotlineWeb
+{
+    public class TelCallInfoDto
+    {
+        /// <summary>
+        /// 总量
+        /// </summary>
+        public int CountNum { get; set; }
+
+        /// <summary>
+        /// 已接通
+        /// </summary>
+        public int ConnectNum { get; set; }
+
+        /// <summary>
+        /// 接通率
+        /// </summary>
+        public double ConnectionRate => CalcConnectionRate();
+
+        public double CalcConnectionRate()
+        {
+            if (CountNum != 0 && ConnectNum != 0)
+            {
+                return Math.Round((ConnectNum / (double)CountNum) * 100, 2);
+            }
+            return 0;
+        }
+    }
+}

+ 2 - 0
src/DataSharing/ChannelConfiguration.cs

@@ -146,6 +146,8 @@
         /// 
         /// </summary>
         public string AreaCode { get; set; } = string.Empty;
+
+        public string AreaName { get; set; } = string.Empty;
     }
 
     /// <summary>

+ 43 - 0
src/DataSharing/HotlineWeb/ConfigurationInformation.cs

@@ -0,0 +1,43 @@
+using SqlSugar;
+using System.ComponentModel;
+using XF.Domain.Repository;
+
+namespace DataSharing.HotlineWeb
+{
+    /// <summary>
+    /// 系统设置表
+    /// </summary>
+    [Description("系统设置表")]
+    public class ConfigurationInformation : CreationEntity
+    {
+        /// <summary>
+        /// 在线服务代表数
+        /// </summary>
+        [SugarColumn(ColumnDescription = "在线服务代表数")]
+        public int CrntSeatNum { get; set; }
+
+        /// <summary>
+        /// 通话服务代表数
+        /// </summary>
+        [SugarColumn(ColumnDescription = "通话服务代表数")]
+        public int CrntTelNum { get; set; }
+
+        /// <summary>
+        /// 坐席数(个)
+        /// </summary>
+        [SugarColumn(ColumnDescription = "坐席数(个)")]
+        public int SeatNum { get; set; }
+
+        /// <summary>
+        /// 坐席话务员数(个)
+        /// </summary>
+        [SugarColumn(ColumnDescription = "坐席话务员数(个)")]
+        public int SeatHwyNum { get; set; }
+
+        /// <summary>
+        /// 未接通通话记录最多上传条数
+        /// </summary>
+        [SugarColumn(ColumnDescription = "未接通通话记录最多上传条数",DefaultValue ="0")]
+        public int MissedCallCount { get; set; }
+    }
+}

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

@@ -17,16 +17,12 @@ namespace DataSharing.Province
     public class PusherProviderService : IPusherProviderService, IScopeDependency
     {
         #region 注入
-        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;
         private readonly IRepository<DsSendTaskInfo> _dsSendTaskInfoRepository;
         private readonly IRepository<DsOrder> _dataOrderRepository;
         private readonly IRepository<DsTelCall> _dsTelCallRepository;
@@ -34,41 +30,31 @@ namespace DataSharing.Province
         /// <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>
-        /// <param name="sendCaseInfoRepository"></param>
-        /// <param name="getCaseDistrecordSendRepository"></param>
-        /// <param name="capPublisher"></param>
         /// <param name="dsSendTaskInfoRepository"></param>
         /// <param name="dataOrderRepository"></param>
-        public PusherProviderService(IMapper mapper, ILogger<PusherProviderService> logger,
+        /// <param name="dsTelCallRepository"></param>
+        public PusherProviderService(ILogger<PusherProviderService> logger,
             IChannelConfigurationManager channelConfigurationManager,
             IHttpClientFactory httpClientFactory,
             XieTongClient xieTongClient,
             HuiJuClient huiJuClient,
             IRepository<DsSendTask> dsSendTaskRepository,
-            IRepository<DsSendCaseInfo> sendCaseInfoRepository,
-            IRepository<DsGetCaseDistrecordSend> getCaseDistrecordSendRepository,
-            ICapPublisher capPublisher,
             IRepository<DsSendTaskInfo> dsSendTaskInfoRepository,
             IRepository<DsOrder> dataOrderRepository,
             IRepository<DsTelCall> dsTelCallRepository)
         {
-            _mapper = mapper;
             _logger = logger;
             _channelConfigurationManager = channelConfigurationManager;
             _httpClientFactory = httpClientFactory;
             _xieTongClient = xieTongClient;
             _huiJuClient = huiJuClient;
             _dsSendTaskRepository = dsSendTaskRepository;
-            _sendCaseInfoRepository = sendCaseInfoRepository;
-            _getCaseDistrecordSendRepository = getCaseDistrecordSendRepository;
-            _capPublisher = capPublisher;
             _dsSendTaskInfoRepository = dsSendTaskInfoRepository;
             _dataOrderRepository = dataOrderRepository;
             _dsTelCallRepository = dsTelCallRepository;
@@ -181,83 +167,6 @@ 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 baseAddress = configProvince.XieTong;
-                    if (!baseAddress.EndsWith('/'))
-                        baseAddress += "/";
-
-                    var url = baseAddress + "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>

+ 259 - 0
src/DataSharing/SendTask/TaskCaseDistrecordJob.cs

@@ -0,0 +1,259 @@
+using DataSharing.Province;
+using DataSharing.RawData;
+using DataSharing.Share.Consts;
+using DataSharing.Share.Dtos.HotlineWeb;
+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.Extensions.Logging;
+using Quartz;
+using SqlSugar;
+using XF.Domain.Cache;
+using XF.Domain.Repository;
+
+namespace DataSharing.SendTask
+{
+    public class TaskCaseDistrecordJob : IJob, IDisposable
+    {
+        private readonly ILogger<TaskLoadJob> _logger;
+        private readonly IRepository<DsSendCaseInfo> _sendCaseInfoRepository;
+        private readonly IChannelConfigurationManager _channelConfigurationManager;
+        private readonly XieTongClient _xieTongClient;
+        private readonly IMapper _mapper;
+        private readonly IRepository<DsGetCaseDistrecordSend> _getCaseDistrecordSendRepository;
+        private readonly ICapPublisher _capPublisher;
+        private readonly ITypedCache<ConfigurationInformationDto> _configurationInformationCache;
+        private readonly IRepository<DsOrder> _dsOrderRepository;
+        private readonly IRepository<DsTelCall> _dsTelCallRepository;
+        private readonly IRepository<DsSendTask> _dsSendTaskRepository;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="logger"></param>
+        /// <param name="sendCaseInfoRepository"></param>
+        /// <param name="channelConfigurationManager"></param>
+        /// <param name="xieTongClient"></param>
+        /// <param name="mapper"></param>
+        /// <param name="getCaseDistrecordSendRepository"></param>
+        /// <param name="capPublisher"></param>
+        /// <param name="configurationInformationCache"></param>
+        /// <param name="dsOrderRepository"></param>
+        /// <param name="dsTelCallRepository"></param>
+        /// <param name="dsSendTaskRepository"></param>
+        public TaskCaseDistrecordJob(ILogger<TaskLoadJob> logger,
+            IRepository<DsSendCaseInfo> sendCaseInfoRepository,
+            IChannelConfigurationManager channelConfigurationManager,
+            XieTongClient xieTongClient,
+            IMapper mapper,
+            IRepository<DsGetCaseDistrecordSend> getCaseDistrecordSendRepository,
+            ICapPublisher capPublisher,
+            ITypedCache<ConfigurationInformationDto> configurationInformationCache,
+            IRepository<DsOrder> dsOrderRepository,
+            IRepository<DsTelCall> dsTelCallRepository,
+            IRepository<DsSendTask> dsSendTaskRepository)
+        {
+            _logger = logger;
+            _sendCaseInfoRepository = sendCaseInfoRepository;
+            _channelConfigurationManager = channelConfigurationManager;
+            _xieTongClient = xieTongClient;
+            _mapper = mapper;
+            _getCaseDistrecordSendRepository = getCaseDistrecordSendRepository;
+            _capPublisher = capPublisher;
+            _configurationInformationCache = configurationInformationCache;
+            _dsOrderRepository = dsOrderRepository;
+            _dsTelCallRepository = dsTelCallRepository;
+            _dsSendTaskRepository = dsSendTaskRepository;
+        }
+
+        public async Task Execute(IJobExecutionContext context)
+        {
+            //实时服务上报
+            await SendRealTimeStatusAsync(context.CancellationToken);
+
+            #region 定时拉取12315的数据
+            //定时拉取12315的数据
+            var listSendCaseInfo = await _sendCaseInfoRepository
+                    .Queryable()
+                    .Where(p => p.IsEnd == false)
+                    .OrderBy(p => p.CreationTime)
+                    .ToListAsync();
+            //处理数据
+            if (listSendCaseInfo.Any())
+            {
+                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 baseAddress = configProvince.XieTong;
+                    if (!baseAddress.EndsWith('/'))
+                        baseAddress += "/";
+
+                    var url = baseAddress + "rest/market/get_case_distrecord_send";
+                    #endregion
+
+                    var response = await _xieTongClient.RequestAsync<ProvinceDistrecordResponse>(url, "Post", jsonData, context.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, context.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: context.CancellationToken);
+                    }
+
+                    Thread.Sleep(2000);
+                }
+            }
+
+            #endregion
+            _logger.LogError($"进来了时间是{DateTime.Now}");
+        }
+
+        public void Dispose()
+        {
+
+        }
+
+        /// <summary>
+        /// 实时服务上报
+        /// </summary>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        private async Task SendRealTimeStatusAsync(CancellationToken cancellationToken = default)
+        {
+            var areaInfo = _channelConfigurationManager.GetConfigurationCityCode();
+            //实时服务信息
+            SendRealTimeStatusInfo dto = new()
+            {
+                AreaCode = areaInfo.AreaCode,
+                AreaName = areaInfo.AreaName
+            };
+
+            //获取系统配置的数据
+            var configurationInformation = await _configurationInformationCache.GetAsync(ConstantSettings.ConfigurationInformationCacheKey, cancellationToken);
+            if (configurationInformation != null)
+            {
+                dto.CrntSeatNum = configurationInformation.CrntSeatNum;
+                dto.CrntTelNum = configurationInformation.CrntTelNum;
+            }
+
+            #region 数据查询
+            //数据查询
+            var list = await _dsOrderRepository.Queryable()
+                .Where(p => p.CaseDate >= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00")))
+                .Where(p => p.CaseDate <= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59")))
+                .Select(it => new
+                {
+                    it.CaseSourceCode
+                })
+                //.MergeTable()//将查询出来的结果合并成一个新表
+                // .GroupBy(it => new { it.CaseSourceCode })//对新表进行分组
+                 .Select(it => new SendRealTimeStatusInfo
+                 {
+                     TdyNum = SqlFunc.AggregateSum(SqlFunc.IIF(it.CaseSourceCode != "", 1, 0)),
+                     TdyTelNum = SqlFunc.AggregateSum(SqlFunc.IIF(it.CaseSourceCode == "RGDH", 1, 0)),
+                     TdyZwNum = SqlFunc.AggregateSum(SqlFunc.IIF(it.CaseSourceCode == "SCZWFWW", 1, 0)),
+                     TdyWzNum = SqlFunc.AggregateSum(SqlFunc.IIF(it.CaseSourceCode == "YTW" || it.CaseSourceCode == "WZ", 1, 0)),
+                     TdyWxNum = SqlFunc.AggregateSum(SqlFunc.IIF(it.CaseSourceCode == "WX", 1, 0)),
+                     TdyApNum = SqlFunc.AggregateSum(SqlFunc.IIF(it.CaseSourceCode == "AP", 1, 0)),
+                     TdyOtNum = SqlFunc.AggregateSum(SqlFunc.IIF(it.CaseSourceCode != "RGDH" && it.CaseSourceCode != "SCZWFWW"
+                     && it.CaseSourceCode != "YTW" && it.CaseSourceCode != "WZ" && it.CaseSourceCode != "WX" && it.CaseSourceCode != "AP", 1, 0)),
+                 })
+                 .ToListAsync();
+            if (list != null && list.Count > 0)
+            {
+                dto.TdyNum = list.Sum(x => x.TdyNum);
+                dto.TdyTelNum = list.Sum(x => x.TdyTelNum);
+                dto.TdyZwNum = list.Sum(x => x.TdyZwNum);
+                dto.TdyWzNum = list.Sum(x => x.TdyWzNum);
+                dto.TdyWxNum = list.Sum(x => x.TdyWxNum);
+                dto.TdyApNum = list.Sum(x => x.TdyApNum);
+                dto.TdyOtNum = list.Sum(x => x.TdyOtNum);
+            }
+            #endregion
+
+            #region 计算今日接通率
+            //计算今日接通率
+            ///电话
+            var callRate = await _dsTelCallRepository.Queryable()
+              .Where(p => p.OverTime >= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00")) && p.OverTime <= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59")))
+               .Select(p => new TelCallInfoDto
+               {
+                   CountNum = SqlFunc.AggregateSum(SqlFunc.IIF(p.CallId != null, 1, 0)),//总数
+                   ConnectNum = SqlFunc.AggregateSum(SqlFunc.IIF(p.OnState == "1", 1, 0)),//接通
+               })
+               .ToListAsync();
+            if (callRate != null && callRate.Count > 0)
+            {
+                var data = callRate[0];
+                dto.TdyTelRate = data.ConnectionRate;
+            }
+            #endregion
+
+
+            #region 处理请求参数
+            var configProvince = _channelConfigurationManager.GetConfigurationProvince();
+            var request = new ProvinceRequest<SendRealTimeStatusInfo>(configProvince.ClientId, configProvince.ClientSecret);
+            request.SetData(dto);
+            var jsonData = request.ToString();
+            var url = configProvince.HuiJu + "sendrealtimestatus";
+            #endregion
+            //组装参数
+            DsSendTask dsSendTask = new()
+            {
+                TaskPriority = 0,
+                TaskType = "SendRealTimeStatus",
+                HttpMethod = "Post",
+                Path = "sendrealtimestatus",
+                PlatformSource = EPlatformSource.Province,
+                FileJson = null,
+                Request = jsonData,
+                GenerationTime = null,
+                PathType = EPathType.HuiJu
+            };
+            await _dsSendTaskRepository.AddAsync(dsSendTask, cancellationToken);
+
+        }
+    }
+}

+ 1 - 2
src/DataSharing/SendTask/TaskLoadJob.cs

@@ -37,11 +37,10 @@ public class TaskLoadJob : IJob, IDisposable
             }
         }
 
-        //_logger.LogInformation($"load task from db, jobKey: {context.JobDetail.Key}, triggered by : {context.Trigger.Key}");
     }
 
     public void Dispose()
     {
-        //_logger.LogInformation($"{nameof(TaskLoadJob)} disposing");
+       
     }
 }

+ 94 - 0
src/DataSharing/SendTask/TaskSubmitCaseTotalJob.cs

@@ -0,0 +1,94 @@
+using DataSharing.FwDataExchange;
+using DataSharing.Province;
+using DataSharing.Share.Consts;
+using DataSharing.Share.Dtos.HotlineSetting;
+using DataSharing.Share.Dtos.HotlineWeb;
+using DataSharing.Share.Dtos.Province.HuiJu;
+using DataSharing.Share.Enums;
+using Microsoft.Extensions.Logging;
+using Quartz;
+using XF.Domain.Cache;
+using XF.Domain.Repository;
+
+namespace DataSharing.SendTask
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class TaskSubmitCaseTotalJob : IJob, IDisposable
+    {
+        private readonly ILogger<TaskLoadJob> _logger;
+        private readonly FwClient _fwClient;
+        private readonly ITypedCache<ConfigurationInformationDto> _configurationInformationCache;
+        private readonly IChannelConfigurationManager _channelConfigurationManager;
+        private readonly IRepository<DsSendTask> _dsSendTaskRepository;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="fwClient"></param>
+        /// <param name="configurationInformationCache"></param>
+        /// <param name="channelConfigurationManager"></param>
+        /// <param name="dsSendTaskRepository"></param>
+        public TaskSubmitCaseTotalJob(  ILogger<TaskLoadJob> logger,FwClient fwClient,
+              ITypedCache<ConfigurationInformationDto> configurationInformationCache,
+              IChannelConfigurationManager channelConfigurationManager,
+              IRepository<DsSendTask> dsSendTaskRepository)
+        {
+            _logger = logger;
+            _fwClient = fwClient;
+            _configurationInformationCache = configurationInformationCache;
+            _channelConfigurationManager = channelConfigurationManager;
+            _dsSendTaskRepository = dsSendTaskRepository;
+        }
+
+        public async Task Execute(IJobExecutionContext context)
+        {
+            _logger.LogError($"数据汇聚,进来了时间是{DateTime.Now}");
+
+            var data = await _fwClient.RequestNoTokenAsync<SubmitCaseTotalnfoResponse>("api/v1/Order/get-orderurge-count", "Get", null);
+            var areaInfo = _channelConfigurationManager.GetConfigurationCityCode();
+            SubmitCaseTotalInfo submitCaseTotal = new()
+            {
+                AreaCode = areaInfo.AreaCode,
+                SubmitDate = Convert.ToDateTime(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd 00:00:00"))
+            };
+            if (data != null && data.code == 0)
+            {
+                submitCaseTotal.CBZL = data.result.Totle;
+            }
+            var configurationInformation = await _configurationInformationCache.GetAsync(ConstantSettings.ConfigurationInformationCacheKey, context.CancellationToken);
+            if (configurationInformation != null)
+            {
+                submitCaseTotal.SeatNum = configurationInformation.SeatNum;
+                submitCaseTotal.SeatHwyNum = configurationInformation.SeatHwyNum;
+            }
+            #region 处理请求参数
+            var configProvince = _channelConfigurationManager.GetConfigurationProvince();
+            var request = new ProvinceListRequest<SubmitCaseTotalInfo>(configProvince.ClientId, configProvince.ClientSecret);
+            request.SetData(new List<SubmitCaseTotalInfo>() { submitCaseTotal });
+            var jsonData = request.ToString();
+
+            #endregion
+            //组装参数
+            DsSendTask dsSendTask = new()
+            {
+                TaskPriority = 0,
+                TaskType = "SubmitCaseTotal",
+                HttpMethod = "Post",
+                Path = "submit_case_total",
+                PlatformSource = EPlatformSource.Province,
+                FileJson = null,
+                Request = jsonData,
+                GenerationTime = null,
+                PathType = EPathType.HuiJu
+            };
+            await _dsSendTaskRepository.AddAsync(dsSendTask, context.CancellationToken);
+
+        }
+        public void Dispose()
+        {
+
+        }
+    }
+}