Parcourir la source

Merge branch 'dev' of http://git.12345lm.cn/Fengwo/hotline into dev

Dun.Jason il y a 10 mois
Parent
commit
87255dbd11

+ 143 - 251
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -868,7 +868,7 @@ namespace Hotline.Api.Controllers.Bi
         {
             var data = await _orderApplication.VisitAndOrgSatisfactionStatistics(dto);
 
-			var countySumModel = new VisitAndOrgSatisfactionStatisticsDto()
+            var countySumModel = new VisitAndOrgSatisfactionStatisticsDto()
             {
                 OrgName = "区县合计",
                 TotalSumCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.TotalSumCount),
@@ -918,46 +918,46 @@ namespace Hotline.Api.Controllers.Bi
         [HttpPost("visit-org-satisfaction-statistics/_export")]
         public async Task<FileStreamResult> VisitAndOrgSatisfactionStatisticsExport([FromBody] ExportExcelDto<PagedKeywordSonRequest> dto)
         {
-	        List<VisitAndOrgSatisfactionStatisticsDto> data = await _orderApplication.VisitAndOrgSatisfactionStatistics(dto.QueryDto);
-			var countySumModel = new VisitAndOrgSatisfactionStatisticsDto()
-			{
-				OrgName = "区县合计",
-				TotalSumCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.TotalSumCount),
-				VerySatisfiedCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.VerySatisfiedCount),
-				SatisfiedCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.SatisfiedCount),
-				RegardedAsSatisfiedCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.RegardedAsSatisfiedCount),
-				DefaultSatisfiedCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.DefaultSatisfiedCount),
-				NoSatisfiedCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoSatisfiedCount),
-				NoEvaluateCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoEvaluateCount),
-				NoPutThroughCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoPutThroughCount),
-			};
-			var citySumModel = new VisitAndOrgSatisfactionStatisticsDto()
-			{
-				OrgName = "市直合计",
-				TotalSumCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.TotalSumCount),
-				VerySatisfiedCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.VerySatisfiedCount),
-				SatisfiedCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.SatisfiedCount),
-				RegardedAsSatisfiedCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.RegardedAsSatisfiedCount),
-				DefaultSatisfiedCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.DefaultSatisfiedCount),
-				NoSatisfiedCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoSatisfiedCount),
-				NoEvaluateCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoEvaluateCount),
-				NoPutThroughCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoPutThroughCount),
-			};
-			var sumModel = new VisitAndOrgSatisfactionStatisticsDto()
-			{
-				OrgName = "总计",
-				TotalSumCount = data.Sum(x => x.TotalSumCount),
-				VerySatisfiedCount = data.Sum(x => x.VerySatisfiedCount),
-				SatisfiedCount = data.Sum(x => x.SatisfiedCount),
-				RegardedAsSatisfiedCount = data.Sum(x => x.RegardedAsSatisfiedCount),
-				DefaultSatisfiedCount = data.Sum(x => x.DefaultSatisfiedCount),
-				NoSatisfiedCount = data.Sum(x => x.NoSatisfiedCount),
-				NoEvaluateCount = data.Sum(x => x.NoEvaluateCount),
-				NoPutThroughCount = data.Sum(x => x.NoPutThroughCount),
-			};
-			data.Add(countySumModel);
-			data.Add(citySumModel);
-			data.Add(sumModel);
+            List<VisitAndOrgSatisfactionStatisticsDto> data = await _orderApplication.VisitAndOrgSatisfactionStatistics(dto.QueryDto);
+            var countySumModel = new VisitAndOrgSatisfactionStatisticsDto()
+            {
+                OrgName = "区县合计",
+                TotalSumCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.TotalSumCount),
+                VerySatisfiedCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.VerySatisfiedCount),
+                SatisfiedCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.SatisfiedCount),
+                RegardedAsSatisfiedCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.RegardedAsSatisfiedCount),
+                DefaultSatisfiedCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.DefaultSatisfiedCount),
+                NoSatisfiedCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoSatisfiedCount),
+                NoEvaluateCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoEvaluateCount),
+                NoPutThroughCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoPutThroughCount),
+            };
+            var citySumModel = new VisitAndOrgSatisfactionStatisticsDto()
+            {
+                OrgName = "市直合计",
+                TotalSumCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.TotalSumCount),
+                VerySatisfiedCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.VerySatisfiedCount),
+                SatisfiedCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.SatisfiedCount),
+                RegardedAsSatisfiedCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.RegardedAsSatisfiedCount),
+                DefaultSatisfiedCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.DefaultSatisfiedCount),
+                NoSatisfiedCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoSatisfiedCount),
+                NoEvaluateCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoEvaluateCount),
+                NoPutThroughCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoPutThroughCount),
+            };
+            var sumModel = new VisitAndOrgSatisfactionStatisticsDto()
+            {
+                OrgName = "总计",
+                TotalSumCount = data.Sum(x => x.TotalSumCount),
+                VerySatisfiedCount = data.Sum(x => x.VerySatisfiedCount),
+                SatisfiedCount = data.Sum(x => x.SatisfiedCount),
+                RegardedAsSatisfiedCount = data.Sum(x => x.RegardedAsSatisfiedCount),
+                DefaultSatisfiedCount = data.Sum(x => x.DefaultSatisfiedCount),
+                NoSatisfiedCount = data.Sum(x => x.NoSatisfiedCount),
+                NoEvaluateCount = data.Sum(x => x.NoEvaluateCount),
+                NoPutThroughCount = data.Sum(x => x.NoPutThroughCount),
+            };
+            data.Add(countySumModel);
+            data.Add(citySumModel);
+            data.Add(sumModel);
             dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
             var dtos = data
              .Select(stu => _mapper.Map(stu, typeof(VisitAndOrgSatisfactionStatisticsDto), dynamicClass))
@@ -982,8 +982,8 @@ namespace Hotline.Api.Controllers.Bi
         [HttpGet("visit-org-statisfaction-org-detail")]
         public async Task<VisitAndOrgSatisfactionStatisticsResultDto> VisitAndOrgStatisfactionOrgDetail([FromQuery] PagedKeywordSonRequest dto)
         {
-			var list = await _orderApplication.VisitAndOrgStatisfactionOrgDetail(dto);
-			var countySumModel = new VisitAndOrgSatisfactionStatisticsDto()
+            var list = await _orderApplication.VisitAndOrgStatisfactionOrgDetail(dto);
+            var countySumModel = new VisitAndOrgSatisfactionStatisticsDto()
             {
                 OrgName = "区县合计",
                 TotalSumCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.TotalSumCount),
@@ -1025,93 +1025,93 @@ namespace Hotline.Api.Controllers.Bi
             return new VisitAndOrgSatisfactionStatisticsResultDto { DataList = list, CountySumModel = countySumModel, CitySumModel = citySumModel, SumModel = sumModel };
         }
 
-		/// <summary>
-		/// 部门满意度统计导出
-		/// </summary>
-		/// <returns></returns>
-		[HttpPost("visit-org-statisfaction-org-detail/_export")]
-		public async Task<FileStreamResult> VisitAndOrgStatisfactionOrgDetailExport([FromBody] ExportExcelDto<PagedKeywordSonRequest> dto)
-		{
-			var list = await _orderApplication.VisitAndOrgStatisfactionOrgDetail(dto.QueryDto);
-			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),
-			};
-			list.Add(countySumModel);
-			list.Add(citySumModel);
-			list.Add(sumModel);
-			dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
-			var dtos = list
-			 .Select(stu => _mapper.Map(stu, typeof(VisitAndOrgSatisfactionStatisticsDto), dynamicClass))
-			 .Cast<object>()
-			 .ToList();
-
-			var stream = ExcelHelper.CreateStream(dtos);
-
-			return ExcelStreamResult(stream, "部门满意度统计数据");
-		}
-
-		/// <summary>
-		/// 部门满意度明细
-		/// </summary>
-		/// <param name="StartDate"></param>
-		/// <param name="EndDate"></param>
-		/// <param name="OrgCode"></param>
-		/// <param name="TypeId"></param>
-		/// <param name="LineNum"></param>
-		/// <returns></returns>
-		[HttpGet("visit-org-satisfaction-detail")]
+        /// <summary>
+        /// 部门满意度统计导出
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("visit-org-statisfaction-org-detail/_export")]
+        public async Task<FileStreamResult> VisitAndOrgStatisfactionOrgDetailExport([FromBody] ExportExcelDto<PagedKeywordSonRequest> dto)
+        {
+            var list = await _orderApplication.VisitAndOrgStatisfactionOrgDetail(dto.QueryDto);
+            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),
+            };
+            list.Add(countySumModel);
+            list.Add(citySumModel);
+            list.Add(sumModel);
+            dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+            var dtos = list
+             .Select(stu => _mapper.Map(stu, typeof(VisitAndOrgSatisfactionStatisticsDto), dynamicClass))
+             .Cast<object>()
+             .ToList();
+
+            var stream = ExcelHelper.CreateStream(dtos);
+
+            return ExcelStreamResult(stream, "部门满意度统计数据");
+        }
+
+        /// <summary>
+        /// 部门满意度明细
+        /// </summary>
+        /// <param name="StartDate"></param>
+        /// <param name="EndDate"></param>
+        /// <param name="OrgCode"></param>
+        /// <param name="TypeId"></param>
+        /// <param name="LineNum"></param>
+        /// <returns></returns>
+        [HttpGet("visit-org-satisfaction-detail")]
         public async Task<PagedDto<OrderVisitDetailDto>> VisitAndOrgSatisfactionDetail([FromQuery] VisitAndOrgSatisfactionDetailDto dto)
         {
             var (total, items) = await _orderApplication.VisitAndOrgSatisfactionDetail(dto)
-				.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
+                .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
             return new PagedDto<OrderVisitDetailDto>(total, _mapper.Map<IReadOnlyList<OrderVisitDetailDto>>(items));
         }
 
