Quintiq file version 2.0
|
#parent: #root
|
StaticMethod Dispatch (
|
Date startDate,
|
Date endDate,
|
const NewOfflinePlanTable offlinePlan,
|
RecycleBin owner
|
)
|
{
|
TextBody:
|
[*
|
// Akari Sep-4-2024 (created)
|
owner.DispatchShiftSchedulingLine( relflush );
|
macroPlan := offlinePlan.MacroPlan();
|
now := DateTime::Now();
|
|
shiftPatterns := selectset( macroPlan,ShiftPattern,object,true );
|
shiftPatternIndexTree := NamedValueTree::Create();
|
for( i := 0; i < shiftPatterns.Size(); i++){
|
shiftPattern := shiftPatterns.Element( i );
|
shiftPatternHandle := shiftPatternIndexTree.GetHandle( shiftPattern.Name() );
|
shiftPatternIndexTree.Root().AddChild( shiftPatternHandle,i );
|
}
|
|
units := selectset( macroPlan,Unit,object, true );
|
unitIndexTree := NamedValueTree::Create();
|
for( i := 0; i < units.Size(); i++){
|
unit := units.Element( i );
|
unitHandle := unitIndexTree.GetHandle( unit.Name() );
|
unitIndexTree.Root().AddChild( unitHandle,i );
|
}
|
|
lines := construct( DispatchShiftSchedulingLines );
|
lineIndexTree := NamedValueTree::Create();
|
|
products := construct( DispatchShiftSchedulingProducts );
|
productIndexTree := NamedValueTree::Create();
|
|
//productionDetails := construct( DispatchShiftSchedulingDetails );
|
//productionDetailIndexTree := NamedValueTree::Create();
|
traverse( offlinePlan,NewOfflinePlanRow,row ){
|
line := null( DispatchShiftSchedulingLine );
|
factory := constnull( Unit );
|
{
|
unitHandle := unitIndexTree.GetHandle( row.ProductionLine() );
|
unitIndex := guard( unitIndexTree.Root().Child( unitHandle ), null( NamedValue ));
|
if( not isnull( unitIndex )){
|
unit := units.Element( unitIndex.GetValueAsNumber() );
|
temp1 := unit;
|
temp2 := unit.Parent();
|
while( not isnull( temp1.Parent())){
|
temp2 := temp1;
|
temp1 := temp1.Parent();
|
}
|
factory := temp2;
|
}
|
|
lineHandle := lineIndexTree.GetHandle( row.ProductionLine() );
|
lineIndex := guard( lineIndexTree.Root().Child( lineHandle ),null( NamedValue ));
|
if( isnull( lineIndex )){
|
line := owner.DispatchShiftSchedulingLine( relnew,ID := IDHolder::GetGUID(),LineID := row.ProductionLine() );
|
line.FactoryName( factory.Name() );
|
line.InterfaceTime( now );
|
line.VersionName( macroPlan.MDSMacroPlan().Description() );
|
lines.Add( line );
|
lineIndexTree.Root().AddChild( lineHandle,lines.Size() - 1 );
|
}else{
|
line := lines.Element( lineIndex.GetValueAsNumber() );
|
}
|
}
|
|
traverse( row,NewOfflinePlanCell,cell, startDate <= cell.NewOfflinePlanColumn().StartDate() and endDate >= cell.NewOfflinePlanColumn().EndDate()){
|
product := null( DispatchShiftSchedulingProduct );
|
{
|
productHandle := productIndexTree.GetHandle( row.ProductionLine() + row.ProductID() + cell.NewOfflinePlanColumn().StartDate().AsQUILL() );
|
productIndex := guard( productIndexTree.Root().Child( productHandle ),null( NamedValue ));
|
if( isnull( productIndex )){
|
product := line.DispatchShiftSchedulingProduct( relnew,ProductID := row.ProductID() );
|
product.ProductionQuantity( cell.Quantity() );
|
line.ShiftDate( cell.NewOfflinePlanColumn().StartDate() );
|
line.ShiftName( cell.ShiftPatternName() );
|
products.Add( product );
|
productIndexTree.Root().AddChild( productHandle,products.Size() - 1 );
|
}else{
|
product := products.Element( productIndex.GetValueAsNumber() );
|
}
|
}
|
}
|
}
|
|
traverse( lines,Elements,line ){
|
line.CalculateLineQuantity();
|
|
// 1000
|
lineQuantity := line.LineQuantity();
|
|
tempProducts := selectsortedset( line,DispatchShiftSchedulingProduct,object,object.ProductionQuantity() );
|
|
if( line.ShiftName() = "3" ){
|
singleShiftVolume1 := lineQuantity / 3;
|
singleShiftVolume2 := lineQuantity / 3;
|
singleShiftVolume3 := lineQuantity / 3;
|
traverse( tempProducts,Elements,product ){
|
productionQuantity := product.ProductionQuantity();
|
|
if( singleShiftVolume1 > 0 and productionQuantity > 0){
|
tempProductQuantity := singleShiftVolume1 - productionQuantity;
|
detail := product.DispatchShiftSchedulingDetail( relnew,ShiftVolume := ifexpr( tempProductQuantity > 0 ,productionQuantity,singleShiftVolume1 ) ,SingleShiftName := "白班");
|
singleShiftVolume1 := singleShiftVolume1 - productionQuantity;
|
productionQuantity := productionQuantity - detail.ShiftVolume();
|
}else if(singleShiftVolume2 > 0 and productionQuantity > 0){
|
tempProductQuantity := singleShiftVolume2 - productionQuantity;
|
detail := product.DispatchShiftSchedulingDetail( relnew,ShiftVolume := ifexpr( tempProductQuantity > 0 ,productionQuantity,singleShiftVolume2 ) ,SingleShiftName := "二班");
|
singleShiftVolume2 := singleShiftVolume2 - productionQuantity;
|
productionQuantity := productionQuantity - detail.ShiftVolume();
|
}else if(singleShiftVolume3 > 0 and productionQuantity > 0){
|
tempProductQuantity := singleShiftVolume3 - productionQuantity;
|
detail := product.DispatchShiftSchedulingDetail( relnew,ShiftVolume := ifexpr( tempProductQuantity > 0 ,productionQuantity,singleShiftVolume3 ) ,SingleShiftName := "二班");
|
singleShiftVolume3 := singleShiftVolume3 - productionQuantity;
|
productionQuantity := productionQuantity - detail.ShiftVolume();
|
}
|
}
|
|
}else if( line.ShiftName() = "2" ){
|
// 500
|
singleShiftVolume1 := lineQuantity / 2;
|
singleShiftVolume2 := lineQuantity / 2;
|
traverse( tempProducts,Elements,product ){
|
productionQuantity := product.ProductionQuantity();
|
|
if( singleShiftVolume1 > 0 and productionQuantity > 0){
|
tempProductQuantity := singleShiftVolume1 - productionQuantity;
|
detail := product.DispatchShiftSchedulingDetail( relnew,ShiftVolume := ifexpr( tempProductQuantity > 0 ,productionQuantity,singleShiftVolume1 ) ,SingleShiftName := "白班");
|
singleShiftVolume1 := singleShiftVolume1 - productionQuantity;
|
productionQuantity := productionQuantity - detail.ShiftVolume();
|
}else if(singleShiftVolume2 > 0 and productionQuantity > 0){
|
tempProductQuantity := singleShiftVolume2 - productionQuantity;
|
detail := product.DispatchShiftSchedulingDetail( relnew,ShiftVolume := ifexpr( tempProductQuantity > 0 ,productionQuantity,singleShiftVolume1 ) ,SingleShiftName := "二班");
|
singleShiftVolume2 := singleShiftVolume2 - productionQuantity;
|
productionQuantity := productionQuantity - detail.ShiftVolume();
|
}
|
}
|
|
}else if( line.ShiftName() = "1" ){
|
singleShiftVolume1 := lineQuantity / 1;
|
traverse( tempProducts,Elements,product ){
|
productionQuantity := product.ProductionQuantity();
|
if( singleShiftVolume1 > 0 and productionQuantity > 0){
|
tempProductQuantity := singleShiftVolume1 - productionQuantity;
|
detail := product.DispatchShiftSchedulingDetail( relnew,ShiftVolume := ifexpr( tempProductQuantity > 0 ,productionQuantity,singleShiftVolume1 ) ,SingleShiftName := "白班");
|
singleShiftVolume1 := singleShiftVolume1 - productionQuantity;
|
productionQuantity := productionQuantity - detail.ShiftVolume();
|
}
|
}
|
|
}else{
|
// singleShiftVolume := lineQuantity / 1;
|
}
|
}
|
|
//traverse( offlinePlan,NewOfflinePlanRow,row ){
|
// productID := row.ProductID();
|
// productLine := row.ProductionLine();
|
// factory := constnull( Unit );
|
// {
|
// unitHandle := unitIndexTree.GetHandle( productLine );
|
// unitIndex := guard( unitIndexTree.Root().Child( unitHandle ), null( NamedValue ));
|
// if( not isnull( unitIndex )){
|
// unit := units.Element( unitIndex.GetValueAsNumber() );
|
// temp1 := unit;
|
// temp2 := unit.Parent();
|
// while( not isnull( temp1.Parent())){
|
// temp2 := temp1;
|
// temp1 := temp1.Parent();
|
// }
|
// factory := temp2;
|
// }
|
// }
|
// traverse( row,NewOfflinePlanCell,cell, startDate <= cell.NewOfflinePlanColumn().StartDate() and endDate >= cell.NewOfflinePlanColumn().EndDate()){
|
// productLinesQuantityHandle := productLinesQuantityNameValueTree.GetHandle( row.ProductionLine() + cell.NewOfflinePlanColumn().StartDate().AsQUILL() );
|
// productLinesQuantity := guard( productLinesQuantityNameValueTree.Root().Child( productLinesQuantityHandle ).GetValueAsReal(),0.0 );
|
//
|
// shiftDate := cell.NewOfflinePlanColumn().StartDate();
|
// shiftName := cell.ShiftPatternName();
|
// shiftVolume := cell.Quantity();
|
// shiftDayTime := constnull( ShiftDayTime );
|
// {
|
// shiftPatternHandle := shiftPatternIndexTree.GetHandle( shiftName );
|
// shiftPatternIndex := guard( shiftPatternIndexTree.Root().Child( shiftPatternHandle ),null( NamedValue ));
|
// if( not isnull( shiftPatternIndex )){
|
// shiftPattern := shiftPatterns.Element( shiftPatternIndex.GetValueAsNumber() );
|
// shiftDayTime := select( shiftPattern,ShiftDayTime,object,true );
|
// }
|
// }
|
// if( shiftVolume <> 0 ){
|
// shiftSchedulingInformations := DispatchShiftSchedulingLine::SplitShifts( owner,shiftName,shiftVolume,productLinesQuantity );
|
//
|
// traverse( shiftSchedulingInformations,Elements,shiftSchedulingInformation ){
|
// shiftSchedulingInformation.InterfaceTime( now );
|
// shiftSchedulingInformation.VersionName( macroPlan.MDSMacroPlan().Description() );
|
// shiftSchedulingInformation.Product( productID );
|
// shiftSchedulingInformation.ProductLine( productLine );
|
// shiftSchedulingInformation.ShiftDate( shiftDate );
|
//// shiftSchedulingInformation.InterfaceTime( now );
|
//// shiftSchedulingInformation.InterfaceTime( now );
|
//// shiftSchedulingInformation.InterfaceTime( now );
|
//// shiftSchedulingInformation.InterfaceTime( now );
|
//
|
//
|
// if( not isnull( shiftDayTime )){
|
// shiftSchedulingInformation.ShiftStartDate( shiftDayTime.StartDateTime() );
|
// shiftSchedulingInformation.ShiftEndDate( shiftDayTime.EndDateTIme() );
|
// }
|
// if( not isnull( factory )){
|
// shiftSchedulingInformation.FactoryName( factory.Name() );
|
// }
|
// }
|
// }
|
// }
|
//}
|
*]
|
}
|