Quellcode durchsuchen

Merge branch 'test' of http://110.188.24.182:10023/Fengwo/hotline into test

qinchaoyue vor 4 Monaten
Ursprung
Commit
f04700dce8

+ 28 - 15
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -1403,17 +1403,30 @@ namespace Hotline.Api.Controllers.Bi
         [HttpGet("seat-satisfaction-statistics-rate")]
         public async Task<SeatSatisfactionStatisticsEvaluateDto> SeatSatisfactionStatisticsRate([FromQuery] PagedKeywordRequest dto)
         {
-            var data = await _orderVisitRepository.Queryable()
-                  .LeftJoin<Order>((ov, o) => ov.OrderId == o.Id)
-                    .Where((ov, o) => ov.VisitTime >= dto.StartTime.Value && ov.VisitTime <= dto.EndTime.Value && ov.VisitState == EVisitState.Visited && o.SeatEvaluate != null
-                    && o.SeatEvaluate != ESeatEvaluate.VeryNoSatisfied && o.SeatEvaluate != ESeatEvaluate.Normal)
-                     .Select((ov, o) => new SeatSatisfactionStatisticsEvaluateDto
-                     {
-                         Satisfied = SqlFunc.AggregateSum(SqlFunc.IIF(o.SeatEvaluate != ESeatEvaluate.NoSatisfied && o.SeatEvaluate != ESeatEvaluate.VeryNoSatisfied, 1, 0)),
-                         NoSatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(o.SeatEvaluate == ESeatEvaluate.NoSatisfied || o.SeatEvaluate == ESeatEvaluate.VeryNoSatisfied, 1, 0))
-                     })
-                     .FirstAsync();
+            var data = await _orderVisitDetailRepository.Queryable()
+               // .Includes(x => x.OrderVisit)
+               .LeftJoin<OrderVisit>((ov, o) => ov.VisitId == o.Id)
+                 .Where((ov, o) => o.VisitTime >= dto.StartTime.Value && o.VisitTime <= dto.EndTime.Value && o.VisitState == EVisitState.Visited
+                 && ov.SeatEvaluate != null && ov.SeatEvaluate != ESeatEvaluate.VeryNoSatisfied && ov.SeatEvaluate != ESeatEvaluate.Normal && ov.VisitTarget == EVisitTarget.Seat
+                )
+                 .Select((ov, o) => new SeatSatisfactionStatisticsEvaluateDto
+                 {
+                     Satisfied = SqlFunc.AggregateSum(SqlFunc.IIF(ov.SeatEvaluate != ESeatEvaluate.NoSatisfied && ov.SeatEvaluate != ESeatEvaluate.VeryNoSatisfied, 1, 0)),
+                     NoSatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(ov.SeatEvaluate == ESeatEvaluate.NoSatisfied || ov.SeatEvaluate == ESeatEvaluate.VeryNoSatisfied, 1, 0))
+                 })
+                 .FirstAsync();
+            //var data = await _orderVisitRepository.Queryable()
+            //      .LeftJoin<Order>((ov, o) => ov.OrderId == o.Id)
+            //        .Where((ov, o) => ov.VisitTime >= dto.StartTime.Value && ov.VisitTime <= dto.EndTime.Value && ov.VisitState == EVisitState.Visited && o.SeatEvaluate != null
+            //        && o.SeatEvaluate != ESeatEvaluate.VeryNoSatisfied && o.SeatEvaluate != ESeatEvaluate.Normal)
+            //         .Select((ov, o) => new SeatSatisfactionStatisticsEvaluateDto
+            //         {
+            //             Satisfied = SqlFunc.AggregateSum(SqlFunc.IIF(o.SeatEvaluate != ESeatEvaluate.NoSatisfied && o.SeatEvaluate != ESeatEvaluate.VeryNoSatisfied, 1, 0)),
+            //             NoSatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(o.SeatEvaluate == ESeatEvaluate.NoSatisfied || o.SeatEvaluate == ESeatEvaluate.VeryNoSatisfied, 1, 0))
+            //         })
+            //         .FirstAsync();
             return data;
+
         }
 
         /// <summary>
@@ -1494,11 +1507,11 @@ namespace Hotline.Api.Controllers.Bi
         /// <param name="dto"></param>
         /// <returns></returns>
         [HttpGet("query-seat-satisfaction-order-visit-list")]
-        public async Task<PagedDto<OrderVisitDto>> QuerySeatSatisfactionOrderVisitList([FromQuery] SeatSatisfactionOrderVisitRequest dto)
+        public async Task<PagedDto<OrderVisitDetailDto>> QuerySeatSatisfactionOrderVisitList([FromQuery] SeatSatisfactionOrderVisitRequest dto)
         {
             var (total, items) = await _orderApplication.QuerySeatSatisfactionOrderVisitList(dto).ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
 
-            return new PagedDto<OrderVisitDto>(total, _mapper.Map<IReadOnlyList<OrderVisitDto>>(items));
+            return new PagedDto<OrderVisitDetailDto>(total, _mapper.Map<IReadOnlyList<OrderVisitDetailDto>>(items));
         }
 
         /// <summary>
@@ -1528,7 +1541,7 @@ namespace Hotline.Api.Controllers.Bi
         public async Task<FileStreamResult> ExportQuerySeatSatisfactionOrderVisitList([FromBody] ExportExcelDto<SeatSatisfactionOrderVisitRequest> dto)
         {
             var query = _orderApplication.QuerySeatSatisfactionOrderVisitList(dto.QueryDto);
-            List<OrderVisit> orders;
+            List<OrderVisitDetail> orders;
             if (dto.IsExportAll)
             {
                 orders = await query.ToListAsync(HttpContext.RequestAborted);
@@ -1539,12 +1552,12 @@ namespace Hotline.Api.Controllers.Bi
                 orders = items;
             }
 
-            var orderDtos = _mapper.Map<ICollection<OrderVisitDto>>(orders);
+            var orderDtos = _mapper.Map<ICollection<OrderVisitDetailDto>>(orders);
 
             dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
 
             var dtos = orderDtos
-                .Select(stu => _mapper.Map(stu, typeof(OrderVisitDto), dynamicClass))
+                .Select(stu => _mapper.Map(stu, typeof(OrderVisitDetailDto), dynamicClass))
                 .Cast<object>()
                 .ToList();
 

+ 1 - 1
src/Hotline.Api/Controllers/OrderController.cs

@@ -7165,7 +7165,7 @@ public class OrderController : BaseController
                     order.AcceptTypeCode = acceptType.DicDataValue;
                     order.SourceChannel = SourceCode.GetDescription();
                     order.SourceChannelCode = ((int)SourceCode).ToString();
-
+                    order.Status = EOrderStatus.Visited;
                     #region 处理数据开始
 
                     // order.Source = SourceCode; //来源

+ 1 - 1
src/Hotline.Application/Orders/IOrderApplication.cs

@@ -382,7 +382,7 @@ namespace Hotline.Application.Orders
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        ISugarQueryable<OrderVisit> QuerySeatSatisfactionOrderVisitList(SeatSatisfactionOrderVisitRequest dto);
+        ISugarQueryable<OrderVisitDetail> QuerySeatSatisfactionOrderVisitList(SeatSatisfactionOrderVisitRequest dto);
 
     }
 }

+ 411 - 374
src/Hotline.Application/Orders/OrderApplication.cs

