|
|
@@ -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;
|
|
|
}
|
|
|
}
|