-		/// <summary>
-		/// 部门满意度明细导出
-		/// </summary>
-		/// <returns></returns>
-		[HttpPost("visit-org-satisfaction-detail/_export")]
+        /// <summary>
+        /// 部门满意度明细导出
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("visit-org-satisfaction-detail/_export")]
         public async Task<FileStreamResult> VisitAndOrgSatisfactionDetailExport([FromBody] ExportExcelDto<VisitAndOrgSatisfactionDetailDto> dto)
         {
             var query = _orderApplication.VisitAndOrgSatisfactionDetail(dto.QueryDto);
             List<OrderVisitDetail> data;
             if (dto.IsExportAll)
             {
-	            data = await query.ToListAsync(HttpContext.RequestAborted);
+                data = await query.ToListAsync(HttpContext.RequestAborted);
             }
             else
             {
@@ -1124,7 +1124,7 @@ namespace Hotline.Api.Controllers.Bi
             dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
 
             var dtos = dataDtos
-				.Select(stu => _mapper.Map(stu, typeof(OrderVisitDetailDto), dynamicClass))
+                .Select(stu => _mapper.Map(stu, typeof(OrderVisitDetailDto), dynamicClass))
                 .Cast<object>()
                 .ToList();
 
@@ -1357,8 +1357,8 @@ namespace Hotline.Api.Controllers.Bi
         /// <summary>
         /// 部门受理类型统计周期
         /// </summary>
-        /// <param name="StartDate"></param>
-        /// <param name="EndDate"></param>
+        /// <param name="StartTime"></param>
+        /// <param name="EndTime"></param>
         /// <param name="TypeCode">0:全部,1:中心,2:部门</param>
         /// <returns></returns>
         [HttpGet("department_acceptance_type_statistics")]
@@ -1369,18 +1369,21 @@ namespace Hotline.Api.Controllers.Bi
             var IsCenter = _sessionContext.OrgIsCenter;
 
             var orderData = await _orderRepository.Queryable()
-              .Where(it => it.CreationTime >= StartTime && it.CreationTime <= EndTime && it.Status > EOrderStatus.WaitForAccept)
+              .Where(it => it.CreationTime >= StartTime && it.CreationTime <= EndTime && it.Status >= EOrderStatus.Filed)
               .Select(it => new
               {
                   OrgCode = IsCenter == true ? it.ActualHandleOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")) : it.ActualHandleOrgCode.Substring(0, _sessionContext.RequiredOrgId.Length + 3),
-                  it.AcceptTypeCode,
-                  it.FileDurationWorkday,
-                  it.AllDuration
+                  AcceptTypeCode = it.AcceptTypeCode,
+                  ProcessType = it.ProcessType,
+                  AllTime = it.ProcessType == EProcessType.Zhiban ? it.CreationTimeHandleDurationWorkday : it.CenterToOrgHandleDurationWorkday
+
               })
               .MergeTable()
               .LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id)
-              .WhereIF(TypeCode == 1, (it, o) => it.OrgCode == "001")
-              .WhereIF(TypeCode == 2, (it, o) => it.OrgCode != "001")
+              //.WhereIF(TypeCode == 1, (it, o) => it.OrgCode == "001")
+              //.WhereIF(TypeCode == 2, (it, o) => it.OrgCode != "001")
+              .WhereIF(TypeCode == 1, (it, o) => it.ProcessType == EProcessType.Zhiban)
+              .WhereIF(TypeCode == 2, (it, o) => it.ProcessType == EProcessType.Jiaoban)
               .WhereIF(IsCenter == false, (it, o) => it.OrgCode.StartsWith(_sessionContext.RequiredOrgId))
                .GroupBy((it, o) => new
                {
@@ -1392,156 +1395,44 @@ namespace Hotline.Api.Controllers.Bi
                 {
                     OrgName = it.OrgCode == "001" ? "热线中心" : o.Name,
                     OrgCode = it.OrgCode,
-                    OrgType = (int)o.OrgType == 2 ? "区县部门" : "市直部门",
+                    OrgType = o.OrgType == EOrgType.County ? "区县部门" : "市直部门",
                     ZxAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "10", 1, 0)),
-                    ZxAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "10" && it.AllDuration != null, it.AllDuration, 0)),
+                    ZxAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "10" && it.AllTime != null, it.AllTime, 0)),
                     ZxAcceptanceTypeCode = "10",
 
                     JyAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "15", 1, 0)),
