| 
					
				 | 
			
			
				@@ -92,9 +92,9 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             throw new ValidationException(StrFormatter.format("当前无法为【{}】进行调整,因为他/她尚未建立职位档案。请前往“职位及积分初定” -> 进行初定!", person.getString(FormConstant.NAME_KEY))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //对应SHR:oldHRJobFamilyid 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        long currentJobSeqId = currentPersonPosFile.getLong(String.join(".",PositionStructureConstant.NCKD_JOBLEVELHR,FormConstant.ID_KEY)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        long currentJobSeqId = currentPersonPosFile.getLong(String.join(".",PositionStructureConstant.NCKD_JOBSEQHR,FormConstant.ID_KEY)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //oldHRJobFamilynumber 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String currentJobSeqNumber = currentPersonPosFile.getString(String.join(".",PositionStructureConstant.NCKD_JOBLEVELHR,FormConstant.NUMBER_KEY)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String currentJobSeqNumber = currentPersonPosFile.getString(String.join(".",PositionStructureConstant.NCKD_JOBSEQHR,FormConstant.NUMBER_KEY)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         DynamicObject appraisalResult = currentPersonPosFile.getDynamicObject(PositionStructureConstant.NCKD_APPRAISALRESULT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //appraisalresultnumber 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String appraisalResultNumber = appraisalResult != null ? appraisalResult.getString(FormConstant.NUMBER_KEY) : null; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -117,7 +117,7 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         appraisalResultNumber = validateAppraisalResultConsistency(date, personId, personName, appraisalResultNumber); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //当前总积分(变动前) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //调动前累计的积分池(生涯积分) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         BigDecimal sumScore = currentPersonPosFile.getBigDecimal(PositionStructureConstant.NCKD_SUMSCORE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //当前职级(变动前) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -127,7 +127,7 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             throw new ValidationException(StrFormatter.format("数据异常,人员【{}】最新职位档案【档案ID:{}】没有职级。请联系管理员处理!", personName, currentPersonPosFile.getLong(FormConstant.ID_KEY))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //对应SHR:lastjobgradeindex 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        int currentJobLevelIndex = currentJobLevel.getInt(FormConstant.INDEX_KEY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int currentJobLevelIndex = currentJobLevel.getInt(FormConstant.JOBLEVELSEQ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 5.是否首次聘任 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //对应SHR:fistPR;922~926行 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -141,27 +141,28 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //对应SHR:minuspersonappraisal;930~945行 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         int minusPersonAppraisal = calcMinusPersonAppraisal(appraisalResultNumber, firstPR, usedAppraisalResult, jobLevelResult); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 8. 处理学历积分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //对应SHR:DiplomaScore;947~978行 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        BigDecimal diplomaScore = handleDiplomaScore(currentPersonPosFile, positionAppointment); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 9.如果是管理序列,则按职能序列进行调整 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //对应SHR:hrjobfamilynumber;989~993 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         jobSeq = handleJobSeq(jobSeq); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 9. 处理序列相关信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //对应SHR:995~1013 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        JobFamilyInfo jobFamilyInfo = processJobFamilyInfo(jobSeq, currentPersonPosFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        JobSeqInfo jobSeqInfo = processJobFamilyInfo(jobSeq, currentPersonPosFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 10. 处理职称/技能等级积分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 对应SHR:1015~1036 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         JobScoreInfo jobScoreInfo = handleJobScores(jobSeq, currentPersonPosFile, positionAppointment); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 8. 处理学历积分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //对应SHR:DiplomaScore;947~978行 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BigDecimal diplomaScore = handleDiplomaScore(currentPersonPosFile, positionAppointment,jobScoreInfo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 计算总积分;累计积分池的分 + 学历 + (职称分/技能分) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 对应SHR:allsumScore;1041行 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         BigDecimal allSumScore = sumScore.add(diplomaScore) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .add(jobScoreInfo.perProTitleScore) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .add(jobScoreInfo.quaLevelScore); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        jobScoreInfo.allSumScore = allSumScore; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 11. 获取序列对应的职级 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         DynamicObject[] jobLevelByJobSeq = getJobLevelByJobSeq(jobSeq); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -179,24 +180,30 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 12. 根据不同情况计算职级ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //对应SHR:JobGradeInfo;1044~1071行 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        DynamicObject jobLevel = calculateJobGradeId(jobSeq,jobScoreInfo,jobFamilyInfo,allSumScore,currentJobLevelIndex,minusPersonAppraisal,firstPR,jobLevelResult); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        DynamicObject jobLevel = calculateJobGradeId(jobSeq,jobScoreInfo, jobSeqInfo,allSumScore,currentJobLevelIndex,minusPersonAppraisal,firstPR,jobLevelResult); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //对应SHR:newjobgradeindex 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         int jobLevelIndex = jobLevel.getInt(FormConstant.JOBLEVELSEQ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 13. 处理排名相关信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //对应SHR:allowancerankpercent、toprankpercent、allowancerank、toprank;1073~1109行 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        RankingResult rankingInfo = getRankingInfo(personId, personName, date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        RankingResultInfo rankingInfo = getRankingInfo(personId, personName, date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 14. 处理序列转换或跨单位调动的特殊逻辑 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // SHR对应:1110~1136行 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (jobFamilyInfo.isSequenceChange) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (jobSeqInfo.isSequenceChange) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             System.out.println("序列切换,新职级号不能大于原序列职级序号"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             handleSequenceChange(jobLevelIndex,currentJobLevelIndex,rankingInfo,jobLevelMap,jobLevelResult,jobSeq); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             jobLevel = jobLevelResult.jobLevel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            jobLevelResult.jobSeqInfo = jobSeqInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            jobLevelResult.jobScoreInfo = jobScoreInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            jobLevelResult.rankingResultInfo = rankingInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return jobLevelResult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else if (jobFamilyInfo.isCrossUnitTransfer) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else if (jobSeqInfo.isCrossUnitTransfer) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             System.out.println("跨单位调动且未跨序列,平移处理"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             handleCrossUnitTransfer(jobLevelIndex,currentJobLevelIndex,rankingInfo,jobLevelMap,jobLevelResult,jobSeq); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             jobLevel = jobLevelResult.jobLevel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            jobLevelResult.jobSeqInfo = jobSeqInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            jobLevelResult.jobScoreInfo = jobScoreInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            jobLevelResult.rankingResultInfo = rankingInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return jobLevelResult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -220,6 +227,9 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         jobLevel = determineFinalJobGradeId(jobLevelIndex, jobScoreInfo, jobLevelMap, jobSeq, jobLevelResult, appraisalResultNumber); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         jobLevelResult.jobLevel = jobLevel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        jobLevelResult.jobSeqInfo = jobSeqInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        jobLevelResult.jobScoreInfo = jobScoreInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        jobLevelResult.rankingResultInfo = rankingInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return jobLevelResult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -304,7 +314,8 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public static DynamicObject handleJobSeq(DynamicObject jobSeq) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(JobSeqEnum.MANAGE.getCode().equalsIgnoreCase(jobSeq.getString(FormConstant.NUMBER_KEY))){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            QFilter filter = QFilterCommonHelper.getEnableFilter().and(QFilterCommonHelper.getDataStatusFilter()).and(new QFilter(FormConstant.NUMBER_KEY, QCP.equals, JobSeqEnum.FUNCTIONAL.getCode())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            QFilter filter = QFilterCommonHelper.getEnableFilter().and(QFilterCommonHelper.getDataStatusFilter()).and(QFilterCommonHelper.getCurrentVersionFilter()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .and(new QFilter(FormConstant.NUMBER_KEY, QCP.equals, JobSeqEnum.FUNCTIONAL.getCode())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             QueryFieldBuilder queryFieldBuilder = QueryFieldBuilder.create() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     .addIdNumberName(FormConstant.HBJM_JOBSEQHR); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -371,6 +382,7 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .add(PositionStructureConstant.NCKD_EXECUTEYEAR) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .add(PositionStructureConstant.NCKD_FIRSTRANK) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .add(PositionStructureConstant.NCKD_ADJUSTTYPE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .add(PositionStructureConstant.NCKD_BEGINDATE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .addIdNumberNameWithExtras( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         new String[]{PositionStructureConstant.NCKD_JOBLEVELHR}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         FormConstant.JOBLEVELSEQ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -405,7 +417,7 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //条件3:调整年是否有升降级或首聘(adjusttype:0、2),如果调整年有升降级记录(调整类型为0-降级或2-升级),则考核结果被使用。;返回true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if(dataSet.copy() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .filter(PositionStructureConstant.NCKD_EXECUTEYEAR + "=" + year +"and "+PositionStructureConstant.NCKD_ADJUSTTYPE + "in ('0','2')") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .filter(PositionStructureConstant.NCKD_EXECUTEYEAR + "=" + year +" and "+PositionStructureConstant.NCKD_ADJUSTTYPE + " in ('0','2')") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     .count(PositionStructureConstant.NCKD_EXECUTEYEAR, false) > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 return Boolean.TRUE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -422,7 +434,7 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //条件5:调整年是否只有保级/序列变化等记录,如果调整年只有保级、序列变化、聘任下调、总分不足或无聘任的记录,则考核结果未被使用(adjusttype in ('1','4','5','6','7'));返回false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             int count5 = dataSet.copy() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .filter(PositionStructureConstant.NCKD_EXECUTEYEAR + "=" + year +"and "+PositionStructureConstant.NCKD_ADJUSTTYPE + "in ('1','4','5','6','7')") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .filter(PositionStructureConstant.NCKD_EXECUTEYEAR + "=" + year +" and "+PositionStructureConstant.NCKD_ADJUSTTYPE + " in ('1','4','5','6','7')") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     .count(PositionStructureConstant.NCKD_EXECUTEYEAR, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if(count5 > 0 && count5 == nowyeardo){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 return Boolean.FALSE; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -430,35 +442,47 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //条件6:调整年聘任职级是否变化,如果调整年职级有变化(最大职级-最小职级),则考核结果被使用。返回true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            try(DataSet finish = dataSet.copy() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .select("max(" + String.join(".", PositionStructureConstant.NCKD_JOBLEVELHR, FormConstant.JOBLEVELSEQ) + ") - min(" + String.join(".", PositionStructureConstant.NCKD_JOBLEVELHR, FormConstant.JOBLEVELSEQ) + ") as differ") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            DataSet maxSeqDs = dataSet.copy() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     .filter(PositionStructureConstant.NCKD_EXECUTEYEAR + "=" + year) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     .groupBy(new String[]{PositionStructureConstant.NCKD_EXECUTEYEAR}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .finish()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (finish.hasNext()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    Row row = finish.next(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    Integer differ = row.getInteger("differ"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (differ != 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        return Boolean.TRUE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .max(String.join(".", PositionStructureConstant.NCKD_JOBLEVELHR, FormConstant.JOBLEVELSEQ), "maxSeq").finish(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            int maxSeq = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(maxSeqDs.hasNext()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Row row = maxSeqDs.next(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                maxSeq = row.getInteger("maxSeq"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            DataSet minSeqDs = dataSet.copy() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .filter(PositionStructureConstant.NCKD_EXECUTEYEAR + "=" + year) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .groupBy(new String[]{PositionStructureConstant.NCKD_EXECUTEYEAR}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .min(String.join(".", PositionStructureConstant.NCKD_JOBLEVELHR, FormConstant.JOBLEVELSEQ), "maxSeq").finish(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            int minSeq = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(minSeqDs.hasNext()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Row row = minSeqDs.next(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                minSeq = row.getInteger("maxSeq"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Integer differ = maxSeq - minSeq; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (differ != 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return Boolean.TRUE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //条件7:相比往年聘任职级是否有变化,如果调整年相比往年聘任职级有变化,则考核结果被使用。返回true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //获取当年最大职级 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             DataSet currentYear = dataSet.copy() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     .orderBy(new String[]{PositionStructureConstant.NCKD_EXECUTEYEAR + " desc", PositionStructureConstant.NCKD_BEGINDATE + " desc"}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     .filter(PositionStructureConstant.NCKD_EXECUTEYEAR + "=" + year) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .groupBy(new String[]{PositionStructureConstant.NCKD_EXECUTEYEAR}).max(String.join(".", PositionStructureConstant.NCKD_JOBLEVELHR, FormConstant.JOBLEVELSEQ), "maxLevel").finish(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .groupBy(new String[]{PositionStructureConstant.NCKD_EXECUTEYEAR}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .max(String.join(".", PositionStructureConstant.NCKD_JOBLEVELHR, FormConstant.JOBLEVELSEQ), "maxLevel").finish(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Integer maxLevel = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (currentYear.hasNext()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Row row = currentYear.next(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 maxLevel = row.getInteger("maxLevel"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //获取往年职级 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             DataSet pastYear = dataSet.copy() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .select(String.join(".", PositionStructureConstant.NCKD_JOBLEVELHR, FormConstant.JOBLEVELSEQ) +"as level") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .select(String.join(".", PositionStructureConstant.NCKD_JOBLEVELHR, FormConstant.JOBLEVELSEQ) +" as level,"+PositionStructureConstant.NCKD_EXECUTEYEAR+","+PositionStructureConstant.NCKD_BEGINDATE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     .filter(PositionStructureConstant.NCKD_EXECUTEYEAR + "<" + year) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     .topBy(1, new String[]{PositionStructureConstant.NCKD_EXECUTEYEAR + " desc", PositionStructureConstant.NCKD_BEGINDATE + " desc"}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Integer level = 0; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -503,14 +527,14 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 new QFilter[]{filer}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 queryFieldBuilder.buildOrder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //如果没有符合条件的记录,或者只有一条记录且为初定且考核结果为空或为考核结果为“无”,为首次聘任 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //历史档案没有聘任过职称或技能(根据技能分与职称分判定),或者只有一条记录且为初定且考核结果为空或为考核结果为“无”,为首次聘任 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(query.isEmpty()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return Boolean.TRUE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }else if(query.size() == 1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             DynamicObject dynamicObject = query.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             boolean firstRank = dynamicObject.getBoolean(PositionStructureConstant.NCKD_FIRSTRANK); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            long appraisalResult = dynamicObject.getLong(String.join(PositionStructureConstant.NCKD_APPRAISALRESULT, FormConstant.ID_KEY)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            String appraisalResultNumber = dynamicObject.getString(String.join(PositionStructureConstant.NCKD_APPRAISALRESULT, FormConstant.NUMBER_KEY)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            long appraisalResult = dynamicObject.getLong(String.join(".",PositionStructureConstant.NCKD_APPRAISALRESULT, FormConstant.ID_KEY)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String appraisalResultNumber = dynamicObject.getString(String.join(".",PositionStructureConstant.NCKD_APPRAISALRESULT, FormConstant.NUMBER_KEY)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //考核结果为空或为考核结果为“无” 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             boolean none = StringUtils.isBlank(appraisalResultNumber)  || AppraisalResultEnum.NONE.getCode().equals(appraisalResultNumber); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return firstRank && none; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -590,7 +614,7 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @author W.Y.C 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @date: 2025/09/20 22:06 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public static BigDecimal handleDiplomaScore(DynamicObject currentPersonPosFileByPerson, DynamicObject positionAppointment) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public static BigDecimal handleDiplomaScore(DynamicObject currentPersonPosFileByPerson, DynamicObject positionAppointment,JobScoreInfo scoreInfo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //获取上一笔职位档案变动记录学历信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //对应SHR:lastDiplomaInfo 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -601,11 +625,14 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String diplomaName = diploma.getString(FormConstant.NAME_KEY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //对应SHR:lastDiplomaInfo.getDescription() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         BigDecimal diplomaScore = diploma.getBigDecimal(FormConstant.NCKD_SCORE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        scoreInfo.diplomaId = diplomaId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        scoreInfo.diplomaScore = diplomaScore; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //获取上一笔职位档案变动记录学历积分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //对应SHR:lastDiplomaScore 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         BigDecimal lastDiplomaScore = currentPersonPosFileByPerson.getBigDecimal(PositionStructureConstant.NCKD_DIPLOMASCORE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //对应SHR:Diploma 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Long currentDiplomaId = positionAppointment.getLong(String.join(".", FormConstant.HRPI_PEREDUEXP, FormConstant.EDUCATION_KEY, FormConstant.ID_KEY)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //对应SHR:newDiplomaInfo.getName() 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -633,9 +660,9 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 处理序列相关信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private static JobFamilyInfo processJobFamilyInfo(DynamicObject newJobSeq, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                               DynamicObject currentPersonPosFileByPerson) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        JobFamilyInfo jobFamilyInfo = new JobFamilyInfo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private static JobSeqInfo processJobFamilyInfo(DynamicObject newJobSeq, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                   DynamicObject currentPersonPosFileByPerson) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        JobSeqInfo jobSeqInfo = new JobSeqInfo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         long newJonSeqId = newJobSeq.getLong(FormConstant.ID_KEY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String newJonSeqNumber = newJobSeq.getString(FormConstant.NUMBER_KEY); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -650,13 +677,13 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 判断是否为序列转换 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //对应SHR:isadjusttype_4 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        jobFamilyInfo.isSequenceChange = !currentJonSeqNumber.equals(newJonSeqNumber); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        jobSeqInfo.isSequenceChange = !currentJonSeqNumber.equals(newJonSeqNumber); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 判断是否为跨单位调动 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        jobFamilyInfo.isCrossUnitTransfer = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        jobSeqInfo.isCrossUnitTransfer = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // TODO【待修改】 这里需要根据具体业务逻辑判断是否为跨单位调动 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return jobFamilyInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return jobSeqInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -683,6 +710,8 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //对应SHR:selMap.get("zgjbnumber") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String newPerProTitleNumber = positionAppointment.getString(String.join(".", FormConstant.HRPI_PERPROTITLE, FormConstant.PROLEVEL_KEY, FormConstant.NUMBER_KEY)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String newPerProTitleName = positionAppointment.getString(String.join(".", FormConstant.HRPI_PERPROTITLE, FormConstant.PROLEVEL_KEY, FormConstant.NAME_KEY)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //职称名称 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String rankName = positionAppointment.getString(String.join(".", FormConstant.HRPI_PERPROTITLE, FormConstant.PROFESSIONAL_KEY, FormConstant.NAME_KEY)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //当前人员最新技能等级 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Long newQuaLevelId = positionAppointment.getLong(String.join(".", FormConstant.HRPI_PEROCPQUAL, FormConstant.QUALEVEL_KEY, FormConstant.ID_KEY)); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -691,9 +720,11 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //对应SHR:selMap.get("zyjndjnumber") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String newQuaLevelNumber = positionAppointment.getString(String.join(".", FormConstant.HRPI_PEROCPQUAL, FormConstant.QUALEVEL_KEY, FormConstant.NUMBER_KEY)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String newQuaLevelName = positionAppointment.getString(String.join(".", FormConstant.HRPI_PEROCPQUAL, FormConstant.QUALEVEL_KEY, FormConstant.NAME_KEY)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //技能名称 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String jobStatusName = positionAppointment.getString(String.join(".", FormConstant.HRPI_PEROCPQUAL, FormConstant.QUALIFICATION_KEY, FormConstant.NAME_KEY)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         JobScoreInfo jobScoreInfo = new JobScoreInfo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         jobScoreInfo.isEndGainJobGrade = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 职称等级分 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -709,6 +740,7 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             jobScoreInfo.perProTitleId = newPerProTitleId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             jobScoreInfo.perProTitleNumber = StringUtils.isNotBlank(newPerProTitleNumber) ? newPerProTitleNumber : StringUtils.EMPTY; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             jobScoreInfo.perProTitleName = StringUtils.isNotBlank(newPerProTitleName) ? newPerProTitleName : StringUtils.EMPTY; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            jobScoreInfo.rankName = rankName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             jobScoreInfo.isEndGainJobGrade = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } else if (JobSeqEnum.SKILL.getCode().equals(newJobSeqNumber)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (newQuaLevelScore != null && newQuaLevelScore.compareTo(BigDecimal.ZERO) > 0) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -717,6 +749,7 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 jobScoreInfo.quaLevelId = newQuaLevelId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 jobScoreInfo.quaLevelNumber = StringUtils.isNotBlank(newQuaLevelNumber) ? newQuaLevelNumber: ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 jobScoreInfo.quaLevelName = StringUtils.isNotBlank(newQuaLevelName) ? newQuaLevelName: ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                jobScoreInfo.jobStatusName = jobStatusName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 jobScoreInfo.isEndGainJobGrade = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -729,8 +762,8 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 计算职级ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private static DynamicObject calculateJobGradeId(DynamicObject newJobSeq, JobScoreInfo jobScoreInfo,JobFamilyInfo jobFamilyInfo, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                          BigDecimal allSumScore, int currentJobLevelIndex, int minusPersonAppraisal, boolean fistPR, JobLevelResult jobLevelResult){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private static DynamicObject calculateJobGradeId(DynamicObject newJobSeq, JobScoreInfo jobScoreInfo, JobSeqInfo jobSeqInfo, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                     BigDecimal allSumScore, int currentJobLevelIndex, int minusPersonAppraisal, boolean fistPR, JobLevelResult jobLevelResult){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String perProTitleNumber = jobScoreInfo.perProTitleNumber; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String quaLevelNumber = jobScoreInfo.quaLevelNumber; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -742,12 +775,12 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             jobLevel = getJobLevel(newJobSeq, null, null, null, null, Boolean.TRUE,Boolean.FALSE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //对应SHR:selMap.put("adjusttype", "7"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             jobLevelResult.adjustType = "7"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else if (jobFamilyInfo.isSequenceChange) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else if (jobSeqInfo.isSequenceChange) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //对应SHR:JobGradeid = personpositionfileUtils.GainJobGrade(ctx, allsumScore, hrjobfamilynumber, zgjbnumber, zyjndjnumber, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             jobLevel = getJobLevel(newJobSeq, allSumScore, perProTitleNumber, quaLevelNumber, 0, Boolean.FALSE,Boolean.FALSE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //序列转换 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             jobLevelResult.adjustType = "4"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else if (jobFamilyInfo.isCrossUnitTransfer) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else if (jobSeqInfo.isCrossUnitTransfer) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //对应SHR:JobGradeid = personpositionfileUtils.GainJobGrade(ctx, allsumScore, hrjobfamilynumber, zgjbnumber, zyjndjnumber, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             jobLevel = getJobLevel(newJobSeq, allSumScore, perProTitleNumber, quaLevelNumber, 0, Boolean.FALSE,Boolean.FALSE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //保级 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -779,7 +812,7 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @author W.Y.C 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @date: 2025/09/22 14:19 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public static RankingResult getRankingInfo(Long personId, String personName,Date date) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public static RankingResultInfo getRankingInfo(Long personId, String personName, Date date) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         LocalDateTime lastYearDateTime = DateUtil.minusYears(DateUtil.toLocalDateTime(date), 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //取上年度绩效排名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         QFilter groupFilter = new QFilter(PerfRankMgmtConstant.NCKD_THEYEAR,QCP.equals,lastYearDateTime.getYear()); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -843,7 +876,12 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //获取R排名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                DataSet allowanceRankDataSet = dataSet.copy().select(String.join(".", PerfRankMgmtConstant.NCKD_PERFRANKMGMTENTRY, PerfRankMgmtConstant.NCKD_ALLOWANCERANK)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                QueryFieldBuilder queryFieldBuilder = QueryFieldBuilder.create() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .addGroup(new String[]{PerfRankMgmtConstant.NCKD_PERFRANKMGMTENTRY}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                PerfRankMgmtConstant.NCKD_ALLOWANCERANK) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .addGroup(new String[]{PerfRankMgmtConstant.NCKD_PERFRANKMGMTENTRY,PerfRankMgmtConstant.NCKD_PERSON}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                FormConstant.ID_KEY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                DataSet allowanceRankDataSet = dataSet.copy().select(queryFieldBuilder.buildSelect()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         .filter(String.join(".", PerfRankMgmtConstant.NCKD_PERFRANKMGMTENTRY, PerfRankMgmtConstant.NCKD_PERSON, FormConstant.ID_KEY) + " = " + personId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //对应SHR:allowancerank 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Integer allowanceRank = null; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -863,23 +901,23 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     throw new ValidationException(StrFormatter.format("R排名百分比必须在0-100之间,请检查排名分组配置是否有误。人员【{}】-排名分组【{}】-R排名总人数【{}】-排名【{}】",personName,groupName,countR,allowanceRank)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                RankingResult rankingResult = new RankingResult(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                RankingResultInfo rankingResultInfo = new RankingResultInfo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //获取R排名最后名次 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 DataSet maxAllowanceRank = dataSet.copy().filter(String.join(".", PerfRankMgmtConstant.NCKD_PERFRANKMGMTENTRY, PerfRankMgmtConstant.NCKD_ISRANKING) + " = true and " + String.join(".", PerfRankMgmtConstant.NCKD_PERFRANKMGMTENTRY, PerfRankMgmtConstant.NCKD_POSTALLOWANCE) + " = true") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         .groupBy() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         .max(String.join(".", PerfRankMgmtConstant.NCKD_PERFRANKMGMTENTRY, PerfRankMgmtConstant.NCKD_ALLOWANCERANK), "maxAllowanceRank").finish(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if(maxAllowanceRank.hasNext()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     Row row = maxAllowanceRank.next(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    rankingResult.maxAllowanceRank = row.getInteger("maxAllowanceRank"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    rankingResultInfo.maxAllowanceRank = row.getInteger("maxAllowanceRank"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                rankingResult.topRank = topRank; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                rankingResult.allowanceRank = allowanceRank; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                rankingResult.count = count > 0 ? count : null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                rankingResult.countR = countR > 0 ? countR : null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                rankingResult.topRankPercent = topRankPercent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                rankingResult.allowanceRankPercent = allowanceRankPercent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                rankingResult.groupName = groupName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return rankingResult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rankingResultInfo.topRank = topRank; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rankingResultInfo.allowanceRank = allowanceRank; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rankingResultInfo.count = count > 0 ? count : null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rankingResultInfo.countR = countR > 0 ? countR : null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rankingResultInfo.topRankPercent = topRankPercent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rankingResultInfo.allowanceRankPercent = allowanceRankPercent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rankingResultInfo.groupName = groupName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return rankingResultInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             logger.warn("员工不存在排名分组"); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -891,7 +929,7 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 处理序列转换 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 对应SHR:PV.getnewjobgradeindexByrank 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private static void handleSequenceChange(int jobLevelIndex,int currentJobLevelIndex,RankingResult rankingResult,Map<Integer, DynamicObject> jobLevelMap,JobLevelResult jobLevelResult,DynamicObject jobSeq){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private static void handleSequenceChange(int jobLevelIndex, int currentJobLevelIndex, RankingResultInfo rankingResultInfo, Map<Integer, DynamicObject> jobLevelMap, JobLevelResult jobLevelResult, DynamicObject jobSeq){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         System.out.println("序列切换,新职级号不能大于原序列职级序号"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (jobLevelIndex > currentJobLevelIndex) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             jobLevelIndex = currentJobLevelIndex; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -899,13 +937,13 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         jobLevelResult.jobLevel = jobLevelMap.get(jobLevelIndex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 序列转换 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         jobLevelResult.adjustType = "4"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        getnewjobgradeindexByrank(jobLevelIndex,currentJobLevelIndex,rankingResult,jobSeq); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        getnewjobgradeindexByrank(jobLevelIndex,currentJobLevelIndex, rankingResultInfo,jobSeq); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 处理跨单位调动 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private static void handleCrossUnitTransfer(int jobLevelIndex,int currentJobLevelIndex,RankingResult rankingResult,Map<Integer, DynamicObject> jobLevelMap,JobLevelResult jobLevelResult,DynamicObject jobSeq){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private static void handleCrossUnitTransfer(int jobLevelIndex, int currentJobLevelIndex, RankingResultInfo rankingResultInfo, Map<Integer, DynamicObject> jobLevelMap, JobLevelResult jobLevelResult, DynamicObject jobSeq){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         System.out.println("跨单位调动且未跨序列,平移处理"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (jobLevelIndex > currentJobLevelIndex) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             jobLevelIndex = currentJobLevelIndex; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -913,35 +951,38 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         jobLevelResult.jobLevel = jobLevelMap.get(jobLevelIndex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 保级 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         jobLevelResult.adjustType = "1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        getnewjobgradeindexByrank(jobLevelIndex,currentJobLevelIndex,rankingResult,jobSeq); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        getnewjobgradeindexByrank(jobLevelIndex,currentJobLevelIndex, rankingResultInfo,jobSeq); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 对应SHR:com.kingdee.shr.customer.web.handler.ContributeScore.PersonpositionfilecreateViewListHandler#getnewjobgradeindexByrank 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param jobLevelIndex 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param currentJobLevelIndex 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param rankingResult 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param rankingResultInfo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param jobSeq 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @return: int 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @author W.Y.C 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @date: 2025/09/22 19:47 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public static int getnewjobgradeindexByrank(int jobLevelIndex,int currentJobLevelIndex,RankingResult rankingResult,DynamicObject jobSeq){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public static int getnewjobgradeindexByrank(int jobLevelIndex, int currentJobLevelIndex, RankingResultInfo rankingResultInfo, DynamicObject jobSeq){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         JobSeqEnum jobSeqEnum = JobSeqEnum.getByCode(jobSeq.getString(FormConstant.NUMBER_KEY)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(rankingResult == null || rankingResult.countR == null || rankingResult.allowanceRank == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if(rankingResult == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                rankingResult = new RankingResult(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(rankingResultInfo == null || rankingResultInfo.countR == null || rankingResultInfo.allowanceRank == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(rankingResultInfo == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rankingResultInfo = new RankingResultInfo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rankingResult.allowanceRankMark = "无"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rankingResult.allowanceRankSel = "无"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rankingResultInfo.allowanceRankMark = "无"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rankingResultInfo.allowanceRankSel = "无"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return jobLevelIndex; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        rankingResult.allowanceRankMark = rankingResult.allowanceRank +"/" +rankingResult.countR; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Integer allowanceRank = rankingResult.allowanceRank; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Integer countR = rankingResult.countR; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Integer maxAllowanceRank = rankingResult.maxAllowanceRank; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(rankingResult.countR < 10 && maxAllowanceRank.equals(rankingResult.allowanceRank) && rankingResult.topRankPercent >= 70){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rankingResultInfo.allowanceRankMark = rankingResultInfo.allowanceRank +"/" + rankingResultInfo.countR; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Integer allowanceRank = rankingResultInfo.allowanceRank; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Integer countR = rankingResultInfo.countR; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Integer maxAllowanceRank = rankingResultInfo.maxAllowanceRank; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(rankingResultInfo.countR < 10 && maxAllowanceRank.equals(rankingResultInfo.allowanceRank) && rankingResultInfo.topRankPercent >= 70){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //当参与R排名的员工人数少于10人时,只对同时满足以下两个条件的员工降级: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //1、R排名处于末尾(即排名最后)。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //2、全员绩效排名位于后30%。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             jobLevelIndex--; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //技术或职能序列 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1019,22 +1060,22 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (allowanceRank <= selMaxAllowanceRank(60, countR)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rankingResult.allowanceRankSel = "前60%"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rankingResultInfo.allowanceRankSel = "前60%"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else if (allowanceRank <= selMaxAllowanceRank(70, countR)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rankingResult.allowanceRankSel = "前60-70%"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rankingResultInfo.allowanceRankSel = "前60-70%"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else if (allowanceRank <= selMaxAllowanceRank(80, countR)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rankingResult.allowanceRankSel = "前70-80%"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rankingResultInfo.allowanceRankSel = "前70-80%"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else if (allowanceRank <= selMaxAllowanceRank(95, countR)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rankingResult.allowanceRankSel = "前80-95%"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rankingResultInfo.allowanceRankSel = "前80-95%"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else if (allowanceRank >= selMinAllowanceRank(3, countR)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rankingResult.allowanceRankSel = "后3%"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rankingResultInfo.allowanceRankSel = "后3%"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else if (allowanceRank >= selMinAllowanceRank(5, countR)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rankingResult.allowanceRankSel = "后5%"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rankingResultInfo.allowanceRankSel = "后5%"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return jobLevelIndex; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1091,8 +1132,8 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 根据考核结果使用情况处理职级计算 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private static int handleAppraisalUsage(DynamicObject jobSeq, RankingResult rankingResult, int jobLevelIndex, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                     int lastAppointmentJobGradeIndex, int currentJobLevelIndex, int minuspersonappraisal, boolean fistPR, boolean usedAppraisalResult, JobLevelResult jobLevelResult){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private static int handleAppraisalUsage(DynamicObject jobSeq, RankingResultInfo rankingResultInfo, int jobLevelIndex, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                            int lastAppointmentJobGradeIndex, int currentJobLevelIndex, int minuspersonappraisal, boolean fistPR, boolean usedAppraisalResult, JobLevelResult jobLevelResult){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         JobSeqEnum jobSeqEnum = JobSeqEnum.getByCode(jobSeq.getString(FormConstant.NUMBER_KEY)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (!usedAppraisalResult) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (minuspersonappraisal == 0) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1100,11 +1141,11 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     // 考核结果为保级 所以相 等 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     jobLevelIndex = lastAppointmentJobGradeIndex; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (fistPR && ((rankingResult == null || rankingResult.countR == null || rankingResult.countR == 0) || (rankingResult.allowanceRank == null || rankingResult.allowanceRank == 0))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (fistPR && ((rankingResultInfo == null || rankingResultInfo.countR == null || rankingResultInfo.countR == 0) || (rankingResultInfo.allowanceRank == null || rankingResultInfo.allowanceRank == 0))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     System.out.println("首次聘任而且无R排名,保持分数算出来的职级"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     System.out.println("应用R排名结果"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    jobLevelIndex = getnewjobgradeindexByrank(jobLevelIndex, currentJobLevelIndex, rankingResult, jobSeq); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    jobLevelIndex = getnewjobgradeindexByrank(jobLevelIndex, currentJobLevelIndex, rankingResultInfo, jobSeq); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 System.out.println("newjobgradeindex:::" + jobLevelIndex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 System.out.println("PR_lastjobgradeindex:::" + lastAppointmentJobGradeIndex); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1118,10 +1159,10 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     System.out.println("R排名保级"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                getnewjobgradeindexByrank(jobLevelIndex, currentJobLevelIndex, rankingResult, jobSeq); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                getnewjobgradeindexByrank(jobLevelIndex, currentJobLevelIndex, rankingResultInfo, jobSeq); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            getnewjobgradeindexByrank(jobLevelIndex, currentJobLevelIndex, rankingResult, jobSeq); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            getnewjobgradeindexByrank(jobLevelIndex, currentJobLevelIndex, rankingResultInfo, jobSeq); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 保级 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             jobLevelResult.adjustType = "1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             System.out.println("保级"); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1580,7 +1621,6 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         QueryFieldBuilder queryFieldBuilder = QueryFieldBuilder.create() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .addIdNumberNameWithExtras( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        new String[]{FormConstant.HBJM_JOBLEVELHR}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         FormConstant.JOBLEVELSEQ, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         FormConstant.NCKD_COEFFICIENT, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         FormConstant.NCKD_SCORE 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1661,13 +1701,13 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // 辅助类定义 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public static class JobFamilyInfo { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public static class JobSeqInfo { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** 是否为序列转换 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //对应SHR:isadjusttype_4 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        boolean isSequenceChange; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public boolean isSequenceChange; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** 是否为跨单位调动*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //对应SHR:isadjusttype_1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        boolean isCrossUnitTransfer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public boolean isCrossUnitTransfer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public static class JobScoreInfo { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1675,25 +1715,35 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public BigDecimal perProTitleScore; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** 技能等级分 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public BigDecimal quaLevelScore; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /** 职称级别ID */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public Long perProTitleId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /** 技能等级ID */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public Long quaLevelId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** 职称级别编码 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Long perProTitleId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /** 技能等级编码 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Long quaLevelId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /** 职称级别编码 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String perProTitleNumber; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public String perProTitleNumber; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** 技能等级编码 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String quaLevelNumber; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /** 职称级别名称 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String perProTitleName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public String quaLevelNumber; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /** 职称等级名称 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public String perProTitleName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** 技能等级名称 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String quaLevelName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public String quaLevelName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** 是否缺少聘任 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        boolean isEndGainJobGrade; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public boolean isEndGainJobGrade; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /** 职称名称*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public String rankName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /** 技能名称*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public String jobStatusName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /** 学历ID */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public Long diplomaId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /** 学历分 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public BigDecimal diplomaScore; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /** 计算后的得分 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public BigDecimal allSumScore; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public static class RankingResult { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public static class RankingResultInfo { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** 排名 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Integer topRank; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public Integer topRank; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** R排名 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //对应SHR:allowancerank 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public Integer allowanceRank; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1701,29 +1751,38 @@ public class JobLevelCalculatorService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //对应SHR:maxallowancerank 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public Integer maxAllowanceRank; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** 全排名百分比 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Double topRankPercent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public Double topRankPercent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** R排名百分比 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Double allowanceRankPercent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public Double allowanceRankPercent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** 全排名人数 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Integer count; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public Integer count; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** R排名人数 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //对应SHR:countallowancerank 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public Integer countR; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //排名分组名称 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** R排名人数 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String groupName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public String groupName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** R排名名次/R排名总人数 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //对应SHR:allowancerankmark 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String allowanceRankMark; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public String allowanceRankMark; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** R排名百分比 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //对应SHR:allowanceranksel 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String allowanceRankSel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public String allowanceRankSel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public static class JobLevelResult { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /** 调整类别(升级2;保级1;降级0;首次聘任3;序列变化4;聘任下调5;总分不足6;无聘任7;无考核结果8)*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public String adjustType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public String adjustMsg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /** 计算后的职级 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public DynamicObject jobLevel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /** 序列信息 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public JobSeqInfo jobSeqInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /** 积分信息 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public JobScoreInfo jobScoreInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /** 排名信息 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public RankingResultInfo rankingResultInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |