From 48ce218f5329dd9a3e2ba8851b101a5b85f8aab4 Mon Sep 17 00:00:00 2001
From: hongjli <3117313295@qq.com>
Date: 星期一, 25 九月 2023 15:54:18 +0800
Subject: [PATCH] 产能分配结果优化
---
_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration2.qbl | 78 +++++++++++++++++++++++++++++++++-----
1 files changed, 67 insertions(+), 11 deletions(-)
diff --git a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration2.qbl b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration2.qbl
index 37b0364..3f70ca5 100644
--- a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration2.qbl
+++ b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration2.qbl
@@ -1,37 +1,93 @@
Quintiq file version 2.0
#parent: #root
StaticMethod IterativeGeneration2 (
+ GlobalOTDTable globalOTDTable,
ProductInStockingPoint_MP pisp,
Date targetDate,
- CapacityAllocationResultsRuleConfiguration carrcs,
+ CapacityAllocationResultsRuleConfigurations carrcs,
Number numberOfLayers,
- Real firstLevelSupply
+ NewSupply firstLevelSupply,
+ Real currentLayerDependentDemandQuantity
)
{
TextBody:
[*
numberOfLayers++;
- info( "灞傛暟锛�", numberOfLayers, " 鐩爣鏃堕棿锛�", targetDate.Format( "Y-M2-D2" ) );
-
+ info( "鐩爣鏃堕棿锛�", targetDate.Format( "Y-M2-D2" ) );
+ info( pisp.Name() );
traverse ( pisp, ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ), pispippl, pispippl.Start().Date() = targetDate ) {
traverse ( pispippl, NewSupply, ns, ns.Quantity() > 0 ) {
- info( "褰撳墠渚涘簲鐨刾isp锛�", ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name() );
if ( numberOfLayers = 1 ) {
- firstLevelSupply := ns.Quantity();
+ firstLevelSupply := ns;
}
- if ( guard( ns.PeriodTask_MP().astype( PeriodTaskOperation ).DependentDemand( relsize ) > 0, false ) ) {
- traverse ( ns, PeriodTask_MP.astype( PeriodTaskOperation ).DependentDemand, dd ) {
- CapacityAllocationResults::IterativeGeneration2( dd.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP(),
+ ontype( ns.PeriodTask_MP() ) {
+ PeriodTaskOperation as pto : {
+ info( "Operation鍛ㄦ湡浠诲姟..." );
+ traverse ( ns, PeriodTask_MP.astype( PeriodTaskOperation ).DependentDemand, dd ) {
+ currentLayerDependentDemandQuantity := currentLayerDependentDemandQuantity *
+ ns.ProcessOutput().astype( OperationOutput ).Quantity() *
+ dd.ProcessInput().astype( OperationInput ).Quantity();
+ info( "灞傛暟锛�", numberOfLayers, " 褰撳墠渚涘簲鐨刾isp锛�", ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name(), " 鎬讳緵搴斿�硷細", ns.Quantity(), " 闇�瑕佷緵搴斿�硷細", currentLayerDependentDemandQuantity,
+ " 褰撳墠闇�姹俻isp锛�", dd.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name(), " 闇�姹傚�硷細", currentLayerDependentDemandQuantity );
+ info( "-----------------------------------------------------------------------------------------------------------------" );
+ CapacityAllocationResults::IterativeGeneration2( globalOTDTable,
+ dd.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP(),
+ targetDate,
+ carrcs,
+ numberOfLayers,
+ firstLevelSupply,
+ currentLayerDependentDemandQuantity
+ );
+ }
+ carrc := select( carrcs, Elements, carrc, carrc.PanelMaterialCode() = ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID() );
+ if ( not isnull( carrc ) ) {
+ info( "鎵惧埌闈㈡澘鐗╂枡..." );
+ globalOTDTable.CapacityAllocationResults( relnew,
+ PanelBase := pto.Operation().UnitID(),
+ PanelMaterialCode := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID(),
+ NumberOfPanels := currentLayerDependentDemandQuantity,
+ PanelMeasurementUnit := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().UnitOfMeasureName(),
+ ModuleMaterialCode := firstLevelSupply.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID(),
+ NumberOfModules := firstLevelSupply.Quantity(),
+ ModuleMeasurementUnit := firstLevelSupply.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().UnitOfMeasureName(),
+ ModuleBase := guard( firstLevelSupply.PeriodTask_MP().astype( PeriodTaskOperation ).Operation().UnitID(), "杞﹂亾杩愯緭" ),
+ Division := carrc.Division(),
+ RequirementDate := ns.Start().Date(),
+ Date := ns.Start().Date(),
+ Description := "",
+ ID := OS::GenerateGUIDAsString(),
+ ProductID := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID(),
+ StockingPointID := "",
+ UserQuantity := currentLayerDependentDemandQuantity,
+ ManufacturedDate := Date::MinDate()
+ );
+
+ }
+ info( "-----------------------------------------------------------------------------------------------------------------" );
+ }
+
+ PeriodTaskLaneLeg as ptll : {
+ targetDependentDemand := select( ptll, DependentDemand, dd, dd.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID() = ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID() );
+ currentLayerDependentDemandQuantity := ifexpr( numberOfLayers = 1, targetDependentDemand.Quantity(), currentLayerDependentDemandQuantity );
+ info( "灞傛暟锛�", numberOfLayers," 褰撳墠渚涘簲鐨刾isp锛�", ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name(), " 鎬讳緵搴斿�硷細", ns.Quantity(), " 闇�瑕佷緵搴斿�硷細", currentLayerDependentDemandQuantity,
+ " 褰撳墠闇�姹俻isp锛�", targetDependentDemand.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name(), " 闇�姹傚�硷細", currentLayerDependentDemandQuantity );
+ info( "LaneLeg鍛ㄦ湡浠诲姟..." );
+ info( "-----------------------------------------------------------------------------------------------------------------" );
+ CapacityAllocationResults::IterativeGeneration2( globalOTDTable,
+ targetDependentDemand.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP(),
targetDate,
carrcs,
numberOfLayers,
- firstLevelSupply
+ firstLevelSupply,
+ currentLayerDependentDemandQuantity
);
}
}
- firstLevelSupply := 0.0;
+ if ( numberOfLayers = 1 ) {
+ firstLevelSupply := null( NewSupply );
+ }
}
}
*]
--
Gitblit v1.9.3