@@ -1779,7 +1779,9 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     {
         bool IsCenter = _sessionContextProvider.SessionContext.OrgIsCenter;
         var orgLevel = _sessionContextProvider.SessionContext.OrgLevel;
-        var list = _orderVisitDetailRepository.Queryable()
+        string orgLevelStr = ((orgLevel + 1) * 3).ToString();
+
+		var list = _orderVisitDetailRepository.Queryable()
             .Where(x => x.OrderVisit.VisitTime >= dto.StartTime.Value && x.OrderVisit.VisitTime <= dto.EndTime.Value &&
                         x.VisitTarget == EVisitTarget.Org && x.OrderVisit.VisitState == EVisitState.Visited && !string.IsNullOrEmpty(x.VisitOrgCode))
             .WhereIF(string.IsNullOrEmpty(dto.OrgName) == false, x => x.VisitOrgName.Contains(dto.OrgName))
@@ -1792,38 +1794,132 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         var data = new List<VisitAndOrgSatisfactionStatisticsDto>();
         var oldData = new List<VisitAndOrgSatisfactionStatisticsDto>();
 
-        if (IsCenter && list != null)
-        {
-            data = await list.GroupBy(x => new
-            {
-                OrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))
-            })
-                .Select(x => new VisitAndOrgSatisfactionStatisticsDto()
+		if (IsCenter && list != null)
+		{
+			data = await list.GroupBy(x => new
+			{
+				VisitOrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))
+			})
+				.Select(x => new VisitAndOrgSatisfactionStatisticsDto()
+				{
+					OrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
+					TotalSumCount =
+						SqlFunc.AggregateCount(x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))),
+					VerySatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "5", 1, 0)),
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "5", 1, 0))), //非常满意数
+					SatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "4", 1, 0)),
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "4", 1, 0))), //满意数
+					RegardedAsSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "-1", 1, 0)),
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "-1", 1, 0))), //视为满意
+					DefaultSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "0", 1, 0)),
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "0", 1, 0))), //默认满意
+					NoSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2", 1, 0)),
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "2", 1, 0))), //不满意
+					NoEvaluateCount = SqlFunc.IIF(dto.TypeId == 1,
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "7", 1, 0)),
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "7", 1, 0))), //未做评价
+					NoPutThroughCount = SqlFunc.IIF(dto.TypeId == 1,
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "6", 1, 0)),
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "6", 1, 0))), //未接通
+				})
+				.MergeTable()
+				.LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id)
+				.Select((it, o) => new VisitAndOrgSatisfactionStatisticsDto()
+				{
+					OrgName = o.Name,
+					OrgCode = it.OrgCode,
+					OrgType = o.OrgType,
+					TotalSumCount = it.TotalSumCount,
+					VerySatisfiedCount = it.VerySatisfiedCount, //非常满意数
+					SatisfiedCount = it.SatisfiedCount, //满意数
+					RegardedAsSatisfiedCount = it.RegardedAsSatisfiedCount, //视为满意
+					DefaultSatisfiedCount = it.DefaultSatisfiedCount, //默认满意
+					NoSatisfiedCount = it.NoSatisfiedCount, //不满意
+					NoEvaluateCount = it.NoEvaluateCount, //未做评价
+					NoPutThroughCount = it.NoPutThroughCount, //未接通
+				})
+				.ToListAsync();
+		}
+		else
+		{
+			data = await list.GroupBy(x => new
+			{
+				VisitOrgCode = x.VisitOrgCode//.Substring(SqlFunc.MappingColumn<int>("0"),SqlFunc.MappingColumn<int>(orgLevelStr))
+			})
+				.Select(x => new VisitAndOrgSatisfactionStatisticsDto()
+				{
+					OrgCode = x.VisitOrgCode,//.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(orgLevelStr)),
+					TotalSumCount =
+						SqlFunc.AggregateCount(x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(orgLevelStr))),
+					VerySatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "5", 1, 0)),
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "5", 1, 0))), //非常满意数
+					SatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "4", 1, 0)),
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "4", 1, 0))), //满意数
+					RegardedAsSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "-1", 1, 0)),
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "-1", 1, 0))), //视为满意
+					DefaultSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "0", 1, 0)),
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "0", 1, 0))), //默认满意
+					NoSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2", 1, 0)),
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "2", 1, 0))), //不满意
+					NoEvaluateCount = SqlFunc.IIF(dto.TypeId == 1,
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "7", 1, 0)),
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "7", 1, 0))), //未做评价
+					NoPutThroughCount = SqlFunc.IIF(dto.TypeId == 1,
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "6", 1, 0)),
+						SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "6", 1, 0))), //未接通
+				})
+				.MergeTable()
+				.LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id && (o.Level == orgLevel || o.Level == (orgLevel + 1)))
+				.Select((it, o) => new VisitAndOrgSatisfactionStatisticsDto()
+				{
+					OrgName = o.Name,
+					OrgCode = it.OrgCode,
+					OrgType = o.OrgType,
+					TotalSumCount = it.TotalSumCount,
+					VerySatisfiedCount = it.VerySatisfiedCount, //非常满意数
+					SatisfiedCount = it.SatisfiedCount, //满意数
+					RegardedAsSatisfiedCount = it.RegardedAsSatisfiedCount, //视为满意
+					DefaultSatisfiedCount = it.DefaultSatisfiedCount, //默认满意
+					NoSatisfiedCount = it.NoSatisfiedCount, //不满意
+					NoEvaluateCount = it.NoEvaluateCount, //未做评价
+					NoPutThroughCount = it.NoPutThroughCount, //未接通
+				})
+				.ToListAsync();
+		}
+
+		#region 老系统数据
+		if (await _statisticsDepartSatisfiedRepository.Queryable().Where(x => x.Time >= dto.StartTime.Value && x.Time <= dto.EndTime.Value).AnyAsync())
+        {
+            var query = _statisticsDepartSatisfiedRepository.Queryable()
+                .LeftJoin<SystemOrganize>((x, so) => x.DepartmentId == so.oldBmid)
+                .WhereIF(IsCenter == false, (x, so) => so.Id.StartsWith(_sessionContextProvider.SessionContext.OrgId))
+                .Where((x, so) => x.Time >= dto.StartTime.Value && x.Time <= dto.EndTime.Value);
+            if (IsCenter)
+            {
+                oldData = await query.GroupBy((x, so) => new
                 {
-                    OrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
-                    TotalSumCount =
-                        SqlFunc.AggregateCount(x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))),
-                    VerySatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "5", 1, 0)),
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "5", 1, 0))), //非常满意数
-                    SatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "4", 1, 0)),
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "4", 1, 0))), //满意数
-                    RegardedAsSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "-1", 1, 0)),
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "-1", 1, 0))), //视为满意
-                    DefaultSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "0", 1, 0)),
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "0", 1, 0))), //默认满意
-                    NoSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2", 1, 0)),
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "2", 1, 0))), //不满意
-                    NoEvaluateCount = SqlFunc.IIF(dto.TypeId == 1,
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "7", 1, 0)),
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "7", 1, 0))), //未做评价
-                    NoPutThroughCount = SqlFunc.IIF(dto.TypeId == 1,
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "6", 1, 0)),
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "6", 1, 0))), //未接通
+                    VisitOrgCode = so.Id.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))
+                }).Select((x, so) => new VisitAndOrgSatisfactionStatisticsDto()
+                {
+                    OrgCode = so.Id.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
+                    TotalSumCount = SqlFunc.AggregateSum(x.Total),
+                    VerySatisfiedCount = SqlFunc.AggregateSum(x.VerySatisfaction), //非常满意数
+                    SatisfiedCount = SqlFunc.AggregateSum(x.Satisfaction), //满意数
+                    RegardedAsSatisfiedCount = SqlFunc.AggregateSum(x.TreatSatisfaction), //视为满意
+                    DefaultSatisfiedCount = SqlFunc.AggregateSum(x.DefaultSatisfaction), //默认满意
+                    NoSatisfiedCount = SqlFunc.AggregateSum(x.Dissatisfaction), //不满意
+                    NoEvaluateCount = SqlFunc.AggregateSum(x.NotEvaluated), //未做评价
+                    NoPutThroughCount = SqlFunc.AggregateSum(x.BlockCall), //未接通
                 })
                 .MergeTable()
                 .LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id)
@@ -1840,42 +1936,28 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                     NoSatisfiedCount = it.NoSatisfiedCount, //不满意
                     NoEvaluateCount = it.NoEvaluateCount, //未做评价
                     NoPutThroughCount = it.NoPutThroughCount, //未接通
-                }).ToListAsync();
-        }
-        else if (!IsCenter && orgLevel == 1)
-        {
-            data = await list.GroupBy(x => new
+                })
+                .ToListAsync(); ;
+
+            }
+            else
             {
-                OrgCode = x.VisitOrgCode
-            })
-                .Select(x => new VisitAndOrgSatisfactionStatisticsDto()
+                oldData = await query.GroupBy((x, so) => new
                 {
-                    OrgCode = x.VisitOrgCode,
-                    TotalSumCount = SqlFunc.AggregateCount(x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))),
-                    VerySatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "5", 1, 0)),
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "5", 1, 0))), //非常满意数
-                    SatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "4", 1, 0)),
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "4", 1, 0))), //满意数
-                    RegardedAsSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "-1", 1, 0)),
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "-1", 1, 0))), //视为满意
-                    DefaultSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "0", 1, 0)),
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "0", 1, 0))), //默认满意
-                    NoSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2", 1, 0)),
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "2", 1, 0))), //不满意
-                    NoEvaluateCount = SqlFunc.IIF(dto.TypeId == 1,
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "7", 1, 0)),
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "7", 1, 0))), //未做评价
-                    NoPutThroughCount = SqlFunc.IIF(dto.TypeId == 1,
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "6", 1, 0)),
-                        SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "6", 1, 0))), //未接通
+                    VisitOrgCode = so.Id
+                }).Select((x, so) => new VisitAndOrgSatisfactionStatisticsDto()
+                {
+                    OrgCode = so.Id,//.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(orgLevelStr)),
+                    TotalSumCount = SqlFunc.AggregateSum(x.Total),
+                    VerySatisfiedCount = SqlFunc.AggregateSum(x.VerySatisfaction), //非常满意数
+                    SatisfiedCount = SqlFunc.AggregateSum(x.Satisfaction), //满意数
+                    RegardedAsSatisfiedCount = SqlFunc.AggregateSum(x.TreatSatisfaction), //视为满意
+                    DefaultSatisfiedCount = SqlFunc.AggregateSum(x.DefaultSatisfaction), //默认满意
+                    NoSatisfiedCount = SqlFunc.AggregateSum(x.Dissatisfaction), //不满意
+                    NoEvaluateCount = SqlFunc.AggregateSum(x.NotEvaluated), //未做评价
+                    NoPutThroughCount = SqlFunc.AggregateSum(x.BlockCall), //未接通
                 })
-                .MergeTable()
-                .LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id && (o.Level == 1 || o.Level == 2))
+                .MergeTable().LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id && (o.Level == orgLevel || o.Level == (orgLevel + 1)))
                 .Select((it, o) => new VisitAndOrgSatisfactionStatisticsDto()
                 {
                     OrgName = o.Name,
@@ -1891,206 +1973,26 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                     NoPutThroughCount = it.NoPutThroughCount, //未接通
                 })
                 .ToListAsync();
+            }
+            data = (from t1 in data
+                    join t2 in oldData on t1.OrgCode equals t2.OrgCode into t1_t2
+                    from item in t1_t2.DefaultIfEmpty()
+                    select new VisitAndOrgSatisfactionStatisticsDto()
+                    {
+                        OrgName = t1.OrgName,
+                        OrgCode = t1.OrgCode,
+                        OrgType = t1.OrgType,
+                        TotalSumCount = t1.TotalSumCount + t1_t2.Select(x => x.TotalSumCount).FirstOrDefault(),
+                        VerySatisfiedCount = t1.VerySatisfiedCount + t1_t2.Select(x => x.VerySatisfiedCount).FirstOrDefault(),//非常满意数
+                        SatisfiedCount = t1.SatisfiedCount + t1_t2.Select(x => x.SatisfiedCount).FirstOrDefault(), //满意数
+                        RegardedAsSatisfiedCount = t1.RegardedAsSatisfiedCount + t1_t2.Select(x => x.RegardedAsSatisfiedCount).FirstOrDefault(), //视为满意
+                        DefaultSatisfiedCount = t1.DefaultSatisfiedCount + t1_t2.Select(x => x.DefaultSatisfiedCount).FirstOrDefault(), //默认满意
+                        NoSatisfiedCount = t1.NoSatisfiedCount + t1_t2.Select(x => x.NoSatisfiedCount).FirstOrDefault(), //不满意
+                        NoEvaluateCount = t1.NoEvaluateCount + t1_t2.Select(x => x.NoEvaluateCount).FirstOrDefault(), //未做评价
+                        NoPutThroughCount = t1.NoPutThroughCount + t1_t2.Select(x => x.NoPutThroughCount).FirstOrDefault(), //未接通
+                    }).ToList();
         }
