浏览代码

新增省推送增加回访信息
修改融媒体查询历史数据接口

tangjiang 6 月之前
父节点
当前提交
d48b16e0de

+ 392 - 1
src/DataSharing.Host/Controllers/HotlineWebController.cs

@@ -18,6 +18,7 @@ using DataSharing.Share.Dtos.Common;
 using DataSharing.Share.Dtos.FwDataExchange;
 using DataSharing.Share.Dtos.HotlineSetting;
 using DataSharing.Share.Dtos.HotlineWeb;
+using DataSharing.Share.Dtos.Statistics;
 using DataSharing.Share.Enums;
 using DataSharing.Share.Requests;
 using DataSharing.YiBin.ConvergenceMedia;
@@ -25,11 +26,13 @@ using DataSharing.YiBin.Enterprise;
 using DotNetCore.CAP;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.Order;
+using Hotline.Share.Enums.CallCenter;
 using MapsterMapper;
 using MediatR;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
 using Org.BouncyCastle.Utilities;
+using Serilog.Filters;
 using SqlSugar;
 using StackExchange.Redis;
 using System.Security.Cryptography;
@@ -38,6 +41,7 @@ using XC.RSAUtil;
 using XF.Domain.Cache;
 using XF.Domain.Exceptions;
 using XF.Domain.Repository;
+using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
 
 namespace DataSharing.Host.Controllers
 {
@@ -737,7 +741,7 @@ jxrWXHbT1FB6DqkdOnBbQqS1Azqz5HxLlSyEK3F60e3SgB5iZsDZ
                     operationLog.ReceiveServiceInterface = data.TaskType;
                     operationLog.Path = data.Path;
                     operationLog.RequestData = data.Request;
-                    resultId = await _initPushDataService.InitDsSendTaskProvinceOther(data.TaskType, data.Path, data.ProvinceNo, data.Request, data.RequestData, data.HttpMethod, data.PathType.Value, data.FileJson, data.GenerationTime, HttpContext.RequestAborted);
+                    resultId = await _initPushDataService.InitDsSendTaskProvinceOther(data.TaskType, data.Path, data.ProvinceNo, data.Request, data.RequestData, data.HttpMethod, data.PathType.Value, data.FileJson, data.GenerationTime, cancellationToken: HttpContext.RequestAborted);
                 }
             }
 
@@ -1434,5 +1438,392 @@ jxrWXHbT1FB6DqkdOnBbQqS1Azqz5HxLlSyEK3F60e3SgB5iZsDZ
             }
             return new PagedDto<DsReceiveHandleData>(total, items);
         }
