xiaoding721
2024-10-15 4b9a2cb1df3fb79c51f4982b62236c35e27846b7
_Main/BL/Type_AssemblyOnlinePlanCell/StaticMethod_RefreshData.qbl
@@ -7,83 +7,83 @@
{
  TextBody:
  [*
    macroPlan.AssemblyOnlinePlanRow( relflush );
    macroPlan.AssemblyOnlinePlanColumn( relflush );
    // 找装配线行
    oprs := selectsortedset( opt, OfflinePlanRow, tempOPR,
                             tempOPR.ProductionLine() = "DL MoMo"
                             or
                             tempOPR.ProductionLine() = "CC MoMo"
                             or
                             tempOPR.ProductionLine() = "DL ZKM"
                             ,
                             tempOPR.ProductionLine(), tempOPR.ProductID(), tempOPR.Type() );
    opcs := selectsortedset( opt, OfflinePlanColumn, tempOPC, true, tempOPC.ColumnDate() );
    // 生成表格
    traverse ( opcs, Elements, opc ) {
      aopc := macroPlan.AssemblyOnlinePlanColumn( relnew, ColumnDate := opc.ColumnDate(), ColumnIndex := opc.ColumnIndex() );
      traverse ( oprs, Elements, opr ) {
        aopr := select( macroPlan, AssemblyOnlinePlanRow, tempAOPR, tempAOPR.ProductID() = opr.ProductID() and tempAOPR.ProductionLine() = opr.ProductionLine() and tempAOPR.Type() = opr.Type() );
        if ( isnull( aopr ) ) {
          aopr := macroPlan.AssemblyOnlinePlanRow( relnew, ProductID := opr.ProductID(), ProductionLine := opr.ProductionLine(), Type := opr.Type() );
        }
        cellOPC := select( opr, OfflinePlanCell, tempOPC, tempOPC.OfflinePlanColumn() = opc );
        if ( not isnull( cellOPC ) ) {
          cellAOPC := aopc.AssemblyOnlinePlanCell( relnew, Value := cellOPC.Value() );
          cellAOPC.AssemblyOnlinePlanRow( relset, aopr );
        }
      }
    }
    // 处理日历事件
    pls := selectuniquevalues( macroPlan, AssemblyOnlinePlanRow, tempAOPR, true, tempAOPR.ProductionLine() );
    traverse ( pls, Elements, pl ) {
      targetQuantity := ifexpr( pl = "CC MoMo", guard( macroPlan.AssemblyOnlineQuantity().CCMoMo(), 0 ),
                                ifexpr( pl = "DL MoMo", guard( macroPlan.AssemblyOnlineQuantity().DLMoMo(), 0 ), guard( macroPlan.AssemblyOnlineQuantity().DLZKM(), 0 ) )
                               );
      u           := select( macroPlan, Unit, tempU, tempU.ID() = pl );
      drainPs     := selectset( u, UnitCalendar.Participation, tempP, guard( tempP.Event().Subject().Regex( "拉空" ), false ) );
      lineLyingPs := selectset( u, UnitCalendar.Participation, tempP, guard( tempP.Event().Subject().Regex( "铺线" ), false ) );
      // 处理排空
      info( "当前产线:", pl, "    处理拉空--------------------------" );
      traverse ( drainPs, Elements, p ) {
        traverse ( p, ExplicitTimeInterval, eti ) {
          info( "开始时间:", eti.Start().Format( "Y-M2-D2" ), "    结束时间:", eti.End().Format( "Y-M2-D2" ) );
          // 前一天日历
          aopc := select( macroPlan, AssemblyOnlinePlanColumn, tempAOPC, tempAOPC.ColumnDate() = ( eti.Start().Date() - 1 ) );
          info( "需要拉空的上线计划时间:", aopc.ColumnDate().Format( "Y-M2-D2" ) );
          aoprs := selectset( macroPlan, AssemblyOnlinePlanRow, tempAOPR, tempAOPR.ProductionLine() = pl and tempAOPR.Type() = "2" and
                              exists( tempAOPR, AssemblyOnlinePlanCell, tempAOPC, tempAOPC.AssemblyOnlinePlanColumn() = aopc and tempAOPC.Value() <> "" ) );
          aopr  := maxselect( aoprs, Elements.AssemblyOnlinePlanCell, tempAOPC, tempAOPC.AssemblyOnlinePlanColumn() = aopc,
                              [Number]tempAOPC.Value().ReplaceAll( "#0", "" ) );
          cell  := select( macroPlan, AssemblyOnlinePlanRow.AssemblyOnlinePlanCell, tempAOPC, tempAOPC.AssemblyOnlinePlanRow().ProductionLine() = pl and tempAOPC.AssemblyOnlinePlanColumn() = aopc and
                           tempAOPC.AssemblyOnlinePlanRow().Type() = "1" and tempAOPC.AssemblyOnlinePlanRow().ProductID() = aopr.AssemblyOnlinePlanRow().ProductID() );
          cell.Value( [String] ( [Number]cell.Value() - targetQuantity ) );
        }
      }
      info( "当前产线:", pl, "    处理铺线--------------------------" );
      // 处理铺线
      traverse ( lineLyingPs, Elements, p ) {
        traverse ( p, ExplicitTimeInterval, eti ) {
          info( "开始时间:", eti.Start().Format( "Y-M2-D2" ), "    结束时间:", eti.End().Format( "Y-M2-D2" ) );
          info( "需要铺线的上线计划时间:", eti.Start().Format( "Y-M2-D2" ) );
          aopc  := select( macroPlan, AssemblyOnlinePlanColumn, tempAOPC, tempAOPC.ColumnDate() = eti.Start().Date() );
          aoprs := selectset( macroPlan, AssemblyOnlinePlanRow, tempAOPR, tempAOPR.ProductionLine() = pl and tempAOPR.Type() = "2" and
                              exists( tempAOPR, AssemblyOnlinePlanCell, tempAOPC, tempAOPC.AssemblyOnlinePlanColumn() = aopc and tempAOPC.Value() <> "" ) );
          aopr  := minselect( aoprs, Elements.AssemblyOnlinePlanCell, tempAOPC, tempAOPC.AssemblyOnlinePlanColumn() = aopc,
                              [Number]tempAOPC.Value().ReplaceAll( "#0", "" ) );
          cell  := select( macroPlan, AssemblyOnlinePlanRow.AssemblyOnlinePlanCell, tempAOPC, tempAOPC.AssemblyOnlinePlanRow().ProductionLine() = pl and tempAOPC.AssemblyOnlinePlanColumn() = aopc and
                           tempAOPC.AssemblyOnlinePlanRow().Type() = "1" and tempAOPC.AssemblyOnlinePlanRow().ProductID() = aopr.AssemblyOnlinePlanRow().ProductID() );
          cell.Value( [String] ( [Number]cell.Value() + targetQuantity ) );
        }
      }
    }
    //macroPlan.AssemblyOnlinePlanRow( relflush );
    //macroPlan.AssemblyOnlinePlanColumn( relflush );
    //
    //// 找装配线行
    //oprs := selectsortedset( opt, OfflinePlanRow, tempOPR,
    //                         tempOPR.ProductionLine() = "DL MoMo"
    //                         or
    //                         tempOPR.ProductionLine() = "CC MoMo"
    //                         or
    //                         tempOPR.ProductionLine() = "DL ZKM"
    //                         ,
    //                         tempOPR.ProductionLine(), tempOPR.ProductID(), tempOPR.Type() );
    //opcs := selectsortedset( opt, OfflinePlanColumn, tempOPC, true, tempOPC.ColumnDate() );
    //
    //// 生成表格
    //traverse ( opcs, Elements, opc ) {
    //  aopc := macroPlan.AssemblyOnlinePlanColumn( relnew, ColumnDate := opc.ColumnDate(), ColumnIndex := opc.ColumnIndex() );
    //  traverse ( oprs, Elements, opr ) {
    //    aopr := select( macroPlan, AssemblyOnlinePlanRow, tempAOPR, tempAOPR.ProductID() = opr.ProductID() and tempAOPR.ProductionLine() = opr.ProductionLine() and tempAOPR.Type() = opr.Type() );
    //    if ( isnull( aopr ) ) {
    //      aopr := macroPlan.AssemblyOnlinePlanRow( relnew, ProductID := opr.ProductID(), ProductionLine := opr.ProductionLine(), Type := opr.Type() );
    //    }
    //
    //    cellOPC := select( opr, OfflinePlanCell, tempOPC, tempOPC.OfflinePlanColumn() = opc );
    //    if ( not isnull( cellOPC ) ) {
    //      cellAOPC := aopc.AssemblyOnlinePlanCell( relnew, Value := cellOPC.Value() );
    //      cellAOPC.AssemblyOnlinePlanRow( relset, aopr );
    //    }
    //  }
    //}
    //
    //// 处理日历事件
    //pls := selectuniquevalues( macroPlan, AssemblyOnlinePlanRow, tempAOPR, true, tempAOPR.ProductionLine() );
    //traverse ( pls, Elements, pl ) {
    //  targetQuantity := ifexpr( pl = "CC MoMo", guard( macroPlan.AssemblyOnlineQuantity().CCMoMo(), 0 ),
    //                            ifexpr( pl = "DL MoMo", guard( macroPlan.AssemblyOnlineQuantity().DLMoMo(), 0 ), guard( macroPlan.AssemblyOnlineQuantity().DLZKM(), 0 ) )
    //                           );
    //
    //  u           := select( macroPlan, Unit, tempU, tempU.ID() = pl );
    //  drainPs     := selectset( u, UnitCalendar.Participation, tempP, guard( tempP.Event().Subject().Regex( "拉空" ), false ) );
    //  lineLyingPs := selectset( u, UnitCalendar.Participation, tempP, guard( tempP.Event().Subject().Regex( "铺线" ), false ) );
    //
    //  // 处理排空
    //  info( "当前产线:", pl, "    处理拉空--------------------------" );
    //  traverse ( drainPs, Elements, p ) {
    //    traverse ( p, ExplicitTimeInterval, eti ) {
    //      info( "开始时间:", eti.Start().Format( "Y-M2-D2" ), "    结束时间:", eti.End().Format( "Y-M2-D2" ) );
    //      // 前一天日历
    //      aopc := select( macroPlan, AssemblyOnlinePlanColumn, tempAOPC, tempAOPC.ColumnDate() = ( eti.Start().Date() - 1 ) );
    //      info( "需要拉空的上线计划时间:", aopc.ColumnDate().Format( "Y-M2-D2" ) );
    //      aoprs := selectset( macroPlan, AssemblyOnlinePlanRow, tempAOPR, tempAOPR.ProductionLine() = pl and tempAOPR.Type() = "2" and
    //                          exists( tempAOPR, AssemblyOnlinePlanCell, tempAOPC, tempAOPC.AssemblyOnlinePlanColumn() = aopc and tempAOPC.Value() <> "" ) );
    //      aopr  := maxselect( aoprs, Elements.AssemblyOnlinePlanCell, tempAOPC, tempAOPC.AssemblyOnlinePlanColumn() = aopc,
    //                          [Number]tempAOPC.Value().ReplaceAll( "#0", "" ) );
    //      cell  := select( macroPlan, AssemblyOnlinePlanRow.AssemblyOnlinePlanCell, tempAOPC, tempAOPC.AssemblyOnlinePlanRow().ProductionLine() = pl and tempAOPC.AssemblyOnlinePlanColumn() = aopc and
    //                       tempAOPC.AssemblyOnlinePlanRow().Type() = "1" and tempAOPC.AssemblyOnlinePlanRow().ProductID() = aopr.AssemblyOnlinePlanRow().ProductID() );
    //
    //      cell.Value( [String] ( [Number]cell.Value() - targetQuantity ) );
    //    }
    //  }
    //
    //  info( "当前产线:", pl, "    处理铺线--------------------------" );
    //  // 处理铺线
    //  traverse ( lineLyingPs, Elements, p ) {
    //    traverse ( p, ExplicitTimeInterval, eti ) {
    //      info( "开始时间:", eti.Start().Format( "Y-M2-D2" ), "    结束时间:", eti.End().Format( "Y-M2-D2" ) );
    //      info( "需要铺线的上线计划时间:", eti.Start().Format( "Y-M2-D2" ) );
    //      aopc  := select( macroPlan, AssemblyOnlinePlanColumn, tempAOPC, tempAOPC.ColumnDate() = eti.Start().Date() );
    //      aoprs := selectset( macroPlan, AssemblyOnlinePlanRow, tempAOPR, tempAOPR.ProductionLine() = pl and tempAOPR.Type() = "2" and
    //                          exists( tempAOPR, AssemblyOnlinePlanCell, tempAOPC, tempAOPC.AssemblyOnlinePlanColumn() = aopc and tempAOPC.Value() <> "" ) );
    //      aopr  := minselect( aoprs, Elements.AssemblyOnlinePlanCell, tempAOPC, tempAOPC.AssemblyOnlinePlanColumn() = aopc,
    //                          [Number]tempAOPC.Value().ReplaceAll( "#0", "" ) );
    //      cell  := select( macroPlan, AssemblyOnlinePlanRow.AssemblyOnlinePlanCell, tempAOPC, tempAOPC.AssemblyOnlinePlanRow().ProductionLine() = pl and tempAOPC.AssemblyOnlinePlanColumn() = aopc and
    //                       tempAOPC.AssemblyOnlinePlanRow().Type() = "1" and tempAOPC.AssemblyOnlinePlanRow().ProductID() = aopr.AssemblyOnlinePlanRow().ProductID() );
    //      cell.Value( [String] ( [Number]cell.Value() + targetQuantity ) );
    //    }
    //  }
    //}
  *]
}