-        else if (!IsCenter && orgLevel == 2)
-        {
-            data = await list.GroupBy(x => new
-            {
-                OrgCode = x.VisitOrgCode
-            })
-               .Select(x => new VisitAndOrgSatisfactionStatisticsDto()
-               {
-                   OrgCode = x.VisitOrgCode,
-                   TotalSumCount = SqlFunc.AggregateCount(x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("9"))),
-                   VerySatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "5", 1, 0)),
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "5", 1, 0))), //非常满意数
-                   SatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "4", 1, 0)),
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "4", 1, 0))), //满意数
-                   RegardedAsSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "-1", 1, 0)),
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "-1", 1, 0))), //视为满意
-                   DefaultSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "0", 1, 0)),
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "0", 1, 0))), //默认满意
-                   NoSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2", 1, 0)),
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "2", 1, 0))), //不满意
-                   NoEvaluateCount = SqlFunc.IIF(dto.TypeId == 1,
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "7", 1, 0)),
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "7", 1, 0))), //未做评价
-                   NoPutThroughCount = SqlFunc.IIF(dto.TypeId == 1,
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "6", 1, 0)),
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "6", 1, 0))), //未接通
-               })
-               .MergeTable()
-               .LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id && (o.Level == 2 || o.Level == 3))
-               .Select((it, o) => new VisitAndOrgSatisfactionStatisticsDto()
-               {
-                   OrgName = o.Name,
-                   OrgCode = it.OrgCode,
-                   OrgType = o.OrgType,
-                   TotalSumCount = it.TotalSumCount,
-                   VerySatisfiedCount = it.VerySatisfiedCount, //非常满意数
-                   SatisfiedCount = it.SatisfiedCount, //满意数
-                   RegardedAsSatisfiedCount = it.RegardedAsSatisfiedCount, //视为满意
-                   DefaultSatisfiedCount = it.DefaultSatisfiedCount, //默认满意
-                   NoSatisfiedCount = it.NoSatisfiedCount, //不满意
-                   NoEvaluateCount = it.NoEvaluateCount, //未做评价
-                   NoPutThroughCount = it.NoPutThroughCount, //未接通
-               })
-               .ToListAsync();
-        }
-        else
-        {
-            data = await list.GroupBy(x => new
-            {
-                OrgCode = x.VisitOrgCode
-            })
-               .Select(x => new VisitAndOrgSatisfactionStatisticsDto()
-               {
-                   OrgCode = x.VisitOrgCode,
-                   TotalSumCount =
-                       SqlFunc.AggregateCount(x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("12"))),
-                   VerySatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "5", 1, 0)),
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "5", 1, 0))), //非常满意数
-                   SatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "4", 1, 0)),
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "4", 1, 0))), //满意数
-                   RegardedAsSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "-1", 1, 0)),
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "-1", 1, 0))), //视为满意
-                   DefaultSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "0", 1, 0)),
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "0", 1, 0))), //默认满意
-                   NoSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2", 1, 0)),
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "2", 1, 0))), //不满意
-                   NoEvaluateCount = SqlFunc.IIF(dto.TypeId == 1,
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "7", 1, 0)),
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "7", 1, 0))), //未做评价
-                   NoPutThroughCount = SqlFunc.IIF(dto.TypeId == 1,
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "6", 1, 0)),
-                       SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "6", 1, 0))), //未接通
-               })
-               .MergeTable()
-               .LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id && (o.Level == 3 || o.Level == 4))
-               .Select((it, o) => new VisitAndOrgSatisfactionStatisticsDto()
-               {
-                   OrgName = o.Name,
-                   OrgCode = it.OrgCode,
-                   OrgType = o.OrgType,
-                   TotalSumCount = it.TotalSumCount,
-                   VerySatisfiedCount = it.VerySatisfiedCount, //非常满意数
-                   SatisfiedCount = it.SatisfiedCount, //满意数
-                   RegardedAsSatisfiedCount = it.RegardedAsSatisfiedCount, //视为满意
-                   DefaultSatisfiedCount = it.DefaultSatisfiedCount, //默认满意
-                   NoSatisfiedCount = it.NoSatisfiedCount, //不满意
-                   NoEvaluateCount = it.NoEvaluateCount, //未做评价
-                   NoPutThroughCount = it.NoPutThroughCount, //未接通
-               })
-               .ToListAsync();
-        }
-
-
-		//#region 老系统数据
-		//if (await _statisticsDepartSatisfiedRepository.Queryable().Where(x => x.Time >= dto.StartTime.Value && x.Time <= dto.EndTime.Value).AnyAsync())
-		//{
-		//	var query = _statisticsDepartSatisfiedRepository.Queryable()
-		//		.LeftJoin<SystemOrganize>((x, so) => x.DepartmentId == so.oldBmid)
-		//		.WhereIF(IsCenter == false, (x, so) => so.Id.StartsWith(_sessionContextProvider.SessionContext.OrgId))
-		//		.Where((x, so) => x.Time >= dto.StartTime.Value && x.Time <= dto.EndTime.Value);
-		//	if (IsCenter)
-		//	{
-		//		oldData = await query.GroupBy((x, so) => new
-		//		{
-		//			VisitOrgCode = so.Id.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))
-		//		}).Select((x, so) => new VisitAndOrgSatisfactionStatisticsDto()
-		//		{
-		//			OrgCode = so.Id.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
-		//			TotalSumCount = SqlFunc.AggregateSum(x.Total),
-		//			VerySatisfiedCount = SqlFunc.AggregateSum(x.VerySatisfaction), //非常满意数
-		//			SatisfiedCount = SqlFunc.AggregateSum(x.Satisfaction), //满意数
-		//			RegardedAsSatisfiedCount = SqlFunc.AggregateSum(x.TreatSatisfaction), //视为满意
-		//			DefaultSatisfiedCount = SqlFunc.AggregateSum(x.DefaultSatisfaction), //默认满意
-		//			NoSatisfiedCount = SqlFunc.AggregateSum(x.Dissatisfaction), //不满意
-		//			NoEvaluateCount = SqlFunc.AggregateSum(x.NotEvaluated), //未做评价
-		//			NoPutThroughCount = SqlFunc.AggregateSum(x.BlockCall), //未接通
-		//		})
-		//		.MergeTable()
-		//		.LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id)
-		//		.Select((it, o) => new VisitAndOrgSatisfactionStatisticsDto()
-		//		{
-		//			OrgName = o.Name,
-		//			OrgCode = it.OrgCode,
-		//			OrgType = o.OrgType,
-		//			TotalSumCount = it.TotalSumCount,
-		//			VerySatisfiedCount = it.VerySatisfiedCount, //非常满意数
-		//			SatisfiedCount = it.SatisfiedCount, //满意数
-		//			RegardedAsSatisfiedCount = it.RegardedAsSatisfiedCount, //视为满意
-		//			DefaultSatisfiedCount = it.DefaultSatisfiedCount, //默认满意
-		//			NoSatisfiedCount = it.NoSatisfiedCount, //不满意
-		//			NoEvaluateCount = it.NoEvaluateCount, //未做评价
-		//			NoPutThroughCount = it.NoPutThroughCount, //未接通
-		//		})
-		//		.ToListAsync(); ;
-
-		//	}
-		//	else
-		//	{
-		//		oldData = await query.GroupBy((x, so) => new
-		//		{
-		//			VisitOrgCode = so.Id
-		//		}).Select((x, o) => new VisitAndOrgSatisfactionStatisticsDto()
-		//		{
-		//			OrgCode = o.Id,//.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(orgLevelStr)),
-		//			TotalSumCount = SqlFunc.AggregateSum(x.Total),
-		//			VerySatisfiedCount = SqlFunc.AggregateSum(x.VerySatisfaction), //非常满意数
-		//			SatisfiedCount = SqlFunc.AggregateSum(x.Satisfaction), //满意数
-		//			RegardedAsSatisfiedCount = SqlFunc.AggregateSum(x.TreatSatisfaction), //视为满意
-		//			DefaultSatisfiedCount = SqlFunc.AggregateSum(x.DefaultSatisfaction), //默认满意
-		//			NoSatisfiedCount = SqlFunc.AggregateSum(x.Dissatisfaction), //不满意
-		//			NoEvaluateCount = SqlFunc.AggregateSum(x.NotEvaluated), //未做评价
-		//			NoPutThroughCount = SqlFunc.AggregateSum(x.BlockCall), //未接通
-		//		})
-		//		.MergeTable().LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id && (o.Level == orgLevel || o.Level == (orgLevel + 1)))
-		//		.Select((it, o) => new VisitAndOrgSatisfactionStatisticsDto()
-		//		{
-		//			OrgName = o.Name,
-		//			OrgCode = it.OrgCode,
-		//			OrgType = o.OrgType,
-		//			TotalSumCount = it.TotalSumCount,
-		//			VerySatisfiedCount = it.VerySatisfiedCount, //非常满意数
-		//			SatisfiedCount = it.SatisfiedCount, //满意数
-		//			RegardedAsSatisfiedCount = it.RegardedAsSatisfiedCount, //视为满意
-		//			DefaultSatisfiedCount = it.DefaultSatisfiedCount, //默认满意
-		//			NoSatisfiedCount = it.NoSatisfiedCount, //不满意
-		//			NoEvaluateCount = it.NoEvaluateCount, //未做评价
-		//			NoPutThroughCount = it.NoPutThroughCount, //未接通
-		//		})
-		//		.ToListAsync();
-		//	}
-		//	data = (from t1 in data
-		//			join t2 in oldData on t1.OrgCode equals t2.OrgCode into t1_t2
-		//			from item in t1_t2.DefaultIfEmpty()
-		//			select new VisitAndOrgSatisfactionStatisticsDto()
-		//			{
-		//				OrgName = t1.OrgName,
-		//				OrgCode = t1.OrgCode,
-		//				OrgType = t1.OrgType,
-		//				TotalSumCount = t1.TotalSumCount + t1_t2.Select(x => x.TotalSumCount).FirstOrDefault(),
-		//				VerySatisfiedCount = t1.VerySatisfiedCount + t1_t2.Select(x => x.VerySatisfiedCount).FirstOrDefault(),//非常满意数
-		//				SatisfiedCount = t1.SatisfiedCount + t1_t2.Select(x => x.SatisfiedCount).FirstOrDefault(), //满意数
-		//				RegardedAsSatisfiedCount = t1.RegardedAsSatisfiedCount + t1_t2.Select(x => x.RegardedAsSatisfiedCount).FirstOrDefault(), //视为满意
-		//				DefaultSatisfiedCount = t1.DefaultSatisfiedCount + t1_t2.Select(x => x.DefaultSatisfiedCount).FirstOrDefault(), //默认满意
-		//				NoSatisfiedCount = t1.NoSatisfiedCount + t1_t2.Select(x => x.NoSatisfiedCount).FirstOrDefault(), //不满意
-		//				NoEvaluateCount = t1.NoEvaluateCount + t1_t2.Select(x => x.NoEvaluateCount).FirstOrDefault(), //未做评价
-		//				NoPutThroughCount = t1.NoPutThroughCount + t1_t2.Select(x => x.NoPutThroughCount).FirstOrDefault(), //未接通
-		//			}).ToList();
-		//}
-		//#endregion
+        #endregion
 
         return data;
     }
