yypsybs
2023-09-09 3cb5a54def670d97301f07170fcaad213bfc54f2
_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl
@@ -6,89 +6,89 @@
{
  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;
    //}
  *]
}