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; }
}