@@ -2102,66 +2004,143 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     public async Task<List<VisitAndOrgSatisfactionStatisticsDto>> VisitAndOrgStatisfactionOrgDetail(PagedKeywordSonRequest dto)
     {
         bool IsCenter = _sessionContextProvider.SessionContext.OrgIsCenter;
-
-        var list = await _systemOrganizeRepository.Queryable().Where(x => x.Id.StartsWith(dto.OrgCode))
-            .LeftJoin<OrderVisitDetail>((x, it) => x.Id == it.VisitOrgCode)
-            .Where((x, it) => it.OrderVisit.VisitTime >= dto.StartTime.Value && it.OrderVisit.VisitTime <= dto.EndTime.Value &&
-                              it.VisitTarget == EVisitTarget.Org && it.OrderVisit.VisitState == EVisitState.Visited)
-            .WhereIF(dto.OrgCode == "001", (x, it) => it.VisitOrgCode == dto.OrgCode)
-            .WhereIF(dto.OrgCode != "001", (x, it) => it.VisitOrgCode.StartsWith(dto.OrgCode))
-            .WhereIF(!string.IsNullOrEmpty(dto.LineNum), (x, it) => it.OrderVisit.Order.CallRecord.Gateway.Contains(dto.LineNum))
-            .WhereIF(dto.TypeCode != null && dto.TypeCode == 1, (x, it) => it.OrderVisit.Order.IdentityType == EIdentityType.Citizen)
-            .WhereIF(dto.TypeCode != null && dto.TypeCode == 2, (x, it) => it.OrderVisit.Order.IdentityType == EIdentityType.Enterprise)
-            .WhereIF(IsCenter == false, (x, it) => it.VisitOrgCode.StartsWith(_sessionContextProvider.SessionContext.OrgId))
-            .WhereIF(dto.VisitType != null, (x, it) => it.OrderVisit.VisitType == dto.VisitType)
-            .GroupBy((x, it) => new
-            {
-                VisitOrgCode = it.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("9"))
-            })
-            .Select((x, it) => new VisitAndOrgSatisfactionStatisticsDto()
-            {
-                OrgCode = it.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("9")),
-                TotalSumCount = SqlFunc.AggregateCount(it.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("9"))),
-                VerySatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "5", 1, 0)),
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "5", 1, 0))), //非常满意数
-                SatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "4", 1, 0)),
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "4", 1, 0))), //满意数
-                RegardedAsSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "-1", 1, 0)),
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "-1", 1, 0))), //视为满意
-                DefaultSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "0", 1, 0)),
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "0", 1, 0))), //默认满意
-                NoSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "2", 1, 0)),
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "2", 1, 0))), //不满意
-                NoEvaluateCount = SqlFunc.IIF(dto.TypeId == 1,
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "7", 1, 0)),
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "7", 1, 0))), //未做评价
-                NoPutThroughCount = SqlFunc.IIF(dto.TypeId == 1,
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "6", 1, 0)),
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "6", 1, 0))) //未接通
-            })
-            .MergeTable()
-            .LeftJoin<SystemOrganize>((x, it) => x.OrgCode == it.Id)
-            .Select((x, it) => new VisitAndOrgSatisfactionStatisticsDto()
-            {
-                OrgName = it.Name,
-                OrgCode = x.OrgCode,
-                OrgType = it.OrgType,
-                TotalSumCount = x.TotalSumCount,
-                VerySatisfiedCount = x.VerySatisfiedCount, //非常满意数
-                SatisfiedCount = x.SatisfiedCount, //满意数
-                RegardedAsSatisfiedCount = x.RegardedAsSatisfiedCount, //视为满意
-                DefaultSatisfiedCount = x.DefaultSatisfiedCount, //默认满意
-                NoSatisfiedCount = x.NoSatisfiedCount, //不满意
-                NoEvaluateCount = x.NoEvaluateCount, //未做评价
-                NoPutThroughCount = x.NoPutThroughCount, //未接通
-            })
-            .ToListAsync();
-        return list;
+        var org = await _systemOrganizeRepository.Queryable().FirstAsync(x => x.Id == dto.OrgCode);
+
+		string orgLevelStr = (dto.OrgCode.Length + 3 ).ToString();
+		var oldData = new List<VisitAndOrgSatisfactionStatisticsDto>();
+
+		var quer =  _systemOrganizeRepository.Queryable().Where(x => x.Id.StartsWith(dto.OrgCode))
+			.LeftJoin<OrderVisitDetail>((x, it) => x.Id == it.VisitOrgCode)
+			.Where((x, it) => it.OrderVisit.VisitTime >= dto.StartTime.Value &&
+			                  it.OrderVisit.VisitTime <= dto.EndTime.Value &&
+			                  it.VisitTarget == EVisitTarget.Org && it.OrderVisit.VisitState == EVisitState.Visited)
+			.WhereIF(dto.OrgCode == "001", (x, it) => it.VisitOrgCode == dto.OrgCode)
+			.WhereIF(dto.OrgCode != "001", (x, it) => it.VisitOrgCode.StartsWith(dto.OrgCode))
+			.WhereIF(!string.IsNullOrEmpty(dto.LineNum),
+				(x, it) => it.OrderVisit.Order.CallRecord.Gateway.Contains(dto.LineNum))
+			.WhereIF(dto.TypeCode != null && dto.TypeCode == 1,
+				(x, it) => it.OrderVisit.Order.IdentityType == EIdentityType.Citizen)
+			.WhereIF(dto.TypeCode != null && dto.TypeCode == 2,
+				(x, it) => it.OrderVisit.Order.IdentityType == EIdentityType.Enterprise)
+			.WhereIF(IsCenter == false,
+				(x, it) => it.VisitOrgCode.StartsWith(_sessionContextProvider.SessionContext.OrgId))
+			.WhereIF(dto.VisitType != null, (x, it) => it.OrderVisit.VisitType == dto.VisitType)
+			.GroupBy((x, it) => new
+			{
+				VisitOrgCode = it.VisitOrgCode
+			})
+			.Select((x, it) => new VisitAndOrgSatisfactionStatisticsDto()
+			{
+				OrgCode = it.VisitOrgCode,
+				TotalSumCount = SqlFunc.AggregateCount(it.VisitOrgCode),
+				VerySatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
+					SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "5", 1, 0)),
+					SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "5", 1,
+						0))), //非常满意数
+				SatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
+					SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "4", 1, 0)),
+					SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "4", 1,
+						0))), //满意数
+				RegardedAsSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
+					SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "-1", 1, 0)),
+					SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "-1", 1,
+						0))), //视为满意
+				DefaultSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
+					SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "0", 1, 0)),
+					SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "0", 1,
+						0))), //默认满意
+				NoSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
+					SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "2", 1, 0)),
+					SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "2", 1,
+						0))), //不满意
+				NoEvaluateCount = SqlFunc.IIF(dto.TypeId == 1,
+					SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "7", 1, 0)),
+					SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "7", 1,
+						0))), //未做评价
+				NoPutThroughCount = SqlFunc.IIF(dto.TypeId == 1,
+					SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "6", 1, 0)),
+					SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "6", 1,
+						0))) //未接通
+			})
+			.MergeTable()
+			.LeftJoin<SystemOrganize>((x, it) =>
+				x.OrgCode == it.Id && (it.Level == org.Level || it.Level == (org.Level + 1)))
+			.Select((x, it) => new VisitAndOrgSatisfactionStatisticsDto()
+			{
+				OrgName = it.Name,
+				OrgCode = x.OrgCode,
+				OrgType = it.OrgType,
+				TotalSumCount = x.TotalSumCount,
+				VerySatisfiedCount = x.VerySatisfiedCount, //非常满意数
+				SatisfiedCount = x.SatisfiedCount, //满意数
+				RegardedAsSatisfiedCount = x.RegardedAsSatisfiedCount, //视为满意
+				DefaultSatisfiedCount = x.DefaultSatisfiedCount, //默认满意
+				NoSatisfiedCount = x.NoSatisfiedCount, //不满意
+				NoEvaluateCount = x.NoEvaluateCount, //未做评价
+				NoPutThroughCount = x.NoPutThroughCount, //未接通
+			});
+		var list = await quer.ToListAsync();
+
+		#region 老系统数据
+		if (await _statisticsDepartSatisfiedRepository.Queryable().Where(x => x.Time >= dto.StartTime.Value && x.Time <= dto.EndTime.Value).AnyAsync())
+		{
+			var query = _statisticsDepartSatisfiedRepository.Queryable()
+				.LeftJoin<SystemOrganize>((x, so) => x.DepartmentId == so.oldBmid)
+				.WhereIF(dto.OrgCode == "001", (x, so) => so.Id == dto.OrgCode)
+				.WhereIF(dto.OrgCode != "001", (x, so) => so.Id.StartsWith(dto.OrgCode))
+				.Where((x, so) => x.Time >= dto.StartTime.Value && x.Time <= dto.EndTime.Value);
+
+			oldData = await query.GroupBy((x, so) => new
+				{
+					VisitOrgCode = so.Id
+			}).Select((x, so) => new VisitAndOrgSatisfactionStatisticsDto()
+				{
+					OrgCode = so.Id,//.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(orgLevelStr)),
+					TotalSumCount = SqlFunc.AggregateSum(x.Total),
+					VerySatisfiedCount = SqlFunc.AggregateSum(x.VerySatisfaction), //非常满意数
+					SatisfiedCount = SqlFunc.AggregateSum(x.Satisfaction), //满意数
+					RegardedAsSatisfiedCount = SqlFunc.AggregateSum(x.TreatSatisfaction), //视为满意
+					DefaultSatisfiedCount = SqlFunc.AggregateSum(x.DefaultSatisfaction), //默认满意
+					NoSatisfiedCount = SqlFunc.AggregateSum(x.Dissatisfaction), //不满意
+					NoEvaluateCount = SqlFunc.AggregateSum(x.NotEvaluated), //未做评价
+					NoPutThroughCount = SqlFunc.AggregateSum(x.BlockCall), //未接通
+				})
+				.MergeTable().LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id && (o.Level == org.Level || o.Level == (org.Level + 1)))
+				.Select((it, o) => new VisitAndOrgSatisfactionStatisticsDto()
+				{
+					OrgName = o.Name,
+					OrgCode = it.OrgCode,
+					OrgType = o.OrgType,
+					TotalSumCount = it.TotalSumCount,
+					VerySatisfiedCount = it.VerySatisfiedCount, //非常满意数
+					SatisfiedCount = it.SatisfiedCount, //满意数
+					RegardedAsSatisfiedCount = it.RegardedAsSatisfiedCount, //视为满意
+					DefaultSatisfiedCount = it.DefaultSatisfiedCount, //默认满意
+					NoSatisfiedCount = it.NoSatisfiedCount, //不满意
+					NoEvaluateCount = it.NoEvaluateCount, //未做评价
+					NoPutThroughCount = it.NoPutThroughCount, //未接通
+				})
+				.ToListAsync();
+			list = (from t1 in list
+					join t2 in oldData on t1.OrgCode equals t2.OrgCode into t1_t2
+					from item in t1_t2.DefaultIfEmpty()
+					select new VisitAndOrgSatisfactionStatisticsDto()
+					{
+						OrgName = t1.OrgName,
+						OrgCode = t1.OrgCode,
+						OrgType = t1.OrgType,
+						TotalSumCount = t1.TotalSumCount + t1_t2.Select(x => x.TotalSumCount).FirstOrDefault(),
+						VerySatisfiedCount = t1.VerySatisfiedCount + t1_t2.Select(x => x.VerySatisfiedCount).FirstOrDefault(),//非常满意数
+						SatisfiedCount = t1.SatisfiedCount + t1_t2.Select(x => x.SatisfiedCount).FirstOrDefault(), //满意数
+						RegardedAsSatisfiedCount = t1.RegardedAsSatisfiedCount + t1_t2.Select(x => x.RegardedAsSatisfiedCount).FirstOrDefault(), //视为满意
+						DefaultSatisfiedCount = t1.DefaultSatisfiedCount + t1_t2.Select(x => x.DefaultSatisfiedCount).FirstOrDefault(), //默认满意
+						NoSatisfiedCount = t1.NoSatisfiedCount + t1_t2.Select(x => x.NoSatisfiedCount).FirstOrDefault(), //不满意
+						NoEvaluateCount = t1.NoEvaluateCount + t1_t2.Select(x => x.NoEvaluateCount).FirstOrDefault(), //未做评价
+						NoPutThroughCount = t1.NoPutThroughCount + t1_t2.Select(x => x.NoPutThroughCount).FirstOrDefault(), //未接通
+					}).ToList();
+		}
+		#endregion
+		return list;
     }
 
 