+
+        /// <summary>
+        /// 数据汇聚情况
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet("get_data_aggregation_situation")]
+        [AllowAnonymous]
+        public List<DataAggregationSituationDto> GetDataAggregationSituation([FromQuery] ReportPagedRequest dto)
+        {
+
+            string strsql = @"
+/*临时表对象*/
+
+/*呼入记录 - 以最后同步成功时间为准*/
+
+CREATE TEMPORARY TABLE ""CASE_RECORD_LAST"" (
+    ""OnState"" varchar(16),""CallLogId""  varchar(50)
+) ON COMMIT PRESERVE ROWS ;
+
+/*呼入总量、呼入接通量*/ 
+
+INSERT INTO ""CASE_RECORD_LAST""(""OnState"",""CallLogId"")
+
+SELECT ""OnState"",""CallLogId""
+
+FROM 
+
+(
+
+SELECT ROW_NUMBER() OVER(PARTITION BY ""CallLogId"" ORDER BY ""LastTime"" DESC) as ""newIndex"",""Id"",""OnState"",""CallLogId"" 
+
+FROM ""ds_send_task_submit_case_record"" 
+
+WHERE ""LastTime"">='{0}' AND ""LastTime""<='{1}' AND ""GenerationTime"">='{0}' AND ""GenerationTime""<='{1}' AND
+
+ ""IsSuccess""=1 AND ""CallDirection""='0'
+
+) SCR WHERE ""newIndex""=1 ;
+
+
+/*呼入记录 - 以第一次同步成功时间为准*/
+CREATE TEMPORARY TABLE ""CASE_RECORD_FIRST"" (
+    ""CallLogId""  varchar(50) ,""GenerationTime"" timestamp,""LastTime"" timestamp
+) ON COMMIT PRESERVE ROWS ;
+
+/*呼入上传话务数据总量、呼入及时上传话务数据量*/ 
+
+INSERT INTO ""CASE_RECORD_FIRST""(""CallLogId"",""GenerationTime"",""LastTime"")
+
+SELECT ""CallLogId"",""GenerationTime"",""LastTime""
+
+FROM 
+
+(
+
+SELECT ROW_NUMBER() OVER(PARTITION BY ""CallLogId"" ORDER BY ""LastTime"" asc) as ""newIndex"",""GenerationTime"",""LastTime"",""CallLogId""
+
+FROM ""ds_send_task_submit_case_record"" 
+
+WHERE ""LastTime"">='{0}' AND ""LastTime""<='{1}' AND ""GenerationTime"">='{0}' AND ""GenerationTime""<='{1}' AND
+
+ ""IsSuccess""=1 AND ""CallDirection""='0'
+
+) SCR WHERE ""newIndex""=1 ;
+
+
+
+
+
+/*服务工单受理记录 - 以第一次同步成功时间为准*/ 
+
+CREATE TEMPORARY TABLE ""CASE_INFO_FIRST"" (
+    ""ProvinceNo""  varchar(50) ,""GenerationTime"" timestamp,""LastTime"" timestamp,""CaseSource"" varchar(20)
+)ON COMMIT PRESERVE ROWS ;
+
+/*上传工单数据总量、及时上传工单数据总量*/
+
+INSERT INTO ""CASE_INFO_FIRST""(""ProvinceNo"",""GenerationTime"",""LastTime"",""CaseSource"")
+
+SELECT ""ProvinceNo"",""GenerationTime"",""LastTime"",""CaseSource""
+
+FROM 
+
+(
+
+SELECT ROW_NUMBER() OVER(PARTITION BY ""ProvinceNo"" ORDER BY ""LastTime"" asc) as ""newIndex"",""Id"",""GenerationTime"",""LastTime"",""ProvinceNo"", ""CaseSource""
+
+FROM ""ds_send_task_submit_case_info""
+
+WHERE ""LastTime"">='{0}' AND ""LastTime""<='{1}' AND ""GenerationTime"">='{0}' AND ""GenerationTime""<='{1}' AND
+
+ ""IsSuccess""=1 
+
+) SCR WHERE ""newIndex""=1 ;
+
+
+
+
+
+/*服务工单受理记录 - 以最后一次同步成功时间为准*/ 
+
+CREATE TEMPORARY TABLE ""CASE_INFO_LAST"" (
+    ""CaseSource"" varchar(50),
+		""ProvinceNo"" varchar(50) ,
+		""TfdBackTimeBf"" timestamp,
+		""CaseProcessType"" varchar(20),
+		""LastTime"" timestamp
+)ON COMMIT PRESERVE ROWS ;
+/*电话工单量、与电话工单匹配的话务数据量*/
+
+INSERT INTO ""CASE_INFO_LAST""(""CaseSource"",""ProvinceNo"",""TfdBackTimeBf"",""CaseProcessType"",""LastTime"")
+
+select ""CaseSource"",""ProvinceNo"",""TfdBackTimeBf"",""CaseProcessType"",""LastTime"" 
+
+from 
+
+(
+
+SELECT ROW_NUMBER() OVER(PARTITION BY ""ProvinceNo"" ORDER BY ""LastTime"" DESC) as ""newIndex"",""Id"",""CaseSource"",""ProvinceNo"",
+ ""ExpiredTime""  ""TfdBackTimeBf"",""RequestData""->> 'CaseProcessType' ""CaseProcessType"",""LastTime""
+
+FROM ""ds_send_task_submit_case_info""
+
+WHERE ""LastTime"">='{0}' AND ""LastTime""<='{1}' AND ""GenerationTime"">='{0}' AND ""GenerationTime""<='{1}' AND
+
+ ""IsSuccess""=1 
+
+) SCR WHERE ""newIndex""=1 ;
+
+
+
+
+/*服务工单结果记录 - 以第一次同步成功时间为准*/
+
+CREATE TEMPORARY TABLE ""CASE_RESULT_FIRST"" (
+		""ProvinceNo"" varchar(50) ,
+		""FiledTime"" timestamp
+)ON COMMIT PRESERVE ROWS ;
+INSERT INTO ""CASE_RESULT_FIRST""(""ProvinceNo"",""FiledTime"")
+
+SELECT ""ProvinceNo"",""FiledTime"" 
+
+FROM
+
+(
+
+SELECT ROW_NUMBER() OVER(PARTITION BY ""ProvinceNo"" ORDER BY ""LastTime"" ASC) as ""newIndex"",""Id"",""ProvinceNo"",""FiledTime""
+
+FROM ""ds_send_task_submit_case_result""
+
+WHERE ""LastTime"">='{0}' AND ""LastTime""<='{1}' AND ""FiledTime"">='{0}' AND ""FiledTime""<='{1}' AND
+
+ ""IsSuccess""=1 
+
+) SCR WHERE ""newIndex""=1 ;
+
+
+/*服务工单结果记录 - 以最后一次同步成功时间为准*/
+
+CREATE TEMPORARY TABLE ""CASE_RESULT_LAST"" (
+		""ProvinceNo"" varchar(50) ,
+		""FiledTime"" timestamp
+)ON COMMIT PRESERVE ROWS ;
+INSERT INTO ""CASE_RESULT_LAST""(""ProvinceNo"",""FiledTime"")
+
+SELECT ""ProvinceNo"",""FiledTime"" 
+
+FROM
+
+(
+
+SELECT ROW_NUMBER() OVER(PARTITION BY ""ProvinceNo"" ORDER BY ""LastTime"" ASC) as ""newIndex"",""Id"",""ProvinceNo"",""FiledTime""
+
+FROM ""ds_send_task_submit_case_result""
+
+WHERE ""LastTime"">='{0}' AND ""LastTime""<='{1}' AND ""FiledTime"">='{0}' AND ""FiledTime""<='{1}' AND
+
+ ""IsSuccess""=1 
+
+) SCR WHERE ""newIndex""=1 ;
+
+
+/*结转工单记录*/
+CREATE TEMPORARY TABLE ""CASE_RELAY"" (
+		""ProvinceNo"" varchar(50) ,
+		""TfdBackTimeBf"" timestamp
+)ON COMMIT PRESERVE ROWS ;
+INSERT INTO ""CASE_RELAY""(""ProvinceNo"",""TfdBackTimeBf"")
+
+SELECT ""ProvinceNo"",""TfdBackTimeBf"" 
+
+FROM 
+
+(
+
+SELECT ROW_NUMBER() OVER(PARTITION BY ""ProvinceNo"" ORDER BY ""CreationTime"" DESC) as ""newIndex"",""Id"",""ProvinceNo"",
+""ExpiredTime"" as ""TfdBackTimeBf"", ""RequestData""->> 'CaseProcessType' ""CaseProcessType""
+
+FROM ""ds_send_task_submit_case_info""
+
+WHERE  ""GenerationTime"">='{2}' AND ""GenerationTime""<='{0}' AND ""IsSuccess""=1 
+
+) SCR WHERE ""newIndex""=1 ;
+
+
+select 
+
+CASE WHEN ""呼入总量"">0 THEN CAST(CAST(((""呼入接通量""*1.0)/""呼入总量"") as decimal(10,5))*100 as decimal(10,3)) ELSE 0 END AS ""CalConnectionRate"" ,
+
+CASE WHEN ""电话工单量"">0 THEN CAST(CAST(((""与电话工单匹配的话务数据量""*1.0)/""电话工单量"") as decimal(10,5))*100 as decimal(10,3)) ELSE 0 END AS ""MatchingRateOfCallData"" ,
+
+CASE WHEN ""呼入上传话务数据总量"">0 THEN CAST(CAST(((""呼入及时上传话务数据量""*1.0)/""呼入上传话务数据总量"") as decimal(10,5))*100 as decimal(10,3)) ELSE 0 END AS ""TimelyUploadRateOfCallData"" ,
+
+CASE WHEN ""上传工单数据总量"">0 THEN CAST(CAST(((""及时上传工单数据总量""*1.0)/""上传工单数据总量"") as decimal(10,5))*100 as decimal(10,3)) ELSE 0 END AS ""TimelyUploadRateOfOrderData"" ,
+
+(""上传工单数据总量""+""结转已办件量""+""结转待办件量"") AS ""AcceptanceQuantity"",
+
+""办结件数""AS ""NumbeOfCompletedCases"",
+
+CASE WHEN (""时间范围按时办结量""+""结转按时已办结量""+""时间范围超期办结量""+""结转超期已办结量""+""时间范围超期未办量""+""结转超期未办量"")>0 
+
+THEN CAST(CAST((((""时间范围按时办结量""+""结转按时已办结量"")*1.0)/(""时间范围按时办结量""+""结转按时已办结量""+""时间范围超期办结量""+""结转超期已办结量""+""时间范围超期未办量""+""结转超期未办量"")) as decimal(10,5))*100 as decimal(10,3)) ELSE 0 END AS ""OnTimeCompletionRate"" ,
+
+""回访量"" AS ""FollowUpVolume"",
+
+""不满意件"" AS ""DissatisfiedItems"",
+
+CASE WHEN ""回访量"">0 THEN CAST(CAST(((""不满意件""*1.0)/""回访量"") as decimal(10,5))*100 as decimal(10,3)) ELSE 0 END AS ""DissatisfactionRate"" ,
+
+""知识库总量"" AS ""KnowledgeTotalNum"",
+
+""更新知识量"" AS ""KnowledgeUpdateTotalNum"",
+
+""省交办单超期量"" as ""OverdueDeliveryOrder"" 
+
+ FROM (
+SELECT 
+
+
+(
+SELECT COUNT(0) ""呼入总量"" FROM ""CASE_RECORD_LAST"" 
+) ""呼入总量"",
+
+(
+SELECT COUNT(0) ""呼入接通量"" FROM ""CASE_RECORD_LAST"" WHERE ""OnState""='1'
+) ""呼入接通量"",
+
+(
+SELECT COUNT(0) ""呼入上传话务数据总量"" FROM ""CASE_RECORD_FIRST"" 
+) ""呼入上传话务数据总量"",
+
+(
+SELECT COUNT(0) ""呼入及时上传话务数据量"" FROM ""CASE_RECORD_FIRST"" WHERE  EXTRACT(EPOCH FROM (""GenerationTime"" - ""LastTime""))  < 180 
+) ""呼入及时上传话务数据量"",
+
+(
+SELECT COUNT(0) ""上传工单数据总量"" FROM ""CASE_INFO_FIRST"" 
+) ""上传工单数据总量"",
+
+(
+SELECT COUNT(0) ""及时上传工单数据总量"" FROM ""CASE_INFO_FIRST"" WHERE  EXTRACT(EPOCH FROM (""GenerationTime"" - ""LastTime""))  < 180 
+) ""及时上传工单数据总量"",
+
+(
+select COUNT(0) ""电话工单量"" from ""CASE_INFO_LAST"" where ""CaseSource""='RGDH' 
+) ""电话工单量"",
+
+(
+SELECT COUNT(0) ""与电话工单匹配的话务数据量"" FROM 
+(
+select ""ProvinceNo"" from ""CASE_INFO_LAST"" where ""CaseSource""='RGDH' 
+) ""SCI"" INNER JOIN
+(
+SELECT ""Id"",""ProvinceNo"" FROM 
+(
+SELECT ROW_NUMBER() OVER(PARTITION BY ""CallLogId"",""ProvinceNo"" ORDER BY ""CreationTime"" DESC) as ""newIndex"",""Id"",""ProvinceNo""
+FROM ""ds_send_task_submit_case_record""
+WHERE ""LastTime"">='{0}' AND ""LastTime""<='{1}' AND ""GenerationTime"">='{0}' AND ""GenerationTime""<='{1}' AND ""IsSuccess""=1 
+        ) SCR WHERE ""newIndex""=1
+) ""SCR"" ON ""SCI"".""ProvinceNo"" = ""SCR"".""ProvinceNo"" 
+) ""与电话工单匹配的话务数据量"",
+
+(
+SELECT COUNT(0) ""结转已办件量"" FROM 
+(
+SELECT ""ProvinceNo"" from ""CASE_RESULT_FIRST""
+)""SCR"" 
+INNER JOIN ""CASE_RELAY"" ""SCI"" ON ""SCR"".""ProvinceNo"" = ""SCI"".""ProvinceNo"" 
+) ""结转已办件量"",
+
+(
+SELECT COUNT(0) ""结转待办件量"" FROM ""CASE_RELAY"" ""CR""
+WHERE NOT EXISTS(SELECT ""Id"" FROM ""ds_send_task_submit_case_result"" WHERE ""ProvinceNo"" = ""CR"".""ProvinceNo"" AND ""IsSuccess""=1)
+) ""结转待办件量"",
+
+(
+SELECT COUNT(0) ""办结件数"" FROM ""CASE_RESULT_FIRST""  ""CRF""
+WHERE EXISTS (SELECT ""Id"" FROM ""ds_send_task_submit_case_info"" WHERE ""ProvinceNo"" = ""CRF"".""ProvinceNo"" AND ""IsSuccess""=1)
+) ""办结件数"",
+
+(
+
+SELECT COUNT(0) ""时间范围按时办结量""  FROM ""CASE_INFO_LAST"" ""SCI"" 
+INNER JOIN ""CASE_RESULT_LAST"" ""SCR"" ON ""SCI"".""ProvinceNo"" = ""SCR"".""ProvinceNo"" 
+WHERE ""TfdBackTimeBf"" >= ""FiledTime"" 
+) ""时间范围按时办结量"",
+
+(
+SELECT COUNT(0) ""结转按时已办结量"" FROM ""CASE_RESULT_FIRST"" ""SCR"" 
+INNER JOIN ""CASE_RELAY"" ""SCI"" ON ""SCR"".""ProvinceNo"" = ""SCI"".""ProvinceNo"" 
+WHERE ""TfdBackTimeBf"" >= ""FiledTime"" 
+) ""结转按时已办结量"",
+
+(
+SELECT COUNT(0) ""时间范围超期办结量"" FROM ""CASE_INFO_LAST"" ""SCI"" 
+INNER JOIN ""CASE_RESULT_LAST"" ""SCR"" ON ""SCI"".""ProvinceNo"" = ""SCR"".""ProvinceNo"" 
+WHERE ""FiledTime"" > ""TfdBackTimeBf"" 
+) ""时间范围超期办结量"",
+
+(
+SELECT COUNT(0) ""结转超期已办结量"" FROM ""CASE_RESULT_FIRST"" ""SCR"" 
+INNER JOIN ""CASE_RELAY"" ""SCI"" ON ""SCR"".""ProvinceNo"" = ""SCI"".""ProvinceNo"" 
+WHERE ""FiledTime"" > ""TfdBackTimeBf"" 
+) ""结转超期已办结量"",
+
+(
+SELECT COUNT(0) ""时间范围超期未办量"" FROM ""CASE_INFO_LAST"" ""CIL""
+WHERE '{1}'  > ""TfdBackTimeBf"" AND
+ NOT EXISTS(SELECT ""Id"" FROM ""ds_send_task_submit_case_result"" WHERE ""CIL"".""ProvinceNo"" = ""ProvinceNo"" AND ""LastTime""<='{1}'   AND ""IsSuccess""=1)
+) ""时间范围超期未办量"",
+
+(
+SELECT COUNT(0) ""结转超期未办量"" FROM ""CASE_RELAY""  ""CR"" 
+WHERE NOT EXISTS(SELECT ""Id"" FROM ""ds_send_task_submit_case_result"" WHERE ""CR"".""ProvinceNo"" = ""ProvinceNo""  AND ""IsSuccess""=1) AND now() > ""TfdBackTimeBf"" 
+) ""结转超期未办量"",
+
+(
+SELECT COUNT(0) ""回访量"" FROM 
+(
+SELECT ROW_NUMBER() OVER(PARTITION BY ""ProvinceNo"" ORDER BY ""CreationTime"" ASC) as ""newIndex"",""Id"",""ProvinceNo"" FROM ""ds_send_task_province_other""
+WHERE ""LastTime"">='{0}' AND ""LastTime""<='{1}' AND ""VisitTime""='{0}' AND ""VisitTime""<='{1}' AND  ""IsSuccess""=1 
+) ""SVI"" WHERE ""newIndex""=1 
+AND EXISTS (SELECT ""Id"" FROM ""ds_send_task_submit_case_info"" 
+WHERE ""ProvinceNo"" = ""ProvinceNo"" AND ""LastTime"">='{0}' AND ""LastTime""<='{1}' AND ""IsSuccess""=1 )
+) ""回访量"",
+
+(
+SELECT COUNT(0) ""不满意件""FROM 
+(
+SELECT ROW_NUMBER() OVER(PARTITION BY ""ProvinceNo"" ORDER BY ""CreationTime"" DESC) as ""newIndex"",""Id"",""ProvinceNo"",""SubjectResultSatify"" FROM ""ds_send_task_province_other""
+WHERE ""LastTime"">='{0}' AND ""LastTime""<='{1}' AND ""VisitTime"">='{0}' AND ""VisitTime""<='{1}' AND ""IsSuccess""=1 
+) ""SVI"" 
+WHERE ""newIndex""=1 AND (""SubjectResultSatify""='1' OR ""SubjectResultSatify""='2') AND EXISTS (
+SELECT ""Id"" FROM ""ds_send_task_submit_case_info""
+WHERE ""ProvinceNo"" = ""ProvinceNo"" AND ""LastTime"">='{0}' AND ""LastTime""<='{1}' AND ""IsSuccess""=1 )
+) ""不满意件"",
+
+(
+SELECT COUNT(0) ""知识库总量"" FROM ""ds_send_task_province_other"" WHERE ""CreationTime"" <= '{1}' and ""IsSuccess""=1 and ""Path""='get_knowledge_info_send'
+) ""知识库总量"",
+
+(
+SELECT COUNT(0) ""更新知识量"" FROM
+(
+SELECT ROW_NUMBER() OVER(PARTITION BY ""ProvinceNo"" ORDER BY ""CreationTime"" ASC) as ""newIndex"",""Id"",""ProvinceNo""
+FROM ""ds_send_task_province_other"" 
+WHERE ""CreationTime"">='{0}' AND ""CreationTime""<='{1}' and ""IsSuccess""=1 and ""Path""='get_knowledge_info_update'
+) ""GKIU"" WHERE ""newIndex""=1 
+) ""更新知识量"",
+
+(
+0
+) ""省交办单超期量""
+
+)""_data""
+
+
+";
+
+            strsql = string.Format(strsql, dto.StartTime, dto.EndTime, dto.StartTime.Value.AddMonths(-3));
+
+            return _waitSendTaskRepository.GetDataAggregationSituation(strsql);
+
+        }
+
+
     }
 }

