|
@@ -8,6 +8,7 @@ import kd.bos.entity.plugin.args.EndOperationTransactionArgs;
|
|
|
import kd.bos.entity.plugin.args.RollbackOperationArgs;
|
|
import kd.bos.entity.plugin.args.RollbackOperationArgs;
|
|
|
import kd.bos.entity.validate.AbstractValidator;
|
|
import kd.bos.entity.validate.AbstractValidator;
|
|
|
import nckd.jxccl.base.common.constant.FormConstant;
|
|
import nckd.jxccl.base.common.constant.FormConstant;
|
|
|
|
|
+import nckd.jxccl.base.common.exception.ValidationException;
|
|
|
import nckd.jxccl.base.common.utils.DateUtil;
|
|
import nckd.jxccl.base.common.utils.DateUtil;
|
|
|
import nckd.jxccl.base.common.utils.StrFormatter;
|
|
import nckd.jxccl.base.common.utils.StrFormatter;
|
|
|
import nckd.jxccl.hr.psms.business.JobLevelCalculatorService;
|
|
import nckd.jxccl.hr.psms.business.JobLevelCalculatorService;
|
|
@@ -15,9 +16,12 @@ import nckd.jxccl.hr.psms.helper.PositionFileHelper;
|
|
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.HashSet;
|
|
import java.util.HashSet;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
|
+import java.util.Map;
|
|
|
import java.util.Set;
|
|
import java.util.Set;
|
|
|
|
|
+import java.util.StringJoiner;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 新入职人员初定-确认定级操作OP
|
|
* 新入职人员初定-确认定级操作OP
|
|
@@ -38,26 +42,35 @@ public class NewHireInitialOperationPlugIn extends BaseInitialOperationPlugIn {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
Date currentDate = new Date();
|
|
Date currentDate = new Date();
|
|
|
|
|
+ Set<Long> personIds = new HashSet<>();
|
|
|
|
|
+ Map<Long,Integer> personDataEntityMap = new HashMap<>();
|
|
|
for (ExtendedDataEntity rowDataEntity : getDataEntities()) {
|
|
for (ExtendedDataEntity rowDataEntity : getDataEntities()) {
|
|
|
DynamicObject data = rowDataEntity.getDataEntity();
|
|
DynamicObject data = rowDataEntity.getDataEntity();
|
|
|
//提取信息
|
|
//提取信息
|
|
|
List<BaseInitialData> newHireInitialDataList = extractBasicInfo(data);
|
|
List<BaseInitialData> newHireInitialDataList = extractBasicInfo(data);
|
|
|
|
|
|
|
|
|
|
+ int dataEntityIndex = rowDataEntity.getDataEntityIndex();
|
|
|
// 检查人员ID重复
|
|
// 检查人员ID重复
|
|
|
- Set<Long> personIds = new HashSet<>();
|
|
|
|
|
for (BaseInitialData newHireInitialData : newHireInitialDataList) {
|
|
for (BaseInitialData newHireInitialData : newHireInitialDataList) {
|
|
|
if (newHireInitialData.person != null) {
|
|
if (newHireInitialData.person != null) {
|
|
|
Long personId = newHireInitialData.person.getLong(FormConstant.ID_KEY);
|
|
Long personId = newHireInitialData.person.getLong(FormConstant.ID_KEY);
|
|
|
if (!personIds.add(personId)) {
|
|
if (!personIds.add(personId)) {
|
|
|
|
|
+ Integer i = personDataEntityMap.get(personId);
|
|
|
|
|
+ if(i != null){
|
|
|
|
|
+ //将上一个重复人员也标记为错误
|
|
|
|
|
+ addFatalErrorMessage(getDataEntities()[i],
|
|
|
|
|
+ StrFormatter.format("人员【{}】在列表中重复,请保留一条信息",
|
|
|
|
|
+ newHireInitialData.person.getString(FormConstant.NAME_KEY)));
|
|
|
|
|
+ }
|
|
|
addFatalErrorMessage(rowDataEntity,
|
|
addFatalErrorMessage(rowDataEntity,
|
|
|
StrFormatter.format("人员【{}】在列表中重复,请保留一条信息",
|
|
StrFormatter.format("人员【{}】在列表中重复,请保留一条信息",
|
|
|
newHireInitialData.person.getString(FormConstant.NAME_KEY)));
|
|
newHireInitialData.person.getString(FormConstant.NAME_KEY)));
|
|
|
}
|
|
}
|
|
|
|
|
+ personDataEntityMap.put(personId,dataEntityIndex);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- if(!this.getValidateResult().isSuccess()){
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
|
|
|
for (BaseInitialData newHireInitialData : newHireInitialDataList) {
|
|
for (BaseInitialData newHireInitialData : newHireInitialDataList) {
|
|
|
Date beginDate = newHireInitialData.beginDate;
|
|
Date beginDate = newHireInitialData.beginDate;
|
|
@@ -106,9 +119,7 @@ public class NewHireInitialOperationPlugIn extends BaseInitialOperationPlugIn {
|
|
|
if(this.getOperationResult().isSuccess()) {
|
|
if(this.getOperationResult().isSuccess()) {
|
|
|
//对应SHR:com.kingdee.shr.customer.web.handler.ContributeScore.PersonpositionfileListHandler#addNewPersonpositionfileInfo
|
|
//对应SHR:com.kingdee.shr.customer.web.handler.ContributeScore.PersonpositionfileListHandler#addNewPersonpositionfileInfo
|
|
|
logger.info("【职位体系】-新入职人员初定-开始");
|
|
logger.info("【职位体系】-新入职人员初定-开始");
|
|
|
- for (DynamicObject servingInitial : e.getDataEntities()) {
|
|
|
|
|
- processNewHireInitialData(servingInitial);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ processNewHireInitialData();
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -124,13 +135,10 @@ public class NewHireInitialOperationPlugIn extends BaseInitialOperationPlugIn {
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 处理单个在职人员初定
|
|
* 处理单个在职人员初定
|
|
|
- * @param newHireInitial 新入职人员初定数据对象
|
|
|
|
|
*/
|
|
*/
|
|
|
- private void processNewHireInitialData(DynamicObject newHireInitial) {
|
|
|
|
|
|
|
+ private void processNewHireInitialData() {
|
|
|
|
|
|
|
|
- //提取信息
|
|
|
|
|
- List<BaseInitialData> dataList = extractBasicInfo(newHireInitial);
|
|
|
|
|
- for (BaseInitialData data : dataList) {
|
|
|
|
|
|
|
+ for (BaseInitialData data : baseInitialData) {
|
|
|
|
|
|
|
|
String logPrefix = StrFormatter.format("【职位体系】-新入职人员初定-人员【{}({})】",
|
|
String logPrefix = StrFormatter.format("【职位体系】-新入职人员初定-人员【{}({})】",
|
|
|
data.person.getString(FormConstant.NAME_KEY),
|
|
data.person.getString(FormConstant.NAME_KEY),
|
|
@@ -159,13 +167,16 @@ public class NewHireInitialOperationPlugIn extends BaseInitialOperationPlugIn {
|
|
|
// 计算职级
|
|
// 计算职级
|
|
|
//当考核结果为无时,职级定为最低级
|
|
//当考核结果为无时,职级定为最低级
|
|
|
boolean useMinLevel = data.lastYearAppraisalResultEnum == nckd.jxccl.base.common.enums.AppraisalResultEnum.NONE;
|
|
boolean useMinLevel = data.lastYearAppraisalResultEnum == nckd.jxccl.base.common.enums.AppraisalResultEnum.NONE;
|
|
|
|
|
+ // 如果是管理序列,则按职能序列进行初定
|
|
|
|
|
+ data.convertJobSeq = JobLevelCalculatorService.handleJobSeq(data.jobSeq);
|
|
|
//【三期需求】-不满足三要素(聘任职称/技能、考核结果、积分)按"无职级"初定
|
|
//【三期需求】-不满足三要素(聘任职称/技能、考核结果、积分)按"无职级"初定
|
|
|
String perProTitleNumber = scoreData.dbProTitleLevel != null ? scoreData.dbProTitleLevel.getString(FormConstant.NUMBER_KEY) : null;
|
|
String perProTitleNumber = scoreData.dbProTitleLevel != null ? scoreData.dbProTitleLevel.getString(FormConstant.NUMBER_KEY) : null;
|
|
|
String quaLevelNumber = scoreData.dbOcpQualLevel != null ? scoreData.dbOcpQualLevel.getString(FormConstant.NUMBER_KEY) : null;
|
|
String quaLevelNumber = scoreData.dbOcpQualLevel != null ? scoreData.dbOcpQualLevel.getString(FormConstant.NUMBER_KEY) : null;
|
|
|
- boolean threeElementMeet = JobLevelCalculatorService.checkThreeElementsRequirement(data.jobSeq, allSumScore, scoreData.dbProTitleLevel,
|
|
|
|
|
|
|
+ boolean threeElementMeet = JobLevelCalculatorService.checkThreeElementsRequirement(data.convertJobSeq, allSumScore, scoreData.dbProTitleLevel,
|
|
|
scoreData.dbOcpQualLevel, data.lastYearAppraisalResultEnum);
|
|
scoreData.dbOcpQualLevel, data.lastYearAppraisalResultEnum);
|
|
|
|
|
+
|
|
|
DynamicObject jobLeve = JobLevelCalculatorService.getJobLevel(
|
|
DynamicObject jobLeve = JobLevelCalculatorService.getJobLevel(
|
|
|
- data.jobSeq, allSumScore, perProTitleNumber,
|
|
|
|
|
|
|
+ data.convertJobSeq, allSumScore, perProTitleNumber,
|
|
|
quaLevelNumber,data.downgradeNum,useMinLevel,!threeElementMeet);
|
|
quaLevelNumber,data.downgradeNum,useMinLevel,!threeElementMeet);
|
|
|
if(jobLeve != null) {
|
|
if(jobLeve != null) {
|
|
|
// 构建职位档案并存入数据库
|
|
// 构建职位档案并存入数据库
|