@@ -3281,17 +3260,30 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     /// <returns></returns>
     public ISugarQueryable<SeatSatisfactionStatisticsDto> SeatSatisfactionStatistics(PagedKeywordRequest dto)
     {
-        var list = _orderVisitRepository.Queryable()
-               .Includes(d => d.Order)
-               .Where(x => x.VisitTime >= dto.StartTime.Value && x.VisitTime <= dto.EndTime.Value && x.VisitState == EVisitState.Visited && x.Order.SeatEvaluate != null
-               && x.Order.SeatEvaluate != ESeatEvaluate.VeryNoSatisfied && x.Order.SeatEvaluate != ESeatEvaluate.Normal)
-               .GroupBy(x => x.Order.SeatEvaluate)
-               .Select(x => new SeatSatisfactionStatisticsDto
-               {
-                   SeatEvaluate = x.Order.SeatEvaluate,
-                   Count = SqlFunc.AggregateCount(x.Id)
-               });
+        var list = _orderVisitDetailRepository.Queryable()
+            .Includes(d => d.OrderVisit)
+             .Where(x => x.OrderVisit.VisitTime >= dto.StartTime.Value && x.OrderVisit.VisitTime <= dto.EndTime.Value && x.OrderVisit.VisitState == EVisitState.Visited
+             && x.SeatEvaluate != null && x.SeatEvaluate != ESeatEvaluate.VeryNoSatisfied && x.SeatEvaluate != ESeatEvaluate.Normal && x.VisitTarget == EVisitTarget.Seat
+            )
+             .GroupBy(x => x.SeatEvaluate)
+             .Select(x => new SeatSatisfactionStatisticsDto
+             {
+                 SeatEvaluate = x.SeatEvaluate,
+                 Count = SqlFunc.AggregateCount(x.Id)
+             });
         return list;
+
+        //var list = _orderVisitRepository.Queryable()
+        //       .Includes(d => d.Order)
+        //       .Where(x => x.VisitTime >= dto.StartTime.Value && x.VisitTime <= dto.EndTime.Value && x.VisitState == EVisitState.Visited && x.Order.SeatEvaluate != null
+        //       && x.Order.SeatEvaluate != ESeatEvaluate.VeryNoSatisfied && x.Order.SeatEvaluate != ESeatEvaluate.Normal)
+        //       .GroupBy(x => x.Order.SeatEvaluate)
+        //       .Select(x => new SeatSatisfactionStatisticsDto
+        //       {
+        //           SeatEvaluate = x.Order.SeatEvaluate,
+        //           Count = SqlFunc.AggregateCount(x.Id)
+        //       });
+        //return list;
     }
 
     /// <summary>
@@ -3301,29 +3293,55 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     /// <returns></returns>
     public ISugarQueryable<SeatSatisfactionStatisticsListDetailDto> SeatSatisfactionStatisticsListDetail(PagedKeywordRequest dto)
     {
-        var query = _orderVisitRepository.Queryable()
-                 .LeftJoin<Order>((ov, o) => ov.OrderId == o.Id)
-                 .Where((ov, o) => ov.VisitTime >= dto.StartTime.Value && ov.VisitTime <= dto.EndTime.Value && ov.VisitState == EVisitState.Visited && o.SeatEvaluate != null
-                 && o.SeatEvaluate != ESeatEvaluate.VeryNoSatisfied && o.SeatEvaluate != ESeatEvaluate.Normal)
-                 .GroupBy((ov, o) => new
-                 {
-                     o.AcceptorName,
-                     o.AcceptorId
-                 })
-                 .Select((ov, o) => new SeatSatisfactionStatisticsListDetailDto
+        var query = _orderVisitDetailRepository.Queryable()
+            .LeftJoin<OrderVisit>((od, ov) => od.VisitId == ov.Id)
+            .LeftJoin<Order>((od, ov, o) => ov.OrderId == o.Id)
+             //.Includes(d => d.OrderVisit)
+             //.Includes(d => d.OrderVisit, d => d.Order)
+             .Where((od, ov, o) => ov.VisitTime >= dto.StartTime.Value && ov.VisitTime <= dto.EndTime.Value && ov.VisitState == EVisitState.Visited
+                && od.SeatEvaluate != null && od.SeatEvaluate != ESeatEvaluate.VeryNoSatisfied && od.SeatEvaluate != ESeatEvaluate.Normal && od.VisitTarget == EVisitTarget.Seat)
+              .GroupBy((od, ov, o) => new
+              {
+                  o.AcceptorName,
+                  o.AcceptorId
+              })
+                 .Select((od, ov, o) => new SeatSatisfactionStatisticsListDetailDto
                  {
                      UserName = o.AcceptorName,
                      UserId = o.AcceptorId,
-                     DefaultSatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(o.SeatEvaluate == ESeatEvaluate.DefaultSatisfied, 1, 0)),
-                     VeryNoSatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(o.SeatEvaluate == ESeatEvaluate.VeryNoSatisfied, 1, 0)),
-                     NoSatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(o.SeatEvaluate == ESeatEvaluate.NoSatisfied, 1, 0)),
-                     Normal = SqlFunc.AggregateSum(SqlFunc.IIF(o.SeatEvaluate == ESeatEvaluate.Normal, 1, 0)),
-                     Satisfied = SqlFunc.AggregateSum(SqlFunc.IIF(o.SeatEvaluate == ESeatEvaluate.Satisfied, 1, 0)),
-                     VerySatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(o.SeatEvaluate == ESeatEvaluate.VerySatisfied, 1, 0)),
-                     NoConnect = SqlFunc.AggregateSum(SqlFunc.IIF(o.SeatEvaluate == ESeatEvaluate.NoConnect, 1, 0)),
-                     NoEvaluate = SqlFunc.AggregateSum(SqlFunc.IIF(o.SeatEvaluate == ESeatEvaluate.NoEvaluate, 1, 0))
+                     DefaultSatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(od.SeatEvaluate == ESeatEvaluate.DefaultSatisfied, 1, 0)),
+                     VeryNoSatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(od.SeatEvaluate == ESeatEvaluate.VeryNoSatisfied, 1, 0)),
+                     NoSatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(od.SeatEvaluate == ESeatEvaluate.NoSatisfied, 1, 0)),
+                     Normal = SqlFunc.AggregateSum(SqlFunc.IIF(od.SeatEvaluate == ESeatEvaluate.Normal, 1, 0)),
+                     Satisfied = SqlFunc.AggregateSum(SqlFunc.IIF(od.SeatEvaluate == ESeatEvaluate.Satisfied, 1, 0)),
+                     VerySatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(od.SeatEvaluate == ESeatEvaluate.VerySatisfied, 1, 0)),
+                     NoConnect = SqlFunc.AggregateSum(SqlFunc.IIF(od.SeatEvaluate == ESeatEvaluate.NoConnect, 1, 0)),
+                     NoEvaluate = SqlFunc.AggregateSum(SqlFunc.IIF(od.SeatEvaluate == ESeatEvaluate.NoEvaluate, 1, 0))
                  });
         return query;