+ 139 - 52
src/DataSharing.Host/Controllers/YiBin/ConvergenceMediaController.cs

@@ -282,10 +282,43 @@ namespace DataSharing.Host.Controllers.YiBin
                 HandleStateCode = dto.HandleStateCode,
             };
 
+            List<GetOrderMediaDataListDto> listData = [];
+            string strFromType = "IYB";
+            if (accountDto.PlatformSource == "ConvergenceMedia")
+            {
+                strFromType = "ybrmt";
+            }
+            //查询旧系统
+            Dictionary<string, object> dic = new Dictionary<string, object>
+                {
+                    { "AcceptCode", dto.AcceptCode },
+                    { "Title", dto.Title },
+                    { "Mobile", dto.Mobile},
+                    { "PurTypeID", dto.PurTypeID},
+                    { "HandleStateCode", dto.HandleStateCode},
+                    { "StartDate", dto.StartDate},
+                    { "EndDate", dto.EndDate},
+                    {"StrFromType",strFromType },
+                    { "CurrentPage", 1},
+                    { "PageSize", 500 },
+                };
+            var strUrl = _sharingConfigurationManager.GetYiBinConfig().IYB.QueryOldList + "yb12345/iyb.asmx/GetOrderByListNew";
+            var strResultData = e_SendHttpPostBySync(strUrl, dic);
+            if (!string.IsNullOrEmpty(strResultData))
+            {
+                JObject job = (JObject)JsonConvert.DeserializeObject(strResultData);
+                if (job != null && "1" == job["code"].ToString())
+                {
+                    if (!string.IsNullOrEmpty(job["dataInfo"].ToString()) && !string.IsNullOrEmpty(job["dataInfo"]["data"].ToString()))
+                    {
+                        listData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<GetOrderMediaDataListDto>>(job["dataInfo"]["data"].ToString().ToString());
+                    }
+                }
+            }
+
             var result = await _fwClient.RequestNoTokenAsync<HotlineClientDataSharingResponse<PagedDto<OrderDto>>>("api/v1/DataSharing/get_order_list_own",
                 "Post", System.Text.Json.JsonSerializer.Serialize(orderList));
             int nPageCount = 0;