-                    JyAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "15" && it.FileDurationWorkday != null, it.FileDurationWorkday, 0)),
+                    JyAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "15" && it.AllTime != null, it.AllTime, 0)),
                     JyAcceptanceTypeCode = "15",
 
                     QzAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "20", 1, 0)),
-                    QzAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "20" && it.FileDurationWorkday != null, it.FileDurationWorkday, 0)),
+                    QzAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "20" && it.AllTime != null, it.AllTime, 0)),
                     QzAcceptanceTypeCode = "20",
 
                     ByAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "25", 1, 0)),
-                    ByAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "25" && it.FileDurationWorkday != null, it.FileDurationWorkday, 0)),
+                    ByAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "25" && it.AllTime != null, it.AllTime, 0)),
                     ByAcceptanceTypeCode = "25",
 
                     JbAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "30", 1, 0)),
-                    JbAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "30" && it.FileDurationWorkday != null, it.FileDurationWorkday, 0)),
+                    JbAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "30" && it.AllTime != null, it.AllTime, 0)),
                     JbAcceptanceTypeCode = "30",
 
                     TsAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "35", 1, 0)),
-                    TsAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "35" && it.FileDurationWorkday != null, it.FileDurationWorkday, 0)),
+                    TsAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "35" && it.AllTime != null, it.AllTime, 0)),
                     TsAcceptanceTypeCode = "35",
 
                     QtAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "40", 1, 0)),
-                    QtAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "40" && it.FileDurationWorkday != null, it.FileDurationWorkday, 0)),
+                    QtAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "40" && it.AllTime != null, it.AllTime, 0)),
                     QtAcceptanceTypeCode = "40",
 
                     YjAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "1", 1, 0)),
-                    YjAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "1" && it.FileDurationWorkday != null, it.FileDurationWorkday, 0)),
+                    YjAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "1" && it.AllTime != null, it.AllTime, 0)),
                     YjAcceptanceTypeCode = "1"
                 })
               .ToListAsync();
 
-
             return orderData;
         }
 
