| | |
| | | { |
| | | TextBody: |
| | | [* |
| | | // yypsybs Aug-18-2023 (created) |
| | | // 获取有序的待处理记录 |
| | | toDealList := construct( MappingOperations ); |
| | | if( not isnull( businessTypes ) and businessTypes.Size() > 0 ) { |
| | | toDealList := selectsortedset( this, MappingOperation, item, |
| | | // businessTypes.Find( item.BusinessType() ) >= 0, |
| | | businessTypes.Difference( businessTypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0, |
| | | item.SequenceNumber() ); |
| | | } else { |
| | | toDealList := selectsortedset( this, MappingOperation, item, |
| | | true, |
| | | item.SequenceNumber() ); |
| | | } |
| | | // 逐条处理,首次处理时删除steps |
| | | dealtRoutingIds := construct( Strings ); |
| | | routingList := construct( Routings ); |
| | | traverse( toDealList, Elements, item ) { |
| | | routingId := item.OrganCode() + "_" + item.ProductID(); |
| | | unitId := item.OrganCode() + "_" + item.PlantName() + "_" + item.ProcessSection(); |
| | | routingStepName := item.ProcessSection() + "_" + [String]item.SequenceNumber(); |
| | | operationId := item.OrganCode() + "_" + item.ProductID() + "_" + item.ProcessSection(); |
| | | // info( "========" ) |
| | | // info( "routingId:" + routingId ); |
| | | // info( "unitId:" + unitId ); |
| | | // info( "routingStepName:" + routingStepName ); |
| | | // info( "operationId:" + operationId ); |
| | | if( guard( item.Line(), "" ).Length() > 0 ) { |
| | | unitId := unitId + "_" + item.Line(); |
| | | operationId := operationId + "_" + item.Line() |
| | | } |
| | | routing := Routing::CreateOrUpdate( this, routingId ); |
| | | if( routingList.Find( routing ) < 0 ) { |
| | | routingList.Add( routing ); |
| | | } |
| | | // 删除steps(units关系、operations也会删除) |
| | | if( dealtRoutingIds.Find( routingId ) < 0 ) { |
| | | toDeleteSteps := selectset( routing, RoutingStep, routingStep, true ); |
| | | RoutingStep::Delete( toDeleteSteps ); |
| | | dealtRoutingIds.Add( routingId ); |
| | | } |
| | | // RoutingStep |
| | | routingStep := RoutingStep::FindByName( routing, routingStepName ); |
| | | if( isnull( routingStep ) ) { |
| | | routingStep := RoutingStep::Create( routing, routingStepName, "", true ); |
| | | } |
| | | // UnitOfMeasure |
| | | unitOfMeasure := UnitOfMeasure_MP::FindByName( this, item.UnitOfMeasureName() ); |
| | | if( isnull( unitOfMeasure ) ) { |
| | | error( "unit of measure [" + item.UnitOfMeasureName() + "] not found for routing [" + routingId + "]" ); |
| | | } |
| | | // Unit |
| | | unit := Unit::FindById( this, unitId ); |
| | | if( isnull( unit ) ) { |
| | | unit := this.Unit( relnew, |
| | | ID := unitId, Name := unitId, CapacityType := "Infinite", |
| | | DefaultGridX := 0, DefaultGridY := 0, |
| | | IsManuallyConfigured := false, |
| | | Currency_MP := this.BaseCurrency(), UnitOfMeasure_MP := unitOfMeasure ); |
| | | } |
| | | // Operation |
| | | haveMaxQty := item.MaximumQuantity() <> 0.0; |
| | | op := Operation::FindOperationTypeIndex( operationId ); |
| | | if( isnull( op)){ |
| | | op := Operation::Create( operationId, unit, operationId, routingStep, |
| | | Duration::Hours( item.UserLeadTime() ), Duration::Zero(), item.ActualCapacity(), false, |
| | | [Real]item.MinimumQuantity(), haveMaxQty, guard( [Real]item.MaximumQuantity(), Real::MaxReal() ), |
| | | 0.0, 0.0, false, true ); |
| | | } |
| | | |
| | | ManufactureLTProcessSection::CreateOrUpdate( op ); |
| | | } |
| | | info( "========" ) |
| | | // 遍历routing,进行link |
| | | lastStep := null( RoutingStep ); |
| | | traverse( routingList, Elements.RoutingStep, step ) { |
| | | // 同工艺路线时连接 |
| | | if( not isnull( lastStep ) and lastStep.Routing() = step.Routing() ) { |
| | | toLink := construct( RoutingSteps ); |
| | | toLink.Add( lastStep ); |
| | | // todo 存疑 |
| | | step.LinkOperations( toLink ); |
| | | } |
| | | lastStep := step; |
| | | } |
| | | //// yypsybs Aug-18-2023 (created) |
| | | //// 获取有序的待处理记录 |
| | | //toDealList := construct( MappingOperations ); |
| | | //if( not isnull( businessTypes ) and businessTypes.Size() > 0 ) { |
| | | // toDealList := selectsortedset( this, MappingOperation, item, |
| | | //// businessTypes.Find( item.BusinessType() ) >= 0, |
| | | // businessTypes.Difference( businessTypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0, |
| | | // item.SequenceNumber() ); |
| | | //} else { |
| | | // toDealList := selectsortedset( this, MappingOperation, item, |
| | | // true, |
| | | // item.SequenceNumber() ); |
| | | //} |
| | | //// 逐条处理,首次处理时删除steps |
| | | //dealtRoutingIds := construct( Strings ); |
| | | //routingList := construct( Routings ); |
| | | //traverse( toDealList, Elements, item ) { |
| | | // routingId := item.OrganCode() + "_" + item.ProductID(); |
| | | // unitId := item.OrganCode() + "_" + item.PlantName() + "_" + item.ProcessSection(); |
| | | // routingStepName := item.ProcessSection() + "_" + [String]item.SequenceNumber(); |
| | | // operationId := item.OrganCode() + "_" + item.ProductID() + "_" + item.ProcessSection(); |
| | | //// info( "========" ) |
| | | //// info( "routingId:" + routingId ); |
| | | //// info( "unitId:" + unitId ); |
| | | //// info( "routingStepName:" + routingStepName ); |
| | | //// info( "operationId:" + operationId ); |
| | | // if( guard( item.Line(), "" ).Length() > 0 ) { |
| | | // unitId := unitId + "_" + item.Line(); |
| | | // operationId := operationId + "_" + item.Line() |
| | | // } |
| | | // routing := Routing::CreateOrUpdate( this, routingId ); |
| | | // if( routingList.Find( routing ) < 0 ) { |
| | | // routingList.Add( routing ); |
| | | // } |
| | | // // 删除steps(units关系、operations也会删除) |
| | | // if( dealtRoutingIds.Find( routingId ) < 0 ) { |
| | | // toDeleteSteps := selectset( routing, RoutingStep, routingStep, true ); |
| | | // RoutingStep::Delete( toDeleteSteps ); |
| | | // dealtRoutingIds.Add( routingId ); |
| | | // } |
| | | // // RoutingStep |
| | | // routingStep := RoutingStep::FindByName( routing, routingStepName ); |
| | | // if( isnull( routingStep ) ) { |
| | | // routingStep := RoutingStep::Create( routing, routingStepName, "", true ); |
| | | // } |
| | | // // UnitOfMeasure |
| | | // unitOfMeasure := UnitOfMeasure_MP::FindByName( this, item.UnitOfMeasureName() ); |
| | | // if( isnull( unitOfMeasure ) ) { |
| | | // error( "unit of measure [" + item.UnitOfMeasureName() + "] not found for routing [" + routingId + "]" ); |
| | | // } |
| | | // // Unit |
| | | // unit := Unit::FindById( this, unitId ); |
| | | // if( isnull( unit ) ) { |
| | | // unit := this.Unit( relnew, |
| | | // ID := unitId, Name := unitId, CapacityType := "Infinite", |
| | | // DefaultGridX := 0, DefaultGridY := 0, |
| | | // IsManuallyConfigured := false, |
| | | // Currency_MP := this.BaseCurrency(), UnitOfMeasure_MP := unitOfMeasure ); |
| | | // } |
| | | // // Operation |
| | | // haveMaxQty := item.MaximumQuantity() <> 0.0; |
| | | // op := Operation::FindOperationTypeIndex( operationId ); |
| | | // if( isnull( op)){ |
| | | // op := Operation::Create( operationId, unit, operationId, routingStep, |
| | | // Duration::Hours( item.UserLeadTime() ), Duration::Zero(), item.ActualCapacity(), false, |
| | | // [Real]item.MinimumQuantity(), haveMaxQty, guard( [Real]item.MaximumQuantity(), Real::MaxReal() ), |
| | | // 0.0, 0.0, false, true ); |
| | | // } |
| | | // |
| | | // ManufactureLTProcessSection::CreateOrUpdate( op ); |
| | | //} |
| | | //info( "========" ) |
| | | //// 遍历routing,进行link |
| | | //lastStep := null( RoutingStep ); |
| | | //traverse( routingList, Elements.RoutingStep, step ) { |
| | | // // 同工艺路线时连接 |
| | | // if( not isnull( lastStep ) and lastStep.Routing() = step.Routing() ) { |
| | | // toLink := construct( RoutingSteps ); |
| | | // toLink.Add( lastStep ); |
| | | // // todo 存疑 |
| | | // step.LinkOperations( toLink ); |
| | | // } |
| | | // lastStep := step; |
| | | //} |
| | | *] |
| | | } |