xiaoding721
2023-11-08 a3d30e9bbb7f6210cb5ce47b372814c5a0d87dc8
添加优先级计算的结果赋值到PriorityName
已添加1个文件
已修改1个文件
147 ■■■■ 文件已修改
_Main/BL/Relations/Relation_PriorityResult_CustomerOrder_CustomerOrder_PriorityResult.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_PriorityResult_CustomerOrder_CustomerOrder_PriorityResult.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation PriorityResult_CustomerOrder_CustomerOrder_PriorityResult
{
  #keys: '1[414996.0.57846264]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide CustomerOrder
  {
    #keys: '3[414996.0.57846266][414996.0.57846265][414996.0.57846267]'
    Cardinality: '0to1'
    ObjectDefinition: PriorityResult
    OwningSide: 'Reference'
  }
  RelationSide.RightSide PriorityResult
  {
    #keys: '3[414996.0.57846269][414996.0.57846268][414996.0.57846270]'
    Cardinality: '0to1'
    ObjectDefinition: CustomerOrder
    OwningSide: 'Reference'
  }
}
_Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl
@@ -12,15 +12,13 @@
    // NBoTk Sep-26-2023 (created)
    
    // å…ˆåˆ é™¤åŽ†å²çš„è·‘åˆ†è¯¦æƒ…
    traverse( macroPlan,PriorityResult,p)
    {
    traverse( macroPlan,PriorityResult,p){
          p.PriorityResultBusinessTypeDetail(relflush );
          p.Delete(); 
    }
    
    // è®¡ç®—客户订单的优先级得分 å›žå¡«æƒé‡æ•°æ® ç”Ÿæˆæ–°çš„Priority明细数据
    traverse( macroPlan,SalesDemand.astype( CustomerOrder ),e)
    {
    traverse( macroPlan,SalesDemand.astype( CustomerOrder ),e){
         // äº‹ä¸šéƒ¨ä¿¡æ¯
         businessType := e.BusinessType();
         
@@ -34,100 +32,72 @@
         priorityResult := macroPlan.PriorityResult(relnew,CustomerOrderID := e.ID(),BusinessType := businessType,Customer := e.CustomerName(),CustomerID := e.CustomerID(),
                                                     DemandDate := e.EndDate(),ProductID := e.ProductID(),Quantity := e.Quantity(),SalesSegmentName := e.SalesSegmentName(),
                                                     StockingPointID := e.StockingPointID(),UnitOfMeasureName := e.UnitOfMeasureName()
                                                     );
                                                     );
         priorityResult.CustomerOrder(relset, e);
         // åˆ¤æ–­æ˜¯é›†å›¢ è¿˜æ˜¯äº‹ä¸šéƒ¨
         if( businessType.FindString( "集团",0 ) <> -1)
         {
         if( businessType.FindString( "集团",0 ) <> -1){
              priorityResult.PriorityResultGroupDetail( relnew,BusinessType := businessType,Customer := e.CustomerName(),CustomerID := e.CustomerID(),
                                                        DemandDate := e.EndDate(),PriorityPolicyName := priorityPolicyName,PriorityResultScore := value,
                                                        Quantity := e.Quantity(),SalesSegmentName := e.SalesSegmentName(),StockingPointID := e.StockingPointID(),
                                                        UnitOfMeasureName := e.UnitOfMeasureName(),PriorityTotalScore := value
                                                        );
         }
         else
         {
         }else{
               priorityResult.PriorityResultBusinessTypeDetail( relnew,BusinessType := businessType,Customer := e.CustomerName(),CustomerID := e.CustomerID(),
                                                                DemandDate := e.EndDate(),PriorityPolicyName := priorityPolicyName,PriorityResultScore := value,
                                                                Quantity := e.Quantity(),SalesSegmentName := e.SalesSegmentName(),StockingPointID := e.StockingPointID(),
                                                                UnitOfMeasureName := e.UnitOfMeasureName(),PriorityTotalScore := value 
                                                                );      
         }
         }
    }
    
    // ä¼˜å…ˆçº§å› å­å¤„理完成后 æŽ’序回填数据
    traverse( macroPlan,PriorityResult,e){
      businessTypeScore := max( e,PriorityResultBusinessTypeDetail,p,
                                p.PriorityTotalScore()
                                );
      groupScore := max( e,PriorityResultGroupDetail,p,
                         p.PriorityTotalScore()
                         );
      value := maxvalue( businessTypeScore,groupScore);
      e.PriorityResultScore( value );
    }
    resultList := selectsortedset( macroPlan,PriorityResult,result,
                                   true,
                                   result.PriorityResultScore()
                                   -result.PriorityResultScore()
                                   )
    
    // Quintiq优先级分10级 éœ€è¦åˆ†æ®µè®¡ç®— å‘上取整
    subLevel := round( resultList.Size() div 10);
    subLevelCount := 0;
    // Quintiq优先级分10级 éœ€è¦åˆ†æ®µè®¡ç®— å‘下取整
    if( resultList.Size() >= 10){
        subListSize := resultList.Size() div 10;
        overListSize := resultList.Size() mod 10;
    
    priorityValue := 1;
    if( resultList.Size() <= 10 )
    {
        traverse( resultList,Elements,e)
        {
            obj := selectobject( macroPlan,SalesDemand.astype( CustomerOrder ),order,
                         order.ID() = e.CustomerOrderID()
                         );
            // è®¢å•数据不为空再做处理
            if( not isnull( obj ) )
            {
                  obj.PriorityName([String]priorityValue);
                  // åˆ›å»ºä¼˜å…ˆçº§æ•°æ® éœ€è¦å…ˆæ¸…除上一次的计算结果
                  // åˆ¤æ–­å½“前customerOrder是否存在
                  oldPriority := selectobject( macroPlan,Priority,p,p.Name() = [String]priorityValue);
                  if(isnull( oldPriority ) )
                  {
                        macroPlan.Priority(relnew,Weight := priorityValue,Name := [String]priorityValue);
                  }
        count := 10;
        point := 10;
        count1 := 0;
        flag := 0;
        for( i := 0 ; i < resultList.Size() - overListSize ; i := i + subListSize){
            subListCopy := subListSize;
            if (count <= overListSize){
                subListCopy := subListCopy + 1;
                flag := flag + 1;
            }
            // åˆ¤æ–­è®¡ç®—分段数量与Quintiq原始优先级
            //优先级+1
            priorityValue := priorityValue + 1;
            for( j := 0;j < subListCopy ; j++){
                element := resultList.Element( count1 * subListSize + j + flag );
                element.CustomerOrder().PriorityName( [String]point );
            }
            point --;
            count --;
            count1++;
        }
    }
    else
    {
        traverse( resultList,Elements,e)
        {
            obj := selectobject( macroPlan,SalesDemand.astype( CustomerOrder ),order,
                                 order.ID() = e.CustomerOrderID()
                                 );
            // è®¢å•数据不为空再做处理
            if( not isnull( obj ) )
            {
                  obj.PriorityName([String]priorityValue);
                  // åˆ›å»ºä¼˜å…ˆçº§æ•°æ® éœ€è¦å…ˆæ¸…除上一次的计算结果
                  // åˆ¤æ–­å½“前customerOrder是否存在
                  oldPriority := selectobject( macroPlan,Priority,p,p.Name() = [String]priorityValue);
                  if(isnull( oldPriority ) )
                  {
                        macroPlan.Priority(relnew,Weight := priorityValue,Name := [String]priorityValue);
                  }
            }
            // åˆ¤æ–­è®¡ç®—分段数量与Quintiq原始优先级
            subLevelCount := subLevelCount + 1;
            if( subLevelCount = subLevel )
            {
                // å½“到达分段数量后 ä¼˜å…ˆçº§+1 åˆ†æ®µè®¡æ•°ä»Ž0开始
                if( priorityValue < 10 )
                {
                      priorityValue := priorityValue + 1;
                }
                subLevelCount := 0;
            }
        }
    }else {
      point := 10;
      traverse( resultList,Elements,element){
        element.CustomerOrder().PriorityName([String]point);
        point --;
      }
    }
  *]
}