namespace Admin.NET.Plugin.AiDOP.Dto.S8.OrderFlow; /// S8 Stage-1「订单评审」耗时列表查询条件。注意:不含 tenantId —— 租户只从 JWT 解析。 public class AdoS8OrderReviewKpiQueryDto { /// 订单号模糊过滤。 public string? OrderNo { get; set; } /// 按计算状态过滤:OK / IN_PROGRESS / NO_START / INVALID / INVALID_TIME_SEQUENCE。 public string? CalculationStatus { get; set; } public int Page { get; set; } = 1; public int PageSize { get; set; } = 20; } /// 单张订单的 Stage-1 评审耗时事实(全部来自 dwd_order_review_kpi)。 public class AdoS8OrderReviewKpiRowDto { /// 销售订单头ID(crm_seorder.Id),归因权威。 public long SalesOrderId { get; set; } /// 销售订单号(展示用)。 public string? SalesOrderNo { get; set; } /// 评审开始时刻。 public DateTime? ReviewStartTime { get; set; } /// 评审结束时刻。 public DateTime? ReviewEndTime { get; set; } /// 实际耗时(自然 elapsed 小时,2 位小数)。未闭环时为 null —— 不伪造 0。 public decimal? ActualHours { get; set; } /// OK / IN_PROGRESS / NO_START / INVALID / INVALID_TIME_SEQUENCE。 public string CalculationStatus { get; set; } = ""; public int ReviewSuccessCount { get; set; } public int ConfirmSuccessCount { get; set; } public int ReviewFailedCount { get; set; } public int ConfirmFailedCount { get; set; } /// 被采纳的评审事件ID(可追溯到 mdp_std_action_event)。 public long? ReviewActionRunId { get; set; } /// 被采纳的交期确认事件ID。 public long? ConfirmActionRunId { get; set; } /// 最近一次重算时刻。 public DateTime? CalcTime { get; set; } } /// 分页结果。 public class AdoS8OrderReviewKpiListDto { public List List { get; set; } = []; public int Total { get; set; } public int Page { get; set; } public int PageSize { get; set; } } /// Stage-1 评审耗时汇总。本批不含 TargetHours / 达成率 / 红黄绿。 public class AdoS8OrderReviewKpiSummaryDto { /// 有评审动作记录的订单总数。 public int TotalOrders { get; set; } /// 已闭环(OK)订单数 —— 只有这些有 ActualHours。 public int OkCount { get; set; } public int InProgressCount { get; set; } public int NoStartCount { get; set; } public int InvalidCount { get; set; } public int InvalidTimeSequenceCount { get; set; } /// OK 订单的平均实际耗时(小时)。OkCount=0 时为 null,不返回 0。 public decimal? AvgActualHours { get; set; } /// OK 订单的最短 / 最长实际耗时(小时)。 public decimal? MinActualHours { get; set; } public decimal? MaxActualHours { get; set; } /// KPI 表最近一次重算时刻。null 表示该租户从未跑过链路。 public DateTime? LastCalcTime { get; set; } } /// 手动刷新链路的返回。 public class AdoS8OrderReviewKpiRefreshResultDto { public string BatchId { get; set; } = ""; public int StageRows { get; set; } public int StageRepulledRunning { get; set; } public int StandardRows { get; set; } public int KpiRows { get; set; } }