Quellcode durchsuchen

超期退回统计

田爽 vor 2 Monaten
Ursprung
Commit
2a09e97fef

+ 95 - 1
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -5858,5 +5858,99 @@ namespace Hotline.Api.Controllers.Bi
                    })
                    .ToListAsync(HttpContext.RequestAborted);
         }
-    }
+
+		/// <summary>
+		/// 超期退回统计
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		[HttpGet("extended_sendback_statistics")]
+		public async Task<List<ExtendedSendBackVo>> ExtendedSendBackStatistics([FromQuery] PagedKeywordRequest dto)
+		{
+			var quer = _orderApplication.ExtendedSendBackStatistics(dto);
+            var list = await quer.ToListAsync(HttpContext.RequestAborted);
+			list.Add(new ExtendedSendBackVo()
+			{
+                OrgName ="合计",
+				TotalNum = list.Sum(m => m.TotalNum),
+				PassNum = list.Sum(p => p.PassNum),
+				NoPassNum = list.Sum(m => m.NoPassNum),
+				AuditNum = list.Sum(m => m.AuditNum)
+			});
+
+			return list;
+		}
+
+		/// <summary>
+		/// 超期退回统计
+		/// </summary>
+		/// <returns></returns>
+		[HttpPost("extended_sendback_statistics/_export")]
+		public async Task<FileStreamResult> ExtendedSendBackStatisticsExport([FromBody] ExportExcelDto<PagedKeywordRequest> dto)
+		{
+			var query = _orderApplication.ExtendedSendBackStatistics(dto.QueryDto);
+			List<ExtendedSendBackVo> data;
+
+			data = await query.ToListAsync(HttpContext.RequestAborted);
+
+			dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+
+			var dtos = data
+				.Select(stu => _mapper.Map(stu, typeof(ExtendedSendBackVo), dynamicClass))
+				.Cast<object>()
+				.ToList();
+
+			var stream = ExcelHelper.CreateStream(dtos);
+
+			return ExcelStreamResult(stream, "超期退回统计");
+		}
+
+		/// <summary>
+		/// 超期退回统计明细
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		[HttpGet("extended_sendback_detail")]
+		public async Task<PagedDto<SendBackDto>> ExtendedSendBackDetail([FromQuery] ExtendedSendBackRequest dto)
+		{
+			var quer = _orderApplication.ExtendedSendBackDetail(dto);
+			var (total, items) = await quer.ToPagedListAsync(dto.PageIndex, dto.PageSize);
+
+			return new PagedDto<SendBackDto>(total, _mapper.Map<IReadOnlyList<SendBackDto>>(items));
+		}
+
+		/// <summary>
+		/// 超期退回统计明细导出
+		/// </summary>
+		/// <returns></returns>
+		[HttpPost("extended_sendback_detail/_export")]
+		public async Task<FileStreamResult> ExtendedSendBackDetailExport([FromBody] ExportExcelDto<ExtendedSendBackRequest> dto)
+		{
+			var query = _orderApplication.ExtendedSendBackDetail(dto.QueryDto);
+			List<OrderSendBackAudit> data;
+			if (dto.IsExportAll)
+			{
+				data = await query.ToListAsync(HttpContext.RequestAborted);
+			}
+			else
+			{
+				var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
+				data = items;
+			}
+
+			var dataDtos = _mapper.Map<ICollection<SendBackDto>>(data);
+
+			dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+
+			var dtos = dataDtos
+				.Select(stu => _mapper.Map(stu, typeof(SendBackDto), dynamicClass))
+				.Cast<object>()
+				.ToList();
+
+			var stream = ExcelHelper.CreateStream(dtos);
+
+			return ExcelStreamResult(stream, "超期退回统计明细");
+		}
+
+	}
 }

+ 3 - 2
src/Hotline.Api/Controllers/OrderController.cs

@@ -5458,8 +5458,9 @@ public class OrderController : BaseController
             WorkflowUserId = _sessionContext.RequiredUserId,
             WorkflowRoleIds = _sessionContext.Roles.ToList(),
             Status = order.Status,
-            TraceId = currentStep.Id
-        };
+            TraceId = currentStep.Id,
+            OrderExpiredTime = order.ExpiredTime
+		};
         audit.InitId();
         if (dto.Files.Any())
             audit.FileJson = await _fileRepository.AddFileAsync(dto.Files, audit.Id, "", HttpContext.RequestAborted);

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

@@ -425,5 +425,20 @@ namespace Hotline.Application.Orders
         /// </summary>
         Task<(Workflow, StepDefine, WorkflowStep, WorkflowStep, WorkflowStep, bool)> RecallAsync
             (AuditOrderSpecialDto dto, OrderSpecial special, Order? order, CancellationToken cancellation);
-    }
+
+        /// <summary>
+        /// 超期退回统计
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        ISugarQueryable<ExtendedSendBackVo> ExtendedSendBackStatistics(PagedKeywordRequest dto);
+        
+        /// <summary>
+        /// 超期退回统计明细
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        ISugarQueryable<OrderSendBackAudit> ExtendedSendBackDetail(ExtendedSendBackRequest dto);
+
+	}
 }