+        //var query = _orderVisitRepository.Queryable()
+        //         .LeftJoin<Order>((ov, o) => ov.OrderId == o.Id)
+        //         .Where((ov, o) => ov.VisitTime >= dto.StartTime.Value && ov.VisitTime <= dto.EndTime.Value && ov.VisitState == EVisitState.Visited && o.SeatEvaluate != null
+        //         && o.SeatEvaluate != ESeatEvaluate.VeryNoSatisfied && o.SeatEvaluate != ESeatEvaluate.Normal)
+        //         .GroupBy((ov, o) => new
+        //         {
+        //             o.AcceptorName,
+        //             o.AcceptorId
+        //         })
+        //         .Select((ov, o) => new SeatSatisfactionStatisticsListDetailDto
+        //         {
+        //             UserName = o.AcceptorName,
+        //             UserId = o.AcceptorId,
+        //             DefaultSatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(o.SeatEvaluate == ESeatEvaluate.DefaultSatisfied, 1, 0)),
+        //             VeryNoSatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(o.SeatEvaluate == ESeatEvaluate.VeryNoSatisfied, 1, 0)),
+        //             NoSatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(o.SeatEvaluate == ESeatEvaluate.NoSatisfied, 1, 0)),
+        //             Normal = SqlFunc.AggregateSum(SqlFunc.IIF(o.SeatEvaluate == ESeatEvaluate.Normal, 1, 0)),
+        //             Satisfied = SqlFunc.AggregateSum(SqlFunc.IIF(o.SeatEvaluate == ESeatEvaluate.Satisfied, 1, 0)),
+        //             VerySatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(o.SeatEvaluate == ESeatEvaluate.VerySatisfied, 1, 0)),
+        //             NoConnect = SqlFunc.AggregateSum(SqlFunc.IIF(o.SeatEvaluate == ESeatEvaluate.NoConnect, 1, 0)),
+        //             NoEvaluate = SqlFunc.AggregateSum(SqlFunc.IIF(o.SeatEvaluate == ESeatEvaluate.NoEvaluate, 1, 0))
+        //         });
+        //return query;
     }
 
     /// <summary>
@@ -3331,21 +3349,37 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    public ISugarQueryable<OrderVisit> QuerySeatSatisfactionOrderVisitList(SeatSatisfactionOrderVisitRequest dto)
+    public ISugarQueryable<OrderVisitDetail> QuerySeatSatisfactionOrderVisitList(SeatSatisfactionOrderVisitRequest dto)
     {
-        var query = _orderVisitRepository.Queryable()
-            .Includes(d => d.Order)
-            .Includes(d => d.Employee)
-            .Includes(d => d.OrderVisitDetails)
-           .Where(p => p.VisitTime >= dto.StartTime.Value && p.VisitTime <= dto.EndTime.Value && p.VisitState == EVisitState.Visited && p.Order.SeatEvaluate != null
-           && p.Order.SeatEvaluate != ESeatEvaluate.VeryNoSatisfied && p.Order.SeatEvaluate != ESeatEvaluate.Normal)
-           .WhereIF(!string.IsNullOrEmpty(dto.UserId), p => p.Order.AcceptorId == dto.UserId)
-           .WhereIF(dto.SeatEvaluate.HasValue, p => p.Order.SeatEvaluate == dto.SeatEvaluate)
-           .WhereIF(!string.IsNullOrEmpty(dto.UserName), p => p.Order.AcceptorName == dto.UserName)
-           .WhereIF(!string.IsNullOrEmpty(dto.Title), p => p.Order.Title.Contains(dto.Title))
-           .WhereIF(!string.IsNullOrEmpty(dto.No), p => p.Order.No.Contains(dto.No))
-            .OrderByDescending(p => p.VisitTime);
+        var query = _orderVisitDetailRepository.Queryable()
+              .Includes(x => x.OrderVisit, d => d.Order)
+              .Includes(x => x.OrderVisit, d => d.Employee)
+              .Where(x => x.OrderVisit.VisitTime >= dto.StartTime.Value && x.OrderVisit.VisitTime <= dto.EndTime.Value
+                  && x.OrderVisit.VisitState == EVisitState.Visited && x.SeatEvaluate != null
+                  && x.SeatEvaluate != ESeatEvaluate.VeryNoSatisfied && x.SeatEvaluate != ESeatEvaluate.Normal && x.VisitTarget == EVisitTarget.Seat)
+                 .WhereIF(!string.IsNullOrEmpty(dto.UserId), x => x.OrderVisit.Order.AcceptorId == dto.UserId)
+               .WhereIF(dto.SeatEvaluate.HasValue, x => x.SeatEvaluate == dto.SeatEvaluate)
+               .WhereIF(!string.IsNullOrEmpty(dto.UserName), x => x.OrderVisit.Order.AcceptorName == dto.UserName)
+               .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.OrderVisit.Order.Title.Contains(dto.Title))
+               .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.OrderVisit.Order.No.Contains(dto.No))
+            .OrderByDescending(x => x.OrderVisit.VisitTime);
         return query;
+        //var query = _orderVisitRepository.Queryable()
+        //    .Includes(d => d.Order)
+        //    .Includes(d => d.Employee)
+        //    .Includes(d => d.OrderVisitDetails)
+        //   .Where(p => p.VisitTime >= dto.StartTime.Value && p.VisitTime <= dto.EndTime.Value && p.VisitState == EVisitState.Visited && p.Order.SeatEvaluate != null
+        //   && p.Order.SeatEvaluate != ESeatEvaluate.VeryNoSatisfied && p.Order.SeatEvaluate != ESeatEvaluate.Normal)
+
+
+
+        //   .WhereIF(!string.IsNullOrEmpty(dto.UserId), p => p.Order.AcceptorId == dto.UserId)
+        //   .WhereIF(dto.SeatEvaluate.HasValue, p => p.Order.SeatEvaluate == dto.SeatEvaluate)
+        //   .WhereIF(!string.IsNullOrEmpty(dto.UserName), p => p.Order.AcceptorName == dto.UserName)
+        //   .WhereIF(!string.IsNullOrEmpty(dto.Title), p => p.Order.Title.Contains(dto.Title))
+        //   .WhereIF(!string.IsNullOrEmpty(dto.No), p => p.Order.No.Contains(dto.No))
+        //    .OrderByDescending(p => p.VisitTime);
+        //return query;
     }
 
     #region private