-            List<GetOrderMediaDataListDto> listData = [];
             if (result != null && result.code == 0)
             {
                 if (result.result.Items != null && result.result.Items.Count > 0)
@@ -310,6 +343,17 @@ namespace DataSharing.Host.Controllers.YiBin
                     }
                 }
             }
+            var list = listData.OrderByDescending(p => p.AddDate).ToList();
+            int skip = dto.CurrentPage - 1;
+            List<GetOrderMediaDataListDto> listDataReturn = [];
+            listDataReturn = list.Skip(skip * dto.PageSize).Take(dto.PageSize).ToList();
+            int rowIDNew = 0;
+            foreach (var item in listDataReturn)
+            {
+                rowIDNew++;
+                item.RowID = ((dto.CurrentPage - 1) * dto.PageSize) + rowIDNew + "";
+            }
+            nPageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(list.Count) / dto.PageSize));
 
             List<GetOrderMediaDataDto> returnData = new()
             {
@@ -317,10 +361,89 @@ namespace DataSharing.Host.Controllers.YiBin
             new()
             {
                 PageCount = nPageCount,
-                data = listData
+                data = listDataReturn
             } };
 
             return OpenResponse.Ok(ConvergenceMediaDeResponse<List<GetOrderMediaDataDto>>.Success(returnData, "成功"));
+            ////密钥验证
+            //var accountDto = await _dsUserTokenInfoService.CheckAccountAsync(dto.Code, HttpContext.RequestAborted);
+            //if (accountDto is null || accountDto.IsCheckAccount == false)
+            //{
+            //    List<ConvergenceMediaDeResponse<string>> convergenceMediaDes = new() {
+            //    new()
+            //    {
+            //        msg = "密钥错误",
+            //        code = "-900",
+            //        data = ""
+            //    } };
+
+            //    return OpenResponse.Ok(ConvergenceMediaDeResponse<List<ConvergenceMediaDeResponse<string>>>.Failed(convergenceMediaDes, "0", "失败"));
+            //}
+
+            ////数据处理
+            //string acceptTypeCode = dto.PurTypeID switch
+            //{
+            //    17 => "10",
+            //    18 => "30",
+            //    19 => "35",
+            //    20 => "20",
+            //    21 => "15",
+            //    25 => "40",
+            //    _ => "",
+            //};
+            //GetOrderList orderList = new()
+            //{
+            //    SourceChannelCode = GetChannelCode(accountDto.PlatformSource),
+            //    No = dto.AcceptCode,
+            //    Title = dto.Title,
+            //    Mobile = dto.Mobile,
+            //    AcceptTypeCode = acceptTypeCode,
+            //    StartTime = string.IsNullOrEmpty(dto.StartDate) == true ? null : Convert.ToDateTime(dto.StartDate),
+            //    EndTime = string.IsNullOrEmpty(dto.EndDate) == true ? null : Convert.ToDateTime(dto.EndDate).AddDays(1),
+            //    PageIndex = dto.CurrentPage,
+            //    PageSize = dto.PageSize,
+            //    HandleStateCode = dto.HandleStateCode,
+            //};
+
+            //var result = await _fwClient.RequestNoTokenAsync<HotlineClientDataSharingResponse<PagedDto<OrderDto>>>("api/v1/DataSharing/get_order_list_own",
+            //    "Post", System.Text.Json.JsonSerializer.Serialize(orderList));
+            //int nPageCount = 0;
+            //List<GetOrderMediaDataListDto> listData = [];
+            //if (result != null && result.code == 0)
+            //{
+            //    if (result.result.Items != null && result.result.Items.Count > 0)
+            //    {
+            //        //计算总页数
+            //        nPageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(result.result.Total) / dto.PageSize));
+            //        int rowID = 0;
+            //        foreach (var item in result.result.Items)
+            //        {
+            //            rowID++;
+            //            listData.Add(new GetOrderMediaDataListDto()
+            //            {
+            //                RowID = ((dto.CurrentPage - 1) * dto.PageSize) + rowID + "",
+            //                FlowID = item.Id,
+            //                Code = item.No,
+            //                Title = item.Title,
+            //                AddDate = item.CreationTime.ToString("yyyy-MM-dd HH:mm:ss"),
+            //                FromName = item.SourceChannel,
+            //                PurTypeName = item.AcceptType,
+            //                ResultState = item.Status >= EOrderStatus.Filed ? "办理完成" : "办理中"
+            //            });
+            //        }
+            //    }
+            //}
+
+            //List<GetOrderMediaDataDto> returnData = new()
+            //{
+            ////处理返回
+            //new()
+            //{
+            //    PageCount = nPageCount,
+            //    data = listData
+            //} };
+
+            //return OpenResponse.Ok(ConvergenceMediaDeResponse<List<GetOrderMediaDataDto>>.Success(returnData, "成功"));
 
         }
 