+ 49 - 0
src/Hotline.Application/Orders/OrderApplication.cs

@@ -4975,4 +4975,53 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 
         return query;
     }
+
+
+    /// <summary>
+    /// 超期退回统计
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+
+    public ISugarQueryable<ExtendedSendBackVo> ExtendedSendBackStatistics(PagedKeywordRequest dto) {
+
+        var query = _orderSendBackAuditRepository.Queryable()
+            .Where(x => x.ApplyOrgId.Length == 6)
+            .WhereIF(dto.StartTime.HasValue && dto.EndTime.HasValue, x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
+            .GroupBy(x => new { x.ApplyOrgId,x.ApplyOrgName})
+            .Select(x => new ExtendedSendBackVo() {
+
+                OrgId = x.ApplyOrgId,
+                OrgName = x.ApplyOrgName,
+                TotalNum = SqlFunc.AggregateSum(1),
+                PassNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.State == ESendBackAuditState.End, 1, 0)),
+				NoPassNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.State == ESendBackAuditState.Refuse, 1, 0)),
+				AuditNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.State == ESendBackAuditState.Apply, 1, 0))
+			});
+        return query;
+    }
+
+
+    /// <summary>
+    /// 超期退回明细
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    public ISugarQueryable<OrderSendBackAudit> ExtendedSendBackDetail(ExtendedSendBackRequest dto)
+    {
+        var query = _orderSendBackAuditRepository.Queryable()
+            .Includes(x => x.Order)
+            .Where(x => x.ApplyOrgId.Length == 6)
+            .WhereIF(dto.StartTime.HasValue && dto.EndTime.HasValue, x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
+            .WhereIF(!_sessionContext.OrgIsCenter,x=>x.ApplyOrgId == _sessionContext.RequiredOrgId)
+            .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.Order.No.Contains(dto.No!))
+            .WhereIF(!string.IsNullOrEmpty(dto.Titel),x=>x.Order.Title.Contains(dto.Titel!))
+            .WhereIF(!string.IsNullOrEmpty(dto.OrgId),x=>x.ApplyOrgId == dto.OrgId)
+            .WhereIF(dto.Type is  ExtendedSendBackType.PassNum ,x=> x.State == ESendBackAuditState.End)
+			.WhereIF(dto.Type is  ExtendedSendBackType.NoPassNum, x => x.State == ESendBackAuditState.Refuse)
+			.WhereIF(dto.Type is  ExtendedSendBackType.AuditNum, x => x.State == ESendBackAuditState.Apply)
+			.OrderByDescending(x => x.CreationTime);
+        return query;
+
+	}
 }

+ 34 - 0
src/Hotline.Share/Dtos/Order/OrderBiDto.cs

@@ -1552,4 +1552,38 @@ namespace Hotline.Share.Dtos.Order
         /// </summary>
         public int DutyDeskNum { get; set; }
     }
+
+    public class ExtendedSendBackVo {
+
+        /// <summary>
+        /// 部门Id
+        /// </summary>
+        public string OrgId { get; set; }
+
+        /// <summary>
+        /// 部门名称
+        /// </summary>
+        public string OrgName { get; set; }
+
+        /// <summary>
+        /// 总量
+        /// </summary>
+        public int TotalNum { get; set; }
+
+        /// <summary>
+        /// 通过量
+        /// </summary>
+        public int PassNum { get; set; }
+
+
+        /// <summary>
+        /// 不通过量
+        /// </summary>
+        public int NoPassNum { get; set; }
+
+        /// <summary>
+        /// 不通过量
+        /// </summary>
+        public int AuditNum { get; set; }
+    }
 }

+ 21 - 0
src/Hotline.Share/Requests/PagedKeywordRequest.cs

@@ -1534,6 +1534,27 @@ public record QualityWorkAnalysisRequest : PagedKeywordRequest
 
 }
 
+public record ExtendedSendBackRequest : PagedKeywordRequest 
+{
+    public string? No { get; set; }
+
+    public string? Titel { get; set; }
+
+    public string? OrgId { get; set; }
+
+    /// <summary>
+    /// 统计表列类型值  退回总量 1  退回审批通过量 2  退回审批不通过量 3  退回审批中 4
+    /// </summary>
+    public ExtendedSendBackType? Type { get; set; }
+}
+
+public enum ExtendedSendBackType {
+	TotalNum = 1,
+	PassNum =2,
+	NoPassNum =3,
+	AuditNum =4
+}
+
 #region 智能回访
 
 public class QueryAiVisitStatisticsRequest

+ 8 - 1
src/Hotline/Orders/OrderSendBackAudit.cs

@@ -155,5 +155,12 @@ namespace Hotline.Orders
         /// </summary>
         [SugarColumn(ColumnDescription = "退回后最新节点Id")]
         public string? NewCurrentStepId { get; set; }
-    }
+
+		/// <summary>
+		/// 工单超期时间
+		/// </summary>
+		[SugarColumn(ColumnDescription = "工单超期时间")]
+		public DateTime? OrderExpiredTime { get; set; }
+
+	}
 }