@@ -3726,16 +3760,19 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         var hasHandled = (dto.IsHandled.HasValue && dto.IsHandled.Value) || dto.TypeCode == 1 || dto.TypeCode == 2;
         if (hasHandled)
         {
-            query.Includes(d => d.WorkflowSteps.Where(step =>
-                    !string.IsNullOrEmpty(step.HandlerId)
-                    && step.HandlerId == _sessionContext.UserId
-                    && step.Status == EWorkflowStepStatus.Handled
-                ).ToList())
-                .Where(d => d.WorkflowSteps
-                    .Any(step =>
+            if (dto.TypeCode == 1)
+            {
+                query.Includes(d => d.WorkflowSteps.Where(step =>
                         !string.IsNullOrEmpty(step.HandlerId)
                         && step.HandlerId == _sessionContext.UserId
-                        && step.Status == EWorkflowStepStatus.Handled));
+                        && step.Status == EWorkflowStepStatus.Handled
+                    ).ToList())
+                    .Where(d => d.WorkflowSteps
+                        .Any(step =>
+                            !string.IsNullOrEmpty(step.HandlerId)
+                            && step.HandlerId == _sessionContext.UserId
+                            && step.Status == EWorkflowStepStatus.Handled));
+            }
         }
         else
         {
@@ -3769,7 +3806,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         //    (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && _sessionContextProvider.SessionContext.Roles.Contains(step.RoleId)))).Any() ||
         //    (string.IsNullOrEmpty(d.WorkflowId) && (string.IsNullOrEmpty(d.SignerId) || d.SignerId == _sessionContextProvider.SessionContext.RequiredUserId))
         //);
-        
+
         return query
             // 交办件:已派单其他节点的工单,该选项卡下工单若办结就不显示
             .WhereIF(dto.TypeCode.HasValue == true && dto.TypeCode == 1, d => /*d.ProcessType == EProcessType.Jiaoban &&*/ d.Status < EOrderStatus.Filed)

+ 4 - 1
src/Hotline.Application/StatisticalReport/OrderReportApplication.cs

@@ -33,6 +33,7 @@ using Hotline.Share.Dtos;
 using Hotline.Share.Tools;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
+using Hotline.SeedData;
 
 namespace Hotline.Application.StatisticalReport
 {
@@ -1754,7 +1755,9 @@ namespace Hotline.Application.StatisticalReport
                 .Where(x => SqlFunc.JsonListObjectAny(x.OrgNoSatisfiedReason, "Key", dto.DissatisfiedKey))
                 .WhereIF(dto.VisitOrgName.NotNullOrEmpty(), x => x.VisitOrgName.Contains(dto.VisitOrgName))
                 .WhereIF(IsCenter == false, x => x.VisitOrgCode.StartsWith(_sessionContext.RequiredOrgId))
-                .WhereIF(IsCenter == true, x => x.VisitOrgCode.StartsWith(dto.OrgCode))
+                // .WhereIF(IsCenter == true, x => x.VisitOrgCode.StartsWith(dto.OrgCode))
+                .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == OrgSeedData.CenterId, x => x.VisitOrgCode == dto.OrgCode)
+                .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != OrgSeedData.CenterId, x => x.VisitOrgCode.StartsWith(dto.OrgCode))
                 .WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.OrderVisit.Order.No.Contains(dto.Keyword) || x.OrderVisit.Order.Title.Contains(dto.Keyword))
                 .WhereIF(!string.IsNullOrEmpty(dto.OrgProcessingResults), x => SqlFunc.JsonListObjectAny(x.OrgProcessingResults, "Key", dto.OrgProcessingResults))
                 .OrderBy(x => x.OrderVisit.VisitTime);

+ 11 - 1
src/Hotline.Share/Dtos/CallCenter/BiQueryCallsDto.cs

@@ -456,26 +456,36 @@ public class QueryCallOutDateStatisticsDetailResp
     /// </summary>
     public double CallOutPutthroughRate => CallOutTotal == 0 ? 0 : Math.Round(((double)CallOutPutthroughCount / CallOutTotal) * 100, 2);
 
-    
+    public string CallOutPutthroughRateText => CallOutPutthroughRate + "%";
+
     /// <summary>
     /// 个人服务呼出接通率
     /// </summary>
     public double PersonCallOutPutthroughRate => PersonCallOutCount == 0 ? 0 : Math.Round(((double)PersonCallOutPutthroughCount / PersonCallOutCount) * 100, 2);
 
+    public string PersonCallOutPutthroughRateText => PersonCallOutPutthroughRate + "%";
+
     /// <summary>
     /// 企业服务呼出接通率
     /// </summary>
     public double EnterpriseCallOutPutthroughRate => EnterpriseCallOutCount == 0 ? 0 : Math.Round(((double)EnterpriseCallOutPutthroughCount / EnterpriseCallOutCount) * 100, 2);
 
+
+    public string EnterpriseCallOutPutthroughRateText => EnterpriseCallOutPutthroughRate + "%";
+
     /// <summary>
     /// 智能回访呼出接通率
     /// </summary>
     public double AiVisitCallOutPutthroughRate => AiVisitCallOutCount == 0 ? 0 : Math.Round(((double)AiVisitCallOutPutthroughCount / AiVisitCallOutCount) * 100, 2);
 
+    public string AiVisitCallOutPutthroughRatetext => AiVisitCallOutPutthroughRate + "%";
+
     /// <summary>
     /// 智能外呼呼出接通率
     /// </summary>
     public double AiCallOutPutthroughRate => AiCallOutCount == 0 ? 0 : Math.Round(((double)AiCallOutPutthroughCount / AiCallOutCount) * 100, 2);
+
+    public string AiCallOutPutthroughRateText => AiCallOutPutthroughRate + "%";
 }
 
 #endregion

+ 4 - 4
src/Hotline/dataview.md

@@ -342,10 +342,10 @@ WHERE ordervisitdetailtemp."VisitTarget" = 20 and ordervisittemp."VisitTime">='2
 
 
  ### 信件清单查询(新)
-  select '' as "序号",
+   select '' as "序号",
 aaa.信件状态,aaa."是否超期",aaa.来源,aaa.转接来源,aaa.当前节点,aaa.重办次数,aaa.甄别状态,aaa.受理编号,aaa.省编号,aaa.受理时间,aaa.标题,aaa.期满时间,aaa."一级部门",
 aaa.二级部门,aaa."接办部门",aaa."办结时间",aaa."受理类型",aaa."热点类型",aaa.热点全称,aaa."区域",aaa.区域全称,aaa."受理人",aaa."姓名",aaa."联系电话",aaa."来电电话",
-aaa."事发地址",aaa."具体对象",aaa."来电人主体",aaa."性别",ccc."SeatVisitResult" as "坐席满意度",bbb."OrgProcessingResults" as "满意度",aaa."推送分类",aaa."受理内容",
+aaa."事发地址",aaa."具体对象",aaa."来电人主体",aaa."性别",ccc."SeatVisitResult" as "坐席满意度",bbb."VisitOrgName" as "回访部门",bbb."OrgProcessingResults" as "满意度",aaa."推送分类",aaa."受理内容",
 aaa."承办意见",aaa."归档意见" from 
 (select 
 CASE "ordertemp"."Status"
@@ -438,10 +438,10 @@ END AS "性别" ,
 "Content" AS "受理内容" , 
 "ActualOpinion" AS "承办意见" ,
 "FileOpinion" AS "归档意见" ,
-"Id" AS "SugarNav_Id" FROM "order" ordertemp  WHERE (( "CreationTime" >= '2024-08-29' ) AND ( "CreationTime" <= '2024-08-30' ))  AND ( "IsDeleted" = FALSE )ORDER BY "CreationTime" ASC) aaa
+"Id" AS "SugarNav_Id" FROM "order" ordertemp  WHERE (( "CreationTime" >= '2024-08-29' ) AND ( "CreationTime" <= '2024-11-30' ))  AND ( "IsDeleted" = FALSE )ORDER BY "CreationTime" ASC) aaa
 left JOIN
 (select 
- string_agg(visitdetailtemptwo."OrgProcessingResults"::JSON->>'Value','/') as "OrgProcessingResults",visittemptwo."OrderId" as "OrderId"
+ string_agg(visitdetailtemptwo."VisitOrgName",'/') as "VisitOrgName",string_agg(visitdetailtemptwo."OrgProcessingResults"::JSON->>'Value','/') as "OrgProcessingResults",visittemptwo."OrderId" as "OrderId"
 from order_visit visittemptwo
 left join order_visit_detail visitdetailtemptwo on visittemptwo."Id" = visitdetailtemptwo."VisitId"
 where  visittemptwo."CreationTime">='2024-08-29' and visitdetailtemptwo."VisitTarget"=20 AND visittemptwo."VisitState"=30 group by visittemptwo."OrderId") as bbb