@@ -630,40 +753,14 @@ namespace DataSharing.Host.Controllers.YiBin
                 AcceptTypeCode = acceptTypeCode,
                 StartTime = string.IsNullOrEmpty(dto.StartDate) == true ? null : Convert.ToDateTime(dto.StartDate),
                 EndTime = string.IsNullOrEmpty(dto.EndDate) == true ? null : Convert.ToDateTime(dto.EndDate).AddDays(1),
-                PageIndex = 1,
+                PageIndex = pageIndex,
                 PageSize = pageSize,
             };
-            getOrder.PageSize = 1000;
-            if (getOrder.StartTime.HasValue == false) getOrder.StartTime = DateTime.Now.AddMonths(-2);
-            if (getOrder.EndTime.HasValue == false) getOrder.EndTime = DateTime.Now;
+       
             List<GetOrderMediaDataListDto> listData = [];
-            //查询旧系统
-            Dictionary<string, object> dic = new Dictionary<string, object>
-                {
-                    { "Title", dto.Title },
-                    { "PurTypeID", dto.PurTypeID },
-                    { "StartDate", getOrder.StartTime },
-                    { "EndDate", getOrder.EndTime},
-                    { "CurrentPage", 1},
-                    { "PageSize", getOrder.PageSize },
-                };
-            var strUrl = _sharingConfigurationManager.GetYiBinConfig().IYB.QueryOldList + "yb12345/iyb.asmx/GetOrderByListOpenNew";
-            var strResultData = e_SendHttpPostBySync(strUrl, dic);
-            if (!string.IsNullOrEmpty(strResultData))
-            {
-                JObject job = (JObject)JsonConvert.DeserializeObject(strResultData);
-                if (job != null && "1" == job["code"].ToString())
-                {
-                    if (!string.IsNullOrEmpty(job["dataInfo"].ToString()) && !string.IsNullOrEmpty(job["dataInfo"]["data"].ToString()))
-                    {
-                        listData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<GetOrderMediaDataListDto>>(job["dataInfo"]["data"].ToString().ToString());
-                    }
-                }
-            }
-
 
             //查询新系统
-            var result = await _fwClient.RequestNoTokenAsync<HotlineClientDataSharingResponse<PagedDto<PublishDto>>>("api/v1/DataSharing/get_order_list_publish",
+            var result = await _fwClient.RequestNoTokenAsync<HotlineClientDataSharingResponse<PagedDto<PublishOrderAllDto>>>("api/v1/DataSharing/get_order_list_publish_all",
                "Post", System.Text.Json.JsonSerializer.Serialize(getOrder));
             int nPageCount = 0;
 
@@ -680,37 +777,27 @@ namespace DataSharing.Host.Controllers.YiBin
                         listData.Add(new GetOrderMediaDataListDto()
                         {
                             RowID = ((pageIndex - 1) * pageSize) + rowID + "",
-                            FlowID = item.Id,
-                            Code = item.No,
+                            FlowID = item.OrderId,
+                            Code = item.OrderNo,
                             Title = item.Title,
-                            AddDate = item.CreationTime.ToString("yyyy-MM-dd HH:mm:ss"),
+                            AddDate = item.AcceptTime.Value.ToString("yyyy-MM-dd HH:mm:ss"),
                             FromName = item.SourceChannel,
                             PurTypeName = item.AcceptType,
-                            ResultState = item.Status >= EOrderStatus.Filed ? "办理完成" : "办理中",
-                            PubDate = item.PublishTime.HasValue == true ? item.PublishTime.Value.ToString("yyyy-MM-dd HH:mm:ss") : ""
+                            ResultState = item.State,
+                            PubDate = item.PubDate.HasValue == true ? item.PubDate.Value.ToString("yyyy-MM-dd HH:mm:ss") : ""
                         });
                     }
                 }
             }
 
-            var list = listData.OrderByDescending(p => p.AddDate).ToList();
-            int skip = pageIndex - 1;
-            List<GetOrderMediaDataListDto> listDataReturn = [];
-            listDataReturn = list.Skip(skip * pageSize).Take(pageSize).ToList();
-            int rowIDNew = 0;
-            foreach (var item in listDataReturn)
-            {
-                rowIDNew++;
-                item.RowID = ((pageIndex - 1) * pageSize) + rowIDNew + "";
-            }
-            nPageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(list.Count) / pageSize));
-            //返回数据处理
             List<GetOrderMediaDataDto> dataDto = new()
             {
-              new(){  PageCount = nPageCount,
-                data = listDataReturn
-              }
-            };
+            //处理返回
+            new()
+            {
+                PageCount = nPageCount,
+                data = listData
+            } };
 
             return OpenResponse.Ok(ConvergenceMediaDeResponse<List<GetOrderMediaDataDto>>.Success(dataDto, "成功"));
         }

+ 11 - 36
src/DataSharing.Repository/WaitSendTaskRepository.cs

@@ -1,7 +1,6 @@
 using DataSharing.Province.SendTask;
 using DataSharing.Province.SendTask.ProvinceOther;
-using DataSharing.Share.Dtos.HotlineWeb;
-using DataSharing.Share.Enums;
+using DataSharing.Share.Dtos.Statistics;
 using SqlSugar;
 using XF.Domain.Dependency;
 
@@ -19,39 +18,15 @@ namespace DataSharing.Repository
             return Db.UnionAll(queryables);
         }
 
-        ///// <summary>
-        ///// 
-        ///// </summary>
-        ///// <param name="t1"></param>
-        ///// <param name="t2"></param>
-        ///// <param name="t3"></param>
-        ///// <param name="t4"></param>
-        ///// <returns></returns>
-        //public ISugarQueryable<DsWaitSendTaskDto> UnionAll(ISugarQueryable<DsWaitSendTaskDto> t1,
-        //    ISugarQueryable<DsWaitSendTaskDto> t2,
-        //    ISugarQueryable<DsWaitSendTaskDto> t3,
-        //    ISugarQueryable<DsWaitSendTaskDto> t4,
-        //    ISugarQueryable<DsWaitSendTaskDto> t5)
-        //{
-        //    return Db.UnionAll(t1, t2, t3, t4, t5)
-        //          .Select(p => new DsWaitSendTaskDto
-        //          {
-        //              Id = p.Id,
-        //              ProvinceNo = p.ProvinceNo,
-        //              FirstTime = p.FirstTime,
-        //              LastTime = p.LastTime,
-        //              SendTimes = p.SendTimes,
-        //              PlatformSource = EPlatformSource.Province,
-        //              TaskType = p.TaskType,
-        //              HttpMethod = p.HttpMethod,
-        //              Path = p.Path,
-        //              Request = p.Request,
-        //              PathType = p.PathType,
-        //              GenerationTime = p.GenerationTime,
-        //              CreationTime=p.CreationTime,
-        //              State = p.State
-        //          })
-        //        .MergeTable();
-        //}
+        /// <summary>
+        /// 汇聚数据查询
+        /// </summary>
+        /// <param name="sql"></param>
+        /// <returns></returns>
+        public List<DataAggregationSituationDto> GetDataAggregationSituation(string sql)
+        {
+            return Db.Ado.SqlQuery<DataAggregationSituationDto>(sql);
+
+        }
     }
 }

+ 74 - 0
src/DataSharing.Share/Dtos/Statistics/DataAggregationSituationDto.cs

@@ -0,0 +1,74 @@
+namespace DataSharing.Share.Dtos.Statistics
+{
+    /// <summary>
+    /// 话务数据
+    /// </summary>
+    public class DataAggregationSituationDto
+    {
+        /// <summary>
+        /// 话务接通率
+        /// </summary>
+        public string CalConnectionRate { get; set; }
+
+        /// <summary>
+        /// 话务数据匹配率
+        /// </summary>
+        public string MatchingRateOfCallData { get; set; }
+
+        /// <summary>
+        /// 话务数据及时上传率
+        /// </summary>
+        public string TimelyUploadRateOfCallData { get; set; }
+
+        /// <summary>
+        /// 工单数据及时上传率
+        /// </summary>
+        public string TimelyUploadRateOfOrderData { get; set; }
+
+        /// <summary>
+        /// 受理量
+        /// </summary>
+        public string AcceptanceQuantity { get; set; }
+
+        /// <summary>
+        /// 办结件数
+        /// </summary>
+        public string NumbeOfCompletedCases { get; set; }
+
+        /// <summary>
+        /// 按时办结率
+        /// </summary>
+        public string OnTimeCompletionRate { get; set; }
+
+        /// <summary>
+        /// 回访量
+        /// </summary>
+        public string FollowUpVolume { get; set; }
+
+        /// <summary>
+        /// 不满意件
+        /// </summary>
+        public string DissatisfiedItems { get; set; }
+
+        /// <summary>
+        /// 不满意率
+        /// </summary>
+        public string DissatisfactionRate { get; set; }
+
+        /// <summary>
+        /// 知识库总量
+        /// </summary>
+        public string KnowledgeTotalNum { get; set; }
+
+        /// <summary>
+        /// 知识库更新数量
+        /// </summary>
+        public string KnowledgeUpdateTotalNum { get; set; }
+
+        /// <summary>
+        /// 省交办单超期量
+        /// </summary>
+        public string OverdueDeliveryOrder { get; set; }
+    }
+
+}

+ 1 - 2
src/DataSharing/DataSharing.csproj

@@ -8,7 +8,7 @@
 
   <ItemGroup>
     <PackageReference Include="FluentValidation" Version="11.6.0" />
-    <PackageReference Include="Hotline.Share" Version="1.0.106" />
+    <PackageReference Include="Hotline.Share" Version="1.0.107" />
     <PackageReference Include="Portable.BouncyCastle" Version="1.9.0" />
     <PackageReference Include="Quartz.Jobs" Version="3.8.0" />
     <PackageReference Include="RestSharp" Version="110.2.0" />
@@ -18,7 +18,6 @@
   <ItemGroup>
     <PackageReference Include="Mapster" Version="7.4.0" />
     <PackageReference Include="MediatR" Version="12.2.0" />
-    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" />
     <PackageReference Include="XF.EasyCaching" Version="1.0.6" />
     <PackageReference Include="XF.Utility.MQ" Version="1.0.9" />
   </ItemGroup>

+ 2 - 2
src/DataSharing/Province/ProvinceService.cs

@@ -585,7 +585,7 @@ namespace DataSharing.Province
                 //将待推送数据写入待推送表
                 await _initPushDataService.InitDsSendTaskProvinceOther("GetVisitInfoReceive", "get_visit_info_receive", data.CaseSerial,
           jsonData, JsonSerializer.Serialize(data, ProvinceJsonSerializerOptions.UnStandardDatetimeJsonOptions), pathType: EPathType.XieTong,
-          generationTime: dto.Order.StartTime, cancellationToken: cancellationToken);
+          generationTime: dto.Order.StartTime, visitTime: data.VisitTime, subjectResultSatify: data.SubjectResultSatify, cancellationToken: cancellationToken);
 
                 //处理附件
                 await FileDataAsync(null, data.CaseSerial, data.CliengGuid, EMaterialType.Visit, data.AreaCode, cancellationToken);
@@ -609,7 +609,7 @@ namespace DataSharing.Province
                 //将待推送数据写入待推送表
                 await _initPushDataService.InitDsSendTaskProvinceOther("SubmitVisitInfo", "submit_visit_info", data.CaseSerial,
          jsonData, JsonSerializer.Serialize(data, ProvinceJsonSerializerOptions.UnStandardDatetimeJsonOptions), pathType: EPathType.HuiJu,
-         generationTime: dto.Order.StartTime, cancellationToken: cancellationToken);
+         generationTime: dto.Order.StartTime, visitTime: data.VisitTime, subjectResultSatify: data.SubjectResultSatify, cancellationToken: cancellationToken);
 
                 //处理附件
                 await FileDataAsync(null, data.CaseSerial, data.CliengGuid, EMaterialType.Visit, data.AreaCode, cancellationToken);

+ 7 - 0
src/DataSharing/Province/SendTask/IWaitSendTaskRepository.cs

@@ -1,5 +1,6 @@
 using DataSharing.Province.SendTask.ProvinceOther;
 using DataSharing.Share.Dtos.HotlineWeb;
+using DataSharing.Share.Dtos.Statistics;
 using SqlSugar;
 using XF.Domain.Repository;
 
@@ -9,5 +10,11 @@ namespace DataSharing.Province.SendTask
     {
         ISugarQueryable<T> UnionAll<T>(params ISugarQueryable<T>[] queryables) where T : class;
 
+        /// <summary>
+        /// 汇聚数据查询
+        /// </summary>
+        /// <param name="sql"></param>
+        /// <returns></returns>
+        List<DataAggregationSituationDto> GetDataAggregationSituation(string sql);
     }
 }

+ 12 - 0
src/DataSharing/Province/SendTask/ProvinceOther/DsSendTaskProvinceOther.cs

@@ -29,5 +29,17 @@ namespace DataSharing.Province.SendTask.ProvinceOther
         /// </summary>
         [SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true)]
         public List<FileJson>? FileJson { get; set; }
+
+        /// <summary>
+        /// 回访结果满意度
+        /// </summary>
+        [SugarColumn(ColumnDescription = "回访结果满意度")]
+        public string? SubjectResultSatify { get; set; }
+
+        /// <summary>
+        /// 回访时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "回访时间")]
+        public DateTime? VisitTime { get; set; }
     }
 }

+ 13 - 0
src/DataSharing/Province/SendTask/ProvinceOther/DsWaitSendTaskProvinceOther.cs

@@ -3,6 +3,7 @@ using DataSharing.Share.Dtos;
 using Hotline.Share.Dtos.File;
 using SqlSugar;
 using System.ComponentModel;
+using System.Text.Json.Serialization;
 
 namespace DataSharing.Province.SendTask.ProvinceOther
 {
@@ -23,5 +24,17 @@ namespace DataSharing.Province.SendTask.ProvinceOther
         /// </summary>
         [SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true)]
         public List<FileJson>? FileJson { get; set; }
+
+        /// <summary>
+        /// 回访结果满意度
+        /// </summary>
+        [SugarColumn(ColumnDescription = "回访结果满意度")]
+        public string? SubjectResultSatify { get; set; }
+
+        /// <summary>
+        /// 回访时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "回访时间")]
+        public DateTime? VisitTime { get; set; }
     }
 }

+ 4 - 2
src/DataSharing/SendTask/IInitPushDataService.cs

@@ -64,11 +64,13 @@ namespace DataSharing.SendTask
         /// <param name="pathType">接口类型,汇聚、协同</param>
         /// <param name="fileJson">附件</param>
         /// <param name="generationTime">生成时间</param>
+        /// <param name="visitTime">回访时间(只有回访才有数据)</param>
+        /// <param name="subjectResultSatify">回访满意度(只有回访才有数据)</param>
         /// <param name="cancellationToken"></param>
         /// <returns></returns>
         Task<string> InitDsSendTaskProvinceOther(string taskType, string path, string provinceNo, string request, string requestData,
-          string httpMethod = "Post", EPathType pathType = EPathType.Other, List<FileJson>? fileJson = null,
-          DateTime? generationTime = null, CancellationToken cancellationToken = default);
+             string httpMethod = "Post", EPathType pathType = EPathType.Other, List<FileJson>? fileJson = null,
+             DateTime? generationTime = null, DateTime? visitTime = null, string? subjectResultSatify = null, CancellationToken cancellationToken = default);
 
         /// <summary>
         /// 其他平台推送任务数据

+ 5 - 1
src/DataSharing/SendTask/InitPushDataService.cs

@@ -235,11 +235,13 @@ namespace DataSharing.SendTask
         /// <param name="pathType">接口类型,汇聚、协同</param>
         /// <param name="fileJson">附件</param>
         /// <param name="generationTime">生成时间</param>
+        /// <param name="visitTime">回访时间(只有回访才有数据)</param>
+        /// <param name="subjectResultSatify">回访满意度(只有回访才有数据)</param>
         /// <param name="cancellationToken"></param>
         /// <returns></returns>
         public async Task<string> InitDsSendTaskProvinceOther(string taskType, string path, string provinceNo, string request, string requestData,
             string httpMethod = "Post", EPathType pathType = EPathType.Other, List<FileJson>? fileJson = null,
-            DateTime? generationTime = null, CancellationToken cancellationToken = default)
+            DateTime? generationTime = null,DateTime? visitTime=null,string? subjectResultSatify=null, CancellationToken cancellationToken = default)
         {
             DsWaitSendTaskProvinceOther waitTask = new()
             {
@@ -252,6 +254,8 @@ namespace DataSharing.SendTask
                 GenerationTime = generationTime,
                 PathType = pathType,
                 FileJson = fileJson,
+                VisitTime= visitTime,
+                SubjectResultSatify= subjectResultSatify
             };
 
             waitTask.Id = await _waitSendTaskProvinceOtherRepository.AddAsync(waitTask, cancellationToken);