Commit d16de264 authored by Tong Li's avatar Tong Li

MP

parent 2275c355
This source diff could not be displayed because it is too large. You can view the blob instead.
{"timestamp":"2026-08-11 16:47:54","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":2,"periodStartDate":"2026-01-07","productionQty":35.0,"capacityUsed":3.5,"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":"L3","periodIndex":1,"periodStartDate":"2026-01-06","productionQty":55.0,"capacityUsed":6.875,"capacityCoeff":0.125,"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":0,"periodStartDate":"2026-01-05","productionQty":20.0,"capacityUsed":2.5,"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":"L1","periodIndex":1,"periodStartDate":"2026-01-06","productionQty":24.287425149700603,"capacityUsed":3.0359281437125754,"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":"L1","periodIndex":2,"periodStartDate":"2026-01-07","productionQty":47.0,"capacityUsed":5.875,"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":1,"periodStartDate":"2026-01-06","productionQty":18.712574850299397,"capacityUsed":3.1249999999999996,"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":163.0,"capacityUsed":5.4279,"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":107.0,"capacityUsed":3.5631000000000004,"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":165.0,"capacityUsed":19.8,"capacityCoeff":0.12,"lotSize":200.0,"lotSizeOver":35.0,"lotSizeUnder":0.0,"outputs":[{"productId":"R1","spId":"WH_RM","factor":1.0}]},{"operationId":"OP_R1","operationName":"Procure-R1","unitId":"SuA","periodIndex":1,"periodStartDate":"2026-01-06","productionQty":5.0,"capacityUsed":0.6,"capacityCoeff":0.12,"lotSize":200.0,"lotSizeOver":195.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":100.0,"capacityUsed":24.0,"capacityCoeff":0.24,"lotSize":150.0,"lotSizeOver":50.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":100.0,"capacityUsed":24.0,"capacityCoeff":0.24,"lotSize":150.0,"lotSizeOver":50.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":100.0,"capacityUsed":24.0,"capacityCoeff":0.24,"lotSize":150.0,"lotSizeOver":50.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":346.0,"capacityUsed":55.36,"capacityCoeff":0.16,"lotSize":200.0,"lotSizeOver":0.0,"lotSizeUnder":146.0,"outputs":[{"productId":"R2","spId":"WH_RM","factor":1.0}]},{"operationId":"OP_R2","operationName":"Procure-R2","unitId":"Su1","periodIndex":1,"periodStartDate":"2026-01-06","productionQty":194.00000000000003,"capacityUsed":31.040000000000006,"capacityCoeff":0.16,"lotSize":200.0,"lotSizeOver":5.999999999999972,"lotSizeUnder":0.0,"outputs":[{"productId":"R2","spId":"WH_RM","factor":1.0}]},{"operationId":"OP_R2","operationName":"Procure-R2","unitId":"Su1","periodIndex":2,"periodStartDate":"2026-01-07","productionQty":150.0,"capacityUsed":24.0,"capacityCoeff":0.16,"lotSize":200.0,"lotSizeOver":50.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":50.0,"fulfilledQty":50.0,"unmetQty":0.0,"demandSlack":0.0,"fulfillmentRate":1.0,"priority":1.0},{"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},{"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},{"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},{"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},{"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}],"pispips":[{"productId":"P1","spId":"WH_FG","periodIndex":0,"periodStartDate":"2026-01-05","openingInventory":20.0,"endingInventory":10.0,"targetInventoryLevel":20.0,"targetInventoryDays":null,"belowTarget":10.0,"minInventoryLevel":5.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":150.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":40.0,"inTransitArrival":0.0,"totalInflow":40.0,"salesDemandQty":50.0,"salesFulfilledQty":50.0,"dependentDemandQty":0.0,"totalOutflow":50.0,"demandFulfillment":50.0,"demandSlack":0.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":10.0,"endingInventory":5.0,"targetInventoryLevel":20.0,"targetInventoryDays":null,"belowTarget":15.0,"minInventoryLevel":5.0,"minInventoryDays":null,"belowMin":0.0,"maxInventoryLevel":150.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":55.0,"inTransitArrival":0.0,"totalInflow":55.0,"salesDemandQty":60.0,"salesFulfilledQty":60.0,"dependentDemandQty":0.0,"totalOutflow":60.0,"demandFulfillment":60.0,"demandSlack":0.0,"productionInProgress":55.0,"productionDetails":[{"operationId":"OP_P1","operationName":"Make-P1","unitId":"L3","quantity":55.0,"leadTimeDays":0,"bomConsumptions":[{"inputProductId":"S1","inputSpId":"WH_Semi","factor":2.0,"consumedQty":110.0},{"inputProductId":"R1","inputSpId":"WH_RM","factor":3.0,"consumedQty":165.0}]}]},{"productId":"P1","spId":"WH_FG","periodIndex":2,"periodStartDate":"2026-01-07","openingInventory":5.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":35.0,"inTransitArrival":0.0,"totalInflow":35.0,"salesDemandQty":40.0,"salesFulfilledQty":40.0,"dependentDemandQty":0.0,"totalOutflow":40.0,"demandFulfillment":40.0,"demandSlack":0.0,"productionInProgress":35.0,"productionDetails":[{"operationId":"OP_P1","operationName":"Make-P1","unitId":"L1","quantity":35.0,"leadTimeDays":0,"bomConsumptions":[{"inputProductId":"S1","inputSpId":"WH_Semi","factor":2.0,"consumedQty":70.0},{"inputProductId":"R1","inputSpId":"WH_RM","factor":3.0,"consumedQty":105.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":"L1","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":24.287425149700603,"leadTimeDays":0,"bomConsumptions":[{"inputProductId":"S1","inputSpId":"WH_Semi","factor":1.0,"consumedQty":43.0}]},{"operationId":"OP_P2","operationName":"Make-P2","unitId":"L3","quantity":18.712574850299397,"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":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":47.0,"inTransitArrival":0.0,"totalInflow":47.0,"salesDemandQty":50.0,"salesFulfilledQty":50.0,"dependentDemandQty":0.0,"totalOutflow":50.0,"demandFulfillment":50.0,"demandSlack":0.0,"productionInProgress":47.0,"productionDetails":[{"operationId":"OP_P2","operationName":"Make-P2","unitId":"L1","quantity":47.0,"leadTimeDays":0,"bomConsumptions":[{"inputProductId":"S1","inputSpId":"WH_Semi","factor":1.0,"consumedQty":47.0}]}]},{"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":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":163.0,"inTransitArrival":0.0,"totalInflow":163.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":153.0,"totalOutflow":153.0,"demandFulfillment":153.0,"demandSlack":0.0,"productionInProgress":163.0,"productionDetails":[{"operationId":"OP_S1","operationName":"Make-S1","unitId":"L2","quantity":163.0,"leadTimeDays":0,"bomConsumptions":[{"inputProductId":"R2","inputSpId":"WH_RM","factor":2.0,"consumedQty":326.0}]}]},{"productId":"S1","spId":"WH_Semi","periodIndex":2,"periodStartDate":"2026-01-07","openingInventory":10.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":107.0,"inTransitArrival":0.0,"totalInflow":107.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":117.0,"totalOutflow":117.0,"demandFulfillment":117.0,"demandSlack":0.0,"productionInProgress":107.0,"productionDetails":[{"operationId":"OP_S1","operationName":"Make-S1","unitId":"L2","quantity":107.0,"leadTimeDays":0,"bomConsumptions":[{"inputProductId":"R2","inputSpId":"WH_RM","factor":2.0,"consumedQty":214.0}]}]},{"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":265.0,"productionDetails":[{"operationId":"OP_R1","operationName":"Procure-R1","unitId":"SuA","quantity":165.0,"leadTimeDays":1,"bomConsumptions":[]},{"operationId":"OP_R1_Alt","operationName":"Procure-R1-Alt","unitId":"SuB","quantity":100.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":165.0,"inTransitArrival":0.0,"totalInflow":165.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":165.0,"totalOutflow":165.0,"demandFulfillment":165.0,"demandSlack":0.0,"productionInProgress":105.0,"productionDetails":[{"operationId":"OP_R1","operationName":"Procure-R1","unitId":"SuA","quantity":5.0,"leadTimeDays":1,"bomConsumptions":[]},{"operationId":"OP_R1_Alt","operationName":"Procure-R1-Alt","unitId":"SuB","quantity":100.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":105.0,"inTransitArrival":0.0,"totalInflow":105.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":105.0,"totalOutflow":105.0,"demandFulfillment":105.0,"demandSlack":0.0,"productionInProgress":300.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":100.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":496.0,"productionDetails":[{"operationId":"OP_R2","operationName":"Procure-R2","unitId":"Su1","quantity":346.0,"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":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":346.0,"inTransitArrival":0.0,"totalInflow":346.0,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":326.0,"totalOutflow":326.0,"demandFulfillment":326.0,"demandSlack":0.0,"productionInProgress":344.0,"productionDetails":[{"operationId":"OP_R2","operationName":"Procure-R2","unitId":"Su1","quantity":194.00000000000003,"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":20.0,"endingInventory":2.8421709430404007E-14,"targetInventoryLevel":40.0,"targetInventoryDays":null,"belowTarget":39.99999999999997,"minInventoryLevel":20.0,"minInventoryDays":null,"belowMin":19.99999999999997,"maxInventoryLevel":400.0,"maxInventoryDays":null,"aboveMax":0.0,"productionArrived":194.00000000000003,"inTransitArrival":0.0,"totalInflow":194.00000000000003,"salesDemandQty":0.0,"salesFulfilledQty":0.0,"dependentDemandQty":214.0,"totalOutflow":214.0,"demandFulfillment":214.0,"demandSlack":0.0,"productionInProgress":300.0,"productionDetails":[{"operationId":"OP_R2","operationName":"Procure-R2","unitId":"Su1","quantity":150.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":130.0,"capacityUsed":14.375,"lotSize":null}],"totalSalesDemand":150.0,"totalSalesFulfilled":150.0,"totalDependentDemand":0.0,"consumers":[],"summary":{"totalProduction":130.0,"totalArrived":130.0,"totalInTransit":0.0,"totalSalesDemand":150.0,"totalSalesFulfilled":150.0,"totalDependentDemand":0.0,"totalDemandFulfillment":150.0,"totalDemandSlack":0.0,"initialInventory":20.0,"finalInventory":0.0,"averageInventory":5.0,"totalBelowTarget":45.0,"totalBelowMin":5.0,"totalAboveMax":0.0},"children":[{"productId":"S1","spId":"WH_Semi","totalFactor":2.0,"totalConsumedQty":260.0},{"productId":"R1","spId":"WH_RM","totalFactor":3.0,"totalConsumedQty":390.0}]},{"productId":"P2","spId":"WH_FG","level":0,"supplySources":[{"type":"OPERATION","operationId":"OP_P2","operationName":"Make-P2","unitId":"L1","totalProduction":110.0,"capacityUsed":14.535928143712574,"lotSize":null}],"totalSalesDemand":120.0,"totalSalesFulfilled":120.0,"totalDependentDemand":0.0,"consumers":[],"summary":{"totalProduction":110.0,"totalArrived":110.0,"totalInTransit":0.0,"totalSalesDemand":120.0,"totalSalesFulfilled":120.0,"totalDependentDemand":0.0,"totalDemandFulfillment":120.0,"totalDemandSlack":0.0,"initialInventory":10.0,"finalInventory":0.0,"averageInventory":1.0,"totalBelowTarget":42.0,"totalBelowMin":6.0,"totalAboveMax":0.0},"children":[{"productId":"S1","spId":"WH_Semi","totalFactor":1.0,"totalConsumedQty":110.0}]}],"allNodes":{"P1@WH_FG":{"productId":"P1","spId":"WH_FG","level":0,"supplySources":[{"type":"OPERATION","operationId":"OP_P1","operationName":"Make-P1","unitId":"L1","totalProduction":130.0,"capacityUsed":14.375,"lotSize":null}],"totalSalesDemand":150.0,"totalSalesFulfilled":150.0,"totalDependentDemand":0.0,"consumers":[],"summary":{"totalProduction":130.0,"totalArrived":130.0,"totalInTransit":0.0,"totalSalesDemand":150.0,"totalSalesFulfilled":150.0,"totalDependentDemand":0.0,"totalDemandFulfillment":150.0,"totalDemandSlack":0.0,"initialInventory":20.0,"finalInventory":0.0,"averageInventory":5.0,"totalBelowTarget":45.0,"totalBelowMin":5.0,"totalAboveMax":0.0},"children":[{"productId":"S1","spId":"WH_Semi","totalFactor":2.0,"totalConsumedQty":260.0},{"productId":"R1","spId":"WH_RM","totalFactor":3.0,"totalConsumedQty":390.0}]},"S1@WH_Semi":{"productId":"S1","spId":"WH_Semi","level":1,"supplySources":[{"type":"OPERATION","operationId":"OP_S1","operationName":"Make-S1","unitId":"L2","totalProduction":320.0,"capacityUsed":10.656,"lotSize":null}],"totalSalesDemand":0.0,"totalSalesFulfilled":0.0,"totalDependentDemand":370.0,"consumers":[{"consumerProductId":"P1","consumerSpId":"WH_FG","operationId":"OP_P1","operationName":"Make-P1","factor":2.0,"totalConsumed":260.0},{"consumerProductId":"P2","consumerSpId":"WH_FG","operationId":"OP_P2","operationName":"Make-P2","factor":1.0,"totalConsumed":110.0}],"summary":{"totalProduction":320.0,"totalArrived":320.0,"totalInTransit":0.0,"totalSalesDemand":0.0,"totalSalesFulfilled":0.0,"totalDependentDemand":370.0,"totalDemandFulfillment":370.0,"totalDemandSlack":0.0,"initialInventory":50.0,"finalInventory":0.0,"averageInventory":3.3333333333333335,"totalBelowTarget":80.0,"totalBelowMin":20.0,"totalAboveMax":0.0},"children":[{"productId":"R2","spId":"WH_RM","totalFactor":2.0,"totalConsumedQty":640.0}]},"R2@WH_RM":{"productId":"R2","spId":"WH_RM","level":2,"supplySources":[{"type":"OPERATION","operationId":"OP_R2","operationName":"Procure-R2","unitId":"Su1","totalProduction":690.0,"capacityUsed":110.4,"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":640.0,"consumers":[{"consumerProductId":"S1","consumerSpId":"WH_Semi","operationId":"OP_S1","operationName":"Make-S1","factor":2.0,"totalConsumed":640.0}],"summary":{"totalProduction":1140.0,"totalArrived":540.0,"totalInTransit":0.0,"totalSalesDemand":0.0,"totalSalesFulfilled":0.0,"totalDependentDemand":640.0,"totalDemandFulfillment":640.0,"totalDemandSlack":0.0,"initialInventory":100.0,"finalInventory":2.8421709430404007E-14,"averageInventory":6.666666666666676,"totalBelowTarget":99.99999999999997,"totalBelowMin":39.99999999999997,"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":370.0,"capacityUsed":44.400000000000006,"lotSize":200.0},{"type":"OPERATION","operationId":"OP_R1_Alt","operationName":"Procure-R1-Alt","unitId":"SuB","totalProduction":300.0,"capacityUsed":72.0,"lotSize":150.0}],"totalSalesDemand":0.0,"totalSalesFulfilled":0.0,"totalDependentDemand":390.0,"consumers":[{"consumerProductId":"P1","consumerSpId":"WH_FG","operationId":"OP_P1","operationName":"Make-P1","factor":3.0,"totalConsumed":390.0}],"summary":{"totalProduction":670.0,"totalArrived":270.0,"totalInTransit":0.0,"totalSalesDemand":0.0,"totalSalesFulfilled":0.0,"totalDependentDemand":390.0,"totalDemandFulfillment":390.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":110.0,"capacityUsed":14.535928143712574,"lotSize":null}],"totalSalesDemand":120.0,"totalSalesFulfilled":120.0,"totalDependentDemand":0.0,"consumers":[],"summary":{"totalProduction":110.0,"totalArrived":110.0,"totalInTransit":0.0,"totalSalesDemand":120.0,"totalSalesFulfilled":120.0,"totalDependentDemand":0.0,"totalDemandFulfillment":120.0,"totalDemandSlack":0.0,"initialInventory":10.0,"finalInventory":0.0,"averageInventory":1.0,"totalBelowTarget":42.0,"totalBelowMin":6.0,"totalAboveMax":0.0},"children":[{"productId":"S1","spId":"WH_Semi","totalFactor":1.0,"totalConsumedQty":110.0}]}}},"unitCapacities":[{"unitId":"L1","operationIds":null,"totalMaxCapacity":30.0,"totalCapacityUsed":18.910928143712574,"totalUtilizationRate":0.0,"totalProduction":0.0,"totalOverloaded":0.0,"totalNotMet":0.0,"overallUtilization":0.6303642714570858,"periodDetails":[{"periodIndex":0,"periodStartDate":"2026-01-05","maxCapacity":10.0,"capacityUsed":6.5,"utilization":0.65,"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"]},{"operationId":"OP_P2","operationName":"Make-P2","productionQty":20.0,"capacityUsed":2.5,"capacityCoeff":0.125,"lotSize":null,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["P2@WH_FG"]}]},{"periodIndex":1,"periodStartDate":"2026-01-06","maxCapacity":10.0,"capacityUsed":3.0359281437125754,"utilization":0.3035928143712575,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_P2","operationName":"Make-P2","productionQty":24.287425149700603,"capacityUsed":3.0359281437125754,"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":9.375,"utilization":0.9375,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_P1","operationName":"Make-P1","productionQty":35.0,"capacityUsed":3.5,"capacityCoeff":0.1,"lotSize":null,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["P1@WH_FG"]},{"operationId":"OP_P2","operationName":"Make-P2","productionQty":47.0,"capacityUsed":5.875,"capacityCoeff":0.125,"lotSize":null,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["P2@WH_FG"]}]}]},{"unitId":"L2","operationIds":null,"totalMaxCapacity":30.0,"totalCapacityUsed":10.656,"totalUtilizationRate":0.0,"totalProduction":0.0,"totalOverloaded":0.0,"totalNotMet":0.0,"overallUtilization":0.3552,"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":5.4279,"utilization":0.54279,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_S1","operationName":"Make-S1","productionQty":163.0,"capacityUsed":5.4279,"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":3.5631000000000004,"utilization":0.35631,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_S1","operationName":"Make-S1","productionQty":107.0,"capacityUsed":3.5631000000000004,"capacityCoeff":0.0333,"lotSize":null,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["S1@WH_Semi"]}]}]},{"unitId":"L3","operationIds":null,"totalMaxCapacity":30.0,"totalCapacityUsed":10.0,"totalUtilizationRate":0.0,"totalProduction":0.0,"totalOverloaded":0.0,"totalNotMet":0.0,"overallUtilization":0.3333333333333333,"periodDetails":[{"periodIndex":0,"periodStartDate":"2026-01-05","maxCapacity":10.0,"capacityUsed":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]},{"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":55.0,"capacityUsed":6.875,"capacityCoeff":0.125,"lotSize":null,"lotSizeOver":0.0,"lotSizeUnder":0.0,"outputs":["P1@WH_FG"]},{"operationId":"OP_P2","operationName":"Make-P2","productionQty":18.712574850299397,"capacityUsed":3.1249999999999996,"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":0.0,"utilization":0.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[]}]},{"unitId":"SuA","operationIds":null,"totalMaxCapacity":72.0,"totalCapacityUsed":44.400000000000006,"totalUtilizationRate":0.0,"totalProduction":0.0,"totalOverloaded":0.0,"totalNotMet":0.0,"overallUtilization":0.6166666666666667,"periodDetails":[{"periodIndex":0,"periodStartDate":"2026-01-05","maxCapacity":24.0,"capacityUsed":19.8,"utilization":0.8250000000000001,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_R1","operationName":"Procure-R1","productionQty":165.0,"capacityUsed":19.8,"capacityCoeff":0.12,"lotSize":200.0,"lotSizeOver":35.0,"lotSizeUnder":0.0,"outputs":["R1@WH_RM"]}]},{"periodIndex":1,"periodStartDate":"2026-01-06","maxCapacity":24.0,"capacityUsed":0.6,"utilization":0.024999999999999998,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_R1","operationName":"Procure-R1","productionQty":5.0,"capacityUsed":0.6,"capacityCoeff":0.12,"lotSize":200.0,"lotSizeOver":195.0,"lotSizeUnder":0.0,"outputs":["R1@WH_RM"]}]},{"periodIndex":2,"periodStartDate":"2026-01-07","maxCapacity":24.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":72.0,"totalCapacityUsed":72.0,"totalUtilizationRate":0.0,"totalProduction":0.0,"totalOverloaded":0.0,"totalNotMet":0.0,"overallUtilization":1.0,"periodDetails":[{"periodIndex":0,"periodStartDate":"2026-01-05","maxCapacity":24.0,"capacityUsed":24.0,"utilization":1.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_R1_Alt","operationName":"Procure-R1-Alt","productionQty":100.0,"capacityUsed":24.0,"capacityCoeff":0.24,"lotSize":150.0,"lotSizeOver":50.0,"lotSizeUnder":0.0,"outputs":["R1@WH_RM"]}]},{"periodIndex":1,"periodStartDate":"2026-01-06","maxCapacity":24.0,"capacityUsed":24.0,"utilization":1.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_R1_Alt","operationName":"Procure-R1-Alt","productionQty":100.0,"capacityUsed":24.0,"capacityCoeff":0.24,"lotSize":150.0,"lotSizeOver":50.0,"lotSizeUnder":0.0,"outputs":["R1@WH_RM"]}]},{"periodIndex":2,"periodStartDate":"2026-01-07","maxCapacity":24.0,"capacityUsed":24.0,"utilization":1.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_R1_Alt","operationName":"Procure-R1-Alt","productionQty":100.0,"capacityUsed":24.0,"capacityCoeff":0.24,"lotSize":150.0,"lotSizeOver":50.0,"lotSizeUnder":0.0,"outputs":["R1@WH_RM"]}]}]},{"unitId":"Su1","operationIds":null,"totalMaxCapacity":72.0,"totalCapacityUsed":110.4,"totalUtilizationRate":0.0,"totalProduction":0.0,"totalOverloaded":38.400000000000006,"totalNotMet":0.0,"overallUtilization":1.5333333333333334,"periodDetails":[{"periodIndex":0,"periodStartDate":"2026-01-05","maxCapacity":24.0,"capacityUsed":55.36,"utilization":2.3066666666666666,"overloaded":31.36,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_R2","operationName":"Procure-R2","productionQty":346.0,"capacityUsed":55.36,"capacityCoeff":0.16,"lotSize":200.0,"lotSizeOver":0.0,"lotSizeUnder":146.0,"outputs":["R2@WH_RM"]}]},{"periodIndex":1,"periodStartDate":"2026-01-06","maxCapacity":24.0,"capacityUsed":31.040000000000006,"utilization":1.2933333333333337,"overloaded":7.040000000000006,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_R2","operationName":"Procure-R2","productionQty":194.00000000000003,"capacityUsed":31.040000000000006,"capacityCoeff":0.16,"lotSize":200.0,"lotSizeOver":5.999999999999972,"lotSizeUnder":0.0,"outputs":["R2@WH_RM"]}]},{"periodIndex":2,"periodStartDate":"2026-01-07","maxCapacity":24.0,"capacityUsed":24.0,"utilization":1.0,"overloaded":0.0,"notMet":-0.0,"production":0.0,"tasks":[{"operationId":"OP_R2","operationName":"Procure-R2","productionQty":150.0,"capacityUsed":24.0,"capacityCoeff":0.16,"lotSize":200.0,"lotSizeOver":50.0,"lotSizeUnder":0.0,"outputs":["R2@WH_RM"]}]}]},{"unitId":"Su2","operationIds":null,"totalMaxCapacity":300.0,"totalCapacityUsed":135.0,"totalUtilizationRate":0.0,"totalProduction":0.0,"totalOverloaded":0.0,"totalNotMet":0.0,"overallUtilization":0.45,"periodDetails":[{"periodIndex":0,"periodStartDate":"2026-01-05","maxCapacity":100.0,"capacityUsed":45.0,"utilization":0.45,"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":100.0,"capacityUsed":45.0,"utilization":0.45,"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":100.0,"capacityUsed":45.0,"utilization":0.45,"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":50.0,"fulfilledQty":50.0,"unmetQty":0.0,"fulfillmentRate":1.0},{"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":150.0,"totalFulfilled":150.0,"totalUnmet":0.0,"fulfillmentRate":1.0},{"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":354.9999999999999,"entries":[{"name":"需求缺口(Fulfillment)","rawValue":0.0,"weight":100.0,"penalty":0.0,"isBenefit":false},{"name":"批次偏差(LotSize)","rawValue":582.0,"weight":10.0,"penalty":5820.0,"isBenefit":false},{"name":"超库存(MaxInventory)","rawValue":0.0,"weight":5.0,"penalty":0.0,"isBenefit":false},{"name":"欠库存(MinInventory)","rawValue":70.99999999999997,"weight":5.0,"penalty":354.9999999999999,"isBenefit":false},{"name":"目标库存偏差(TargetInv)","rawValue":267.0,"weight":8.0,"penalty":2136.0,"isBenefit":false},{"name":"产能超载(UnitCapacity)","rawValue":38.400000000000006,"weight":20.0,"penalty":768.0000000000001,"isBenefit":false},{"name":"供应目标偏差(SupplyTarget)","rawValue":145.68750000000003,"weight":8.0,"penalty":1165.5000000000002,"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":270.0,"weight":1.0,"penalty":-270.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":242,"numConstraints":180,"elapsedSeconds":0.763,"objectiveValue":354.9999999999999,"bestBound":null,"gap":null,"iterations":53}} {"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 \ No newline at end of file
...@@ -28,10 +28,23 @@ import org.springframework.stereotype.Service; ...@@ -28,10 +28,23 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.Duration; import java.time.Duration;
import java.time.DayOfWeek;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.*; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -147,8 +160,9 @@ public class MacroPlannerDataConverter { ...@@ -147,8 +160,9 @@ public class MacroPlannerDataConverter {
// 0. 读取时间配置, 计算 horizonEnd // 0. 读取时间配置, 计算 horizonEnd
// endCount = 期数 (与 periodDimension 结合决定实际天数) // endCount = 期数 (与 periodDimension 结合决定实际天数)
ApsTimeConfig timeConfig = apsTimeConfigService.getOne(new LambdaQueryWrapper<>()); ApsTimeConfig timeConfig = apsTimeConfigService.getOne(new LambdaQueryWrapper<>());
ctx.baseTime = (timeConfig != null && timeConfig.getBaseTime() != null) ctx.baseTime = LocalDateTime.of(2026,9,28,0,0,0);
? timeConfig.getBaseTime() : LocalDateTime.now(); // ctx.baseTime = (timeConfig != null && timeConfig.getBaseTime() != null)
// ? timeConfig.getBaseTime() : LocalDateTime.now();
ctx.periodDimension = "DAY"; ctx.periodDimension = "DAY";
if (timeConfig != null && timeConfig.getPeriodDimension() != null if (timeConfig != null && timeConfig.getPeriodDimension() != null
...@@ -166,7 +180,7 @@ public class MacroPlannerDataConverter { ...@@ -166,7 +180,7 @@ public class MacroPlannerDataConverter {
ctx.periodCount = periodCount; ctx.periodCount = periodCount;
LocalDate baseDate = ctx.baseTime.toLocalDate(); LocalDate baseDate = ctx.baseTime.toLocalDate();
ctx.horizonEnd = baseDate.plusDays(calculateTotalDays(ctx.periodDimension, baseDate, periodCount)); ctx.horizonEnd = calculateHorizonEnd(ctx.periodDimension, baseDate, periodCount);
LocalDateTime horizonEndDateTime = ctx.horizonEnd.atStartOfDay(); LocalDateTime horizonEndDateTime = ctx.horizonEnd.atStartOfDay();
log.info("排产周期: dimension={}, periodCount={}, baseTime={}, horizonEnd={}", log.info("排产周期: dimension={}, periodCount={}, baseTime={}, horizonEnd={}",
ctx.periodDimension, periodCount, ctx.baseTime, ctx.horizonEnd); ctx.periodDimension, periodCount, ctx.baseTime, ctx.horizonEnd);
...@@ -560,23 +574,26 @@ public class MacroPlannerDataConverter { ...@@ -560,23 +574,26 @@ public class MacroPlannerDataConverter {
} }
/** /**
* 按维度将期数转换为实际天数。 * 按维度将期数转换为 horizonEnd (对齐到自然周期边界)。
* *
* @param dimension 维度: DAY / WEEK / MONTH * @param dimension 维度: DAY / WEEK / MONTH
* @param baseDate 起始日期 * @param baseDate 起始日期
* @param periodCount 期数 (endCount) * @param periodCount 期数 (endCount)
* @return 实际天数 * @return 计划截止日期 (不包含)
*/ */
private static int calculateTotalDays(String dimension, LocalDate baseDate, int periodCount) { private static LocalDate calculateHorizonEnd(String dimension, LocalDate baseDate, int periodCount) {
switch (dimension) { switch (dimension) {
case "WEEK": case "WEEK":
return periodCount * 7; // 自然周: 从 baseDate 所在周的周一开始, periodCount 周后
LocalDate weekStart = baseDate.with(DayOfWeek.MONDAY);
return weekStart.plusDays((long) periodCount * 7);
case "MONTH": case "MONTH":
LocalDate end = baseDate.plusMonths(periodCount); // 自然月: 从 baseDate 所在月的1号开始, periodCount 个月后
return (int) ChronoUnit.DAYS.between(baseDate, end); LocalDate monthStart = baseDate.withDayOfMonth(1);
return monthStart.plusMonths(periodCount);
case "DAY": case "DAY":
default: default:
return periodCount; return baseDate.plusDays(periodCount);
} }
} }
...@@ -629,7 +646,7 @@ public class MacroPlannerDataConverter { ...@@ -629,7 +646,7 @@ public class MacroPlannerDataConverter {
ctx.productByMaterialId.put(m.getId(), p); ctx.productByMaterialId.put(m.getId(), p);
} }
// 3.2 收集所有 storeId (库存 + 投料仓库), 建立 storeId → storeName 映射 // 3.2 收集所有 storeId (库存 + 投料仓库 + 订单库房), 建立 storeId → storeName 映射
Map<Long, String> storeNameMap = new HashMap<>(); Map<Long, String> storeNameMap = new HashMap<>();
for (Material m : ctx.materialByMaterialId.values()) { for (Material m : ctx.materialByMaterialId.values()) {
if (m.getMaterialStocks() != null) { if (m.getMaterialStocks() != null) {
...@@ -645,6 +662,11 @@ public class MacroPlannerDataConverter { ...@@ -645,6 +662,11 @@ public class MacroPlannerDataConverter {
storeNameMap.putIfAbsent(rs.getStoreId(), rs.getStoreName()); storeNameMap.putIfAbsent(rs.getStoreId(), rs.getStoreName());
} }
} }
for (ApsDemandOrder ado : ctx.apsDemandOrders) {
if (ado.getStockid() != null && ado.getStock() != null) {
storeNameMap.putIfAbsent(ado.getStockid(), ado.getStock());
}
}
Set<Long> storeIds = new HashSet<>(); Set<Long> storeIds = new HashSet<>();
storeIds.addAll(storeNameMap.keySet()); storeIds.addAll(storeNameMap.keySet());
...@@ -659,6 +681,9 @@ public class MacroPlannerDataConverter { ...@@ -659,6 +681,9 @@ public class MacroPlannerDataConverter {
for (Routingsupporting rs : ctx.routingsupportings) { for (Routingsupporting rs : ctx.routingsupportings) {
if (rs.getStoreId() != null) storeIds.add(rs.getStoreId()); if (rs.getStoreId() != null) storeIds.add(rs.getStoreId());
} }
for (ApsDemandOrder ado : ctx.apsDemandOrders) {
if (ado.getStockid() != null) storeIds.add(ado.getStockid());
}
for (Long sid : storeIds) { for (Long sid : storeIds) {
String spName = storeNameMap.getOrDefault(sid, "仓库_" + sid); String spName = storeNameMap.getOrDefault(sid, "仓库_" + sid);
...@@ -667,17 +692,50 @@ public class MacroPlannerDataConverter { ...@@ -667,17 +692,50 @@ public class MacroPlannerDataConverter {
ctx.spByStoreId.put(sid, sp); ctx.spByStoreId.put(sid, sp);
} }
// 3.3 ProductSpMapping + 记录每个物料的成品库 (首个库存点) // 3.3 ProductSpMapping + 记录每个物料的成品库 (库存/投料/订单全部映射, 默认库兜底)
// 预构建 materialId → storeIds 映射 (一个料可对应多个库房)
Map<String, Set<Long>> supportingStoreIdsByMaterialId = new HashMap<>();
for (Routingsupporting rs : ctx.routingsupportings) {
if (rs.getMaterialId() != null && rs.getStoreId() != null) {
supportingStoreIdsByMaterialId
.computeIfAbsent(rs.getMaterialId(), k -> new LinkedHashSet<>())
.add(rs.getStoreId());
}
}
Map<String, Set<Long>> orderStoreIdsByMaterialId = new HashMap<>();
for (ApsDemandOrder ado : ctx.apsDemandOrders) {
if (ado.getMmid() != null && ado.getStockid() != null) {
orderStoreIdsByMaterialId
.computeIfAbsent(ado.getMmid(), k -> new LinkedHashSet<>())
.add(ado.getStockid());
}
}
for (Material m : ctx.materialByMaterialId.values()) { for (Material m : ctx.materialByMaterialId.values()) {
Product p = ctx.productByMaterialId.get(m.getId()); Product p = ctx.productByMaterialId.get(m.getId());
StockingPoint firstSp = null; StockingPoint firstSp = null;
if (m.getMaterialStocks() != null) { Set<String> mappedSpIds = new HashSet<>();
for (Stock s : m.getMaterialStocks()) {
if (s.getStoreId() == null) { // 1. 库存库房: 一个料可存放在多个库房
continue; for (Stock s : m.getMaterialStocks()) {
if (s.getStoreId() == null) {
continue;
}
StockingPoint sp = ctx.spByStoreId.get(s.getStoreId());
if (sp != null && mappedSpIds.add(sp.getId())) {
productSpMappings.add(new ProductSpMapping(p, sp));
if (firstSp == null) {
firstSp = sp;
} }
StockingPoint sp = ctx.spByStoreId.get(s.getStoreId()); }
if (sp != null) { }
// 2. 投料库房 (Routingsupporting): 一个料可在多个库房投料
Set<Long> supStoreIds = supportingStoreIdsByMaterialId.get(m.getId());
if (supStoreIds != null) {
for (Long storeId : supStoreIds) {
StockingPoint sp = ctx.spByStoreId.get(storeId);
if (sp != null && mappedSpIds.add(sp.getId())) {
productSpMappings.add(new ProductSpMapping(p, sp)); productSpMappings.add(new ProductSpMapping(p, sp));
if (firstSp == null) { if (firstSp == null) {
firstSp = sp; firstSp = sp;
...@@ -685,10 +743,27 @@ public class MacroPlannerDataConverter { ...@@ -685,10 +743,27 @@ public class MacroPlannerDataConverter {
} }
} }
} }
// 3. 订单库房 (ApsDemandOrder.stockid)
Set<Long> ordStoreIds = orderStoreIdsByMaterialId.get(m.getId());
if (ordStoreIds != null) {
for (Long storeId : ordStoreIds) {
StockingPoint sp = ctx.spByStoreId.get(storeId);
if (sp != null && mappedSpIds.add(sp.getId())) {
productSpMappings.add(new ProductSpMapping(p, sp));
if (firstSp == null) {
firstSp = sp;
}
}
}
}
// 4. 仍无库房: 按物料类型建默认库
if (firstSp == null) { if (firstSp == null) {
// 无库存记录, 建默认成品库 boolean isRaw = "MP".equals(m.getMaterialTypeName());
firstSp = new StockingPoint("SP_FG_" + m.getId(), String spId = isRaw ? "SP_RM_" + m.getId() : "SP_FG_" + m.getId();
"成品库_" + pickName(m.getName(), m.getId())); String spName = isRaw ? "原材料库" : "成品库";
firstSp = new StockingPoint(spId, spName);
stockingPoints.add(firstSp); stockingPoints.add(firstSp);
productSpMappings.add(new ProductSpMapping(p, firstSp)); productSpMappings.add(new ProductSpMapping(p, firstSp));
} }
...@@ -1058,16 +1133,18 @@ public class MacroPlannerDataConverter { ...@@ -1058,16 +1133,18 @@ public class MacroPlannerDataConverter {
} }
} }
/** WEEK 维度: 每周一个 Period (周一起始, 7天, 最后一周可能不足7天) */ /** WEEK 维度: 每周一个 Period (自然周: 周一起始, 7天, 末周可能不足7天) */
private void createWeekPeriods(LocalDate baseDate, int periodCount, LocalDate horizonEnd) { private void createWeekPeriods(LocalDate baseDate, int periodCount, LocalDate horizonEnd) {
// 对齐到 baseDate 所在自然周的周一
LocalDate weekStart = baseDate.with(DayOfWeek.MONDAY);
for (int i = 0; i < periodCount; i++) { for (int i = 0; i < periodCount; i++) {
LocalDate weekStart = baseDate.plusDays(i * 7L); LocalDate ws = weekStart.plusDays(i * 7L);
LocalDate weekEnd = weekStart.plusDays(7); LocalDate weekEnd = ws.plusDays(7);
if (weekEnd.isAfter(horizonEnd)) { if (weekEnd.isAfter(horizonEnd)) {
weekEnd = horizonEnd; weekEnd = horizonEnd;
} }
long durationDays = java.time.temporal.ChronoUnit.DAYS.between(weekStart, weekEnd); long durationDays = ChronoUnit.DAYS.between(ws, weekEnd);
periods.add(new Period(i, "W" + (i + 1) + "(" + weekStart + ")", (double) durationDays, weekStart)); periods.add(new Period(i, "W" + (i + 1) + "(" + ws + ")", (double) durationDays, ws));
} }
} }
...@@ -1130,17 +1207,19 @@ public class MacroPlannerDataConverter { ...@@ -1130,17 +1207,19 @@ public class MacroPlannerDataConverter {
} }
} }
// 确定需求时间范围: 优先用 [begintime, endtime), 否则用 deliverytime 作为单点 // 确定需求时间范围: 优先用 [begintime, endtime), 否则 deliverytime 作为结束时间
LocalDate orderStart, orderEnd; LocalDate orderStart, orderEnd;
if (ado.getBegintime() != null && ado.getEndtime() != null) { if (ado.getBegintime() != null && ado.getEndtime() != null) {
orderStart = ado.getBegintime().toLocalDate(); orderStart = ado.getBegintime().toLocalDate();
orderEnd = ado.getEndtime().toLocalDate(); orderEnd = ado.getEndtime().toLocalDate();
} else if (ado.getDeliverytime() != null) { } else if (ado.getDeliverytime() != null) {
orderStart = ado.getDeliverytime().toLocalDate(); // deliverytime 为结束时间: 起始日=所在月1号, 结束日=deliverytime(含当天)
orderEnd = orderStart.plusDays(1); LocalDate deliveryDate = ado.getDeliverytime().toLocalDate();
orderStart = deliveryDate.withDayOfMonth(1);
orderEnd = deliveryDate.plusDays(1); // +1 使结束时间包含当天
} else { } else {
// 无时间信息, 放入最后一个周期 // 无时间信息, 放入最后一个周期
salesDemands.add(new SalesDemand(p, sp, lastPeriod, qty, priority)); salesDemands.add(new SalesDemand(p, sp, lastPeriod, qty, priority, ado.getId()));
continue; continue;
} }
...@@ -1152,18 +1231,33 @@ public class MacroPlannerDataConverter { ...@@ -1152,18 +1231,33 @@ public class MacroPlannerDataConverter {
totalRangeDays = 1; totalRangeDays = 1;
} }
// 遍历周期, 按重叠天数比例拆分需求量 // 收集所有与订单时间范围重叠的周期
boolean matched = false; List<Period> overlapPeriods = new ArrayList<>();
for (Period per : periods) { for (Period per : periods) {
long overlapDays = overlappingDays(per, orderStart, orderEnd); if (overlappingDays(per, orderStart, orderEnd) > 0) {
if (overlapDays > 0) { overlapPeriods.add(per);
double periodQty = qty * overlapDays / totalRangeDays;
salesDemands.add(new SalesDemand(p, sp, per, periodQty, priority));
matched = true;
} }
} }
if (!matched) {
salesDemands.add(new SalesDemand(p, sp, lastPeriod, qty, priority)); if (overlapPeriods.isEmpty()) {
salesDemands.add(new SalesDemand(p, sp, lastPeriod, qty, priority, ado.getId()));
} else {
// 按重叠天数比例拆分需求量: 每期四舍五入取整, 最后一期补差保证总和等于总数
int totalQty = (int) Math.round(qty);
int allocated = 0;
int n = overlapPeriods.size();
for (int i = 0; i < n; i++) {
Period per = overlapPeriods.get(i);
int periodQty;
if (i == n - 1) {
periodQty = totalQty - allocated;
} else {
long overlapDays = overlappingDays(per, orderStart, orderEnd);
periodQty = (int) Math.round(qty * overlapDays / (double) totalRangeDays);
allocated += periodQty;
}
salesDemands.add(new SalesDemand(p, sp, per, periodQty, priority, ado.getId()));
}
} }
} }
log.info("构建 SalesDemand: {}", salesDemands.size()); log.info("构建 SalesDemand: {}", salesDemands.size());
......
...@@ -10,14 +10,21 @@ public class SalesDemand { ...@@ -10,14 +10,21 @@ public class SalesDemand {
private final Period period; private final Period period;
private final double quantity; // 需求总量 private final double quantity; // 需求总量
private final double priority; // 需求优先级 private final double priority; // 需求优先级
private final String demandOrderId; // 来源订单ID (ApsDemandOrder.id), 可空
public SalesDemand(Product product, StockingPoint stockingPoint, Period period, public SalesDemand(Product product, StockingPoint stockingPoint, Period period,
double quantity, double priority) { double quantity, double priority) {
this(product, stockingPoint, period, quantity, priority, null);
}
public SalesDemand(Product product, StockingPoint stockingPoint, Period period,
double quantity, double priority, String demandOrderId) {
this.product = product; this.product = product;
this.stockingPoint = stockingPoint; this.stockingPoint = stockingPoint;
this.period = period; this.period = period;
this.quantity = quantity; this.quantity = quantity;
this.priority = priority; this.priority = priority;
this.demandOrderId = demandOrderId;
} }
public Product getProduct() { return product; } public Product getProduct() { return product; }
...@@ -25,6 +32,7 @@ public class SalesDemand { ...@@ -25,6 +32,7 @@ public class SalesDemand {
public Period getPeriod() { return period; } public Period getPeriod() { return period; }
public double getQuantity() { return quantity; } public double getQuantity() { return quantity; }
public double getPriority() { return priority; } public double getPriority() { return priority; }
public String getDemandOrderId() { return demandOrderId; }
public String getKey() { public String getKey() {
return product.getId() + "_" + stockingPoint.getId() + "_" + period.getIndex(); return product.getId() + "_" + stockingPoint.getId() + "_" + period.getIndex();
......
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