namespace Admin.NET.Plugin.AiDOP.Dto.S8.OrderFlow; /// /// ORDER-FLOW-S8-INTEGRATED-DOMAIN-RESET-1 t3a:S8 订单执行链路 DTO 契约。 /// 仅定义类型,不携带业务常量 / 不引用 Entity / 不接 service 逻辑。 /// 后续 t3b/t3c 切片负责 service + controller 把 DTO 接到 ado_s8_order_flow_* 与 ado_s8_exception 实时聚合。 /// #region 订单档案 public class AdoS8OrderFlowOrderQueryDto { public long? TenantId { get; set; } public long? FactoryId { get; set; } public string? Keyword { get; set; } public string? CurrentFlowCode { get; set; } public string? CustomerCode { get; set; } public string? ProductLine { get; set; } public string? Region { get; set; } public string? WorkflowStatus { get; set; } public string? ScenarioCode { get; set; } } public class AdoS8OrderFlowOrderListItemDto { public string OrderCode { get; set; } = string.Empty; public string ProductName { get; set; } = string.Empty; public string ProductLine { get; set; } = string.Empty; public string CustomerCode { get; set; } = string.Empty; public string CustomerName { get; set; } = string.Empty; public string CustomerType { get; set; } = string.Empty; public string Region { get; set; } = string.Empty; public string Priority { get; set; } = string.Empty; public string WorkflowStatus { get; set; } = string.Empty; public string CurrentOrderFlowCode { get; set; } = string.Empty; public string CurrentOrderFlowName { get; set; } = string.Empty; public string CurrentStatus { get; set; } = string.Empty; public DateTime ReleaseAt { get; set; } public decimal TargetCycleDays { get; set; } public decimal? ActualCycleDays { get; set; } public decimal? CurrentCycleDays { get; set; } public decimal? NodeVarianceDays { get; set; } public decimal? CumulativeVarianceDays { get; set; } /// 来自 ado_s8_exception 实时聚合(order 主档表无 exception_count 列)。 public int ExceptionCount { get; set; } public string ExceptionStatus { get; set; } = string.Empty; public int? ResponseMinutes { get; set; } public int? ProcessingMinutes { get; set; } public int? TotalLossMinutes { get; set; } public string ScenarioCode { get; set; } = string.Empty; public string DataSource { get; set; } = string.Empty; } public class AdoS8OrderFlowOrderDetailDto : AdoS8OrderFlowOrderListItemDto { public List Lifecycle { get; set; } = new(); } #endregion #region 阶段 / L2 / L3 public class AdoS8OrderFlowStageDto { public string OrderFlowCode { get; set; } = string.Empty; public string OrderFlowName { get; set; } = string.Empty; public string? OwnerDept { get; set; } public int SortNo { get; set; } public decimal PlannedDays { get; set; } public decimal? ActualDays { get; set; } public DateTime TargetAt { get; set; } public DateTime? ActualStartAt { get; set; } public DateTime? ActualEndAt { get; set; } public string Status { get; set; } = string.Empty; public decimal? NodeVarianceDays { get; set; } public decimal? CumulativeVarianceDays { get; set; } public List Substeps { get; set; } = new(); } public class AdoS8OrderFlowSubstepDto { public string SubstepCode { get; set; } = string.Empty; public string SubstepName { get; set; } = string.Empty; public decimal PiHours { get; set; } public decimal? ActualHours { get; set; } public string Status { get; set; } = string.Empty; public int SortNo { get; set; } public List Units { get; set; } = new(); } public class AdoS8OrderFlowSubstepUnitDto { public string UnitCode { get; set; } = string.Empty; public string UnitName { get; set; } = string.Empty; public decimal PiHours { get; set; } public decimal? ActualHours { get; set; } public string Status { get; set; } = string.Empty; public int SortNo { get; set; } } #endregion #region 订单 + 采购透视组合 public class AdoS8OrderFlowChainDto { public AdoS8OrderFlowOrderDetailDto Order { get; set; } = new(); public AdoS8OrderFlowProcurementPivotDto? ProcurementPivot { get; set; } } #endregion #region 聚合 / Baseline public class AdoS8OrderFlowAggregateQueryDto { public long? TenantId { get; set; } public long? FactoryId { get; set; } public string Scope { get; set; } = string.Empty; public List? OrderCodes { get; set; } } public class AdoS8OrderFlowAggregateDto { public string Scope { get; set; } = string.Empty; public int TotalOrders { get; set; } public int TotalCustomers { get; set; } public decimal AvgResponseMinutes { get; set; } public decimal AvgProcessingMinutes { get; set; } public decimal AvgLossMinutes { get; set; } public List StageAggregates { get; set; } = new(); /// /// FINAL_ASSEMBLY_DELIVERY 末端协同聚合摘要(基线 / 当前两条路径均填充)。 /// 派生自 ado_s8_exception 现有异常类型,不新增业务表 / 不新增异常类型 / 不读 S0|S4 业务表。 /// 字段全 nullable,老调用方无感知。 /// public AdoS8FinalAssemblyCollabSummaryDto? FinalAssemblyCollabSummary { get; set; } } public class AdoS8FinalAssemblyCollabSummaryDto { /// 主门禁(GATE)—— key 为前端固定 object_code(如 GOODS_HANDOVER / SHIPMENT_CONFIRMATION)。无映射的门禁不出现在字典中。 public Dictionary Gates { get; set; } = new(); /// 并行准备(PARALLEL)—— key 为前端固定 object_code(如 SHIPPING_PLAN)。无映射的准备项不出现在字典中。 public Dictionary Parallels { get; set; } = new(); } public class AdoS8FinalAssemblyObjectStatDto { /// 主门禁口径下的"影响订单"数 = 命中候选异常类型的去重 RelatedObjectCode 数;并行准备口径下保持 null。 public int? ImpactedOrderCount { get; set; } /// 并行准备口径下的"风险订单"数 = 命中候选异常类型的去重 RelatedObjectCode 数;主门禁口径下保持 null。 public int? RiskOrderCount { get; set; } /// 主要风险标题:候选异常中按 Severity(SERIOUS 优先) → CreatedAt(降序) 取首条 Title。无命中保持 null。 public string? TopRiskTitle { get; set; } /// 主要风险严重度:与 TopRiskTitle 来自同一条异常。无命中保持 null。 public string? TopRiskSeverity { get; set; } } public class AdoS8OrderFlowStageAggregateDto { public string OrderFlowCode { get; set; } = string.Empty; public string OrderFlowName { get; set; } = string.Empty; public decimal KpiAvgDays { get; set; } public decimal ActualAvgDays { get; set; } /// 整数百分比(例如 59 / 96 / 85 / 89 / 96),不是 0.59 小数。 public int OnTimeRate { get; set; } public int Green { get; set; } public int Yellow { get; set; } public int Red { get; set; } public int Pending { get; set; } } #endregion #region 采购透视 public class AdoS8OrderFlowProcurementPivotQueryDto { public long? TenantId { get; set; } public long? FactoryId { get; set; } public string Scope { get; set; } = string.Empty; public List? OrderCodes { get; set; } } public class AdoS8OrderFlowProcurementPivotDto { public string Scope { get; set; } = string.Empty; public List KeyMaterials { get; set; } = new(); public List SupplierBreakdown { get; set; } = new(); public List SpecBreakdown { get; set; } = new(); public Dictionary> MatrixByMaterial { get; set; } = new(); } public class AdoS8OrderFlowKeyMaterialDto { public string MaterialCode { get; set; } = string.Empty; public decimal AvgCycleDays { get; set; } public string CycleStatus { get; set; } = string.Empty; public int? ImpactCount { get; set; } public decimal? KitRate { get; set; } public string ResultStatus { get; set; } = string.Empty; } public class AdoS8OrderFlowSupplierBreakdownDto { public string MaterialCode { get; set; } = string.Empty; public string SupplierCode { get; set; } = string.Empty; public decimal AvgCycleDays { get; set; } public string Status { get; set; } = string.Empty; } public class AdoS8OrderFlowSpecBreakdownDto { public string MaterialCode { get; set; } = string.Empty; public string SpecCode { get; set; } = string.Empty; public decimal AvgCycleDays { get; set; } public string Status { get; set; } = string.Empty; } public class AdoS8OrderFlowProcurementMatrixRowDto { public string SupplierCode { get; set; } = string.Empty; public Dictionary Cells { get; set; } = new(); } public class AdoS8OrderFlowProcurementMatrixCellDto { public decimal CycleDays { get; set; } public string Status { get; set; } = string.Empty; } #endregion #region 关联异常 public class AdoS8OrderFlowRelatedExceptionQueryDto { public long? TenantId { get; set; } public long? FactoryId { get; set; } public string OrderCode { get; set; } = string.Empty; public string? OrderFlowCode { get; set; } } #endregion