rislai
2023-10-30 f35a5b36bf85e6894bca1296c64a7418ccb3f4c1
修复优先级因子计算BUG
已修改1个文件
40 ■■■■■ 文件已修改
_Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl
@@ -16,53 +16,42 @@
    
    score := 0.0;
    remindFormula := formula;
    // 遍历优先级因子配置
    if( not remindFormula = '' )
    {
    if( not remindFormula = '' ){
            // 从起始位置开始匹配 
            if(remindFormula.StartsWith( "+" ))
            {
            if(remindFormula.StartsWith( "+" )){
                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
                score := PriorityResult::GetDetailsValue( customerOrder,remindFormula,macroPlan,globalOTDTable); 
                score := lastScore + score;
                // 截取掉已经计算的优先级因子 递归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score,globalOTDTable);
            }
            else if( remindFormula.StartsWith( "-" ))
            {
                score := score + PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score,globalOTDTable);
            }else if( remindFormula.StartsWith( "-" )){
                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
                score := PriorityResult::GetDetailsValue( customerOrder,remindFormula,macroPlan,globalOTDTable);
                score := lastScore - score;
                
                // 截取掉已经计算的优先级因子 递归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score,globalOTDTable);
            }
            else if( remindFormula.StartsWith( "*" ) )
            {
                score := score + PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score,globalOTDTable);
            }else if( remindFormula.StartsWith( "*" ) ){
                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
                score := PriorityResult::GetDetailsValue( customerOrder,remindFormula,macroPlan,globalOTDTable);
                score := lastScore * score;
                
                // 截取掉已经计算的优先级因子 递归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score,globalOTDTable);
            }
            else if( remindFormula.StartsWith( "/" ) )
            {
                score := score + PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score,globalOTDTable);
            }else if( remindFormula.StartsWith( "/" ) ){
                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
                score := PriorityResult::GetDetailsValue( customerOrder,remindFormula,macroPlan,globalOTDTable);
                score := lastScore / score;
                
                // 截取掉已经计算的优先级因子 递归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score,globalOTDTable);
            }
            else if( remindFormula.StartsWith( "(" ) )
            {
                score := score + PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score,globalOTDTable);
            }else if( remindFormula.StartsWith( "(" ) ){
                // 找到第一个结束的 )
                // 计算括号中的内容
                rightBracket := remindFormula.FindString( ")",0);
@@ -71,17 +60,14 @@
                
                // 截取 ) 后的字符继续进行计算
                remindFormula := remindFormula.SubString( rightBracket,remindFormula.Length()-1);
            }
            else
            {
            }else{
                // 不是符号 直接获取计算后的数值
                score := PriorityResult::GetDetailsValue( customerOrder,remindFormula,macroPlan,globalOTDTable);
                // 截取掉已经计算的优先级因子 递归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score,globalOTDTable);
                score := PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score,globalOTDTable);
            }
    }
    // 没有匹配 公式计算完成
    return score;
  *]