Jelajahi Sumber

部门满意度查询

田爽 4 bulan lalu
induk
melakukan
de4c3bb7f8

+ 151 - 74
src/Hotline.Application/Orders/OrderApplication.cs

@@ -2009,77 +2009,154 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         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 主部门查询
+		var mainList = 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)
+		   .Where((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, //未接通
+		   }).ToListAsync();
+		#endregion
+
+		#region 下级部门查询
+		var juniorList = 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)
+           .Where((x, it) => it.VisitOrgCode.StartsWith(dto.OrgCode)  && it.VisitOrgCode != 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>(orgLevelStr))
+		   })
+		   .Select((x, it) => new VisitAndOrgSatisfactionStatisticsDto()
+		   {
+			   OrgCode = it.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(orgLevelStr)),
+			   TotalSumCount = SqlFunc.AggregateCount(it.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(orgLevelStr))),
+			   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, //未接通
+		   }).ToListAsync();
+
+
+		#endregion
+
+		mainList.AddRange(juniorList);
 
         #region 老系统数据
         if (await _statisticsDepartSatisfiedRepository.Queryable().Where(x => x.Time >= dto.StartTime.Value && x.Time <= dto.EndTime.Value).AnyAsync())
@@ -2121,8 +2198,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                     NoPutThroughCount = it.NoPutThroughCount, //未接通
                 })
                 .ToListAsync();
-            list = (from t1 in list
-                    join t2 in oldData on t1.OrgCode equals t2.OrgCode into t1_t2
+            mainList = (from t1 in mainList
+					join t2 in oldData on t1.OrgCode equals t2.OrgCode into t1_t2
                     from item in t1_t2.DefaultIfEmpty()
                     select new VisitAndOrgSatisfactionStatisticsDto()
                     {
@@ -2140,7 +2217,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                     }).ToList();
         }
         #endregion
-        return list;
+        return mainList;
     }
 
 

+ 2 - 1
src/Hotline.Repository.SqlSugar/Orders/OrderRepository.cs

@@ -1482,7 +1482,8 @@ namespace Hotline.Repository.SqlSugar.Orders
                 //.WhereIF(IsCenter == true && dto.IsOnlyMy == null, x => x.VisitOrgCode.StartsWith(dto.OrgCode))
                 //.WhereIF(IsCenter == true , x=> x.VisitOrgCode.StartsWith(dto.OrgCode))
                 //.WhereIF(IsCenter == false, x => x.VisitOrgCode == dto.OrgCode)
-                .WhereIF(!string.IsNullOrEmpty(dto.OrgCode), x => x.VisitOrgCode.StartsWith(dto.OrgCode))
+                .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && (string.IsNullOrEmpty(dto.PickOrgCode) ||  dto.OrgCode != dto.PickOrgCode), x => x.VisitOrgCode.StartsWith(dto.OrgCode))
+                .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && (!string.IsNullOrEmpty(dto.PickOrgCode)  && dto.PickOrgCode == dto.OrgCode) ,x=>x.VisitOrgCode == dto.OrgCode)  
                 .WhereIF(dto.TypeId is 1, x => SqlFunc.JsonField(x.OrgProcessingResults, "Key") == dto.DateValue)
                 .WhereIF(dto.TypeId is 2, x => SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == dto.DateValue)
                 .WhereIF(!string.IsNullOrEmpty(dto.LineNum), x => x.OrderVisit.Order.CallRecord.Gateway == dto.LineNum)

+ 7 - 1
src/Hotline.Share/Dtos/Bi/BiOrderDto.cs

@@ -56,7 +56,13 @@ namespace Hotline.Share.Dtos.Bi
         /// 回访方式
         /// </summary>
         public EVisitType? VisitType { get; set; }
-    }
+
+        /// <summary>
+        /// 选择的部门
+        /// </summary>
+        public string? PickOrgCode { get; set; }
+
+	}
 
     public record HighFrequencyCallStatisticsRequest : PagedRequest
     {