Commit 8dc6c378 authored by Tong Li's avatar Tong Li

MP

parent d16de264
=== MacroPlanner 优化器运行日志 ===
=== 运行时间: 2026-08-11 16:47:50 ===
=== 运行时间: 2026-08-17 15:49:44 ===
=== 开始构建 MacroPlanner 优化模型 ===
......@@ -20,49 +20,49 @@
[警告] [4.5 工序产量一致] Routing 内相邻工序 PTQty 相等, 防止 WIP 堆积 → 未创建任何约束或变量! (可能数据为空)
[信息] [库存规格] 构建完成: 0 个使用安全库存天数, 45 个使用绝对数量
[信息] [5. 库存规格] InvQty + Slack ≥ Min/Max/Target (支持天数模式) | +45约束
[信息] [6. 产能约束] Σ(PTQty×coeff) ∈ [MinCapacity, MaxCapacity] | +21约束
[信息] [6. 产能约束] Σ(PTQty×coeff) ∈ [MinCapacity, MaxCapacity] | +9约束
[信息] [7. 供应规格] ΣPTQty + Slack ≥ Target/Min/Max | +14约束
[信息] [8. 批次大小] PTQty×QTPFactor + Slack ∈ [LotSize] | +24约束
[信息] [9. KPI汇总] TotalKPI = Σ 松弛变量 (12个KPI) | +10约束 | +12变量
[信息] ========== 约束构建完成: 总计 177 约束, 242 变量 ==========
[信息] ========== 约束构建完成: 总计 165 约束, 218 变量 ==========
[OK] 约束与KPI汇总创建完成
[OK] 目标函数创建完成
[OK] LP模型文件已导出: F:\product\MES\hyh.apsj\mp\lp\model.lp
模型统计: 变量=242, 约束=177
模型统计: 变量=218, 约束=165
=== 开始分层求解 ===
--- 第 1/4 层: 需求满足 (松弛=0%) ---
SCIP Status : OPTIMAL
Solving Time (sec) : 0.01
Primal Bound : +0.000000e+00
需求缺口: 0.00 (系数=100.0, 惩罚=0.00)
已添加边界约束: 上层目标 ≤ 0.00
Primal Bound : +1.950000e+04
需求缺口: 195.00 (系数=100.0, 惩罚=19500.00)
已添加边界约束: 上层目标 ≤ 19500.00
--- 第 2/4 层: 产能约束 (松弛=0%) ---
SCIP Status : OPTIMAL
Solving Time (sec) : 0.01
Primal Bound : +7.680000e+02
产能超载: 38.40 (系数=20.0, 惩罚=768.00)
已添加边界约束: 上层目标 ≤ 768.00
Primal Bound : +0.000000e+00
产能超载: 0.00 (系数=20.0, 惩罚=0.00)
已添加边界约束: 上层目标 ≤ 0.00
--- 第 3/4 层: 业务KPI (松弛=5%) ---
SCIP Status : OPTIMAL
Solving Time (sec) : 0.01
Primal Bound : +8.430000e+03
批次偏差: 570.00 (系数=10.0, 惩罚=5700.00)
目标库存偏差: 255.00 (系数=8.0, 惩罚=2040.00)
供应目标偏差: 120.00 (系数=8.0, 惩罚=960.00)
销售优先级: 270.00 (系数=-1.0, 惩罚=-270.00)
已添加边界约束: 上层目标 ≤ 8851.50
Primal Bound : +6.405000e+03
批次偏差: 466.67 (系数=10.0, 惩罚=4666.67)
目标库存偏差: 195.00 (系数=8.0, 惩罚=1560.00)
供应目标偏差: 81.67 (系数=8.0, 惩罚=653.33)
销售优先级: 475.00 (系数=-1.0, 惩罚=-475.00)
已添加边界约束: 上层目标 ≤ 6725.25
--- 第 4/4 层: 软约束 (松弛=10%) ---
SCIP Status : OPTIMAL
Solving Time (sec) : 0.01
Primal Bound : +3.550000e+02
Primal Bound : +1.900000e+02
超库存: 0.00 (系数=5.0, 惩罚=0.00)
欠库存: 71.00 (系数=5.0, 惩罚=355.00)
欠库存: 38.00 (系数=5.0, 惩罚=190.00)
最小供应不足: 0.00 (系数=5.0, 惩罚=0.00)
最大供应超出: 0.00 (系数=5.0, 惩罚=0.00)
......@@ -84,28 +84,23 @@
【L1】产能10h
Make-P1(P1): 40件 (耗时4.0h)
利用率: 4/10 h (40%)
Make-P2(P2): 20件 (耗时2.5h)
利用率: 3/10 h (25%)
【L2】产能10h
Make-S1(S1): 50件 (耗时1.7h)
利用率: 2/10 h (17%)
【L3】产能10h
(休息)
【SuA】产能24h
Procure-R1(R1): 165件 (耗时19.8h) , 批次200
利用率: 20/24 h (83%)
【SuB】产能24h
Procure-R1-Alt(R1): 100件 (耗时24.0h) , 批次150
利用率: 24/24 h (100%)
【Su1】产能24h
Procure-R2(R2): 346件 (耗时55.4h) , 批次200
利用率: 55/24 h (231%)
【Su2】产能100h
Procure-R2-Alt(R2): 150件 (耗时45.0h) , 批次150
利用率: 45/100 h (45%)
Make-P2(P2): 20件 (耗时3.3h)
利用率: 3/10 h (33%)
【SuA】产能无限 (供应商)
Procure-R1(R1): 200件 (耗时24.0h)
【SuB】产能无限 (供应商)
Procure-R1-Alt(R1): 150件 (耗时36.0h)
【Su1】产能无限 (供应商)
Procure-R2(R2): 446件 (耗时71.4h)
【Su2】产能无限 (供应商)
Procure-R2-Alt(R2): 150件 (耗时45.0h)
▶ 产品视图(汇总各产线产量)
P1@WH_FG: 期初库存20件 → 期末库存10件 [目标20/最小5/最大150] | 到货共40件 [L1(到货40件)] 生产中40件 | 销售50/50件
P2@WH_FG: 期初库存10件 → 期末库存0件 [目标15/最小3/最大120] | 到货共20件 [L1(到货20件)] 生产中20件 | 销售30/30件
P1@WH_FG: 期初库存20件 → 期末库存0件 [目标20/最小5/最大150] | 到货共40件 [L1(到货40件)] 生产中40件 ⚠需求缺口195件 | 销售255/450件 ⚠未满足195件 [库存耗尽(可用60件, 需求450件)]
P2@WH_FG: 期初库存10件 → 期末库存0件 [目标15/最小3/最大120] | 到货共20件 [L3(到货20件)] 生产中20件 | 销售30/30件
S1@WH_Semi: 期初库存50件 → 期末库存0件 [目标30/最小10/最大200] | 到货共50件 [L2(到货50件)] 生产中50件 | 销售0/0件
R1@WH_RM: 期初库存200件 → 期末库存80件 [目标80/最小50/最大500] | 无到货 | 销售0/0件
R2@WH_RM: 期初库存100件 → 期末库存0件 [目标40/最小20/最大400] | 无到货 | 销售0/0件
......@@ -115,7 +110,7 @@
S1(生产): 期初库存50件, 今日生产50件, 今日需求80件, 期末库存0件
└ S1需求80件(由P1×2系数)
─── 物料需求汇总 ───
R1(采购): 期初库存200件, 今日生产265件, 今日需求120件, 期末库存80件
R1(采购): 期初库存200件, 今日生产350件, 今日需求120件, 期末库存80件
└ R1需求120件(由P1×3系数)
Make-P2(P2)生产20件 →
─── 物料需求汇总 ───
......@@ -123,158 +118,150 @@
└ S1需求20件(由P2×1系数)
Make-S1(S1)生产50件 →
─── 物料需求汇总 ───
R2(采购): 期初库存100件, 今日生产496件, 今日需求100件, 期末库存0件
R2(采购): 期初库存100件, 今日生产596件, 今日需求100件, 期末库存0件
└ R2需求100件(由S1×2系数)
Procure-R1(R1)生产165件 →
Procure-R1-Alt(R1)生产100件 →
Procure-R2(R2)生产346件 →
Procure-R1(R1)生产200件 →
Procure-R1-Alt(R1)生产150件 →
Procure-R2(R2)生产446件 →
Procure-R2-Alt(R2)生产150件 →
▶ 期末库存 P1@WH_FG=10 P2@WH_FG=0 S1@WH_Semi=0 R1@WH_RM=80 R2@WH_RM=0
▶ 期末库存 P1@WH_FG=0 P2@WH_FG=0 S1@WH_Semi=0 R1@WH_RM=80 R2@WH_RM=0
═══════════════════ 第 2 天 ═══════════════════
▶ 产线视图(按产线分组)
【L1】产能10h
Make-P2(P2): 24件 (耗时3.0h)
利用率: 3/10 h (30%)
Make-P1(P1): 67件 (耗时6.7h)
利用率: 7/10 h (67%)
Make-P2(P2): 27件 (耗时3.3h)
利用率: 3/10 h (33%)
【L2】产能10h
Make-S1(S1): 163件 (耗时5.4h)
利用率: 5/10 h (54%)
Make-S1(S1): 203件 (耗时6.8h)
利用率: 7/10 h (68%)
【L3】产能10h
Make-P1(P1): 55件 (耗时6.9h)
利用率: 7/10 h (69%)
Make-P2(P2): 19件 (耗时3.1h)
利用率: 3/10 h (31%)
【SuA】产能24h
Procure-R1(R1): 5件 (耗时0.6h) , 批次200
利用率: 1/24 h (3%)
【SuB】产能24h
Procure-R1-Alt(R1): 100件 (耗时24.0h) , 批次150
利用率: 24/24 h (100%)
【Su1】产能24h
Procure-R2(R2): 194件 (耗时31.0h) , 批次200
利用率: 31/24 h (129%)
【Su2】产能100h
Procure-R2-Alt(R2): 150件 (耗时45.0h) , 批次150
利用率: 45/100 h (45%)
Make-P2(P2): 16件 (耗时2.7h)
利用率: 3/10 h (27%)
【SuA】产能无限 (供应商)
(休息)
【SuB】产能无限 (供应商)
Procure-R1-Alt(R1): 150件 (耗时36.0h)
【Su1】产能无限 (供应商)
Procure-R2(R2): 266件 (耗时42.6h)
【Su2】产能无限 (供应商)
Procure-R2-Alt(R2): 150件 (耗时45.0h)
▶ 产品视图(汇总各产线产量)
P1@WH_FG: 上期库存10件 → 期末库存5件 [目标20/最小5/最大150] | 到货共55件 [L3(到货55件)] 生产中55件 | 销售60/60件
P2@WH_FG: 上期库存0件 → 期末库存3件 [目标15/最小3/最大120] | 到货共43件 [L1(到货24件), L3(到货19件)] 生产中43件 | 销售40/40件
S1@WH_Semi: 上期库存0件 → 期末库存10件 [目标30/最小10/最大200] | 到货共163件 [L2(到货163件)] 生产中163件 | 销售0/0件
R1@WH_RM: 上期库存80件 → 期末库存80件 [目标80/最小50/最大500] | 到货共165件 [SuA(到货165件)] 生产中105件 | 销售0/0件
R2@WH_RM: 上期库存0件 → 期末库存20件 [目标40/最小20/最大400] | 到货共346件 [Su1(到货346件)] 生产中344件 | 销售0/0件
P1@WH_FG: 上期库存0件 → 期末库存7件 [目标20/最小5/最大150] | 到货共66.7件 [L1(到货67件)] 生产中66.7件 | 销售60/60件
P2@WH_FG: 上期库存0件 → 期末库存3件 [目标15/最小3/最大120] | 到货共43件 [L1(到货27件), L3(到货16件)] 生产中43件 | 销售40/40件
S1@WH_Semi: 上期库存0件 → 期末库存27件 [目标30/最小10/最大200] | 到货共203.1件 [L2(到货203件)] 生产中203.1件 | 销售0/0件
R1@WH_RM: 上期库存80件 → 期末库存80件 [目标80/最小50/最大500] | 到货共200件 [SuA(到货200件)] 生产中150件 | 销售0/0件
R2@WH_RM: 上期库存0件 → 期末库存40件 [目标40/最小20/最大400] | 到货共446.2件 [Su1(到货446件)] 生产中416.3件 | 销售0/0件
▶ 物料需求展开(按BOM逐级展开)
Make-P1(P1)生产55件 →
Make-P1(P1)生产67件 →
─── 物料需求汇总 ───
S1(生产): 期初库存0件, 今日生产163件, 今日需求110件, 期末库存10件
└ S1需求110件(由P1×2系数)
S1(生产): 期初库存0件, 今日生产203件, 今日需求133件, 期末库存27件
└ S1需求133件(由P1×2系数)
─── 物料需求汇总 ───
R1(采购): 期初库存80件, 今日生产105件, 今日需求165件, 期末库存80件
└ R1需求165件(由P1×3系数)
R1(采购): 期初库存80件, 今日生产150件, 今日需求200件, 期末库存80件
└ R1需求200件(由P1×3系数)
Make-P2(P2)生产43件 →
─── 物料需求汇总 ───
S1(生产): 期初库存0件, 今日生产163件, 今日需求43件, 期末库存10件
S1(生产): 期初库存0件, 今日生产203件, 今日需求43件, 期末库存27件
└ S1需求43件(由P2×1系数)
Make-S1(S1)生产163件 →
Make-S1(S1)生产203件 →
─── 物料需求汇总 ───
R2(采购): 期初库存0件, 今日生产344件, 今日需求326件, 期末库存20件
└ R2需求326件(由S1×2系数)
Procure-R1(R1)生产5件 →
Procure-R1-Alt(R1)生产100件 →
Procure-R2(R2)生产194件 →
R2(采购): 期初库存0件, 今日生产416件, 今日需求406件, 期末库存40件
└ R2需求406件(由S1×2系数)
Procure-R1-Alt(R1)生产150件 →
Procure-R2(R2)生产266件 →
Procure-R2-Alt(R2)生产150件 →
▶ 期末库存 P1@WH_FG=5 P2@WH_FG=3 S1@WH_Semi=10 R1@WH_RM=80 R2@WH_RM=20
▶ 期末库存 P1@WH_FG=7 P2@WH_FG=3 S1@WH_Semi=27 R1@WH_RM=80 R2@WH_RM=40
═══════════════════ 第 3 天 ═══════════════════
▶ 产线视图(按产线分组)
【L1】产能10h
Make-P1(P1): 35件 (耗时3.5h)
利用率: 4/10 h (35%)
Make-P2(P2): 47件 (耗时5.9h)
利用率: 6/10 h (59%)
Make-P1(P1): 50件 (耗时5.0h)
利用率: 5/10 h (50%)
【L2】产能10h
Make-S1(S1): 107件 (耗时3.6h)
利用率: 4/10 h (36%)
Make-S1(S1): 143件 (耗时4.8h)
利用率: 5/10 h (48%)
【L3】产能10h
(休息)
【SuA】产能24h
Procure-R1(R1): 200件 (耗时24.0h) , 批次200
利用率: 24/24 h (100%)
【SuB】产能24h
Procure-R1-Alt(R1): 100件 (耗时24.0h) , 批次150
利用率: 24/24 h (100%)
【Su1】产能24h
Procure-R2(R2): 150件 (耗时24.0h) , 批次200
利用率: 24/24 h (100%)
【Su2】产能100h
Procure-R2-Alt(R2): 150件 (耗时45.0h) , 批次150
利用率: 45/100 h (45%)
Make-P2(P2): 60件 (耗时10.0h)
利用率: 10/10 h (100%)
【SuA】产能无限 (供应商)
Procure-R1(R1): 200件 (耗时24.0h)
【SuB】产能无限 (供应商)
Procure-R1-Alt(R1): 150件 (耗时36.0h)
【Su1】产能无限 (供应商)
Procure-R2(R2): 200件 (耗时32.0h)
【Su2】产能无限 (供应商)
Procure-R2-Alt(R2): 150件 (耗时45.0h)
▶ 产品视图(汇总各产线产量)
P1@WH_FG: 上期库存5件 → 期末库存0件 [目标20/最小5/最大150] | 到货共35件 [L1(到货35件)] 生产中35件 | 销售40/40件
P2@WH_FG: 上期库存3件 → 期末库存0件 [目标15/最小3/最大120] | 到货共47件 [L1(到货47件)] 生产中47件 | 销售50/50件
S1@WH_Semi: 上期库存10件 → 期末库存0件 [目标30/最小10/最大200] | 到货共107件 [L2(到货107件)] 生产中107件 | 销售0/0件
R1@WH_RM: 上期库存80件 → 期末库存80件 [目标80/最小50/最大500] | 到货共105件 [SuA(到货5件), SuB(到货100件)] 生产中300件 | 销售0/0件
R2@WH_RM: 上期库存20件 → 期末库存0件 [目标40/最小20/最大400] | 到货共194件 [Su1(到货194件)] 生产中300件 | 销售0/0件
P1@WH_FG: 上期库存7件 → 期末库存17件 [目标20/最小5/最大150] | 到货共50件 [L1(到货50件)] 生产中50件 | 销售40/40件
P2@WH_FG: 上期库存3件 → 期末库存13件 [目标15/最小3/最大120] | 到货共59.9件 [L3(到货60件)] 生产中59.9件 | 销售50/50件
S1@WH_Semi: 上期库存27件 → 期末库存10件 [目标30/最小10/最大200] | 到货共143.1件 [L2(到货143件)] 生产中143.1件 | 销售0/0件
R1@WH_RM: 上期库存80件 → 期末库存80件 [目标80/最小50/最大500] | 到货共150件 [SuB(到货150件)] 生产中350件 | 销售0/0件
R2@WH_RM: 上期库存40件 → 期末库存20件 [目标40/最小20/最大400] | 到货共266.3件 [Su1(到货266件)] 生产中350件 | 销售0/0件
▶ 物料需求展开(按BOM逐级展开)
Make-P1(P1)生产35件 →
Make-P1(P1)生产50件 →
─── 物料需求汇总 ───
S1(生产): 期初库存10件, 今日生产107件, 今日需求70件, 期末库存0件
└ S1需求70件(由P1×2系数)
S1(生产): 期初库存27件, 今日生产143件, 今日需求100件, 期末库存10件
└ S1需求100件(由P1×2系数)
─── 物料需求汇总 ───
R1(采购): 期初库存80件, 今日生产300件, 今日需求105件, 期末库存80件
└ R1需求105件(由P1×3系数)
Make-P2(P2)生产47件 →
R1(采购): 期初库存80件, 今日生产350件, 今日需求150件, 期末库存80件
└ R1需求150件(由P1×3系数)
Make-P2(P2)生产60件 →
─── 物料需求汇总 ───
S1(生产): 期初库存10件, 今日生产107件, 今日需求47件, 期末库存0件
└ S1需求47件(由P2×1系数)
Make-S1(S1)生产107件 →
S1(生产): 期初库存27件, 今日生产143件, 今日需求60件, 期末库存10件
└ S1需求60件(由P2×1系数)
Make-S1(S1)生产143件 →
─── 物料需求汇总 ───
R2(采购): 期初库存20件, 今日生产300件, 今日需求214件, 期末库存0件
└ R2需求214件(由S1×2系数)
R2(采购): 期初库存40件, 今日生产350件, 今日需求286件, 期末库存20件
└ R2需求286件(由S1×2系数)
Procure-R1(R1)生产200件 →
Procure-R1-Alt(R1)生产100件 →
Procure-R2(R2)生产150件 →
Procure-R1-Alt(R1)生产150件 →
Procure-R2(R2)生产200件 →
Procure-R2-Alt(R2)生产150件 →
▶ 期末库存 P1@WH_FG=0 P2@WH_FG=0 S1@WH_Semi=0 R1@WH_RM=80 R2@WH_RM=0
▶ 期末库存 P1@WH_FG=17 P2@WH_FG=13 S1@WH_Semi=10 R1@WH_RM=80 R2@WH_RM=20
═══════════════════ KPI 汇总 ═══════════════════
目标函数值 (最小总惩罚): 355.00
需求缺口惩罚: 0.00 (权重100 × 0.00)
批次偏差惩罚: 5820.00 (权重10 × 582.00)
目标函数值 (最小总惩罚): 190.00
需求缺口惩罚: 19500.00 (权重100 × 195.00)
批次偏差惩罚: 5124.27 (权重10 × 512.43)
超库存惩罚: 0.00 (权重5 × 0.00)
欠库存惩罚: 355.00 (权重5 × 71.00)
目标库存偏差: 2136.00 (权重8 × 267.00)
产能超载惩罚: 768.00 (权重20 × 38.40)
供应目标偏差: 1165.50 (权重8 × 145.69)
欠库存惩罚: 190.00 (权重5 × 38.00)
目标库存偏差: 1432.35 (权重8 × 179.04)
产能超载惩罚: 0.00 (权重20 × 0.00)
供应目标偏差: 643.62 (权重8 × 80.45)
最小供应不足: 0.00 (权重5 × 0.00)
最大供应超出: 0.00 (权重5 × 0.00)
销售优先级(负): 270.00 (权重1 × 270.00)
销售优先级(负): 475.00 (权重1 × 475.00)
⚠ 注意:存在需求缺口,部分订单未满足。
═══════════════════ 求解统计 ═══════════════════
变量数:242
约束数:180
耗时:0.131 秒
变量数:218
约束数:168
耗时:0.085 秒
═══════════════════ 分层优化汇总 ═══════════════════
层级 名称 松弛比例 最优值 包含KPI
1 需求满足 0% 0.00 需求缺口
2 产能约束 0% 768.00 产能超载
3 业务KPI 5% 8430.00 批次偏差, 目标库存偏差, 供应目标偏差, 销售优先级
4 软约束 10% 355.00 超库存, 欠库存, 最小供应不足, 最大供应超出
1 需求满足 0% 19500.00 需求缺口
2 产能约束 0% 0.00 产能超载
3 业务KPI 5% 6405.00 批次偏差, 目标库存偏差, 供应目标偏差, 销售优先级
4 软约束 10% 190.00 超库存, 欠库存, 最小供应不足, 最大供应超出
--- 最终 KPI 值 (加权总惩罚) ---
加权总惩罚: 9974.50
需求缺口: 0.00 (权重100 × 0.00)
产能超载: 768.00 (权重20 × 38.40)
批次偏差: 5820.00 (权重10 × 582.00)
目标库存偏差: 2136.00 (权重8 × 267.00)
供应目标偏差: 1165.50 (权重8 × 145.69)
加权总惩罚: 26415.25
需求缺口: 19500.00 (权重100 × 195.00)
产能超载: 0.00 (权重20 × 0.00)
批次偏差: 5124.27 (权重10 × 512.43)
目标库存偏差: 1432.35 (权重8 × 179.04)
供应目标偏差: 643.62 (权重8 × 80.45)
超库存: 0.00 (权重5 × 0.00)
欠库存: 355.00 (权重5 × 71.00)
欠库存: 190.00 (权重5 × 38.00)
最小供应不足: 0.00 (权重5 × 0.00)
最大供应超出: 0.00 (权重5 × 0.00)
销售优先级(负): 270.00 (权重1 × 270.00)
16:47:54.837 [main] INFO com.aps.service.plan.SceneService - 保存成功,场景ID: 1, 文件: F:\product\MES\hyh.apsj\mp\result\optimization_result_1.json
销售优先级(负): 475.00 (权重1 × 475.00)
15:49:47.930 [main] INFO com.aps.service.plan.SceneService - 保存成功,场景ID: 1, 文件: F:\product\MES\hyh.apsj\mp\result\optimization_result_1.json
[OK] 优化结果JSON已导出: true
=== 运行结束 ===
This source diff could not be displayed because it is too large. You can view the blob instead.
{"timestamp":"2026-08-13 10:28:16","solver":"SCIP (via Google OR-Tools)","version":"1.0.0","periodTasks":[{"operationId":"OP_589385_532561","operationName":"208车间-16号线","unitId":"EQUIP_1263","periodIndex":4,"periodStartDate":"2026-10-26","productionQty":9.0,"capacityUsed":324000.0,"capacityCoeff":36000.0,"lotSize":1.0,"lotSizeOver":0.0,"lotSizeUnder":8.0,"outputs":[{"productId":"cbd0dd08-d637-1544-8929-d5469d85140d","spId":"SP_FG_cbd0dd08-d637-1544-8929-d5469d85140d","factor":1.0}]},{"operationId":"OP_589481_532753","operationName":"208车间-14号线","unitId":"EQUIP_1261","periodIndex":3,"periodStartDate":"2026-10-19","productionQty":9.0,"capacityUsed":324000.0,"capacityCoeff":36000.0,"lotSize":1.0,"lotSizeOver":0.0,"lotSizeUnder":8.0,"outputs":[{"productId":"cbd0dd08-7543-2847-84fd-d9b5f48a2020","spId":"SP_FG_cbd0dd08-7543-2847-84fd-d9b5f48a2020","factor":1.0}]},{"operationId":"OP_589453_532697","operationName":"208车间-18号线","unitId":"EQUIP_1265","periodIndex":1,"periodStartDate":"2026-10-05","productionQty":10.0,"capacityUsed":360000.0,"capacityCoeff":36000.0,"lotSize":1.0,"lotSizeOver":0.0,"lotSizeUnder":9.0,"outputs":[{"productId":"cbd0dd08-da3e-d54a-8691-7ccb7e5edeec","spId":"SP_FG_cbd0dd08-da3e-d54a-8691-7ccb7e5edeec","factor":1.0}]},{"operationId":"OP_591008_535787","operationName":"208车间-17号线","unitId":"EQUIP_1264","periodIndex":0,"periodStartDate":"2026-09-28","productionQty":9.0,"capacityUsed":324000.0,"capacityCoeff":36000.0,"lotSize":1.0,"lotSizeOver":0.0,"lotSizeUnder":8.0,"outputs":[{"productId":"cbd0dd08-713a-5945-80d6-709f71323f70","spId":"SP_FG_cbd0dd08-713a-5945-80d6-709f71323f70","factor":1.0}]},{"operationId":"OP_589415_532621","operationName":"208车间-15号线","unitId":"EQUIP_1262","periodIndex":0,"periodStartDate":"2026-09-28","productionQty":1.0,"capacityUsed":36000.0,"capacityCoeff":36000.0,"lotSize":1.0,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":[{"productId":"cbd0dd08-713a-5945-80d6-709f71323f70","spId":"SP_FG_cbd0dd08-713a-5945-80d6-709f71323f70","factor":1.0}]},{"operationId":"OP_588115_526808","operationName":"104车间-5号线","unitId":"EQUIP_1270","periodIndex":4,"periodStartDate":"2026-10-26","productionQty":10.0,"capacityUsed":360000.0,"capacityCoeff":36000.0,"lotSize":1.0,"lotSizeOver":0.0,"lotSizeUnder":9.0,"outputs":[{"productId":"cbd0dd08-e52b-7f44-8a3b-b9d57105a98c","spId":"SP_FG_cbd0dd08-e52b-7f44-8a3b-b9d57105a98c","factor":1.0}]},{"operationId":"OP_588198_527165","operationName":"103车间-34号线","unitId":"EQUIP_1247","periodIndex":4,"periodStartDate":"2026-10-26","productionQty":1.0,"capacityUsed":36000.0,"capacityCoeff":36000.0,"lotSize":1.0,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":[{"productId":"cbd0dd08-d637-1544-8929-d5469d85140d","spId":"SP_FG_cbd0dd08-d637-1544-8929-d5469d85140d","factor":1.0}]},{"operationId":"OP_588228_527225","operationName":"103车间-36号线","unitId":"EQUIP_1249","periodIndex":3,"periodStartDate":"2026-10-19","productionQty":1.0,"capacityUsed":36000.0,"capacityCoeff":36000.0,"lotSize":1.0,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":[{"productId":"cbd0dd08-7543-2847-84fd-d9b5f48a2020","spId":"SP_FG_cbd0dd08-7543-2847-84fd-d9b5f48a2020","factor":1.0}]}],"salesDemands":[{"salesDemandId":"cbd0dd08-713a-5945-80d6-709f71323f70_SP_FG_cbd0dd08-713a-5945-80d6-709f71323f70_0","productId":"cbd0dd08-713a-5945-80d6-709f71323f70","spId":"SP_FG_cbd0dd08-713a-5945-80d6-709f71323f70","periodIndex":0,"periodStartDate":"2026-09-28","demandQty":10.0,"fulfilledQty":10.0,"unmetQty":0.0,"demandSlack":0.0,"fulfillmentRate":1.0,"priority":1.0},{"salesDemandId":"cbd0dd08-d637-1544-8929-d5469d85140d_SP_FG_cbd0dd08-d637-1544-8929-d5469d85140d_4","productId":"cbd0dd08-d637-1544-8929-d5469d85140d","spId":"SP_FG_cbd0dd08-d637-1544-8929-d5469d85140d","periodIndex":4,"periodStartDate":"2026-10-26","demandQty":10.0,"fulfilledQty":10.0,"unmetQty":0.0,"demandSlack":0.0,"fulfillmentRate":1.0,"priority":1.0},{"salesDemandId":"cbd0dd08-da3e-d54a-8691-7ccb7e5edeec_SP_FG_cbd0dd08-da3e-d54a-8691-7ccb7e5edeec_1","productId":"cbd0dd08-da3e-d54a-8691-7ccb7e5edeec","spId":"SP_FG_cbd0dd08-da3e-d54a-8691-7ccb7e5edeec","periodIndex":1,"periodStartDate":"2026-10-05","demandQty":10.0,"fulfilledQty":10.0,"unmetQty":0.0,"demandSlack":0.0,"fulfillmentRate":1.0,"priority":1.0},{"salesDemandId":"cbd0dd08-7543-2847-84fd-d9b5f48a2020_SP_FG_cbd0dd08-7543-2847-84fd-d9b5f48a2020_3","productId":"cbd0dd08-7543-2847-84fd-d9b5f48a2020","spId":"SP_FG_cbd0dd08-7543-2847-84fd-d9b5f48a2020","periodIndex":3,"periodStartDate":"2026-10-19","demandQty":10.0,"fulfilledQty":10.0,"unmetQty":0.0,"demandSlack":0.0,"fulfillmentRate":1.0,"priority":1.0},{"salesDemandId":"cbd0dd08-e52b-7f44-8a3b-b9d57105a98c_SP_FG_cbd0dd08-e52b-7f44-8a3b-b9d57105a98c_4","productId":"cbd0dd08-e52b-7f44-8a3b-b9d57105a98c","spId":"SP_FG_cbd0dd08-e52b-7f44-8a3b-b9d57105a98c","periodIndex":4,"periodStartDate":"2026-10-26","demandQty":10.0,"fulfilledQty":10.0,"unmetQty":0.0,"demandSlack":0.0,"fulfillmentRate":1.0,"priority":1.0}],"pispips":[{"productId":"cbd0dd08-713a-5945-80d6-709f71323f70","spId":"SP_FG_cbd0dd08-713a-5945-80d6-709f71323f70","periodIndex":0,"periodStartDate":"2026-09-28","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":10.0,"inTransitArrival":0.0,"totalInflow":10.0,"salesDemandQty":10.0,"salesFulfilledQty":10.0,"dependentDemandQty":0.0,"totalOutflow":10.0,"demandFulfillment":10.0,"demandSlack":0.0,"productionInProgress":10.0,"productionDetails":[{"operationId":"OP_591008_535787","operationName":"208车间-17号线","unitId":"EQUIP_1264","quantity":9.0,"leadTimeDays":0,"bomConsumptions":[]},{"operationId":"OP_589415_532621","operationName":"208车间-15号线","unitId":"EQUIP_1262","quantity":1.0,"leadTimeDays":0,"bomConsumptions":[]}]},{"productId":"cbd0dd08-713a-5945-80d6-709f71323f70","spId":"SP_FG_cbd0dd08-713a-5945-80d6-709f71323f70","periodIndex":1,"periodStartDate":"2026-10-05","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":0.0,"totalOutflow":0.0,"demandFulfillment":0.0,"demandSlack":0.0,"productionInProgress":0.0,"productionDetails":[]},{"productId":"cbd0dd08-713a-5945-80d6-709f71323f70","spId":"SP_FG_cbd0dd08-713a-5945-80d6-709f71323f70","periodIndex":2,"periodStartDate":"2026-10-12","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":0.0,"totalOutflow":0.0,"demandFulfillment":0.0,"demandSlack":0.0,"productionInProgress":0.0,"productionDetails":[]},{"productId":"cbd0dd08-713a-5945-80d6-709f71323f70","spId":"SP_FG_cbd0dd08-713a-5945-80d6-709f71323f70","periodIndex":3,"periodStartDate":"2026-10-19","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":0.0,"totalOutflow":0.0,"demandFulfillment":0.0,"demandSlack":0.0,"productionInProgress":0.0,"productionDetails":[]},{"productId":"cbd0dd08-713a-5945-80d6-709f71323f70","spId":"SP_FG_cbd0dd08-713a-5945-80d6-709f71323f70","periodIndex":4,"periodStartDate":"2026-10-26","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":0.0,"totalOutflow":0.0,"demandFulfillment":0.0,"demandSlack":0.0,"productionInProgress":0.0,"productionDetails":[]},{"productId":"cbd0dd08-713a-5945-80d6-709f71323f70","spId":"SP_FG_cbd0dd08-713a-5945-80d6-709f71323f70","periodIndex":5,"periodStartDate":"2026-11-02","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":0.0,"totalOutflow":0.0,"demandFulfillment":0.0,"demandSlack":0.0,"productionInProgress":0.0,"productionDetails":[]},{"productId":"cbd0dd08-d637-1544-8929-d5469d85140d","spId":"SP_FG_cbd0dd08-d637-1544-8929-d5469d85140d","periodIndex":0,"periodStartDate":"2026-09-28","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":0.0,"totalOutflow":0.0,"demandFulfillment":0.0,"demandSlack":0.0,"productionInProgress":0.0,"productionDetails":[]},{"productId":"cbd0dd08-d637-1544-8929-d5469d85140d","spId":"SP_FG_cbd0dd08-d637-1544-8929-d5469d85140d","periodIndex":1,"periodStartDate":"2026-10-05","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":0.0,"totalOutflow":0.0,"demandFulfillment":0.0,"demandSlack":0.0,"productionInProgress":0.0,"productionDetails":[]},{"productId":"cbd0dd08-d637-1544-8929-d5469d85140d","spId":"SP_FG_cbd0dd08-d637-1544-8929-d5469d85140d","periodIndex":2,"periodStartDate":"2026-10-12","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":0.0,"totalOutflow":0.0,"demandFulfillment":0.0,"demandSlack":0.0,"productionInProgress":0.0,"productionDetails":[]},{"productId":"cbd0dd08-d637-1544-8929-d5469d85140d","spId":"SP_FG_cbd0dd08-d637-1544-8929-d5469d85140d","periodIndex":3,"periodStartDate":"2026-10-19","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":0.0,"totalOutflow":0.0,"demandFulfillment":0.0,"demandSlack":0.0,"productionInProgress":0.0,"productionDetails":[]},{"productId":"cbd0dd08-d637-1544-8929-d5469d85140d","spId":"SP_FG_cbd0dd08-d637-1544-8929-d5469d85140d","periodIndex":4,"periodStartDate":"2026-10-26","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":10.0,"inTransitArrival":0.0,"totalInflow":10.0,"salesDemandQty":10.0,"salesFulfilledQty":10.0,"dependentDemandQty":0.0,"totalOutflow":10.0,"demandFulfillment":10.0,"demandSlack":0.0,"productionInProgress":10.0,"productionDetails":[{"operationId":"OP_589385_532561","operationName":"208车间-16号线","unitId":"EQUIP_1263","quantity":9.0,"leadTimeDays":0,"bomConsumptions":[]},{"operationId":"OP_588198_527165","operationName":"103车间-34号线","unitId":"EQUIP_1247","quantity":1.0,"leadTimeDays":0,"bomConsumptions":[]}]},{"productId":"cbd0dd08-d637-1544-8929-d5469d85140d","spId":"SP_FG_cbd0dd08-d637-1544-8929-d5469d85140d","periodIndex":5,"periodStartDate":"2026-11-02","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":0.0,"totalOutflow":0.0,"demandFulfillment":0.0,"demandSlack":0.0,"productionInProgress":0.0,"productionDetails":[]},{"productId":"cbd0dd08-e52b-7f44-8a3b-b9d57105a98c","spId":"SP_FG_cbd0dd08-e52b-7f44-8a3b-b9d57105a98c","periodIndex":0,"periodStartDate":"2026-09-28","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":0.0,"totalOutflow":0.0,"demandFulfillment":0.0,"demandSlack":0.0,"productionInProgress":0.0,"productionDetails":[]},{"productId":"cbd0dd08-e52b-7f44-8a3b-b9d57105a98c","spId":"SP_FG_cbd0dd08-e52b-7f44-8a3b-b9d57105a98c","periodIndex":1,"periodStartDate":"2026-10-05","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":0.0,"totalOutflow":0.0,"demandFulfillment":0.0,"demandSlack":0.0,"productionInProgress":0.0,"productionDetails":[]},{"productId":"cbd0dd08-e52b-7f44-8a3b-b9d57105a98c","spId":"SP_FG_cbd0dd08-e52b-7f44-8a3b-b9d57105a98c","periodIndex":2,"periodStartDate":"2026-10-12","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":0.0,"totalOutflow":0.0,"demandFulfillment":0.0,"demandSlack":0.0,"productionInProgress":0.0,"productionDetails":[]},{"productId":"cbd0dd08-e52b-7f44-8a3b-b9d57105a98c","spId":"SP_FG_cbd0dd08-e52b-7f44-8a3b-b9d57105a98c","periodIndex":3,"periodStartDate":"2026-10-19","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":0.0,"totalOutflow":0.0,"demandFulfillment":0.0,"demandSlack":0.0,"productionInProgress":0.0,"productionDetails":[]},{"productId":"cbd0dd08-e52b-7f44-8a3b-b9d57105a98c","spId":"SP_FG_cbd0dd08-e52b-7f44-8a3b-b9d57105a98c","periodIndex":4,"periodStartDate":"2026-10-26","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":10.0,"inTransitArrival":0.0,"totalInflow":10.0,"salesDemandQty":10.0,"salesFulfilledQty":10.0,"dependentDemandQty":0.0,"totalOutflow":10.0,"demandFulfillment":10.0,"demandSlack":0.0,"productionInProgress":10.0,"productionDetails":[{"operationId":"OP_588115_526808","operationName":"104车间-5号线","unitId":"EQUIP_1270","quantity":10.0,"leadTimeDays":0,"bomConsumptions":[]}]},{"productId":"cbd0dd08-e52b-7f44-8a3b-b9d57105a98c","spId":"SP_FG_cbd0dd08-e52b-7f44-8a3b-b9d57105a98c","periodIndex":5,"periodStartDate":"2026-11-02","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":0.0,"totalOutflow":0.0,"demandFulfillment":0.0,"demandSlack":0.0,"productionInProgress":0.0,"productionDetails":[]},{"productId":"cbd0dd08-da3e-d54a-8691-7ccb7e5edeec","spId":"SP_FG_cbd0dd08-da3e-d54a-8691-7ccb7e5edeec","periodIndex":0,"periodStartDate":"2026-09-28","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":0.0,"totalOutflow":0.0,"demandFulfillment":0.0,"demandSlack":0.0,"productionInProgress":0.0,"productionDetails":[]},{"productId":"cbd0dd08-da3e-d54a-8691-7ccb7e5edeec","spId":"SP_FG_cbd0dd08-da3e-d54a-8691-7ccb7e5edeec","periodIndex":1,"periodStartDate":"2026-10-05","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":10.0,"inTransitArrival":0.0,"totalInflow":10.0,"salesDemandQty":10.0,"salesFulfilledQty":10.0,"dependentDemandQty":0.0,"totalOutflow":10.0,"demandFulfillment":10.0,"demandSlack":0.0,"productionInProgress":10.0,"productionDetails":[{"operationId":"OP_589453_532697","operationName":"208车间-18号线","unitId":"EQUIP_1265","quantity":10.0,"leadTimeDays":0,"bomConsumptions":[]}]},{"productId":"cbd0dd08-da3e-d54a-8691-7ccb7e5edeec","spId":"SP_FG_cbd0dd08-da3e-d54a-8691-7ccb7e5edeec","periodIndex":2,"periodStartDate":"2026-10-12","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":0.0,"totalOutflow":0.0,"demandFulfillment":0.0,"demandSlack":0.0,"productionInProgress":0.0,"productionDetails":[]},{"productId":"cbd0dd08-da3e-d54a-8691-7ccb7e5edeec","spId":"SP_FG_cbd0dd08-da3e-d54a-8691-7ccb7e5edeec","periodIndex":3,"periodStartDate":"2026-10-19","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":0.0,"totalOutflow":0.0,"demandFulfillment":0.0,"demandSlack":0.0,"productionInProgress":0.0,"productionDetails":[]},{"productId":"cbd0dd08-da3e-d54a-8691-7ccb7e5edeec","spId":"SP_FG_cbd0dd08-da3e-d54a-8691-7ccb7e5edeec","periodIndex":4,"periodStartDate":"2026-10-26","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":0.0,"totalOutflow":0.0,"demandFulfillment":0.0,"demandSlack":0.0,"productionInProgress":0.0,"productionDetails":[]},{"productId":"cbd0dd08-da3e-d54a-8691-7ccb7e5edeec","spId":"SP_FG_cbd0dd08-da3e-d54a-8691-7ccb7e5edeec","periodIndex":5,"periodStartDate":"2026-11-02","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":0.0,"totalOutflow":0.0,"demandFulfillment":0.0,"demandSlack":0.0,"productionInProgress":0.0,"productionDetails":[]},{"productId":"cbd0dd08-7543-2847-84fd-d9b5f48a2020","spId":"SP_FG_cbd0dd08-7543-2847-84fd-d9b5f48a2020","periodIndex":0,"periodStartDate":"2026-09-28","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":0.0,"totalOutflow":0.0,"demandFulfillment":0.0,"demandSlack":0.0,"productionInProgress":0.0,"productionDetails":[]},{"productId":"cbd0dd08-7543-2847-84fd-d9b5f48a2020","spId":"SP_FG_cbd0dd08-7543-2847-84fd-d9b5f48a2020","periodIndex":1,"periodStartDate":"2026-10-05","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":0.0,"totalOutflow":0.0,"demandFulfillment":0.0,"demandSlack":0.0,"productionInProgress":0.0,"productionDetails":[]},{"productId":"cbd0dd08-7543-2847-84fd-d9b5f48a2020","spId":"SP_FG_cbd0dd08-7543-2847-84fd-d9b5f48a2020","periodIndex":2,"periodStartDate":"2026-10-12","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":0.0,"totalOutflow":0.0,"demandFulfillment":0.0,"demandSlack":0.0,"productionInProgress":0.0,"productionDetails":[]},{"productId":"cbd0dd08-7543-2847-84fd-d9b5f48a2020","spId":"SP_FG_cbd0dd08-7543-2847-84fd-d9b5f48a2020","periodIndex":3,"periodStartDate":"2026-10-19","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":10.0,"inTransitArrival":0.0,"totalInflow":10.0,"salesDemandQty":10.0,"salesFulfilledQty":10.0,"dependentDemandQty":0.0,"totalOutflow":10.0,"demandFulfillment":10.0,"demandSlack":0.0,"productionInProgress":10.0,"productionDetails":[{"operationId":"OP_589481_532753","operationName":"208车间-14号线","unitId":"EQUIP_1261","quantity":9.0,"leadTimeDays":0,"bomConsumptions":[]},{"operationId":"OP_588228_527225","operationName":"103车间-36号线","unitId":"EQUIP_1249","quantity":1.0,"leadTimeDays":0,"bomConsumptions":[]}]},{"productId":"cbd0dd08-7543-2847-84fd-d9b5f48a2020","spId":"SP_FG_cbd0dd08-7543-2847-84fd-d9b5f48a2020","periodIndex":4,"periodStartDate":"2026-10-26","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":0.0,"totalOutflow":0.0,"demandFulfillment":0.0,"demandSlack":0.0,"productionInProgress":0.0,"productionDetails":[]},{"productId":"cbd0dd08-7543-2847-84fd-d9b5f48a2020","spId":"SP_FG_cbd0dd08-7543-2847-84fd-d9b5f48a2020","periodIndex":5,"periodStartDate":"2026-11-02","openingInventory":0.0,"endingInventory":0.0,"targetInventoryLevel":0.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":0.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":999999.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":0.0,"totalOutflow":0.0,"demandFulfillment":0.0,"demandSlack":0.0,"productionInProgress":0.0,"productionDetails":[]}],"productNetwork":{"finishedGoods":[{"productId":"cbd0dd08-713a-5945-80d6-709f71323f70","spId":"SP_FG_cbd0dd08-713a-5945-80d6-709f71323f70","level":0,"supplySources":[{"type":"OPERATION","operationId":"OP_591008_535787","operationName":"208车间-17号线","unitId":"EQUIP_1264","totalProduction":9.0,"capacityUsed":324000.0,"lotSize":1.0},{"type":"OPERATION","operationId":"OP_589415_532621","operationName":"208车间-15号线","unitId":"EQUIP_1262","totalProduction":1.0,"capacityUsed":36000.0,"lotSize":1.0}],"totalSalesDemand":10.0,"totalSalesFulfilled":10.0,"totalDependentDemand":0.0,"consumers":[],"summary":{"totalProduction":10.0,"totalArrived":10.0,"totalInTransit":0.0,"totalSalesDemand":10.0,"totalSalesFulfilled":10.0,"totalDependentDemand":0.0,"totalDemandFulfillment":10.0,"totalDemandSlack":0.0,"initialInventory":0.0,"finalInventory":0.0,"averageInventory":0.0,"totalBelowTarget":0.0,"totalBelowMin":0.0,"totalAboveMax":0.0},"children":[]},{"productId":"cbd0dd08-d637-1544-8929-d5469d85140d","spId":"SP_FG_cbd0dd08-d637-1544-8929-d5469d85140d","level":0,"supplySources":[{"type":"OPERATION","operationId":"OP_589385_532561","operationName":"208车间-16号线","unitId":"EQUIP_1263","totalProduction":9.0,"capacityUsed":324000.0,"lotSize":1.0},{"type":"OPERATION","operationId":"OP_588198_527165","operationName":"103车间-34号线","unitId":"EQUIP_1247","totalProduction":1.0,"capacityUsed":36000.0,"lotSize":1.0},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.206,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.356,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.416,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.416,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.356,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.338,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.338,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.272,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.368,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.374,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.374,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.434,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.386,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.398,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.326,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.41,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.338,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.344,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.368,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.272,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.422,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.338,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":3.222,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.272,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.41,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.38,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.41,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.404,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.386,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.308,"capacityUsed":0.0,"lotSize":null}],"totalSalesDemand":10.0,"totalSalesFulfilled":10.0,"totalDependentDemand":0.0,"consumers":[],"summary":{"totalProduction":10.0,"totalArrived":10.0,"totalInTransit":129.64199999999997,"totalSalesDemand":10.0,"totalSalesFulfilled":10.0,"totalDependentDemand":0.0,"totalDemandFulfillment":10.0,"totalDemandSlack":0.0,"initialInventory":0.0,"finalInventory":0.0,"averageInventory":0.0,"totalBelowTarget":0.0,"totalBelowMin":0.0,"totalAboveMax":0.0},"children":[]},{"productId":"cbd0dd08-e52b-7f44-8a3b-b9d57105a98c","spId":"SP_FG_cbd0dd08-e52b-7f44-8a3b-b9d57105a98c","level":0,"supplySources":[{"type":"OPERATION","operationId":"OP_588115_526808","operationName":"104车间-5号线","unitId":"EQUIP_1270","totalProduction":10.0,"capacityUsed":360000.0,"lotSize":1.0},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":0.09,"capacityUsed":0.0,"lotSize":null}],"totalSalesDemand":10.0,"totalSalesFulfilled":10.0,"totalDependentDemand":0.0,"consumers":[],"summary":{"totalProduction":10.0,"totalArrived":10.0,"totalInTransit":0.09,"totalSalesDemand":10.0,"totalSalesFulfilled":10.0,"totalDependentDemand":0.0,"totalDemandFulfillment":10.0,"totalDemandSlack":0.0,"initialInventory":0.0,"finalInventory":0.0,"averageInventory":0.0,"totalBelowTarget":0.0,"totalBelowMin":0.0,"totalAboveMax":0.0},"children":[]},{"productId":"cbd0dd08-da3e-d54a-8691-7ccb7e5edeec","spId":"SP_FG_cbd0dd08-da3e-d54a-8691-7ccb7e5edeec","level":0,"supplySources":[{"type":"OPERATION","operationId":"OP_589453_532697","operationName":"208车间-18号线","unitId":"EQUIP_1265","totalProduction":10.0,"capacityUsed":360000.0,"lotSize":1.0}],"totalSalesDemand":10.0,"totalSalesFulfilled":10.0,"totalDependentDemand":0.0,"consumers":[],"summary":{"totalProduction":10.0,"totalArrived":10.0,"totalInTransit":0.0,"totalSalesDemand":10.0,"totalSalesFulfilled":10.0,"totalDependentDemand":0.0,"totalDemandFulfillment":10.0,"totalDemandSlack":0.0,"initialInventory":0.0,"finalInventory":0.0,"averageInventory":0.0,"totalBelowTarget":0.0,"totalBelowMin":0.0,"totalAboveMax":0.0},"children":[]},{"productId":"cbd0dd08-7543-2847-84fd-d9b5f48a2020","spId":"SP_FG_cbd0dd08-7543-2847-84fd-d9b5f48a2020","level":0,"supplySources":[{"type":"OPERATION","operationId":"OP_589481_532753","operationName":"208车间-14号线","unitId":"EQUIP_1261","totalProduction":9.0,"capacityUsed":324000.0,"lotSize":1.0},{"type":"OPERATION","operationId":"OP_588228_527225","operationName":"103车间-36号线","unitId":"EQUIP_1249","totalProduction":1.0,"capacityUsed":36000.0,"lotSize":1.0},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":11.2,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":11.24,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":10.752,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":11.152,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":11.168,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":11.144,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":11.136,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":11.336,"capacityUsed":0.0,"lotSize":null}],"totalSalesDemand":10.0,"totalSalesFulfilled":10.0,"totalDependentDemand":0.0,"consumers":[],"summary":{"totalProduction":10.0,"totalArrived":10.0,"totalInTransit":89.128,"totalSalesDemand":10.0,"totalSalesFulfilled":10.0,"totalDependentDemand":0.0,"totalDemandFulfillment":10.0,"totalDemandSlack":0.0,"initialInventory":0.0,"finalInventory":0.0,"averageInventory":0.0,"totalBelowTarget":0.0,"totalBelowMin":0.0,"totalAboveMax":0.0},"children":[]}],"allNodes":{"cbd0dd08-713a-5945-80d6-709f71323f70@SP_FG_cbd0dd08-713a-5945-80d6-709f71323f70":{"productId":"cbd0dd08-713a-5945-80d6-709f71323f70","spId":"SP_FG_cbd0dd08-713a-5945-80d6-709f71323f70","level":0,"supplySources":[{"type":"OPERATION","operationId":"OP_591008_535787","operationName":"208车间-17号线","unitId":"EQUIP_1264","totalProduction":9.0,"capacityUsed":324000.0,"lotSize":1.0},{"type":"OPERATION","operationId":"OP_589415_532621","operationName":"208车间-15号线","unitId":"EQUIP_1262","totalProduction":1.0,"capacityUsed":36000.0,"lotSize":1.0}],"totalSalesDemand":10.0,"totalSalesFulfilled":10.0,"totalDependentDemand":0.0,"consumers":[],"summary":{"totalProduction":10.0,"totalArrived":10.0,"totalInTransit":0.0,"totalSalesDemand":10.0,"totalSalesFulfilled":10.0,"totalDependentDemand":0.0,"totalDemandFulfillment":10.0,"totalDemandSlack":0.0,"initialInventory":0.0,"finalInventory":0.0,"averageInventory":0.0,"totalBelowTarget":0.0,"totalBelowMin":0.0,"totalAboveMax":0.0},"children":[]},"cbd0dd08-d637-1544-8929-d5469d85140d@SP_FG_cbd0dd08-d637-1544-8929-d5469d85140d":{"productId":"cbd0dd08-d637-1544-8929-d5469d85140d","spId":"SP_FG_cbd0dd08-d637-1544-8929-d5469d85140d","level":0,"supplySources":[{"type":"OPERATION","operationId":"OP_589385_532561","operationName":"208车间-16号线","unitId":"EQUIP_1263","totalProduction":9.0,"capacityUsed":324000.0,"lotSize":1.0},{"type":"OPERATION","operationId":"OP_588198_527165","operationName":"103车间-34号线","unitId":"EQUIP_1247","totalProduction":1.0,"capacityUsed":36000.0,"lotSize":1.0},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.206,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.356,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.416,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.416,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.356,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.338,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.338,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.272,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.368,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.374,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.374,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.434,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.386,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.398,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.326,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.41,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.338,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.344,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.368,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.272,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.422,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.338,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":3.222,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.272,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.41,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.38,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.41,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.404,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.386,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":4.308,"capacityUsed":0.0,"lotSize":null}],"totalSalesDemand":10.0,"totalSalesFulfilled":10.0,"totalDependentDemand":0.0,"consumers":[],"summary":{"totalProduction":10.0,"totalArrived":10.0,"totalInTransit":129.64199999999997,"totalSalesDemand":10.0,"totalSalesFulfilled":10.0,"totalDependentDemand":0.0,"totalDemandFulfillment":10.0,"totalDemandSlack":0.0,"initialInventory":0.0,"finalInventory":0.0,"averageInventory":0.0,"totalBelowTarget":0.0,"totalBelowMin":0.0,"totalAboveMax":0.0},"children":[]},"cbd0dd08-e52b-7f44-8a3b-b9d57105a98c@SP_FG_cbd0dd08-e52b-7f44-8a3b-b9d57105a98c":{"productId":"cbd0dd08-e52b-7f44-8a3b-b9d57105a98c","spId":"SP_FG_cbd0dd08-e52b-7f44-8a3b-b9d57105a98c","level":0,"supplySources":[{"type":"OPERATION","operationId":"OP_588115_526808","operationName":"104车间-5号线","unitId":"EQUIP_1270","totalProduction":10.0,"capacityUsed":360000.0,"lotSize":1.0},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":0.09,"capacityUsed":0.0,"lotSize":null}],"totalSalesDemand":10.0,"totalSalesFulfilled":10.0,"totalDependentDemand":0.0,"consumers":[],"summary":{"totalProduction":10.0,"totalArrived":10.0,"totalInTransit":0.09,"totalSalesDemand":10.0,"totalSalesFulfilled":10.0,"totalDependentDemand":0.0,"totalDemandFulfillment":10.0,"totalDemandSlack":0.0,"initialInventory":0.0,"finalInventory":0.0,"averageInventory":0.0,"totalBelowTarget":0.0,"totalBelowMin":0.0,"totalAboveMax":0.0},"children":[]},"cbd0dd08-da3e-d54a-8691-7ccb7e5edeec@SP_FG_cbd0dd08-da3e-d54a-8691-7ccb7e5edeec":{"productId":"cbd0dd08-da3e-d54a-8691-7ccb7e5edeec","spId":"SP_FG_cbd0dd08-da3e-d54a-8691-7ccb7e5edeec","level":0,"supplySources":[{"type":"OPERATION","operationId":"OP_589453_532697","operationName":"208车间-18号线","unitId":"EQUIP_1265","totalProduction":10.0,"capacityUsed":360000.0,"lotSize":1.0}],"totalSalesDemand":10.0,"totalSalesFulfilled":10.0,"totalDependentDemand":0.0,"consumers":[],"summary":{"totalProduction":10.0,"totalArrived":10.0,"totalInTransit":0.0,"totalSalesDemand":10.0,"totalSalesFulfilled":10.0,"totalDependentDemand":0.0,"totalDemandFulfillment":10.0,"totalDemandSlack":0.0,"initialInventory":0.0,"finalInventory":0.0,"averageInventory":0.0,"totalBelowTarget":0.0,"totalBelowMin":0.0,"totalAboveMax":0.0},"children":[]},"cbd0dd08-7543-2847-84fd-d9b5f48a2020@SP_FG_cbd0dd08-7543-2847-84fd-d9b5f48a2020":{"productId":"cbd0dd08-7543-2847-84fd-d9b5f48a2020","spId":"SP_FG_cbd0dd08-7543-2847-84fd-d9b5f48a2020","level":0,"supplySources":[{"type":"OPERATION","operationId":"OP_589481_532753","operationName":"208车间-14号线","unitId":"EQUIP_1261","totalProduction":9.0,"capacityUsed":324000.0,"lotSize":1.0},{"type":"OPERATION","operationId":"OP_588228_527225","operationName":"103车间-36号线","unitId":"EQUIP_1249","totalProduction":1.0,"capacityUsed":36000.0,"lotSize":1.0},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":11.2,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":11.24,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":10.752,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":11.152,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":11.168,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":11.144,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":11.136,"capacityUsed":0.0,"lotSize":null},{"type":"IN_TRANSIT","operationId":null,"operationName":null,"unitId":null,"totalProduction":11.336,"capacityUsed":0.0,"lotSize":null}],"totalSalesDemand":10.0,"totalSalesFulfilled":10.0,"totalDependentDemand":0.0,"consumers":[],"summary":{"totalProduction":10.0,"totalArrived":10.0,"totalInTransit":89.128,"totalSalesDemand":10.0,"totalSalesFulfilled":10.0,"totalDependentDemand":0.0,"totalDemandFulfillment":10.0,"totalDemandSlack":0.0,"initialInventory":0.0,"finalInventory":0.0,"averageInventory":0.0,"totalBelowTarget":0.0,"totalBelowMin":0.0,"totalAboveMax":0.0},"children":[]}}},"unitCapacities":[{"unitId":"EQUIP_1263","operationIds":null,"totalMaxCapacity":576.0,"totalCapacityUsed":324000.0,"totalUtilizationRate":0.0,"totalProduction":0.0,"totalOverloaded":323904.0,"totalNotMet":0.0,"overallUtilization":562.5,"periodDetails":[{"periodIndex":0,"periodStartDate":"2026-09-28","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":1,"periodStartDate":"2026-10-05","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":2,"periodStartDate":"2026-10-12","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":3,"periodStartDate":"2026-10-19","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":4,"periodStartDate":"2026-10-26","maxCapacity":96.0,"capacityUsed":324000.0,"utilization":3375.0,"overloaded":323904.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_589385_532561","operationName":"208车间-16号线","productionQty":9.0,"capacityUsed":324000.0,"capacityCoeff":36000.0,"lotSize":1.0,"lotSizeOver":0.0,"lotSizeUnder":8.0,"outputs":["cbd0dd08-d637-1544-8929-d5469d85140d@SP_FG_cbd0dd08-d637-1544-8929-d5469d85140d"]}]},{"periodIndex":5,"periodStartDate":"2026-11-02","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]}]},{"unitId":"EQUIP_1261","operationIds":null,"totalMaxCapacity":576.0,"totalCapacityUsed":324000.0,"totalUtilizationRate":0.0,"totalProduction":0.0,"totalOverloaded":323904.0,"totalNotMet":0.0,"overallUtilization":562.5,"periodDetails":[{"periodIndex":0,"periodStartDate":"2026-09-28","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":1,"periodStartDate":"2026-10-05","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":2,"periodStartDate":"2026-10-12","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":3,"periodStartDate":"2026-10-19","maxCapacity":96.0,"capacityUsed":324000.0,"utilization":3375.0,"overloaded":323904.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_589481_532753","operationName":"208车间-14号线","productionQty":9.0,"capacityUsed":324000.0,"capacityCoeff":36000.0,"lotSize":1.0,"lotSizeOver":0.0,"lotSizeUnder":8.0,"outputs":["cbd0dd08-7543-2847-84fd-d9b5f48a2020@SP_FG_cbd0dd08-7543-2847-84fd-d9b5f48a2020"]}]},{"periodIndex":4,"periodStartDate":"2026-10-26","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":5,"periodStartDate":"2026-11-02","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]}]},{"unitId":"EQUIP_1265","operationIds":null,"totalMaxCapacity":576.0,"totalCapacityUsed":360000.0,"totalUtilizationRate":0.0,"totalProduction":0.0,"totalOverloaded":359904.0,"totalNotMet":0.0,"overallUtilization":625.0,"periodDetails":[{"periodIndex":0,"periodStartDate":"2026-09-28","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":1,"periodStartDate":"2026-10-05","maxCapacity":96.0,"capacityUsed":360000.0,"utilization":3750.0,"overloaded":359904.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_589453_532697","operationName":"208车间-18号线","productionQty":10.0,"capacityUsed":360000.0,"capacityCoeff":36000.0,"lotSize":1.0,"lotSizeOver":0.0,"lotSizeUnder":9.0,"outputs":["cbd0dd08-da3e-d54a-8691-7ccb7e5edeec@SP_FG_cbd0dd08-da3e-d54a-8691-7ccb7e5edeec"]}]},{"periodIndex":2,"periodStartDate":"2026-10-12","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":3,"periodStartDate":"2026-10-19","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":4,"periodStartDate":"2026-10-26","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":5,"periodStartDate":"2026-11-02","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]}]},{"unitId":"EQUIP_1264","operationIds":null,"totalMaxCapacity":576.0,"totalCapacityUsed":324000.0,"totalUtilizationRate":0.0,"totalProduction":0.0,"totalOverloaded":323904.0,"totalNotMet":0.0,"overallUtilization":562.5,"periodDetails":[{"periodIndex":0,"periodStartDate":"2026-09-28","maxCapacity":96.0,"capacityUsed":324000.0,"utilization":3375.0,"overloaded":323904.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_591008_535787","operationName":"208车间-17号线","productionQty":9.0,"capacityUsed":324000.0,"capacityCoeff":36000.0,"lotSize":1.0,"lotSizeOver":0.0,"lotSizeUnder":8.0,"outputs":["cbd0dd08-713a-5945-80d6-709f71323f70@SP_FG_cbd0dd08-713a-5945-80d6-709f71323f70"]}]},{"periodIndex":1,"periodStartDate":"2026-10-05","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":2,"periodStartDate":"2026-10-12","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":3,"periodStartDate":"2026-10-19","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":4,"periodStartDate":"2026-10-26","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":5,"periodStartDate":"2026-11-02","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]}]},{"unitId":"EQUIP_1262","operationIds":null,"totalMaxCapacity":576.0,"totalCapacityUsed":36000.0,"totalUtilizationRate":0.0,"totalProduction":0.0,"totalOverloaded":35904.0,"totalNotMet":0.0,"overallUtilization":62.5,"periodDetails":[{"periodIndex":0,"periodStartDate":"2026-09-28","maxCapacity":96.0,"capacityUsed":36000.0,"utilization":375.0,"overloaded":35904.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_589415_532621","operationName":"208车间-15号线","productionQty":1.0,"capacityUsed":36000.0,"capacityCoeff":36000.0,"lotSize":1.0,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["cbd0dd08-713a-5945-80d6-709f71323f70@SP_FG_cbd0dd08-713a-5945-80d6-709f71323f70"]}]},{"periodIndex":1,"periodStartDate":"2026-10-05","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":2,"periodStartDate":"2026-10-12","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":3,"periodStartDate":"2026-10-19","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":4,"periodStartDate":"2026-10-26","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":5,"periodStartDate":"2026-11-02","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]}]},{"unitId":"EQUIP_1270","operationIds":null,"totalMaxCapacity":576.0,"totalCapacityUsed":360000.0,"totalUtilizationRate":0.0,"totalProduction":0.0,"totalOverloaded":359904.0,"totalNotMet":0.0,"overallUtilization":625.0,"periodDetails":[{"periodIndex":0,"periodStartDate":"2026-09-28","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":1,"periodStartDate":"2026-10-05","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":2,"periodStartDate":"2026-10-12","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":3,"periodStartDate":"2026-10-19","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":4,"periodStartDate":"2026-10-26","maxCapacity":96.0,"capacityUsed":360000.0,"utilization":3750.0,"overloaded":359904.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_588115_526808","operationName":"104车间-5号线","productionQty":10.0,"capacityUsed":360000.0,"capacityCoeff":36000.0,"lotSize":1.0,"lotSizeOver":0.0,"lotSizeUnder":9.0,"outputs":["cbd0dd08-e52b-7f44-8a3b-b9d57105a98c@SP_FG_cbd0dd08-e52b-7f44-8a3b-b9d57105a98c"]}]},{"periodIndex":5,"periodStartDate":"2026-11-02","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]}]},{"unitId":"EQUIP_1247","operationIds":null,"totalMaxCapacity":576.0,"totalCapacityUsed":36000.0,"totalUtilizationRate":0.0,"totalProduction":0.0,"totalOverloaded":35904.0,"totalNotMet":0.0,"overallUtilization":62.5,"periodDetails":[{"periodIndex":0,"periodStartDate":"2026-09-28","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":1,"periodStartDate":"2026-10-05","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":2,"periodStartDate":"2026-10-12","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":3,"periodStartDate":"2026-10-19","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":4,"periodStartDate":"2026-10-26","maxCapacity":96.0,"capacityUsed":36000.0,"utilization":375.0,"overloaded":35904.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_588198_527165","operationName":"103车间-34号线","productionQty":1.0,"capacityUsed":36000.0,"capacityCoeff":36000.0,"lotSize":1.0,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["cbd0dd08-d637-1544-8929-d5469d85140d@SP_FG_cbd0dd08-d637-1544-8929-d5469d85140d"]}]},{"periodIndex":5,"periodStartDate":"2026-11-02","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]}]},{"unitId":"EQUIP_1249","operationIds":null,"totalMaxCapacity":576.0,"totalCapacityUsed":36000.0,"totalUtilizationRate":0.0,"totalProduction":0.0,"totalOverloaded":35904.0,"totalNotMet":0.0,"overallUtilization":62.5,"periodDetails":[{"periodIndex":0,"periodStartDate":"2026-09-28","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":1,"periodStartDate":"2026-10-05","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":2,"periodStartDate":"2026-10-12","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":3,"periodStartDate":"2026-10-19","maxCapacity":96.0,"capacityUsed":36000.0,"utilization":375.0,"overloaded":35904.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_588228_527225","operationName":"103车间-36号线","productionQty":1.0,"capacityUsed":36000.0,"capacityCoeff":36000.0,"lotSize":1.0,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["cbd0dd08-7543-2847-84fd-d9b5f48a2020@SP_FG_cbd0dd08-7543-2847-84fd-d9b5f48a2020"]}]},{"periodIndex":4,"periodStartDate":"2026-10-26","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"periodIndex":5,"periodStartDate":"2026-11-02","maxCapacity":96.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]}]}],"demandSummary":[{"productId":"cbd0dd08-713a-5945-80d6-709f71323f70","periodEntries":[{"periodIndex":0,"periodStartDate":"2026-09-28","demandQty":10.0,"fulfilledQty":10.0,"unmetQty":0.0,"fulfillmentRate":1.0}],"totalDemand":10.0,"totalFulfilled":10.0,"totalUnmet":0.0,"fulfillmentRate":1.0},{"productId":"cbd0dd08-d637-1544-8929-d5469d85140d","periodEntries":[{"periodIndex":4,"periodStartDate":"2026-10-26","demandQty":10.0,"fulfilledQty":10.0,"unmetQty":0.0,"fulfillmentRate":1.0}],"totalDemand":10.0,"totalFulfilled":10.0,"totalUnmet":0.0,"fulfillmentRate":1.0},{"productId":"cbd0dd08-da3e-d54a-8691-7ccb7e5edeec","periodEntries":[{"periodIndex":1,"periodStartDate":"2026-10-05","demandQty":10.0,"fulfilledQty":10.0,"unmetQty":0.0,"fulfillmentRate":1.0}],"totalDemand":10.0,"totalFulfilled":10.0,"totalUnmet":0.0,"fulfillmentRate":1.0},{"productId":"cbd0dd08-7543-2847-84fd-d9b5f48a2020","periodEntries":[{"periodIndex":3,"periodStartDate":"2026-10-19","demandQty":10.0,"fulfilledQty":10.0,"unmetQty":0.0,"fulfillmentRate":1.0}],"totalDemand":10.0,"totalFulfilled":10.0,"totalUnmet":0.0,"fulfillmentRate":1.0},{"productId":"cbd0dd08-e52b-7f44-8a3b-b9d57105a98c","periodEntries":[{"periodIndex":4,"periodStartDate":"2026-10-26","demandQty":10.0,"fulfilledQty":10.0,"unmetQty":0.0,"fulfillmentRate":1.0}],"totalDemand":10.0,"totalFulfilled":10.0,"totalUnmet":0.0,"fulfillmentRate":1.0}],"kpis":{"objectiveValue":0.0,"entries":[{"name":"需求缺口(Fulfillment)","rawValue":0.0,"weight":100.0,"penalty":0.0,"isBenefit":false},{"name":"批次偏差(LotSize)","rawValue":82.0,"weight":10.0,"penalty":820.0,"isBenefit":false},{"name":"超库存(MaxInventory)","rawValue":0.0,"weight":5.0,"penalty":0.0,"isBenefit":false},{"name":"欠库存(MinInventory)","rawValue":0.0,"weight":5.0,"penalty":0.0,"isBenefit":false},{"name":"目标库存偏差(TargetInv)","rawValue":0.0,"weight":8.0,"penalty":0.0,"isBenefit":false},{"name":"产能超载(UnitCapacity)","rawValue":1799232.0,"weight":3.0,"penalty":5397696.0,"isBenefit":false},{"name":"供应目标偏差(SupplyTarget)","rawValue":0.0,"weight":8.0,"penalty":0.0,"isBenefit":false},{"name":"最小供应不足(MinSupply)","rawValue":0.0,"weight":5.0,"penalty":0.0,"isBenefit":false},{"name":"最大供应超出(MaxSupply)","rawValue":0.0,"weight":5.0,"penalty":0.0,"isBenefit":false},{"name":"销售优先级(SalesPriority)","rawValue":50.0,"weight":1.0,"penalty":-50.0,"isBenefit":true},{"name":"推迟惩罚(Postponement)","rawValue":-0.0,"weight":20.0,"penalty":-0.0,"isBenefit":false},{"name":"过程最大量(ProcessMax)","rawValue":-0.0,"weight":5.0,"penalty":-0.0,"isBenefit":false}]},"statistics":{"status":"OPTIMAL","numVariables":483,"numConstraints":358,"elapsedSeconds":0.069,"objectiveValue":0.0,"bestBound":null,"gap":null,"iterations":0}}
\ No newline at end of file
{"timestamp":"2026-08-17 15:49:47","solver":"SCIP (via Google OR-Tools)","version":"1.0.0","periodTasks":[{"operationId":"OP_P1","operationName":"Make-P1","unitId":"L1","periodIndex":0,"periodStartDate":"2026-01-05","productionQty":40.0,"capacityUsed":4.0,"capacityCoeff":0.1,"lotSize":null,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":[{"productId":"P1","spId":"WH_FG","factor":1.0}]},{"operationId":"OP_P1","operationName":"Make-P1","unitId":"L1","periodIndex":1,"periodStartDate":"2026-01-06","productionQty":66.66666666666666,"capacityUsed":6.666666666666666,"capacityCoeff":0.1,"lotSize":null,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":[{"productId":"P1","spId":"WH_FG","factor":1.0}]},{"operationId":"OP_P1","operationName":"Make-P1","unitId":"L1","periodIndex":2,"periodStartDate":"2026-01-07","productionQty":50.0,"capacityUsed":5.0,"capacityCoeff":0.1,"lotSize":null,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":[{"productId":"P1","spId":"WH_FG","factor":1.0}]},{"operationId":"OP_P2","operationName":"Make-P2","unitId":"L1","periodIndex":1,"periodStartDate":"2026-01-06","productionQty":26.666666666666664,"capacityUsed":3.333333333333333,"capacityCoeff":0.125,"lotSize":null,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":[{"productId":"P2","spId":"WH_FG","factor":1.0}]},{"operationId":"OP_P2","operationName":"Make-P2","unitId":"L3","periodIndex":0,"periodStartDate":"2026-01-05","productionQty":20.0,"capacityUsed":3.3400000000000003,"capacityCoeff":0.167,"lotSize":null,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":[{"productId":"P2","spId":"WH_FG","factor":1.0}]},{"operationId":"OP_P2","operationName":"Make-P2","unitId":"L3","periodIndex":1,"periodStartDate":"2026-01-06","productionQty":16.333333333333336,"capacityUsed":2.7276666666666673,"capacityCoeff":0.167,"lotSize":null,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":[{"productId":"P2","spId":"WH_FG","factor":1.0}]},{"operationId":"OP_P2","operationName":"Make-P2","unitId":"L3","periodIndex":2,"periodStartDate":"2026-01-07","productionQty":59.88023952095808,"capacityUsed":10.0,"capacityCoeff":0.167,"lotSize":null,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":[{"productId":"P2","spId":"WH_FG","factor":1.0}]},{"operationId":"OP_S1","operationName":"Make-S1","unitId":"L2","periodIndex":0,"periodStartDate":"2026-01-05","productionQty":50.0,"capacityUsed":1.6650000000000003,"capacityCoeff":0.0333,"lotSize":null,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":[{"productId":"S1","spId":"WH_Semi","factor":1.0}]},{"operationId":"OP_S1","operationName":"Make-S1","unitId":"L2","periodIndex":1,"periodStartDate":"2026-01-06","productionQty":203.07553642714572,"capacityUsed":6.762415363023953,"capacityCoeff":0.0333,"lotSize":null,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":[{"productId":"S1","spId":"WH_Semi","factor":1.0}]},{"operationId":"OP_S1","operationName":"Make-S1","unitId":"L2","periodIndex":2,"periodStartDate":"2026-01-07","productionQty":143.13803642714566,"capacityUsed":4.766496613023951,"capacityCoeff":0.0333,"lotSize":null,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":[{"productId":"S1","spId":"WH_Semi","factor":1.0}]},{"operationId":"OP_R1","operationName":"Procure-R1","unitId":"SuA","periodIndex":0,"periodStartDate":"2026-01-05","productionQty":200.0,"capacityUsed":24.0,"capacityCoeff":0.12,"lotSize":200.0,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":[{"productId":"R1","spId":"WH_RM","factor":1.0}]},{"operationId":"OP_R1","operationName":"Procure-R1","unitId":"SuA","periodIndex":2,"periodStartDate":"2026-01-07","productionQty":200.0,"capacityUsed":24.0,"capacityCoeff":0.12,"lotSize":200.0,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":[{"productId":"R1","spId":"WH_RM","factor":1.0}]},{"operationId":"OP_R1_Alt","operationName":"Procure-R1-Alt","unitId":"SuB","periodIndex":0,"periodStartDate":"2026-01-05","productionQty":150.0,"capacityUsed":36.0,"capacityCoeff":0.24,"lotSize":150.0,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":[{"productId":"R1","spId":"WH_RM","factor":1.0}]},{"operationId":"OP_R1_Alt","operationName":"Procure-R1-Alt","unitId":"SuB","periodIndex":1,"periodStartDate":"2026-01-06","productionQty":150.0,"capacityUsed":36.0,"capacityCoeff":0.24,"lotSize":150.0,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":[{"productId":"R1","spId":"WH_RM","factor":1.0}]},{"operationId":"OP_R1_Alt","operationName":"Procure-R1-Alt","unitId":"SuB","periodIndex":2,"periodStartDate":"2026-01-07","productionQty":150.0,"capacityUsed":36.0,"capacityCoeff":0.24,"lotSize":150.0,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":[{"productId":"R1","spId":"WH_RM","factor":1.0}]},{"operationId":"OP_R2","operationName":"Procure-R2","unitId":"Su1","periodIndex":0,"periodStartDate":"2026-01-05","productionQty":446.15107285429144,"capacityUsed":71.38417165668663,"capacityCoeff":0.16,"lotSize":200.0,"lotSizeOver":0.0,"lotSizeUnder":246.15107285429144,"outputs":[{"productId":"R2","spId":"WH_RM","factor":1.0}]},{"operationId":"OP_R2","operationName":"Procure-R2","unitId":"Su1","periodIndex":1,"periodStartDate":"2026-01-06","productionQty":266.27607285429133,"capacityUsed":42.60417165668661,"capacityCoeff":0.16,"lotSize":200.0,"lotSizeOver":0.0,"lotSizeUnder":66.27607285429133,"outputs":[{"productId":"R2","spId":"WH_RM","factor":1.0}]},{"operationId":"OP_R2","operationName":"Procure-R2","unitId":"Su1","periodIndex":2,"periodStartDate":"2026-01-07","productionQty":200.0,"capacityUsed":32.0,"capacityCoeff":0.16,"lotSize":200.0,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":[{"productId":"R2","spId":"WH_RM","factor":1.0}]},{"operationId":"OP_R2_Alt","operationName":"Procure-R2-Alt","unitId":"Su2","periodIndex":0,"periodStartDate":"2026-01-05","productionQty":150.0,"capacityUsed":45.0,"capacityCoeff":0.3,"lotSize":150.0,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":[{"productId":"R2","spId":"WH_RM","factor":1.0}]},{"operationId":"OP_R2_Alt","operationName":"Procure-R2-Alt","unitId":"Su2","periodIndex":1,"periodStartDate":"2026-01-06","productionQty":150.0,"capacityUsed":45.0,"capacityCoeff":0.3,"lotSize":150.0,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":[{"productId":"R2","spId":"WH_RM","factor":1.0}]},{"operationId":"OP_R2_Alt","operationName":"Procure-R2-Alt","unitId":"Su2","periodIndex":2,"periodStartDate":"2026-01-07","productionQty":150.0,"capacityUsed":45.0,"capacityCoeff":0.3,"lotSize":150.0,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":[{"productId":"R2","spId":"WH_RM","factor":1.0}]}],"salesDemands":[{"salesDemandId":"P1_WH_FG_0","productId":"P1","spId":"WH_FG","periodIndex":0,"periodStartDate":"2026-01-05","demandQty":450.0,"fulfilledQty":255.0,"unmetQty":195.0,"demandSlack":195.0,"fulfillmentRate":0.5666666666666667,"priority":1.0,"unmetReasons":["库存耗尽(可用60件, 需求450件)"],"risks":[{"level":"高","description":"安全库存被消耗(期末0件 < 最小5件)"},{"level":"低","description":"原材料提前期长(R1采购需2天)"}]},{"salesDemandId":"P1_WH_FG_1","productId":"P1","spId":"WH_FG","periodIndex":1,"periodStartDate":"2026-01-06","demandQty":60.0,"fulfilledQty":60.0,"unmetQty":0.0,"demandSlack":0.0,"fulfillmentRate":1.0,"priority":1.0,"unmetReasons":[],"risks":[{"level":"高","description":"产线高负荷(L1利用率100%)"},{"level":"低","description":"原材料提前期长(R1采购需2天)"}]},{"salesDemandId":"P1_WH_FG_2","productId":"P1","spId":"WH_FG","periodIndex":2,"periodStartDate":"2026-01-07","demandQty":40.0,"fulfilledQty":40.0,"unmetQty":0.0,"demandSlack":0.0,"fulfillmentRate":1.0,"priority":1.0,"unmetReasons":[],"risks":[{"level":"高","description":"产线高负荷(L3利用率100%)"},{"level":"低","description":"原材料提前期长(R1采购需2天)"}]},{"salesDemandId":"P2_WH_FG_0","productId":"P2","spId":"WH_FG","periodIndex":0,"periodStartDate":"2026-01-05","demandQty":30.0,"fulfilledQty":30.0,"unmetQty":0.0,"demandSlack":0.0,"fulfillmentRate":1.0,"priority":1.0,"unmetReasons":[],"risks":[{"level":"高","description":"安全库存被消耗(期末0件 < 最小3件)"}]},{"salesDemandId":"P2_WH_FG_1","productId":"P2","spId":"WH_FG","periodIndex":1,"periodStartDate":"2026-01-06","demandQty":40.0,"fulfilledQty":40.0,"unmetQty":0.0,"demandSlack":0.0,"fulfillmentRate":1.0,"priority":1.0,"unmetReasons":[],"risks":[{"level":"高","description":"产线高负荷(L1利用率100%)"}]},{"salesDemandId":"P2_WH_FG_2","productId":"P2","spId":"WH_FG","periodIndex":2,"periodStartDate":"2026-01-07","demandQty":50.0,"fulfilledQty":50.0,"unmetQty":0.0,"demandSlack":0.0,"fulfillmentRate":1.0,"priority":1.0,"unmetReasons":[],"risks":[{"level":"高","description":"产线高负荷(L3利用率100%)"}]}],"pispips":[{"productId":"P1","spId":"WH_FG","periodIndex":0,"periodStartDate":"2026-01-05","openingInventory":20.0,"endingInventory":0.0,"targetInventoryLevel":20.0,"targetInventoryDays":null,"belowTarget":20.0,"minInventoryLevel":5.0,"minInventoryDays":null,"belowMin":5.0,"maxInventoryLevel":150.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":40.0,"inTransitArrival":0.0,"totalInflow":40.0,"salesDemandQty":450.0,"salesFulfilledQty":255.0,"dependentDemandQty":0.0,"totalOutflow":255.0,"demandFulfillment":255.0,"demandSlack":195.0,"productionInProgress":40.0,"productionDetails":[{"operationId":"OP_P1","operationName":"Make-P1","unitId":"L1","quantity":40.0,"leadTimeDays":0,"bomConsumptions":[{"inputProductId":"S1","inputSpId":"WH_Semi","factor":2.0,"consumedQty":80.0},{"inputProductId":"R1","inputSpId":"WH_RM","factor":3.0,"consumedQty":120.0}]}]},{"productId":"P1","spId":"WH_FG","periodIndex":1,"periodStartDate":"2026-01-06","openingInventory":0.0,"endingInventory":6.666666666666657,"targetInventoryLevel":20.0,"targetInventoryDays":null,"belowTarget":13.333333333333343,"minInventoryLevel":5.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":150.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":66.66666666666666,"inTransitArrival":0.0,"totalInflow":66.66666666666666,"salesDemandQty":60.0,"salesFulfilledQty":60.0,"dependentDemandQty":0.0,"totalOutflow":60.0,"demandFulfillment":60.0,"demandSlack":0.0,"productionInProgress":66.66666666666666,"productionDetails":[{"operationId":"OP_P1","operationName":"Make-P1","unitId":"L1","quantity":66.66666666666666,"leadTimeDays":0,"bomConsumptions":[{"inputProductId":"S1","inputSpId":"WH_Semi","factor":2.0,"consumedQty":133.33333333333331},{"inputProductId":"R1","inputSpId":"WH_RM","factor":3.0,"consumedQty":199.99999999999997}]}]},{"productId":"P1","spId":"WH_FG","periodIndex":2,"periodStartDate":"2026-01-07","openingInventory":6.666666666666657,"endingInventory":16.666666666666657,"targetInventoryLevel":20.0,"targetInventoryDays":null,"belowTarget":3.333333333333343,"minInventoryLevel":5.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":150.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":50.0,"inTransitArrival":0.0,"totalInflow":50.0,"salesDemandQty":40.0,"salesFulfilledQty":40.0,"dependentDemandQty":0.0,"totalOutflow":40.0,"demandFulfillment":40.0,"demandSlack":0.0,"productionInProgress":50.0,"productionDetails":[{"operationId":"OP_P1","operationName":"Make-P1","unitId":"L1","quantity":50.0,"leadTimeDays":0,"bomConsumptions":[{"inputProductId":"S1","inputSpId":"WH_Semi","factor":2.0,"consumedQty":100.0},{"inputProductId":"R1","inputSpId":"WH_RM","factor":3.0,"consumedQty":150.0}]}]},{"productId":"P2","spId":"WH_FG","periodIndex":0,"periodStartDate":"2026-01-05","openingInventory":10.0,"endingInventory":0.0,"targetInventoryLevel":15.0,"targetInventoryDays":null,"belowTarget":15.0,"minInventoryLevel":3.0,"minInventoryDays":null,"belowMin":3.0,"maxInventoryLevel":120.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":20.0,"inTransitArrival":0.0,"totalInflow":20.0,"salesDemandQty":30.0,"salesFulfilledQty":30.0,"dependentDemandQty":0.0,"totalOutflow":30.0,"demandFulfillment":30.0,"demandSlack":0.0,"productionInProgress":20.0,"productionDetails":[{"operationId":"OP_P2","operationName":"Make-P2","unitId":"L3","quantity":20.0,"leadTimeDays":0,"bomConsumptions":[{"inputProductId":"S1","inputSpId":"WH_Semi","factor":1.0,"consumedQty":20.0}]}]},{"productId":"P2","spId":"WH_FG","periodIndex":1,"periodStartDate":"2026-01-06","openingInventory":0.0,"endingInventory":3.0,"targetInventoryLevel":15.0,"targetInventoryDays":null,"belowTarget":12.0,"minInventoryLevel":3.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":120.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":43.0,"inTransitArrival":0.0,"totalInflow":43.0,"salesDemandQty":40.0,"salesFulfilledQty":40.0,"dependentDemandQty":0.0,"totalOutflow":40.0,"demandFulfillment":40.0,"demandSlack":0.0,"productionInProgress":43.0,"productionDetails":[{"operationId":"OP_P2","operationName":"Make-P2","unitId":"L1","quantity":26.666666666666664,"leadTimeDays":0,"bomConsumptions":[{"inputProductId":"S1","inputSpId":"WH_Semi","factor":1.0,"consumedQty":43.0}]},{"operationId":"OP_P2","operationName":"Make-P2","unitId":"L3","quantity":16.333333333333336,"leadTimeDays":0,"bomConsumptions":[{"inputProductId":"S1","inputSpId":"WH_Semi","factor":1.0,"consumedQty":43.0}]}]},{"productId":"P2","spId":"WH_FG","periodIndex":2,"periodStartDate":"2026-01-07","openingInventory":3.0,"endingInventory":12.880239520958078,"targetInventoryLevel":15.0,"targetInventoryDays":null,"belowTarget":2.119760479041922,"minInventoryLevel":3.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":120.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":59.88023952095808,"inTransitArrival":0.0,"totalInflow":59.88023952095808,"salesDemandQty":50.0,"salesFulfilledQty":50.0,"dependentDemandQty":0.0,"totalOutflow":50.0,"demandFulfillment":50.0,"demandSlack":0.0,"productionInProgress":59.88023952095808,"productionDetails":[{"operationId":"OP_P2","operationName":"Make-P2","unitId":"L3","quantity":59.88023952095808,"leadTimeDays":0,"bomConsumptions":[{"inputProductId":"S1","inputSpId":"WH_Semi","factor":1.0,"consumedQty":59.88023952095808}]}]},{"productId":"S1","spId":"WH_Semi","periodIndex":0,"periodStartDate":"2026-01-05","openingInventory":50.0,"endingInventory":0.0,"targetInventoryLevel":30.0,"targetInventoryDays":null,"belowTarget":30.0,"minInventoryLevel":10.0,"minInventoryDays":null,"belowMin":10.0,"maxInventoryLevel":200.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":50.0,"inTransitArrival":0.0,"totalInflow":50.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":100.0,"totalOutflow":100.0,"demandFulfillment":100.0,"demandSlack":0.0,"productionInProgress":50.0,"productionDetails":[{"operationId":"OP_S1","operationName":"Make-S1","unitId":"L2","quantity":50.0,"leadTimeDays":0,"bomConsumptions":[{"inputProductId":"R2","inputSpId":"WH_RM","factor":2.0,"consumedQty":100.0}]}]},{"productId":"S1","spId":"WH_Semi","periodIndex":1,"periodStartDate":"2026-01-06","openingInventory":0.0,"endingInventory":26.742203093812407,"targetInventoryLevel":30.0,"targetInventoryDays":null,"belowTarget":3.2577969061875938,"minInventoryLevel":10.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":200.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":203.07553642714572,"inTransitArrival":0.0,"totalInflow":203.07553642714572,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":176.33333333333331,"totalOutflow":176.33333333333331,"demandFulfillment":176.33333333333331,"demandSlack":0.0,"productionInProgress":203.07553642714572,"productionDetails":[{"operationId":"OP_S1","operationName":"Make-S1","unitId":"L2","quantity":203.07553642714572,"leadTimeDays":0,"bomConsumptions":[{"inputProductId":"R2","inputSpId":"WH_RM","factor":2.0,"consumedQty":406.15107285429144}]}]},{"productId":"S1","spId":"WH_Semi","periodIndex":2,"periodStartDate":"2026-01-07","openingInventory":26.742203093812407,"endingInventory":10.0,"targetInventoryLevel":30.0,"targetInventoryDays":null,"belowTarget":20.0,"minInventoryLevel":10.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":200.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":143.13803642714566,"inTransitArrival":0.0,"totalInflow":143.13803642714566,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":159.88023952095807,"totalOutflow":159.88023952095807,"demandFulfillment":159.88023952095807,"demandSlack":0.0,"productionInProgress":143.13803642714566,"productionDetails":[{"operationId":"OP_S1","operationName":"Make-S1","unitId":"L2","quantity":143.13803642714566,"leadTimeDays":0,"bomConsumptions":[{"inputProductId":"R2","inputSpId":"WH_RM","factor":2.0,"consumedQty":286.27607285429133}]}]},{"productId":"R1","spId":"WH_RM","periodIndex":0,"periodStartDate":"2026-01-05","openingInventory":200.0,"endingInventory":80.0,"targetInventoryLevel":80.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":50.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":500.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":120.0,"totalOutflow":120.0,"demandFulfillment":120.0,"demandSlack":0.0,"productionInProgress":350.0,"productionDetails":[{"operationId":"OP_R1","operationName":"Procure-R1","unitId":"SuA","quantity":200.0,"leadTimeDays":1,"bomConsumptions":[]},{"operationId":"OP_R1_Alt","operationName":"Procure-R1-Alt","unitId":"SuB","quantity":150.0,"leadTimeDays":2,"bomConsumptions":[]}]},{"productId":"R1","spId":"WH_RM","periodIndex":1,"periodStartDate":"2026-01-06","openingInventory":80.0,"endingInventory":80.0,"targetInventoryLevel":80.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":50.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":500.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":200.0,"inTransitArrival":0.0,"totalInflow":200.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":199.99999999999997,"totalOutflow":199.99999999999997,"demandFulfillment":199.99999999999997,"demandSlack":0.0,"productionInProgress":150.0,"productionDetails":[{"operationId":"OP_R1_Alt","operationName":"Procure-R1-Alt","unitId":"SuB","quantity":150.0,"leadTimeDays":2,"bomConsumptions":[]}]},{"productId":"R1","spId":"WH_RM","periodIndex":2,"periodStartDate":"2026-01-07","openingInventory":80.0,"endingInventory":80.0,"targetInventoryLevel":80.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":50.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":500.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":150.0,"inTransitArrival":0.0,"totalInflow":150.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":150.0,"totalOutflow":150.0,"demandFulfillment":150.0,"demandSlack":0.0,"productionInProgress":350.0,"productionDetails":[{"operationId":"OP_R1","operationName":"Procure-R1","unitId":"SuA","quantity":200.0,"leadTimeDays":1,"bomConsumptions":[]},{"operationId":"OP_R1_Alt","operationName":"Procure-R1-Alt","unitId":"SuB","quantity":150.0,"leadTimeDays":2,"bomConsumptions":[]}]},{"productId":"R2","spId":"WH_RM","periodIndex":0,"periodStartDate":"2026-01-05","openingInventory":100.0,"endingInventory":0.0,"targetInventoryLevel":40.0,"targetInventoryDays":null,"belowTarget":40.0,"minInventoryLevel":20.0,"minInventoryDays":null,"belowMin":20.0,"maxInventoryLevel":400.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":0.0,"inTransitArrival":0.0,"totalInflow":0.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":100.0,"totalOutflow":100.0,"demandFulfillment":100.0,"demandSlack":0.0,"productionInProgress":596.1510728542914,"productionDetails":[{"operationId":"OP_R2","operationName":"Procure-R2","unitId":"Su1","quantity":446.15107285429144,"leadTimeDays":1,"bomConsumptions":[]},{"operationId":"OP_R2_Alt","operationName":"Procure-R2-Alt","unitId":"Su2","quantity":150.0,"leadTimeDays":3,"bomConsumptions":[]}]},{"productId":"R2","spId":"WH_RM","periodIndex":1,"periodStartDate":"2026-01-06","openingInventory":0.0,"endingInventory":40.0,"targetInventoryLevel":40.0,"targetInventoryDays":null,"belowTarget":0.0,"minInventoryLevel":20.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":400.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":446.15107285429144,"inTransitArrival":0.0,"totalInflow":446.15107285429144,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":406.15107285429144,"totalOutflow":406.15107285429144,"demandFulfillment":406.15107285429144,"demandSlack":0.0,"productionInProgress":416.27607285429133,"productionDetails":[{"operationId":"OP_R2","operationName":"Procure-R2","unitId":"Su1","quantity":266.27607285429133,"leadTimeDays":1,"bomConsumptions":[]},{"operationId":"OP_R2_Alt","operationName":"Procure-R2-Alt","unitId":"Su2","quantity":150.0,"leadTimeDays":3,"bomConsumptions":[]}]},{"productId":"R2","spId":"WH_RM","periodIndex":2,"periodStartDate":"2026-01-07","openingInventory":40.0,"endingInventory":20.0,"targetInventoryLevel":40.0,"targetInventoryDays":null,"belowTarget":20.0,"minInventoryLevel":20.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":400.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":266.27607285429133,"inTransitArrival":0.0,"totalInflow":266.27607285429133,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":286.27607285429133,"totalOutflow":286.27607285429133,"demandFulfillment":286.27607285429133,"demandSlack":0.0,"productionInProgress":350.0,"productionDetails":[{"operationId":"OP_R2","operationName":"Procure-R2","unitId":"Su1","quantity":200.0,"leadTimeDays":1,"bomConsumptions":[]},{"operationId":"OP_R2_Alt","operationName":"Procure-R2-Alt","unitId":"Su2","quantity":150.0,"leadTimeDays":3,"bomConsumptions":[]}]}],"productNetwork":{"finishedGoods":[{"productId":"P1","spId":"WH_FG","level":0,"supplySources":[{"type":"OPERATION","operationId":"OP_P1","operationName":"Make-P1","unitId":"L1","totalProduction":156.66666666666666,"capacityUsed":15.666666666666666,"lotSize":null}],"totalSalesDemand":550.0,"totalSalesFulfilled":355.0,"totalDependentDemand":0.0,"consumers":[],"summary":{"totalProduction":156.66666666666666,"totalArrived":156.66666666666666,"totalInTransit":0.0,"totalSalesDemand":550.0,"totalSalesFulfilled":355.0,"totalDependentDemand":0.0,"totalDemandFulfillment":355.0,"totalDemandSlack":195.0,"initialInventory":20.0,"finalInventory":16.666666666666657,"averageInventory":7.7777777777777715,"totalBelowTarget":36.666666666666686,"totalBelowMin":5.0,"totalAboveMax":0.0},"children":[{"productId":"S1","spId":"WH_Semi","totalFactor":2.0,"totalConsumedQty":313.3333333333333},{"productId":"R1","spId":"WH_RM","totalFactor":3.0,"totalConsumedQty":470.0}]},{"productId":"P2","spId":"WH_FG","level":0,"supplySources":[{"type":"OPERATION","operationId":"OP_P2","operationName":"Make-P2","unitId":"L1","totalProduction":122.88023952095807,"capacityUsed":19.401000000000003,"lotSize":null}],"totalSalesDemand":120.0,"totalSalesFulfilled":120.0,"totalDependentDemand":0.0,"consumers":[],"summary":{"totalProduction":122.88023952095807,"totalArrived":122.88023952095807,"totalInTransit":0.0,"totalSalesDemand":120.0,"totalSalesFulfilled":120.0,"totalDependentDemand":0.0,"totalDemandFulfillment":120.0,"totalDemandSlack":0.0,"initialInventory":10.0,"finalInventory":12.880239520958078,"averageInventory":5.293413173652692,"totalBelowTarget":29.119760479041922,"totalBelowMin":3.0,"totalAboveMax":0.0},"children":[{"productId":"S1","spId":"WH_Semi","totalFactor":1.0,"totalConsumedQty":122.88023952095807}]}],"allNodes":{"P1@WH_FG":{"productId":"P1","spId":"WH_FG","level":0,"supplySources":[{"type":"OPERATION","operationId":"OP_P1","operationName":"Make-P1","unitId":"L1","totalProduction":156.66666666666666,"capacityUsed":15.666666666666666,"lotSize":null}],"totalSalesDemand":550.0,"totalSalesFulfilled":355.0,"totalDependentDemand":0.0,"consumers":[],"summary":{"totalProduction":156.66666666666666,"totalArrived":156.66666666666666,"totalInTransit":0.0,"totalSalesDemand":550.0,"totalSalesFulfilled":355.0,"totalDependentDemand":0.0,"totalDemandFulfillment":355.0,"totalDemandSlack":195.0,"initialInventory":20.0,"finalInventory":16.666666666666657,"averageInventory":7.7777777777777715,"totalBelowTarget":36.666666666666686,"totalBelowMin":5.0,"totalAboveMax":0.0},"children":[{"productId":"S1","spId":"WH_Semi","totalFactor":2.0,"totalConsumedQty":313.3333333333333},{"productId":"R1","spId":"WH_RM","totalFactor":3.0,"totalConsumedQty":470.0}]},"S1@WH_Semi":{"productId":"S1","spId":"WH_Semi","level":1,"supplySources":[{"type":"OPERATION","operationId":"OP_S1","operationName":"Make-S1","unitId":"L2","totalProduction":396.2135728542914,"capacityUsed":13.193911976047904,"lotSize":null}],"totalSalesDemand":0.0,"totalSalesFulfilled":0.0,"totalDependentDemand":436.2135728542914,"consumers":[{"consumerProductId":"P1","consumerSpId":"WH_FG","operationId":"OP_P1","operationName":"Make-P1","factor":2.0,"totalConsumed":313.3333333333333},{"consumerProductId":"P2","consumerSpId":"WH_FG","operationId":"OP_P2","operationName":"Make-P2","factor":1.0,"totalConsumed":122.88023952095807}],"summary":{"totalProduction":396.2135728542914,"totalArrived":396.2135728542914,"totalInTransit":0.0,"totalSalesDemand":0.0,"totalSalesFulfilled":0.0,"totalDependentDemand":436.2135728542914,"totalDemandFulfillment":436.2135728542914,"totalDemandSlack":0.0,"initialInventory":50.0,"finalInventory":10.0,"averageInventory":12.247401031270803,"totalBelowTarget":53.25779690618759,"totalBelowMin":10.0,"totalAboveMax":0.0},"children":[{"productId":"R2","spId":"WH_RM","totalFactor":2.0,"totalConsumedQty":792.4271457085828}]},"R2@WH_RM":{"productId":"R2","spId":"WH_RM","level":2,"supplySources":[{"type":"OPERATION","operationId":"OP_R2","operationName":"Procure-R2","unitId":"Su1","totalProduction":912.4271457085828,"capacityUsed":145.98834331337324,"lotSize":200.0},{"type":"OPERATION","operationId":"OP_R2_Alt","operationName":"Procure-R2-Alt","unitId":"Su2","totalProduction":450.0,"capacityUsed":135.0,"lotSize":150.0}],"totalSalesDemand":0.0,"totalSalesFulfilled":0.0,"totalDependentDemand":792.4271457085828,"consumers":[{"consumerProductId":"S1","consumerSpId":"WH_Semi","operationId":"OP_S1","operationName":"Make-S1","factor":2.0,"totalConsumed":792.4271457085828}],"summary":{"totalProduction":1362.4271457085829,"totalArrived":712.4271457085828,"totalInTransit":0.0,"totalSalesDemand":0.0,"totalSalesFulfilled":0.0,"totalDependentDemand":792.4271457085828,"totalDemandFulfillment":792.4271457085828,"totalDemandSlack":0.0,"initialInventory":100.0,"finalInventory":20.0,"averageInventory":20.0,"totalBelowTarget":60.0,"totalBelowMin":20.0,"totalAboveMax":0.0},"children":[]},"R1@WH_RM":{"productId":"R1","spId":"WH_RM","level":1,"supplySources":[{"type":"OPERATION","operationId":"OP_R1","operationName":"Procure-R1","unitId":"SuA","totalProduction":400.0,"capacityUsed":48.0,"lotSize":200.0},{"type":"OPERATION","operationId":"OP_R1_Alt","operationName":"Procure-R1-Alt","unitId":"SuB","totalProduction":450.0,"capacityUsed":108.0,"lotSize":150.0}],"totalSalesDemand":0.0,"totalSalesFulfilled":0.0,"totalDependentDemand":470.0,"consumers":[{"consumerProductId":"P1","consumerSpId":"WH_FG","operationId":"OP_P1","operationName":"Make-P1","factor":3.0,"totalConsumed":470.0}],"summary":{"totalProduction":850.0,"totalArrived":350.0,"totalInTransit":0.0,"totalSalesDemand":0.0,"totalSalesFulfilled":0.0,"totalDependentDemand":470.0,"totalDemandFulfillment":470.0,"totalDemandSlack":0.0,"initialInventory":200.0,"finalInventory":80.0,"averageInventory":80.0,"totalBelowTarget":0.0,"totalBelowMin":0.0,"totalAboveMax":0.0},"children":[]},"P2@WH_FG":{"productId":"P2","spId":"WH_FG","level":0,"supplySources":[{"type":"OPERATION","operationId":"OP_P2","operationName":"Make-P2","unitId":"L1","totalProduction":122.88023952095807,"capacityUsed":19.401000000000003,"lotSize":null}],"totalSalesDemand":120.0,"totalSalesFulfilled":120.0,"totalDependentDemand":0.0,"consumers":[],"summary":{"totalProduction":122.88023952095807,"totalArrived":122.88023952095807,"totalInTransit":0.0,"totalSalesDemand":120.0,"totalSalesFulfilled":120.0,"totalDependentDemand":0.0,"totalDemandFulfillment":120.0,"totalDemandSlack":0.0,"initialInventory":10.0,"finalInventory":12.880239520958078,"averageInventory":5.293413173652692,"totalBelowTarget":29.119760479041922,"totalBelowMin":3.0,"totalAboveMax":0.0},"children":[{"productId":"S1","spId":"WH_Semi","totalFactor":1.0,"totalConsumedQty":122.88023952095807}]}}},"unitCapacities":[{"unitId":"L1","operationIds":null,"totalMaxCapacity":30.0,"totalCapacityUsed":19.0,"totalUtilizationRate":0.0,"totalProduction":0.0,"totalOverloaded":0.0,"totalNotMet":0.0,"overallUtilization":0.6333333333333333,"periodDetails":[{"periodIndex":0,"periodStartDate":"2026-01-05","maxCapacity":10.0,"capacityUsed":4.0,"utilization":0.4,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_P1","operationName":"Make-P1","productionQty":40.0,"capacityUsed":4.0,"capacityCoeff":0.1,"lotSize":null,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["P1@WH_FG"]}]},{"periodIndex":1,"periodStartDate":"2026-01-06","maxCapacity":10.0,"capacityUsed":10.0,"utilization":1.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_P1","operationName":"Make-P1","productionQty":66.66666666666666,"capacityUsed":6.666666666666666,"capacityCoeff":0.1,"lotSize":null,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["P1@WH_FG"]},{"operationId":"OP_P2","operationName":"Make-P2","productionQty":26.666666666666664,"capacityUsed":3.333333333333333,"capacityCoeff":0.125,"lotSize":null,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["P2@WH_FG"]}]},{"periodIndex":2,"periodStartDate":"2026-01-07","maxCapacity":10.0,"capacityUsed":5.0,"utilization":0.5,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_P1","operationName":"Make-P1","productionQty":50.0,"capacityUsed":5.0,"capacityCoeff":0.1,"lotSize":null,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["P1@WH_FG"]}]}]},{"unitId":"L2","operationIds":null,"totalMaxCapacity":30.0,"totalCapacityUsed":13.193911976047904,"totalUtilizationRate":0.0,"totalProduction":0.0,"totalOverloaded":0.0,"totalNotMet":0.0,"overallUtilization":0.43979706586826345,"periodDetails":[{"periodIndex":0,"periodStartDate":"2026-01-05","maxCapacity":10.0,"capacityUsed":1.6650000000000003,"utilization":0.16650000000000004,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_S1","operationName":"Make-S1","productionQty":50.0,"capacityUsed":1.6650000000000003,"capacityCoeff":0.0333,"lotSize":null,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["S1@WH_Semi"]}]},{"periodIndex":1,"periodStartDate":"2026-01-06","maxCapacity":10.0,"capacityUsed":6.762415363023953,"utilization":0.6762415363023953,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_S1","operationName":"Make-S1","productionQty":203.07553642714572,"capacityUsed":6.762415363023953,"capacityCoeff":0.0333,"lotSize":null,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["S1@WH_Semi"]}]},{"periodIndex":2,"periodStartDate":"2026-01-07","maxCapacity":10.0,"capacityUsed":4.766496613023951,"utilization":0.47664966130239506,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_S1","operationName":"Make-S1","productionQty":143.13803642714566,"capacityUsed":4.766496613023951,"capacityCoeff":0.0333,"lotSize":null,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["S1@WH_Semi"]}]}]},{"unitId":"L3","operationIds":null,"totalMaxCapacity":30.0,"totalCapacityUsed":16.067666666666668,"totalUtilizationRate":0.0,"totalProduction":0.0,"totalOverloaded":0.0,"totalNotMet":0.0,"overallUtilization":0.5355888888888889,"periodDetails":[{"periodIndex":0,"periodStartDate":"2026-01-05","maxCapacity":10.0,"capacityUsed":3.3400000000000003,"utilization":0.334,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_P2","operationName":"Make-P2","productionQty":20.0,"capacityUsed":3.3400000000000003,"capacityCoeff":0.167,"lotSize":null,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["P2@WH_FG"]}]},{"periodIndex":1,"periodStartDate":"2026-01-06","maxCapacity":10.0,"capacityUsed":2.7276666666666673,"utilization":0.2727666666666667,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_P2","operationName":"Make-P2","productionQty":16.333333333333336,"capacityUsed":2.7276666666666673,"capacityCoeff":0.167,"lotSize":null,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["P2@WH_FG"]}]},{"periodIndex":2,"periodStartDate":"2026-01-07","maxCapacity":10.0,"capacityUsed":10.0,"utilization":1.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_P2","operationName":"Make-P2","productionQty":59.88023952095808,"capacityUsed":10.0,"capacityCoeff":0.167,"lotSize":null,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["P2@WH_FG"]}]}]},{"unitId":"SuA","operationIds":null,"totalMaxCapacity":0.0,"totalCapacityUsed":48.0,"totalUtilizationRate":0.0,"totalProduction":0.0,"totalOverloaded":0.0,"totalNotMet":0.0,"overallUtilization":0.0,"periodDetails":[{"periodIndex":0,"periodStartDate":"2026-01-05","maxCapacity":-1.0,"capacityUsed":24.0,"utilization":-1.0,"overloaded":0.0,"notMet":0.0,"production":0.0,"tasks":[{"operationId":"OP_R1","operationName":"Procure-R1","productionQty":200.0,"capacityUsed":24.0,"capacityCoeff":0.12,"lotSize":200.0,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["R1@WH_RM"]}]},{"periodIndex":1,"periodStartDate":"2026-01-06","maxCapacity":-1.0,"capacityUsed":0.0,"utilization":-1.0,"overloaded":0.0,"notMet":0.0,"production":0.0,"tasks":[]},{"periodIndex":2,"periodStartDate":"2026-01-07","maxCapacity":-1.0,"capacityUsed":24.0,"utilization":-1.0,"overloaded":0.0,"notMet":0.0,"production":0.0,"tasks":[{"operationId":"OP_R1","operationName":"Procure-R1","productionQty":200.0,"capacityUsed":24.0,"capacityCoeff":0.12,"lotSize":200.0,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["R1@WH_RM"]}]}]},{"unitId":"SuB","operationIds":null,"totalMaxCapacity":0.0,"totalCapacityUsed":108.0,"totalUtilizationRate":0.0,"totalProduction":0.0,"totalOverloaded":0.0,"totalNotMet":0.0,"overallUtilization":0.0,"periodDetails":[{"periodIndex":0,"periodStartDate":"2026-01-05","maxCapacity":-1.0,"capacityUsed":36.0,"utilization":-1.0,"overloaded":0.0,"notMet":0.0,"production":0.0,"tasks":[{"operationId":"OP_R1_Alt","operationName":"Procure-R1-Alt","productionQty":150.0,"capacityUsed":36.0,"capacityCoeff":0.24,"lotSize":150.0,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["R1@WH_RM"]}]},{"periodIndex":1,"periodStartDate":"2026-01-06","maxCapacity":-1.0,"capacityUsed":36.0,"utilization":-1.0,"overloaded":0.0,"notMet":0.0,"production":0.0,"tasks":[{"operationId":"OP_R1_Alt","operationName":"Procure-R1-Alt","productionQty":150.0,"capacityUsed":36.0,"capacityCoeff":0.24,"lotSize":150.0,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["R1@WH_RM"]}]},{"periodIndex":2,"periodStartDate":"2026-01-07","maxCapacity":-1.0,"capacityUsed":36.0,"utilization":-1.0,"overloaded":0.0,"notMet":0.0,"production":0.0,"tasks":[{"operationId":"OP_R1_Alt","operationName":"Procure-R1-Alt","productionQty":150.0,"capacityUsed":36.0,"capacityCoeff":0.24,"lotSize":150.0,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["R1@WH_RM"]}]}]},{"unitId":"Su1","operationIds":null,"totalMaxCapacity":0.0,"totalCapacityUsed":145.98834331337324,"totalUtilizationRate":0.0,"totalProduction":0.0,"totalOverloaded":0.0,"totalNotMet":0.0,"overallUtilization":0.0,"periodDetails":[{"periodIndex":0,"periodStartDate":"2026-01-05","maxCapacity":-1.0,"capacityUsed":71.38417165668663,"utilization":-1.0,"overloaded":0.0,"notMet":0.0,"production":0.0,"tasks":[{"operationId":"OP_R2","operationName":"Procure-R2","productionQty":446.15107285429144,"capacityUsed":71.38417165668663,"capacityCoeff":0.16,"lotSize":200.0,"lotSizeOver":0.0,"lotSizeUnder":246.15107285429144,"outputs":["R2@WH_RM"]}]},{"periodIndex":1,"periodStartDate":"2026-01-06","maxCapacity":-1.0,"capacityUsed":42.60417165668661,"utilization":-1.0,"overloaded":0.0,"notMet":0.0,"production":0.0,"tasks":[{"operationId":"OP_R2","operationName":"Procure-R2","productionQty":266.27607285429133,"capacityUsed":42.60417165668661,"capacityCoeff":0.16,"lotSize":200.0,"lotSizeOver":0.0,"lotSizeUnder":66.27607285429133,"outputs":["R2@WH_RM"]}]},{"periodIndex":2,"periodStartDate":"2026-01-07","maxCapacity":-1.0,"capacityUsed":32.0,"utilization":-1.0,"overloaded":0.0,"notMet":0.0,"production":0.0,"tasks":[{"operationId":"OP_R2","operationName":"Procure-R2","productionQty":200.0,"capacityUsed":32.0,"capacityCoeff":0.16,"lotSize":200.0,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["R2@WH_RM"]}]}]},{"unitId":"Su2","operationIds":null,"totalMaxCapacity":0.0,"totalCapacityUsed":135.0,"totalUtilizationRate":0.0,"totalProduction":0.0,"totalOverloaded":0.0,"totalNotMet":0.0,"overallUtilization":0.0,"periodDetails":[{"periodIndex":0,"periodStartDate":"2026-01-05","maxCapacity":-1.0,"capacityUsed":45.0,"utilization":-1.0,"overloaded":0.0,"notMet":0.0,"production":0.0,"tasks":[{"operationId":"OP_R2_Alt","operationName":"Procure-R2-Alt","productionQty":150.0,"capacityUsed":45.0,"capacityCoeff":0.3,"lotSize":150.0,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["R2@WH_RM"]}]},{"periodIndex":1,"periodStartDate":"2026-01-06","maxCapacity":-1.0,"capacityUsed":45.0,"utilization":-1.0,"overloaded":0.0,"notMet":0.0,"production":0.0,"tasks":[{"operationId":"OP_R2_Alt","operationName":"Procure-R2-Alt","productionQty":150.0,"capacityUsed":45.0,"capacityCoeff":0.3,"lotSize":150.0,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["R2@WH_RM"]}]},{"periodIndex":2,"periodStartDate":"2026-01-07","maxCapacity":-1.0,"capacityUsed":45.0,"utilization":-1.0,"overloaded":0.0,"notMet":0.0,"production":0.0,"tasks":[{"operationId":"OP_R2_Alt","operationName":"Procure-R2-Alt","productionQty":150.0,"capacityUsed":45.0,"capacityCoeff":0.3,"lotSize":150.0,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["R2@WH_RM"]}]}]}],"demandSummary":[{"productId":"P1","periodEntries":[{"periodIndex":0,"periodStartDate":"2026-01-05","demandQty":450.0,"fulfilledQty":255.0,"unmetQty":195.0,"fulfillmentRate":0.5666666666666667},{"periodIndex":1,"periodStartDate":"2026-01-06","demandQty":60.0,"fulfilledQty":60.0,"unmetQty":0.0,"fulfillmentRate":1.0},{"periodIndex":2,"periodStartDate":"2026-01-07","demandQty":40.0,"fulfilledQty":40.0,"unmetQty":0.0,"fulfillmentRate":1.0}],"totalDemand":550.0,"totalFulfilled":355.0,"totalUnmet":195.0,"fulfillmentRate":0.6454545454545455},{"productId":"P2","periodEntries":[{"periodIndex":0,"periodStartDate":"2026-01-05","demandQty":30.0,"fulfilledQty":30.0,"unmetQty":0.0,"fulfillmentRate":1.0},{"periodIndex":1,"periodStartDate":"2026-01-06","demandQty":40.0,"fulfilledQty":40.0,"unmetQty":0.0,"fulfillmentRate":1.0},{"periodIndex":2,"periodStartDate":"2026-01-07","demandQty":50.0,"fulfilledQty":50.0,"unmetQty":0.0,"fulfillmentRate":1.0}],"totalDemand":120.0,"totalFulfilled":120.0,"totalUnmet":0.0,"fulfillmentRate":1.0}],"kpis":{"objectiveValue":190.0,"entries":[{"name":"需求缺口(Fulfillment)","rawValue":195.0,"weight":100.0,"penalty":19500.0,"isBenefit":false},{"name":"批次偏差(LotSize)","rawValue":512.4271457085828,"weight":10.0,"penalty":5124.271457085828,"isBenefit":false},{"name":"超库存(MaxInventory)","rawValue":0.0,"weight":5.0,"penalty":0.0,"isBenefit":false},{"name":"欠库存(MinInventory)","rawValue":38.0,"weight":5.0,"penalty":190.0,"isBenefit":false},{"name":"目标库存偏差(TargetInv)","rawValue":179.0442240518962,"weight":8.0,"penalty":1432.3537924151697,"isBenefit":false},{"name":"产能超载(UnitCapacity)","rawValue":0.0,"weight":20.0,"penalty":0.0,"isBenefit":false},{"name":"供应目标偏差(SupplyTarget)","rawValue":80.45309381237527,"weight":8.0,"penalty":643.6247504990022,"isBenefit":false},{"name":"最小供应不足(MinSupply)","rawValue":0.0,"weight":5.0,"penalty":0.0,"isBenefit":false},{"name":"最大供应超出(MaxSupply)","rawValue":0.0,"weight":5.0,"penalty":0.0,"isBenefit":false},{"name":"销售优先级(SalesPriority)","rawValue":475.0,"weight":1.0,"penalty":-475.0,"isBenefit":true},{"name":"推迟惩罚(Postponement)","rawValue":-0.0,"weight":20.0,"penalty":-0.0,"isBenefit":false},{"name":"过程最大量(ProcessMax)","rawValue":-0.0,"weight":5.0,"penalty":-0.0,"isBenefit":false}]},"statistics":{"status":"OPTIMAL","numVariables":218,"numConstraints":168,"elapsedSeconds":0.508,"objectiveValue":190.0,"bestBound":null,"gap":null,"iterations":84}}
\ No newline at end of file
......@@ -830,7 +830,7 @@ public class MacroPlannerDataConverter {
.filter(e -> e.getEquipId() != null)
.map(e -> {
String unitId = "EQUIP_" + e.getEquipId();
double capCoeff = (e.getDuration() != null) ? e.getDuration().doubleValue() : 1.0;
double capCoeff = (e.getDuration() != null) ? e.getDuration().doubleValue()/3600/e.getOutputQuantity().doubleValue() : 1.0;
boolean lotSize = e.getOneBatchQuantity() != null
&& e.getOneBatchQuantity().compareTo(BigDecimal.ZERO) > 0;
double lotSizeVal = lotSize ? e.getOneBatchQuantity().doubleValue() : 0.0;
......
......@@ -205,7 +205,7 @@ public class TestDataBuilder {
// === 销售需求 (每个产品每周期都有外部需求) ===
// P1: 成品需求 50/周期
salesDemands.add(new SalesDemand(prodP1, spFG, p1, 50.0, 1.0));
salesDemands.add(new SalesDemand(prodP1, spFG, p1, 450.0, 1.0));
salesDemands.add(new SalesDemand(prodP1, spFG, p2, 60.0, 1.0));
salesDemands.add(new SalesDemand(prodP1, spFG, p3, 40.0, 1.0));
......
package com.aps.macroplanner.output;
import com.aps.entity.Algorithm.Chromosome;
import com.aps.entity.Schedule.SceneChromsome;
import com.aps.entity.Schedule.SceneDetail;
import com.aps.macroplanner.data.*;
import com.aps.macroplanner.model.MacroPlannerModel;
import com.aps.macroplanner.output.dto.*;
......@@ -412,7 +409,7 @@ public class ResultWriter {
private void buildSalesDemands(OptimizationResult result) {
for (SalesDemand sd : data.getSalesDemands()) {
SalesDemandResult sr = new SalesDemandResult();
sr.setSalesDemandId(sd.getKey());
sr.setSalesDemandId(sd.getDemandOrderId()==null? sd.getKey():sd.getDemandOrderId());
sr.setProductId(sd.getProduct().getId());
sr.setSpId(sd.getStockingPoint().getId());
sr.setPeriodIndex(sd.getPeriod().getIndex());
......@@ -421,18 +418,235 @@ public class ResultWriter {
sr.setPriority(sd.getPriority());
double fulfilled = solutionValue(model.getSalesDemandQtyVars(), sd.getKey());
double unmet = Math.max(0, sd.getQuantity() - fulfilled);
sr.setFulfilledQty(fulfilled);
sr.setUnmetQty(Math.max(0, sd.getQuantity() - fulfilled));
sr.setUnmetQty(unmet);
sr.setFulfillmentRate(sd.getQuantity() > 0 ? fulfilled / sd.getQuantity() : 1.0);
// DemandSlack (PISPIP 级别)
String invKey = sd.getProduct().getId() + "_" + sd.getStockingPoint().getId()
+ "_" + sd.getPeriod().getIndex();
sr.setDemandSlack(solutionValue(model.getDemandSlackVars(), invKey));
// 未完成原因分析
if (unmet > 0.001) {
analyzeUnmetReasons(sd, sr.getUnmetReasons());
}
// 风险分析
analyzeRisks(sd, sr.getRisks());
result.getSalesDemands().add(sr);
}
}
/**
* 分析销售需求未完成的原因。
*
* <p>从以下维度排查:</p>
* <ol>
* <li>库存耗尽: 期初库存 + 到货量 不足以覆盖需求</li>
* <li>产能瓶颈: 所有生产该产品的单元都满负荷</li>
* <li>原材料短缺: BOM 输入物料库存见底</li>
* <li>提前期限制: 生产后需 leadTime 天后到货, 当期无法满足</li>
* <li>无生产工序: 纯采购品, 依赖库存/在途</li>
* </ol>
*/
private void analyzeUnmetReasons(SalesDemand sd, java.util.List<String> reasons) {
Product prod = sd.getProduct();
StockingPoint sp = sd.getStockingPoint();
Period p = sd.getPeriod();
double demandQty = sd.getQuantity();
// 1. 库存耗尽: 期初库存 + 到货 不足以覆盖需求
double openingInv = p.getIndex() == 0
? data.getInitialInventory(prod.getId(), sp.getId())
: solutionValue(model.getInvQtyVars(),
prod.getId() + "_" + sp.getId() + "_" + (p.getIndex() - 1));
double totalArrived = 0;
for (Operation op : data.getOperations()) {
if (!op.producesProductAtSp(prod.getId(), sp.getId())) continue;
for (UnitOperation uo : op.getUnitOperations()) {
Period src = data.getPeriodOffsetByDays(p, op.getLeadTimeDays());
if (src != null) {
totalArrived += solutionValue(model.getPtQtyVars(), op.ptQtyKey(uo, src.getIndex()));
}
}
}
double available = openingInv + totalArrived;
if (available < demandQty) {
reasons.add("库存耗尽(可用" + fmt(available) + "件, 需求" + fmt(demandQty) + "件)");
}
// 2. 产能瓶颈: 所有生产该产品的单元满负荷 (利用率 > 95%)
boolean hasAnyUnit = false;
boolean allUnitsAtMax = true;
for (Operation op : data.getOperations()) {
if (!op.producesProductAtSp(prod.getId(), sp.getId())) continue;
for (UnitOperation uo : op.getUnitOperations()) {
hasAnyUnit = true;
UnitPeriod up = data.getUnitPeriod(uo.getUnitId(), p);
if (up == null || up.isUnlimited()) continue;
double totalUsed = 0;
for (Operation unitOp : data.getOperations()) {
for (UnitOperation unitUo : unitOp.getUnitOperations()) {
if (!unitUo.getUnitId().equals(uo.getUnitId())) continue;
totalUsed += solutionValue(model.getPtQtyVars(),
unitOp.ptQtyKey(unitUo, p.getIndex())) * unitUo.getCapacityCoeff();
}
}
double util = up.getMaxCapacity() > 0 ? totalUsed / up.getMaxCapacity() : 0;
if (util < 0.95) { allUnitsAtMax = false; break; }
}
if (!allUnitsAtMax) break;
}
if (hasAnyUnit && allUnitsAtMax) {
reasons.add("产能瓶颈(所有产线满负荷)");
}
// 3. 原材料短缺: BOM 输入物料上期库存见底
if (p.getIndex() > 0) {
for (Operation op : data.getOperations()) {
if (!op.producesProduct(prod.getId())) continue;
for (OperationInput input : data.getOperationInputs()) {
if (!input.getOperation().getId().equals(op.getId())) continue;
Product inputProd = input.getInputProduct();
StockingPoint inputSp = input.getInputSp();
double prevInputInv = solutionValue(model.getInvQtyVars(),
inputProd.getId() + "_" + inputSp.getId() + "_" + (p.getIndex() - 1));
InventorySpec inputSpec = data.getInventorySpecFor(inputProd, inputSp, p);
double minInv = inputSpec != null ? inputSpec.getMinLevel() : 0;
if (prevInputInv <= minInv + 0.001) {
String r = "原材料短缺(" + inputProd.getId() + "库存见底)";
if (!reasons.contains(r)) reasons.add(r);
}
}
}
}
// 4. 提前期限制: 第1周期生产需 leadTime 天后到货
if (p.getIndex() == 0) {
for (Operation op : data.getOperations()) {
if (!op.producesProduct(prod.getId())) continue;
if (op.getLeadTimeDays() <= 0) continue;
double totalProduced = 0;
for (UnitOperation uo : op.getUnitOperations()) {
totalProduced += solutionValue(model.getPtQtyVars(), op.ptQtyKey(uo, p.getIndex()));
}
if (totalProduced > 0.001) {
reasons.add("提前期限制(生产" + fmt(totalProduced) + "件, 需"
+ op.getLeadTimeDays() + "天后到货)");
}
}
}
// 5. 无生产工序
boolean hasOperation = false;
for (Operation op : data.getOperations()) {
if (op.producesProduct(prod.getId())) { hasOperation = true; break; }
}
if (!hasOperation) {
reasons.add("无生产工序(纯采购品, 依赖库存/在途)");
}
if (reasons.isEmpty()) {
reasons.add("供需缺口(可用库存不足)");
}
}
/**
* 分析销售需求的风险 (即使本期已满足)。
*
* <p>风险维度:</p>
* <ol>
* <li>安全库存被消耗: 满足后期末库存低于最小库存水平</li>
* <li>产线高负荷: 生产该产品的产线利用率 > 90%, 抗波动能力弱</li>
* <li>单一供应源: 该产品仅一条产线/一个供应商可生产</li>
* <li>原材料提前期长: 关键 BOM 物料 leadTime 长, 补货慢</li>
* <li>高优先级低满足: 高优先级需求满足率不足 100%</li>
* </ol>
*/
private void analyzeRisks(SalesDemand sd, java.util.List<RiskItem> risks) {
Product prod = sd.getProduct();
StockingPoint sp = sd.getStockingPoint();
Period p = sd.getPeriod();
// 1. 安全库存被消耗: 期末库存低于最小库存 (高风险)
String invKey = prod.getId() + "_" + sp.getId() + "_" + p.getIndex();
double endingInv = solutionValue(model.getInvQtyVars(), invKey);
InventorySpec spec = data.getInventorySpecFor(prod, sp, p);
if (spec != null && spec.hasMinLevel() && endingInv < spec.getMinLevel() - 0.001) {
addRisk(risks, "高", "安全库存被消耗(期末" + fmt(endingInv) + "件 < 最小" + fmt(spec.getMinLevel()) + "件)");
}
// 2. 产线高负荷 (> 90%)
for (Operation op : data.getOperations()) {
if (!op.producesProductAtSp(prod.getId(), sp.getId())) continue;
for (UnitOperation uo : op.getUnitOperations()) {
UnitPeriod up = data.getUnitPeriod(uo.getUnitId(), p);
if (up == null || up.isUnlimited()) continue;
double totalUsed = 0;
for (Operation unitOp : data.getOperations()) {
for (UnitOperation unitUo : unitOp.getUnitOperations()) {
if (!unitUo.getUnitId().equals(uo.getUnitId())) continue;
totalUsed += solutionValue(model.getPtQtyVars(),
unitOp.ptQtyKey(unitUo, p.getIndex())) * unitUo.getCapacityCoeff();
}
}
double util = up.getMaxCapacity() > 0 ? totalUsed / up.getMaxCapacity() : 0;
if (util > 0.90) {
String level = util > 0.95 ? "高" : "低";
addRisk(risks, level, "产线高负荷(" + uo.getUnitId() + "利用率"
+ String.format("%.0f%%", util * 100) + ")");
}
}
}
// 3. 单一供应源: 该产品仅一个可生产单元
int unitCount = 0;
for (Operation op : data.getOperations()) {
if (!op.producesProduct(prod.getId())) continue;
unitCount += op.getUnitOperations().size();
}
if (unitCount == 1) {
addRisk(risks, "低", "单一供应源(仅1条产线可生产)");
}
// 4. 原材料提前期长: 关键 BOM 物料 leadTime 长
for (Operation op : data.getOperations()) {
if (!op.producesProduct(prod.getId())) continue;
for (OperationInput input : data.getOperationInputs()) {
if (!input.getOperation().getId().equals(op.getId())) continue;
Product inputProd = input.getInputProduct();
for (Operation upOp : data.getOperations()) {
if (!upOp.producesProduct(inputProd.getId())) continue;
if (upOp.getLeadTimeDays() >= 2) {
addRisk(risks, "低", "原材料提前期长(" + inputProd.getId() + "采购需"
+ upOp.getLeadTimeDays() + "天)");
}
}
}
}
// 5. 高优先级低满足
double fulfilled = solutionValue(model.getSalesDemandQtyVars(), sd.getKey());
double rate = sd.getQuantity() > 0 ? fulfilled / sd.getQuantity() : 1.0;
if (sd.getPriority() > 1.0 && rate < 0.999) {
addRisk(risks, "高", "高优先级需求满足率" + String.format("%.0f%%", rate * 100));
}
}
/** 按描述去重后添加风险项 */
private void addRisk(java.util.List<RiskItem> risks, String level, String description) {
for (RiskItem r : risks) {
if (r.getDescription().equals(description)) return;
}
risks.add(new RiskItem(level, description));
}
/** 格式化数值: 去掉多余小数位 */
private String fmt(double v) {
return Math.abs(v - Math.round(v)) < 0.001
? String.valueOf(Math.round(v)) : String.format("%.1f", v);
}
// ==================== DemandSummaryResult ====================
......@@ -1017,6 +1231,17 @@ public class ResultWriter {
jb.key("demandSlack").val(sr.getDemandSlack());
jb.key("fulfillmentRate").val(sr.getFulfillmentRate());
jb.key("priority").val(sr.getPriority());
jb.key("unmetReasons").arr();
for (String r : sr.getUnmetReasons()) jb.val(r);
jb.endArr();
jb.key("risks").arr();
for (RiskItem r : sr.getRisks()) {
jb.obj()
.key("level").val(r.getLevel())
.key("description").val(r.getDescription())
.endObj();
}
jb.endArr();
jb.endObj();
}
jb.endArr();
......
package com.aps.macroplanner.output.dto;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* 作者:佟礼
* 时间:2026-08-17
*/
/**
* 风险项 — 带等级的风险描述。
*
* <p>level 取值: "高" / "低"。</p>
*/
public class RiskItem {
private final String level;
private final String description;
@JsonCreator
public RiskItem(@JsonProperty("level") String level, @JsonProperty("description") String description) {
this.level = level;
this.description = description;
}
public String getLevel() { return level; }
public String getDescription() { return description; }
}
package com.aps.macroplanner.output.dto;
import java.util.ArrayList;
import java.util.List;
/**
* 销售需求满足结果 — 对应 Quintiq 中 LeafSalesDemandInPeriod 的回写数据。
*
......@@ -26,6 +29,11 @@ public class SalesDemandResult {
/** 优先级 */
private double priority;
/** 未完成原因分析 (仅当 unmetQty > 0 时有内容) */
private final List<String> unmetReasons = new ArrayList<>();
/** 风险分析 (即使满足也可能存在的供应链风险) */
private final List<RiskItem> risks = new ArrayList<>();
// ==================== Getters / Setters ====================
public String getSalesDemandId() { return salesDemandId; }
......@@ -60,4 +68,9 @@ public class SalesDemandResult {
public double getPriority() { return priority; }
public void setPriority(double v) { this.priority = v; }
public List<String> getUnmetReasons() { return unmetReasons; }
public List<RiskItem> getRisks() { return risks; }
}
\ No newline at end of file
......@@ -816,7 +816,7 @@ Map<Integer, Integer> targetGroupEnd=new HashMap<>();
: (schedInfo != null ? schedInfo.getValue() : 0);
OperationScheduleResult operationResult = processOperationSchedule(currentOp, machineId, processTime,
machineOption, chromosome, machineIdMap, machineTasksCache, entryIndexById,
machineOption, chromosome, machineIdMap,opMachineKeyMap, machineTasksCache, entryIndexById,
scheduleIndexById, dueDateForOp, 0,true, opIsJit);
if (operationResult.isForwardFallbackRequired()) {
......@@ -1237,7 +1237,7 @@ Map<Integer, Integer> targetGroupEnd=new HashMap<>();
int orderDueDate1=orderDueDate.get(op.getGroupId());
// 处理当前工序
// long processStartTime = System.currentTimeMillis();
int actualEndTime = processOperation(op,machineId,processTime,machineOption,chromosome,machineIdMap,machineTasksCache, entryIndexById,scheduleIndexById,orderDueDate1,true,false);
int actualEndTime = processOperation(op,machineId,processTime,machineOption,chromosome,machineIdMap,opMachineKeyMap,machineTasksCache, entryIndexById,scheduleIndexById,orderDueDate1,true,false);
// long processEndTime = System.currentTimeMillis();
......@@ -1434,7 +1434,7 @@ Map<Integer, Integer> targetGroupEnd=new HashMap<>();
OperationScheduleResult operationResult = processOperationSchedule(currentOp, machineOption.getMachineId(),
machineOption.getProcessingTime(), machineOption, chromosome, machineIdMap,
machineTasksCache, entryIndexById, scheduleIndexById, 0, operationStartTime,true, false);
opMachineKeyMap,machineTasksCache, entryIndexById, scheduleIndexById, 0, operationStartTime,true, false);
if (operationResult.isForwardFallbackRequired()) {
throw new IllegalStateException("正排兜底过程中不应再次触发正排兜底,groupId=" + groupId
+ ", operationId=" + currentOp.getId());
......@@ -1568,12 +1568,13 @@ Map<Integer, Integer> targetGroupEnd=new HashMap<>();
private int processOperation(Entry currentOp, Long machineId, double processTime,
OpMachine machineOption, Chromosome chromosome,
Map<Long, Machine> machineIdMap,
Map<String, OpMachine> opMachineKeyMap,
Map<Long, CopyOnWriteArrayList<GAScheduleResult>> machineTasksCache,
Map<Integer, Entry> entryIndexById,
Map<Integer, GAScheduleResult> scheduleIndexById,
int orderDueDate, boolean islockMachineTime, boolean isJit) {
OperationScheduleResult result = processOperationSchedule(currentOp, machineId, processTime, machineOption,
chromosome, machineIdMap, machineTasksCache, entryIndexById, scheduleIndexById,
chromosome, machineIdMap,opMachineKeyMap, machineTasksCache, entryIndexById, scheduleIndexById,
orderDueDate,0, islockMachineTime, isJit);
return result.getEndTime();
}
......@@ -1581,6 +1582,7 @@ Map<Integer, Integer> targetGroupEnd=new HashMap<>();
private OperationScheduleResult processOperationSchedule(Entry currentOp, Long machineId, double processTime,
OpMachine machineOption, Chromosome chromosome,
Map<Long, Machine> machineIdMap,
Map<String, OpMachine> opMachineKeyMap,
Map<Long, CopyOnWriteArrayList<GAScheduleResult>> machineTasksCache,
Map<Integer, Entry> entryIndexById,
Map<Integer, GAScheduleResult> scheduleIndexById,
......@@ -1600,6 +1602,9 @@ Map<Integer, Integer> targetGroupEnd=new HashMap<>();
prevtime = CalPrevtime(prevtime, currentOp, chromosome, processTime, targetMachine,
entryIndexById, scheduleIndexById);
}
// SS/FF 排产时预对齐:预查询后继设备可用,提前抬高前序开工/完工
prevtime = preAlignParallelSuccessors(currentOp, machineOption, prevtime, opMachineKeyMap,
chromosome, machineTasksCache, entryIndexById);
}
int prevendtime = prevtime;
......@@ -1611,11 +1616,12 @@ Map<Integer, Integer> targetGroupEnd=new HashMap<>();
public GAScheduleResult processOperationResult(Entry currentOp, Long machineId, double processTime,
OpMachine machineOption, Chromosome chromosome,
Map<Long, Machine> machineIdMap,
Map<String, OpMachine> opMachineKeyMap,
Map<Long, CopyOnWriteArrayList<GAScheduleResult>> machineTasksCache,
Map<Integer, Entry> entryIndexById,
Map<Integer, GAScheduleResult> scheduleIndexById,
int orderDueDate, boolean islockMachineTime, boolean isJit) {
return processOperationSchedule(currentOp, machineId, processTime, machineOption, chromosome, machineIdMap,
return processOperationSchedule(currentOp, machineId, processTime, machineOption, chromosome, machineIdMap, opMachineKeyMap,
machineTasksCache, entryIndexById, scheduleIndexById, orderDueDate, 0,islockMachineTime, isJit)
.getScheduleResult();
}
......@@ -2462,6 +2468,58 @@ if(geneDetails!=null&&geneDetails.size()>0)
}
/**
* 排产时预对齐:正排中前序先排,这里预查询 SS/FF 后继所在设备的最早可用时间,
* 提前抬高前序的开工(SS)/完工(FF),使后继排程时能直接同时开工/结束,减少排完后的撤回重排。
*/
private int preAlignParallelSuccessors(Entry currentOp, OpMachine currentMachine, int prevtime,
Map<String, OpMachine> opMachineKeyMap,
Chromosome chromosome,
Map<Long, CopyOnWriteArrayList<GAScheduleResult>> machineTasksCache,
Map<Integer, Entry> entryIndexById) {
if (opMachineKeyMap == null || currentOp.getNextEntryIds() == null || currentOp.getNextEntryIds().isEmpty()) {
return prevtime;
}
for (OperationDependency dep : currentOp.getNextEntryIds()) {
Entry succ = entryIndexById.get(dep.getNextOperationId());
if (succ == null) continue;
OpMachine succMachine = opMachineKeyMap.get(succ.getGroupId() + "_" + succ.getSequence());
if (succMachine == null) continue;
int succAvail = 0;
CopyOnWriteArrayList<GAScheduleResult> succTasks = getMachineTasks(succMachine.getMachineId(), chromosome, machineTasksCache);
GAScheduleResult lastTask = getLastMachineTask(succTasks);
if (lastTask != null) {
succAvail = lastTask.getEndTime();
}
if (dep.getDependencyType() == DependencyType.StartToStart) {
// 同时开始:前序开工不早于后继设备可用,使后继排程时能对齐开工
prevtime = Math.max(prevtime, succAvail);
} else if (dep.getDependencyType() == DependencyType.FinishToFinish) {
// 同时结束:前序完工对齐后继完工,反推前序开工
int curDuration = calcOpDuration(currentOp, currentMachine);
int succDuration = calcOpDuration(succ, succMachine);
prevtime = Math.max(prevtime, succAvail + succDuration - curDuration);
}
}
return prevtime;
}
/**
* 计算工序加工时长(不含准备工时),与 processWithSingleMachine 口径一致,用于 SS/FF 对齐反推。
*/
private int calcOpDuration(Entry op, OpMachine machineOption) {
if (op.getConstTime() == 1) {
return (int) Math.ceil(machineOption.getProcessingTime());
}
if (machineOption.getSingleOut() == null || machineOption.getSingleOut().doubleValue() == 0) {
return (int) Math.ceil(machineOption.getProcessingTime());
}
double t = machineOption.getRuntime().doubleValue() / machineOption.getSingleOut().doubleValue() * op.getQuantity();
return (int) Math.ceil(t);
}
/**
* 计算后序结束时间
* @param nexttime
......
......@@ -390,7 +390,7 @@ if(isJit)
GAScheduleResult result= decoder.processOperationResult( op, mId, mo.getProcessingTime(), mo, chromosome, machineIdMap, machineTasksCache, entryIndexById, scheduleIndexById, start, false, isJit);
GAScheduleResult result= decoder.processOperationResult( op, mId, mo.getProcessingTime(), mo, chromosome, machineIdMap, opMachineKeyMap,machineTasksCache, entryIndexById, scheduleIndexById, start, false, isJit);
// CopyOnWriteArrayList<ScheduleResultDetail> geneDetails = estimateCalendarAwareDuration(machine,op,machineTasks, start, rawDur,mo.getProcessingTime(),isJit);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment