Prechádzať zdrojové kódy

Merge branch 'master' of http://110.188.24.182:10023/Fengwo/hotline

田爽 1 rok pred
rodič
commit
87a52f1ed9

+ 78 - 8
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -647,7 +647,7 @@ namespace Hotline.Api.Controllers.Bi
                 .Select(x => new VisitAndOrgSatisfactionStatisticsDto()
                 {
                     OrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
-                    TotalSumCount = SqlFunc.AggregateCount(x.VisitOrgCode),
+                    TotalSumCount = SqlFunc.AggregateCount(x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))),
                     VerySatisfiedCount =SqlFunc.IIF(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(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(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))),//视为满意
@@ -729,16 +729,86 @@ namespace Hotline.Api.Controllers.Bi
         /// <param name="LineNum"></param>
         /// <returns></returns>
         [HttpGet("visit-org-statisfaction-org-detail")]
-        public async Task VisitAndOrgStatisfactionOrgDetail(DateTime StartDate, DateTime EndDate, string OrgCode, int TypeId, string? LineNum)
+        public async Task<VisitAndOrgSatisfactionStatisticsResultDto> VisitAndOrgStatisfactionOrgDetail(DateTime StartDate, DateTime EndDate, string OrgCode, int TypeId, string? LineNum)
         {
             EndDate = EndDate.AddDays(1).AddSeconds(-1);
-            _systemOrganizeRepository.Queryable().Where(x => x.ParentId == OrgCode)
-                .LeftJoin<OrderVisitDetail>((x, it) => x.Id == it.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")))
+            var list = await _systemOrganizeRepository.Queryable().Where(x => x.Id.StartsWith(OrgCode))
+                .LeftJoin<OrderVisitDetail>((x, it) => x.Id == it.VisitOrgCode)
                 .Where((x, it) => it.OrderVisit.VisitTime >= StartDate && it.OrderVisit.VisitTime <= EndDate && it.VisitTarget == EVisitTarget.Org && it.OrderVisit.VisitState == EVisitState.Visited)
-                .WhereIF(!string.IsNullOrEmpty(LineNum),(x,it)=>it.OrderVisit.Order.CallRecord.Gateway.Contains(LineNum));
-            //var list = await _orderVisitDetailRepository.Queryable()
-            //     .Where(x => x.OrderVisit.VisitTime >= StartDate && x.OrderVisit.VisitTime <= EndDate && x.VisitTarget == EVisitTarget.Org && x.OrderVisit.VisitState == EVisitState.Visited && !string.IsNullOrEmpty(x.VisitOrgCode))
-            //     .Where(x=>x.VisitOrgCode.StartsWith(OrgCode) && )
+                .WhereIF(!string.IsNullOrEmpty(LineNum),(x,it)=>it.OrderVisit.Order.CallRecord.Gateway.Contains(LineNum))
+                 .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(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(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(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(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(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(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(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();
+
+            var countySumModel = new VisitAndOrgSatisfactionStatisticsDto()
+            {
+                OrgName = "区县合计",
+                TotalSumCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.TotalSumCount),
+                VerySatisfiedCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.VerySatisfiedCount),
+                SatisfiedCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.SatisfiedCount),
+                RegardedAsSatisfiedCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.RegardedAsSatisfiedCount),
+                DefaultSatisfiedCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.DefaultSatisfiedCount),
+                NoSatisfiedCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoSatisfiedCount),
+                NoEvaluateCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoEvaluateCount),
+                NoPutThroughCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoPutThroughCount),
+            };
+
+            var citySumModel = new VisitAndOrgSatisfactionStatisticsDto()
+            {
+                OrgName = "市直合计",
+                TotalSumCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.TotalSumCount),
+                VerySatisfiedCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.VerySatisfiedCount),
+                SatisfiedCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.SatisfiedCount),
+                RegardedAsSatisfiedCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.RegardedAsSatisfiedCount),
+                DefaultSatisfiedCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.DefaultSatisfiedCount),
+                NoSatisfiedCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoSatisfiedCount),
+                NoEvaluateCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoEvaluateCount),
+                NoPutThroughCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoPutThroughCount),
+            };
+
+            var sumModel = new VisitAndOrgSatisfactionStatisticsDto()
+            {
+                OrgName = "总计",
+                TotalSumCount = list.Sum(x => x.TotalSumCount),
+                VerySatisfiedCount = list.Sum(x => x.VerySatisfiedCount),
+                SatisfiedCount = list.Sum(x => x.SatisfiedCount),
+                RegardedAsSatisfiedCount = list.Sum(x => x.RegardedAsSatisfiedCount),
+                DefaultSatisfiedCount = list.Sum(x => x.DefaultSatisfiedCount),
+                NoSatisfiedCount = list.Sum(x => x.NoSatisfiedCount),
+                NoEvaluateCount = list.Sum(x => x.NoEvaluateCount),
+                NoPutThroughCount = list.Sum(x => x.NoPutThroughCount),
+            };
+
+            return new VisitAndOrgSatisfactionStatisticsResultDto { DataList = list, CountySumModel = countySumModel, CitySumModel = citySumModel, SumModel = sumModel };
         }
 
 

+ 0 - 1
src/Hotline.Api/Controllers/RoleController.cs

@@ -64,7 +64,6 @@ public class RoleController : BaseController
     /// <param name="dto"></param>
     /// <returns></returns>
     [HttpGet("paged")]
-    [Permission(EPermission.QueryPagedRole)]
     public async Task<PagedDto<RoleDto>> QueryPaged([FromQuery] QueryRolesPagedDto dto)
     {
         var query = _roleRepository.Queryable(includeDeleted: true);

+ 2 - 1
src/Hotline.Application/CallCenter/Calls/TrApplication.cs

@@ -44,7 +44,8 @@ namespace Hotline.Application.CallCenter.Calls
                 
                 if (work.TelNo == telNo)
                 {
-                    return new TrOnDutyResponseDto() { TelNo = work.TelNo, TelPwd = work.TelPwd, Description = work.Description, QueueId = work.QueueId,StartTime = work.StartTime };
+                    bool isRest = await _telRestRepository.AnyAsync(x => x.TelNo == telNo && x.UserId == userId && !x.EndTime.HasValue);
+                    return new TrOnDutyResponseDto() { TelNo = work.TelNo, TelPwd = work.TelPwd, Description = work.Description, QueueId = work.QueueId,StartTime = work.StartTime, IsRest= isRest };
                 }
                 else
                 {

+ 10 - 0
src/Hotline.Share/Dtos/TrCallCenter/TrTelDao.cs

@@ -178,6 +178,16 @@ namespace Hotline.Share.Dtos.TrCallCenter
         public string? QueueId { get; set; }
 
         public DateTime StartTime { get; set; }
+
+        public bool? IsRest { get; set; }
+
+        public int Second => CalcSecond();
+
+
+        public int CalcSecond()
+        {
+            return (int)(DateTime.Now - StartTime).TotalSeconds;
+        }
     }