| | |
| | | TextBody: |
| | | [* |
| | | // Akari Sep-4-2024 (created) |
| | | owner.DispatchShiftSchedulingInformation( relflush ); |
| | | owner.DispatchShiftSchedulingLine( relflush ); |
| | | macroPlan := offlinePlan.MacroPlan(); |
| | | now := DateTime::Now(); |
| | | |
| | |
| | | unitIndexTree.Root().AddChild( unitHandle,i ); |
| | | } |
| | | |
| | | // productLines := selectuniquevalues( offlinePlan,NewOfflinePlanRow,row,row.ProductionLine() ); |
| | | productLinesQuantityNameValueTree := NamedValueTree::Create(); |
| | | traverse( offlinePlan,NewOfflinePlanRow,row ){ |
| | | 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 ),null( NamedValue )); |
| | | if( not isnull( productLinesQuantity )){ |
| | | productLinesQuantity.SetValue( productLinesQuantity.GetValueAsReal() + cell.Quantity() ); |
| | | }else{ |
| | | productLinesQuantityNameValueTree.Root().AddChild( productLinesQuantityHandle, cell.Quantity() ); |
| | | } |
| | | } |
| | | } |
| | | lines := construct( DispatchShiftSchedulingLines ); |
| | | lineIndexTree := NamedValueTree::Create(); |
| | | |
| | | products := construct( DispatchShiftSchedulingProducts ); |
| | | productIndexTree := NamedValueTree::Create(); |
| | | |
| | | //productionDetails := construct( DispatchShiftSchedulingDetails ); |
| | | //productionDetailIndexTree := NamedValueTree::Create(); |
| | | traverse( offlinePlan,NewOfflinePlanRow,row ){ |
| | | productID := row.ProductID(); |
| | | productLine := row.ProductionLine(); |
| | | line := null( DispatchShiftSchedulingLine ); |
| | | factory := constnull( Unit ); |
| | | { |
| | | unitHandle := unitIndexTree.GetHandle( productLine ); |
| | | unitHandle := unitIndexTree.GetHandle( row.ProductionLine() ); |
| | | unitIndex := guard( unitIndexTree.Root().Child( unitHandle ), null( NamedValue )); |
| | | if( not isnull( unitIndex )){ |
| | | unit := units.Element( unitIndex.GetValueAsNumber() ); |
| | |
| | | } |
| | | 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()){ |
| | | 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 ); |
| | | product := null( DispatchShiftSchedulingProduct ); |
| | | { |
| | | 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 ); |
| | | 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() ); |
| | | } |
| | | } |
| | | if( shiftVolume <> 0 ){ |
| | | shiftSchedulingInformations := DispatchShiftSchedulingInformation::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 ); |
| | | traverse( lines,Elements,line ){ |
| | | line.CalculateLineQuantity(); |
| | | |
| | | // 1000 |
| | | lineQuantity := line.LineQuantity(); |
| | | |
| | | if( not isnull( shiftDayTime )){ |
| | | shiftSchedulingInformation.ShiftStartDate( shiftDayTime.StartDateTime() ); |
| | | shiftSchedulingInformation.ShiftEndDate( shiftDayTime.EndDateTIme() ); |
| | | } |
| | | if( not isnull( factory )){ |
| | | shiftSchedulingInformation.FactoryName( factory.Name() ); |
| | | 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() ); |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | //} |
| | | *] |
| | | } |