-        /// <summary>
-        /// 部门受理类型统计周期---子级
-        /// </summary>
-        /// <param name="StartDate"></param>
-        /// <param name="EndDate"></param>
-        /// <param name="TypeCode">0:全部,1:中心,2:部门</param>
-        /// <param name="OrgCode"></param>
-        /// <returns></returns>
-        [HttpGet("department_acceptance_type_child_statistics")]
-        public async Task<object> DepartmentAcceptanceTypeChildStatistics(DateTime StartTime, DateTime EndTime, int TypeCode, string OrgCode)
-        {
-            EndTime = EndTime.AddDays(1).AddSeconds(-1);
-
-            // var IsCenter = _sessionContext.OrgIsCenter;
-
-            var orderData = await _orderRepository.Queryable()
-              .Where(it => it.CreationTime >= StartTime && it.CreationTime <= EndTime && it.Status > EOrderStatus.WaitForAccept)// && it.Status >= EOrderStatus.Filed
-              .WhereIF(OrgCode == "001", it => it.ActualHandleOrgCode == OrgCode)
-              .WhereIF(OrgCode != "001", it => it.ActualHandleOrgCode.StartsWith(OrgCode))
-
-              .Select(it => new
-              {
-                  // OrgCode = OrgCode == "001" ? OrgCode : it.ActualHandleOrgCode.Substring(0, OrgCode.Length + 3),
-                  OrgCode = it.ActualHandleOrgCode == "001" ? it.ActualHandleOrgCode : it.ActualHandleOrgCode.Substring(0, OrgCode.Length + 3),
-                  it.AcceptTypeCode,
-                  it.FileDurationWorkday,
-                  it.AllDuration
-              })
-              .MergeTable()
-              .LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id)
-
-              .WhereIF(TypeCode == 1, (it, o) => it.OrgCode == "001")
-              .WhereIF(TypeCode == 2, (it, o) => it.OrgCode != "001")
-               //.WhereIF(IsCenter == false, (it, o) => it.OrgCode.StartsWith(_sessionContext.RequiredOrgId))
-
-               .GroupBy((it, o) => new
-               {
-                   it.OrgCode,
-                   o.Name,
-                   o.OrgType
-               })
-                .Select((it, o) => new DepartmentAcceptanceTypeStatisticsDto
-                {
-                    OrgName = it.OrgCode == "001" ? "热线中心" : o.Name,
-                    OrgCode = it.OrgCode,
-                    OrgType = (int)o.OrgType == 2 ? "区县部门" : "市直部门",
-                    ZxAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "10", 1, 0)),
-                    ZxAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "10" && it.AllDuration != null, it.AllDuration, 0)),
-                    ZxAcceptanceTypeCode = "10",
-
-                    JyAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "15", 1, 0)),
-                    JyAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "15" && it.FileDurationWorkday != null, it.FileDurationWorkday, 0)),
-                    JyAcceptanceTypeCode = "15",
-
-                    QzAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "20", 1, 0)),
-                    QzAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "20" && it.FileDurationWorkday != null, it.FileDurationWorkday, 0)),
-                    QzAcceptanceTypeCode = "20",
-
-                    ByAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "25", 1, 0)),
-                    ByAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "25" && it.FileDurationWorkday != null, it.FileDurationWorkday, 0)),
-                    ByAcceptanceTypeCode = "25",
-
-                    JbAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "30", 1, 0)),
-                    JbAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "30" && it.FileDurationWorkday != null, it.FileDurationWorkday, 0)),
-                    JbAcceptanceTypeCode = "30",
-
-                    TsAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "35", 1, 0)),
-                    TsAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "35" && it.FileDurationWorkday != null, it.FileDurationWorkday, 0)),
-                    TsAcceptanceTypeCode = "35",
-
-                    QtAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "40", 1, 0)),
-                    QtAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "40" && it.FileDurationWorkday != null, it.FileDurationWorkday, 0)),
-                    QtAcceptanceTypeCode = "40"
-                })
-              .ToListAsync();
-
-            var sumModel = new DepartmentAcceptanceTypeStatisticsDto
-            {
-                OrgName = "合计",
-                ZxAllCount = orderData.Sum(x => x.ZxAllCount),
-                ZxAllTimes = orderData.Sum(x => x.ZxAllTimes),
-                ZxAcceptanceTypeCode = "10",
-
-                JyAllCount = orderData.Sum(x => x.JyAllCount),
-                JyAllTimes = orderData.Sum(x => x.JyAllTimes),
-                JyAcceptanceTypeCode = "15",
-
-                QzAllCount = orderData.Sum(x => x.QzAllCount),
-                QzAllTimes = orderData.Sum(x => x.QzAllTimes),
-                QzAcceptanceTypeCode = "20",
-
-                ByAllCount = orderData.Sum(x => x.ByAllCount),
-                ByAllTimes = orderData.Sum(x => x.ByAllTimes),
-                ByAcceptanceTypeCode = "25",
-
-                JbAllCount = orderData.Sum(x => x.JbAllCount),
-                JbAllTimes = orderData.Sum(x => x.JbAllTimes),
-                JbAcceptanceTypeCode = "30",
-
-                TsAllCount = orderData.Sum(x => x.TsAllCount),
-                TsAllTimes = orderData.Sum(x => x.TsAllTimes),
-                TsAcceptanceTypeCode = "35",
-
-                QtAllCount = orderData.Sum(x => x.QtAllCount),
-                QtAllTimes = orderData.Sum(x => x.QtAllTimes),
-                QtAcceptanceTypeCode = "40"
-            };
-            return new { DataList = orderData, SumModel = sumModel };
-        }
-
-
         /// <summary>
         /// 部门受理类型统计周期--明细列表
         /// </summary>
@@ -1552,13 +1443,14 @@ namespace Hotline.Api.Controllers.Bi
         {
             dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
             var (total, items) = await _orderRepository.Queryable()
-                .Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime && p.Status > EOrderStatus.WaitForAccept)//&& p.Status >= EOrderStatus.Filed
+                .Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime && p.Status >= EOrderStatus.Filed)
                 .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == "001", p => p.ActualHandleOrgCode == dto.OrgCode)
+
                 .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != "001" && _sessionContext.RequiredOrgId != dto.OrgCode, p => p.ActualHandleOrgCode.StartsWith(dto.OrgCode))
                 .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != "001" && _sessionContext.RequiredOrgId == dto.OrgCode, p => p.ActualHandleOrgCode == dto.OrgCode)
                 .WhereIF(!string.IsNullOrEmpty(dto.AcceptTypeCode), p => p.AcceptTypeCode == dto.AcceptTypeCode)
-                .WhereIF(dto.TypeCode == 1, p => p.ActualHandleOrgCode == "001")
-                .WhereIF(dto.TypeCode == 2, p => p.ActualHandleOrgCode != "001")
+                .WhereIF(dto.TypeCode == 1, p => p.ProcessType == EProcessType.Zhiban)
+                .WhereIF(dto.TypeCode == 2, p => p.ProcessType == EProcessType.Jiaoban)
                 .OrderByDescending(d => d.CreationTime)
                 .ToPagedListAsync(dto, HttpContext.RequestAborted);
 

+ 14 - 5
src/Hotline.Api/Controllers/TestController.cs

@@ -211,8 +211,8 @@ public class TestController : BaseController
             ExternalId = "123456789",
             OrderId = "123456789",
             PushPlatform = EPushPlatform.Sms,
-            Remark =" order.Title",
-            Name ="张三",
+            Remark = " order.Title",
+            Name = "张三",
             TemplateCode = "1005",
             Params = new List<string>() { "20240610000022", "12345" },
             TelNumber = "15881689499",
@@ -579,7 +579,7 @@ public class TestController : BaseController
     public async Task TestExportExcel1()
     {
         var orders = await _orderRepository.Queryable()
-            .Includes(d=>d.OrderExtension)
+            .Includes(d => d.OrderExtension)
             .InnerJoin<Workflow>((o, w) => o.WorkflowId == w.Id)
             .Where((o, w) => o.Status < EOrderStatus.Filed && w.Status == EWorkflowStatus.Completed)
             .ToListAsync(HttpContext.RequestAborted);
@@ -587,7 +587,7 @@ public class TestController : BaseController
 
         var workflowIds = orders.Select(d => d.WorkflowId).ToList();
         var workflows = await _workflowRepository.Queryable()
-            .Includes(d=>d.Steps, x=>x.WorkflowTrace)
+            .Includes(d => d.Steps, x => x.WorkflowTrace)
             //.Includes(d=>d.Traces)
             .Where(d => workflowIds.Contains(d.Id))
             .ToListAsync(HttpContext.RequestAborted);
@@ -611,7 +611,16 @@ public class TestController : BaseController
                 ? _timeLimitDomainService.CalcWorkTime(order.StartTime.Value, now,
                 order.ProcessType is EProcessType.Zhiban)
                 : 0;
-            order.File(now, handleDuration, fileDuration, allDuration);
+            var creationTimeHandleDurationWorkday = order.ActualHandleTime.HasValue
+                   ? _timeLimitDomainService.CalcWorkTime(order.CreationTime, order.ActualHandleTime.Value,
+                   order.ProcessType is EProcessType.Zhiban)
+                   : 0;
+            var centerToOrgHandleDurationWorkday = order.ActualHandleTime.HasValue && order.CenterToOrgTime.HasValue
+                ? _timeLimitDomainService.CalcWorkTime(order.CenterToOrgTime.Value, order.ActualHandleTime.Value,
+                order.ProcessType is EProcessType.Zhiban)
+                : 0;
+
+            order.File(now, handleDuration, fileDuration, allDuration, creationTimeHandleDurationWorkday, centerToOrgHandleDurationWorkday);
 
             var endStep = workflow.Steps.FirstOrDefault(d => d.StepType == EStepType.End);
             //var endTrace = workflow.Steps.FirstOrDefault(d => d.WorkflowTrace.StepType == EStepType.End)?.WorkflowTrace;

+ 11 - 2
src/Hotline.Application/Handlers/FlowEngine/WorkflowEndHandler.cs

@@ -156,7 +156,16 @@ public class WorkflowEndHandler : INotificationHandler<EndWorkflowNotify>
                     ? _timeLimitDomainService.CalcWorkTime(order.StartTime.Value, now,
                     order.ProcessType is EProcessType.Zhiban)
                     : 0;
-                order.File(now, handleDuration, fileDuration, allDuration);
+                var creationTimeHandleDurationWorkday = order.ActualHandleTime.HasValue
+                    ? _timeLimitDomainService.CalcWorkTime(order.CreationTime, order.ActualHandleTime.Value,
+                    order.ProcessType is EProcessType.Zhiban)
+                    : 0;
+                var centerToOrgHandleDurationWorkday = order.ActualHandleTime.HasValue && order.CenterToOrgTime.HasValue
+                    ? _timeLimitDomainService.CalcWorkTime(order.CenterToOrgTime.Value, order.ActualHandleTime.Value,
+                    order.ProcessType is EProcessType.Zhiban)
+                    : 0;
+
+                order.File(now, handleDuration, fileDuration, allDuration, creationTimeHandleDurationWorkday, centerToOrgHandleDurationWorkday);
                 order.FileUserId = notification.Trace.HandlerId;
                 order.FileUserName = notification.Trace.HandlerName;
                 order.FileUserOrgId = notification.Trace.HandlerOrgId;
@@ -201,7 +210,7 @@ public class WorkflowEndHandler : INotificationHandler<EndWorkflowNotify>
                 //司法行政监督管理-工单处理
                 await _enforcementApplication.AddEnforcementOrderAsync(order, cancellationToken);
                 //推诿工单
-               // await _enforcementApplication.AddPassTheBuckOrderAsync(order, _sessionContext.OrgId, _sessionContext.OrgName, cancellationToken);
+                // await _enforcementApplication.AddPassTheBuckOrderAsync(order, _sessionContext.OrgId, _sessionContext.OrgName, cancellationToken);
                 break;
             case WorkflowModuleConsts.OrderScreen:
                 var screen = await _orderScreenRepository.GetAsync(workflow.ExternalId, cancellationToken);

+ 10 - 1
src/Hotline.Application/Orders/OrderApplication.cs

@@ -172,7 +172,16 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             ? _timeLimitDomainService.CalcWorkTime(order.StartTime.Value, now,
                 order.ProcessType is EProcessType.Zhiban)
             : 0;
-        order.File(now, handleDuration, fileDuration, allDuration);
+        var creationTimeHandleDurationWorkday = order.ActualHandleTime.HasValue
+                    ? _timeLimitDomainService.CalcWorkTime(order.CreationTime, order.ActualHandleTime.Value,
+                    order.ProcessType is EProcessType.Zhiban)
+                    : 0;
+        var centerToOrgHandleDurationWorkday = order.ActualHandleTime.HasValue && order.CenterToOrgTime.HasValue
+            ? _timeLimitDomainService.CalcWorkTime(order.CenterToOrgTime.Value, order.ActualHandleTime.Value,
+            order.ProcessType is EProcessType.Zhiban)
+            : 0;
+
+        order.File(now, handleDuration, fileDuration, allDuration, creationTimeHandleDurationWorkday, centerToOrgHandleDurationWorkday);
         await _orderRepository.UpdateAsync(order, cancellationToken);
     }
 

