AdoS8OrderFlowFinalAssemblyParallel.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. namespace Admin.NET.Plugin.AiDOP.Entity.S8.OrderFlow;
  2. /// <summary>
  3. /// S8-ORDER-CHAIN-ASSEMBLY-DELIVERY-DATA-LINEAGE-AUDIT-1:
  4. /// S8 订单执行链路 FINAL_ASSEMBLY_DELIVERY 阶段「并行准备」表(baseline + 订单级 SEED)。
  5. ///
  6. /// order_id / order_code 允许为空:
  7. /// - NULL → baseline 行(scenario_code=BASELINE_PPT)
  8. /// - 非 NULL → 订单级行(scenario_code=ORDER_LEVEL)
  9. ///
  10. /// prep_code 取值:PACKAGING_MATERIAL_PREP / LABEL_DOC_PREP / SHIPPING_PLAN / SHIPPING_DOC_PREP。
  11. /// kitting_rate 使用 decimal(5,4)(与 manufacturing achievement_rate 同口径),取值 0.0000~1.0000。
  12. ///
  13. /// 业务口径(拍板版本):
  14. /// - baseline kitting_rate:0.9500 / 0.9700 / 0.9200 / 0.9600;
  15. /// - order-level kitting_rate 按 stage.status 修正:
  16. /// green 单:保持 baseline;
  17. /// yellow 单:baseline - 0.0500(4 项统一下调以保 status >= 0.85 yellow);
  18. /// pending 单:不生成 ORDER_LEVEL 行。
  19. /// - status 阈值:≥0.95 green / ≥0.85 yellow / 否则 red(seed 时固化,运行期不重判)。
  20. ///
  21. /// SEED 落地路径:不通过 IncreSeed 自动写入,由 UpdateScripts SQL(1.0.153.sql)
  22. /// 的 DELETE+INSERT 落地(与 procurement / manufacturing 三表同模式)。
  23. /// </summary>
  24. [SugarTable("ado_s8_order_flow_final_assembly_parallel", "S8 订单执行链路总装发货并行准备")]
  25. [SugarIndex("idx_order_flow_fa_parallel_baseline", nameof(TenantId), OrderByType.Asc, nameof(FactoryId), OrderByType.Asc, nameof(PrepCode), OrderByType.Asc)]
  26. [SugarIndex("idx_order_flow_fa_parallel_order", nameof(TenantId), OrderByType.Asc, nameof(FactoryId), OrderByType.Asc, nameof(OrderCode), OrderByType.Asc)]
  27. [SugarIndex("idx_order_flow_fa_parallel_scenario", nameof(TenantId), OrderByType.Asc, nameof(FactoryId), OrderByType.Asc, nameof(ScenarioCode), OrderByType.Asc, nameof(IsDeleted), OrderByType.Asc)]
  28. public class AdoS8OrderFlowFinalAssemblyParallel
  29. {
  30. [SugarColumn(ColumnName = "id", IsPrimaryKey = true, ColumnDataType = "bigint")]
  31. public long Id { get; set; }
  32. /// <summary>NULL = baseline 行;非 NULL = 订单级行。</summary>
  33. [SugarColumn(ColumnName = "order_id", ColumnDataType = "bigint", IsNullable = true)]
  34. public long? OrderId { get; set; }
  35. /// <summary>NULL = baseline 行;非 NULL = 订单业务键。</summary>
  36. [SugarColumn(ColumnName = "order_code", Length = 64, IsNullable = true)]
  37. public string? OrderCode { get; set; }
  38. /// <summary>准备项编码:PACKAGING_MATERIAL_PREP / LABEL_DOC_PREP / SHIPPING_PLAN / SHIPPING_DOC_PREP。</summary>
  39. [SugarColumn(ColumnName = "prep_code", Length = 32)]
  40. public string PrepCode { get; set; } = string.Empty;
  41. /// <summary>准备项名称:包装材料准备 / 标签随箱资料准备 / 发运计划准备 / 出货单据准备。</summary>
  42. [SugarColumn(ColumnName = "prep_name", Length = 32)]
  43. public string PrepName { get; set; } = string.Empty;
  44. /// <summary>齐套率:decimal(5,4),取值 0.0000~1.0000;pending 时为 NULL。</summary>
  45. [SugarColumn(ColumnName = "kitting_rate", DecimalDigits = 4, Length = 5, IsNullable = true)]
  46. public decimal? KittingRate { get; set; }
  47. /// <summary>状态:green / yellow / red / pending。≥0.95 green / ≥0.85 yellow / 否则 red(seed 时固化)。</summary>
  48. [SugarColumn(ColumnName = "status", Length = 16)]
  49. public string Status { get; set; } = "green";
  50. /// <summary>影响订单数:order-level 行为 0 或 1;baseline 行为聚合摘要(baseline 视图当前固定 0)。</summary>
  51. [SugarColumn(ColumnName = "impacted_order_count", ColumnDataType = "int", IsNullable = true)]
  52. public int? ImpactedOrderCount { get; set; }
  53. /// <summary>风险订单数:order-level 行为 0 或 1(status=red 时为 1);baseline 行为聚合摘要(baseline 视图当前固定 0)。</summary>
  54. [SugarColumn(ColumnName = "risk_order_count", ColumnDataType = "int", IsNullable = true)]
  55. public int? RiskOrderCount { get; set; }
  56. /// <summary>主要风险类型码:稳定 sample;status=green 或 baseline 行为 NULL。</summary>
  57. [SugarColumn(ColumnName = "top_risk_type", Length = 64, IsNullable = true)]
  58. public string? TopRiskType { get; set; }
  59. /// <summary>主要风险展示文本:与 top_risk_type 同源;status=green 或 baseline 行为 NULL。</summary>
  60. [SugarColumn(ColumnName = "top_risk_label", Length = 255, IsNullable = true)]
  61. public string? TopRiskLabel { get; set; }
  62. /// <summary>责任侧文案:包装线·物料 / 技术·质量 / 发运协调 / 计划·商务。可空,前端 fallback fixture 字典。</summary>
  63. [SugarColumn(ColumnName = "owner_side_text", Length = 64, IsNullable = true)]
  64. public string? OwnerSideText { get; set; }
  65. /// <summary>排序号 10/20/30/40(与 4 并行准备固定顺序对齐)。</summary>
  66. [SugarColumn(ColumnName = "sort_no", ColumnDataType = "int")]
  67. public int SortNo { get; set; }
  68. /// <summary>BASELINE_PPT / ORDER_LEVEL。</summary>
  69. [SugarColumn(ColumnName = "scenario_code", Length = 16)]
  70. public string ScenarioCode { get; set; } = "BASELINE_PPT";
  71. /// <summary>SEED / IMPORT / AGG。同 (order_code, prep_code) 上 IMPORT/AGG 优先于 SEED。</summary>
  72. [SugarColumn(ColumnName = "data_source", Length = 16)]
  73. public string DataSource { get; set; } = "SEED";
  74. [SugarColumn(ColumnName = "tenant_id", ColumnDataType = "bigint")]
  75. public long TenantId { get; set; }
  76. [SugarColumn(ColumnName = "factory_id", ColumnDataType = "bigint")]
  77. public long FactoryId { get; set; }
  78. [SugarColumn(ColumnName = "created_at")]
  79. public DateTime CreatedAt { get; set; } = DateTime.Now;
  80. [SugarColumn(ColumnName = "updated_at", IsNullable = true)]
  81. public DateTime? UpdatedAt { get; set; }
  82. [SugarColumn(ColumnName = "is_deleted", ColumnDataType = "boolean")]
  83. public bool IsDeleted { get; set; }
  84. }