+ 45 - 1
src/Hotline/Orders/Order.cs

@@ -340,6 +340,26 @@ namespace Hotline.Orders
         /// </summary>
         public double? HandleDurationWorkday { get; set; }
 
+        /// <summary>
+        /// 办结时长(秒) 办结时间-受理时间(工单创建时间)
+        /// </summary>
+        public double? CreationTimeHandleDuration { get; set; }
+
+        /// <summary>
+        /// 办结工作日时长(秒)办结时间-受理时间(工单创建时间)
+        /// </summary>
+        public double? CreationTimeHandleDurationWorkday { get; set; }
+
+        /// <summary>
+        /// 办结时长(秒) 办结时间-派单时间(中心到部门时间)
+        /// </summary>
+        public double? CenterToOrgHandleDuration { get; set; }
+
+        /// <summary>
+        /// 办结工作日时长(秒)办结时间-派单时间(中心到部门时间)
+        /// </summary>
+        public double? CenterToOrgHandleDurationWorkday { get; set; }
+
         /// <summary>
         /// 归档时长(秒)
         /// 归档时间-交办时间
@@ -893,7 +913,8 @@ namespace Hotline.Orders
         /// <summary>
         /// 归档
         /// </summary>
-        public void File(DateTime filedTime, double handleDurationWorkday, double fileDurationWorkday, double allDurationWorkday)
+        public void File(DateTime filedTime, double handleDurationWorkday, double fileDurationWorkday, double allDurationWorkday
+            , double creationTimeHandleDurationWorkday, double centerToOrgHandleDurationWorkday)
         {
             if (Status is EOrderStatus.Filed) return;
             Status = EOrderStatus.Filed;
@@ -901,11 +922,15 @@ namespace Hotline.Orders
             HandleDurationWorkday = handleDurationWorkday;
             FileDurationWorkday = fileDurationWorkday;
             AllDurationWorkday = allDurationWorkday;
+            CreationTimeHandleDurationWorkday = creationTimeHandleDurationWorkday;
+            CenterToOrgHandleDurationWorkday = centerToOrgHandleDurationWorkday;
 
             //计算实际办结时长
             SetHandleDuration();
             SetFileDuration();
             SetAllDuration();
+            SetCreationTimeHandleDurationWorkday();
+            SetCenterToOrgHandleDurationWorkday();
         }
 
         /// <summary>
@@ -1002,6 +1027,25 @@ namespace Hotline.Orders
             FileDuration = Math.Round((FiledTime - CenterToOrgTime).Value.TotalSeconds);
         }
 
+        /// <summary>
+        ///  办结时长(秒) 办结时间-受理时间(工单创建时间)
+        /// </summary>
+        public void SetCreationTimeHandleDurationWorkday()
+        {
+            if (!ActualHandleTime.HasValue) return;
+            FileDuration = Math.Round((ActualHandleTime - CreationTime).Value.TotalSeconds);
+        }
+
+        /// <summary>
+        ///  办结时长(秒) 办结时间-派单时间(工单创建时间)
+        /// </summary>
+        public void SetCenterToOrgHandleDurationWorkday()
+        {
+            if (!ActualHandleTime.HasValue) return;
+            if (!CenterToOrgTime.HasValue) return;
+            FileDuration = Math.Round((ActualHandleTime - CenterToOrgTime).Value.TotalSeconds);
+        }
+
         /// <summary>
         /// 是否已签收
         /// </summary>