|
@@ -23,6 +23,7 @@ import kd.bos.servicehelper.QueryServiceHelper;
|
|
|
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
|
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
|
|
import kd.sdk.plugin.Plugin;
|
|
import kd.sdk.plugin.Plugin;
|
|
|
import nckd.jxccl.base.common.constant.FormConstant;
|
|
import nckd.jxccl.base.common.constant.FormConstant;
|
|
|
|
|
+import nckd.jxccl.base.common.utils.ConvertUtil;
|
|
|
import nckd.jxccl.base.common.utils.DateUtil;
|
|
import nckd.jxccl.base.common.utils.DateUtil;
|
|
|
import nckd.jxccl.base.common.utils.QueryFieldBuilder;
|
|
import nckd.jxccl.base.common.utils.QueryFieldBuilder;
|
|
|
import nckd.jxccl.base.common.utils.StrFormatter;
|
|
import nckd.jxccl.base.common.utils.StrFormatter;
|
|
@@ -32,7 +33,6 @@ import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
|
-import java.util.Arrays;
|
|
|
|
|
import java.util.Collections;
|
|
import java.util.Collections;
|
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
@@ -51,11 +51,10 @@ import java.util.stream.Collectors;
|
|
|
*/
|
|
*/
|
|
|
public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn implements Plugin {
|
|
public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn implements Plugin {
|
|
|
|
|
|
|
|
- private List<PersonPerfInfo> personPerfInfos = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
- private Map<Long, DynamicObject> lastPerfManagerMap;
|
|
|
|
|
|
|
+ private Map<Long, DynamicObject> lastPerfManagerMap = new HashMap<>();
|
|
|
|
|
|
|
|
- private List<Long> personIds;
|
|
|
|
|
|
|
+ private List<Long> personIds = new ArrayList<>();
|
|
|
private List<Long> ids = new ArrayList<>();
|
|
private List<Long> ids = new ArrayList<>();
|
|
|
|
|
|
|
|
private final static String INTERACTION_SPONORE = PerfManagerSaveOpPlugin.class.getName();
|
|
private final static String INTERACTION_SPONORE = PerfManagerSaveOpPlugin.class.getName();
|
|
@@ -77,66 +76,67 @@ public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn impl
|
|
|
Date endYear = data.getDate(PerfManagerFormConstant.NCKD_ENDYEAR);
|
|
Date endYear = data.getDate(PerfManagerFormConstant.NCKD_ENDYEAR);
|
|
|
String description = data.getString(FormConstant.DESCRIPTION_KEY);
|
|
String description = data.getString(FormConstant.DESCRIPTION_KEY);
|
|
|
DynamicObjectCollection perfManagerEntry = data.getDynamicObjectCollection(PerfManagerFormConstant.NCKD_PERFMANAGERENTRY);
|
|
DynamicObjectCollection perfManagerEntry = data.getDynamicObjectCollection(PerfManagerFormConstant.NCKD_PERFMANAGERENTRY);
|
|
|
- PersonPerfInfo personPerfInfo = new PersonPerfInfo(person, beginYear, endYear, description, dataEntityIndex, perfManagerEntry);
|
|
|
|
|
- if(id > 0){
|
|
|
|
|
- personPerfInfo.setId(id);
|
|
|
|
|
- ids.add(id);
|
|
|
|
|
- }
|
|
|
|
|
- personPerfInfos.add(personPerfInfo);
|
|
|
|
|
|
|
+ personIds.add(person.getLong(FormConstant.ID_KEY));
|
|
|
|
|
+ ids.add(id);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
QueryFieldBuilder queryFieldBuilder = QueryFieldBuilder.create()
|
|
QueryFieldBuilder queryFieldBuilder = QueryFieldBuilder.create()
|
|
|
.addIdNumberName(FormConstant.NCKD_PERSON)
|
|
.addIdNumberName(FormConstant.NCKD_PERSON)
|
|
|
.add(PerfManagerFormConstant.NCKD_BEGINYEAR)
|
|
.add(PerfManagerFormConstant.NCKD_BEGINYEAR)
|
|
|
.add(PerfManagerFormConstant.NCKD_ENDYEAR);
|
|
.add(PerfManagerFormConstant.NCKD_ENDYEAR);
|
|
|
- personIds = personPerfInfos.stream()
|
|
|
|
|
- .map(personPerfInfo -> personPerfInfo.getPerson().getLong(FormConstant.ID_KEY))
|
|
|
|
|
- .collect(Collectors.toList());
|
|
|
|
|
- QFilter filter = new QFilter(FormConstant.NCKD_PERSON, QCP.in, personIds)
|
|
|
|
|
- .and(PerfManagerFormConstant.NCKD_THESTATUS,QCP.equals,"1");
|
|
|
|
|
- if(!ids.isEmpty()){
|
|
|
|
|
|
|
+ QFilter filter = new QFilter(FormConstant.NCKD_PERSON, QCP.in, personIds);
|
|
|
|
|
+ if(!ids.isEmpty()) {
|
|
|
filter = filter.and(new QFilter(FormConstant.ID_KEY, QCP.not_in, ids));
|
|
filter = filter.and(new QFilter(FormConstant.ID_KEY, QCP.not_in, ids));
|
|
|
}
|
|
}
|
|
|
|
|
+ //根据人员查询出当前自己之外的其他考核周期
|
|
|
DynamicObjectCollection query = QueryServiceHelper.query(PerfManagerFormConstant.PERFMANAGER_ENTITYID, queryFieldBuilder.buildSelect(), new QFilter[]{filter});
|
|
DynamicObjectCollection query = QueryServiceHelper.query(PerfManagerFormConstant.PERFMANAGER_ENTITYID, queryFieldBuilder.buildSelect(), new QFilter[]{filter});
|
|
|
-
|
|
|
|
|
- //开始校验 - 优化后的代码
|
|
|
|
|
|
|
+ //按人员分组
|
|
|
Map<Long, List<DynamicObject>> groupedQueryResults = query.stream()
|
|
Map<Long, List<DynamicObject>> groupedQueryResults = query.stream()
|
|
|
.collect(Collectors.groupingBy(
|
|
.collect(Collectors.groupingBy(
|
|
|
dynamicObject -> dynamicObject.getLong(String.join(".", FormConstant.NCKD_PERSON, FormConstant.ID_KEY))
|
|
dynamicObject -> dynamicObject.getLong(String.join(".", FormConstant.NCKD_PERSON, FormConstant.ID_KEY))
|
|
|
));
|
|
));
|
|
|
-
|
|
|
|
|
- for (PersonPerfInfo personPerfInfo : personPerfInfos) {
|
|
|
|
|
-
|
|
|
|
|
- long personId = personPerfInfo.getPerson().getLong(FormConstant.ID_KEY);
|
|
|
|
|
- LocalDateTime beginYear = personPerfInfo.getBeginYear();
|
|
|
|
|
- LocalDateTime endYear = personPerfInfo.getEndYear();
|
|
|
|
|
|
|
+ for (ExtendedDataEntity rowDataEntity : getDataEntities()) {
|
|
|
|
|
+ DynamicObject data = rowDataEntity.getDataEntity();
|
|
|
|
|
+ DynamicObject person = data.getDynamicObject(FormConstant.NCKD_PERSON);
|
|
|
|
|
+ long personId = person.getLong(FormConstant.ID_KEY);
|
|
|
|
|
+ String personName = person.getString(FormConstant.NAME_KEY);
|
|
|
|
|
+ LocalDateTime beginYear = ConvertUtil.toLocalDateTime(data.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR));
|
|
|
|
|
+ LocalDateTime endYear = ConvertUtil.toLocalDateTime(data.getDate(PerfManagerFormConstant.NCKD_ENDYEAR));
|
|
|
|
|
|
|
|
// 判断beginYear和endYear是不是间隔3年,例如:开始2025年,结束必须为2027年
|
|
// 判断beginYear和endYear是不是间隔3年,例如:开始2025年,结束必须为2027年
|
|
|
if (beginYear != null && endYear != null) {
|
|
if (beginYear != null && endYear != null) {
|
|
|
int beginYearValue = beginYear.getYear();
|
|
int beginYearValue = beginYear.getYear();
|
|
|
int endYearValue = endYear.getYear();
|
|
int endYearValue = endYear.getYear();
|
|
|
if (endYearValue - beginYearValue != 2) {
|
|
if (endYearValue - beginYearValue != 2) {
|
|
|
- addFatalErrorMessage(getDataEntities()[personPerfInfo.getDataEntityIndex()],
|
|
|
|
|
|
|
+ addFatalErrorMessage(rowDataEntity,
|
|
|
StrFormatter.format("周期开始年份【{}】与结束年份【{}】必须间隔3年,请检查!",
|
|
StrFormatter.format("周期开始年份【{}】与结束年份【{}】必须间隔3年,请检查!",
|
|
|
beginYearValue, endYearValue));
|
|
beginYearValue, endYearValue));
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
//校验是否存在相同周期开始年的记录 begin
|
|
//校验是否存在相同周期开始年的记录 begin
|
|
|
List<DynamicObject> personRecords = groupedQueryResults.getOrDefault(personId, Collections.emptyList());
|
|
List<DynamicObject> personRecords = groupedQueryResults.getOrDefault(personId, Collections.emptyList());
|
|
|
for (DynamicObject dynamicObject : personRecords) {
|
|
for (DynamicObject dynamicObject : personRecords) {
|
|
|
LocalDateTime dbBeginYear = DateUtil.toLocalDateTime(dynamicObject.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR));
|
|
LocalDateTime dbBeginYear = DateUtil.toLocalDateTime(dynamicObject.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR));
|
|
|
//判断beginYear和dbBeginYear的年份是否相同
|
|
//判断beginYear和dbBeginYear的年份是否相同
|
|
|
if (isSameYear(beginYear, dbBeginYear)) {
|
|
if (isSameYear(beginYear, dbBeginYear)) {
|
|
|
- addFatalErrorMessage(getDataEntities()[personPerfInfo.getDataEntityIndex()],
|
|
|
|
|
|
|
+ addFatalErrorMessage(rowDataEntity,
|
|
|
StrFormatter.format("人员【{}】已经存在周期开始年份【{}】的周期,无需进行创建。",
|
|
StrFormatter.format("人员【{}】已经存在周期开始年份【{}】的周期,无需进行创建。",
|
|
|
- personPerfInfo.getPerson().getString(FormConstant.NAME_KEY),
|
|
|
|
|
|
|
+ personName,
|
|
|
beginYear.getYear()));
|
|
beginYear.getYear()));
|
|
|
}
|
|
}
|
|
|
|
|
+ //当前周期必须大于之前周期的开始时间
|
|
|
|
|
+ /*if (beginYear != null && beginYear.isBefore(dbBeginYear)) {
|
|
|
|
|
+ addFatalErrorMessage(rowDataEntity,
|
|
|
|
|
+ StrFormatter.format("人员【{}】当前周期开始时间【{}】必须大于之前周期开始时间【{}】。",
|
|
|
|
|
+ personName,
|
|
|
|
|
+ beginYear.getYear(),
|
|
|
|
|
+ dbBeginYear.getYear()));
|
|
|
|
|
+ }*/
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
//校验是否存在相同周期开始年的记录 end
|
|
//校验是否存在相同周期开始年的记录 end
|
|
|
- DynamicObjectCollection entrys = personPerfInfo.getEntrys();
|
|
|
|
|
|
|
+ DynamicObjectCollection entrys = data.getDynamicObjectCollection(PerfManagerFormConstant.NCKD_PERFMANAGERENTRY);
|
|
|
if(entrys != null) {
|
|
if(entrys != null) {
|
|
|
List<Date> dateList = entrys.stream().map(entry -> entry.getDate(PerfManagerFormConstant.NCKD_APPRAISALYEAR)).collect(Collectors.toList());
|
|
List<Date> dateList = entrys.stream().map(entry -> entry.getDate(PerfManagerFormConstant.NCKD_APPRAISALYEAR)).collect(Collectors.toList());
|
|
|
if (beginYear != null && endYear != null) {
|
|
if (beginYear != null && endYear != null) {
|
|
@@ -151,7 +151,7 @@ public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn impl
|
|
|
|
|
|
|
|
if (!outOfRangeYears.isEmpty()) {
|
|
if (!outOfRangeYears.isEmpty()) {
|
|
|
String outOfRangeYearsStr = String.join(",", outOfRangeYears);
|
|
String outOfRangeYearsStr = String.join(",", outOfRangeYears);
|
|
|
- addFatalErrorMessage(getDataEntities()[personPerfInfo.getDataEntityIndex()],
|
|
|
|
|
|
|
+ addFatalErrorMessage(rowDataEntity,
|
|
|
StrFormatter.format("考评年份【{}】不在周期范围内,请检查!", outOfRangeYearsStr));
|
|
StrFormatter.format("考评年份【{}】不在周期范围内,请检查!", outOfRangeYearsStr));
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -159,11 +159,13 @@ public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn impl
|
|
|
List<String> duplicateYears = getDuplicateYears(dateList);
|
|
List<String> duplicateYears = getDuplicateYears(dateList);
|
|
|
if (!duplicateYears.isEmpty()) {
|
|
if (!duplicateYears.isEmpty()) {
|
|
|
String duplicateYearsStr = String.join(",", duplicateYears);
|
|
String duplicateYearsStr = String.join(",", duplicateYears);
|
|
|
- addFatalErrorMessage(getDataEntities()[personPerfInfo.getDataEntityIndex()],
|
|
|
|
|
|
|
+ addFatalErrorMessage(rowDataEntity,
|
|
|
StrFormatter.format("考评结果存在重复的考核年份【{}】,请检查!", duplicateYearsStr));
|
|
StrFormatter.format("考评结果存在重复的考核年份【{}】,请检查!", duplicateYearsStr));
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ //规则: 如果年度排名管理中已存在某年度的考核结果,则不允许在人员考评管理中修改该年度的考核结果。
|
|
|
|
|
+ //规则: 对于已处理的调薪情况,不允许修改或删除相关的年度考核结果。
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -175,6 +177,10 @@ public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn impl
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public void beforeExecuteOperationTransaction(BeforeOperationArgs e) {
|
|
public void beforeExecuteOperationTransaction(BeforeOperationArgs e) {
|
|
|
|
|
+ if(!this.getOperationResult().isSuccess()){
|
|
|
|
|
+ e.setCancel(true);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
//最新上一考核周期
|
|
//最新上一考核周期
|
|
|
QFilter filter = null;
|
|
QFilter filter = null;
|
|
|
if(!ids.isEmpty()) {
|
|
if(!ids.isEmpty()) {
|
|
@@ -190,10 +196,6 @@ public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn impl
|
|
|
|
|
|
|
|
String ignoreInteraction = this.getOption().getVariableValue(OperateOptionConst.IGNOREINTERACTION, "");
|
|
String ignoreInteraction = this.getOption().getVariableValue(OperateOptionConst.IGNOREINTERACTION, "");
|
|
|
if(!"true".equalsIgnoreCase(ignoreInteraction)){
|
|
if(!"true".equalsIgnoreCase(ignoreInteraction)){
|
|
|
- personIds = personPerfInfos.stream()
|
|
|
|
|
- .map(personPerfInfo -> personPerfInfo.getPerson().getLong(FormConstant.ID_KEY))
|
|
|
|
|
- .collect(Collectors.toList());
|
|
|
|
|
-
|
|
|
|
|
StringJoiner confirMmsg = new StringJoiner(",");
|
|
StringJoiner confirMmsg = new StringJoiner(",");
|
|
|
for (DynamicObject lastPerfManager : lastPerfManagerMap.values()) {
|
|
for (DynamicObject lastPerfManager : lastPerfManagerMap.values()) {
|
|
|
String personName = lastPerfManager.getDynamicObject(FormConstant.NCKD_PERSON).getString(FormConstant.NAME_KEY);
|
|
String personName = lastPerfManager.getDynamicObject(FormConstant.NCKD_PERSON).getString(FormConstant.NAME_KEY);
|
|
@@ -208,7 +210,7 @@ public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn impl
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
@Override
|
|
@Override
|
|
|
- public void beginOperationTransaction(BeginOperationTransactionArgs e) {
|
|
|
|
|
|
|
+ public void beginOperationTransaction(BeginOperationTransactionArgs e) {
|
|
|
//事务开始之后将其他考核周期设置为非最新
|
|
//事务开始之后将其他考核周期设置为非最新
|
|
|
PerfManagerHelper.markAsNotCurrentNewest(personIds.toArray(new Long[0]));
|
|
PerfManagerHelper.markAsNotCurrentNewest(personIds.toArray(new Long[0]));
|
|
|
|
|
|
|
@@ -226,18 +228,90 @@ public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn impl
|
|
|
}
|
|
}
|
|
|
//上一周期标记为“已结束”并设置“实际结束时间” begin
|
|
//上一周期标记为“已结束”并设置“实际结束时间” begin
|
|
|
DynamicObject lastPerfManager = lastPerfManagerMap.get(personId);
|
|
DynamicObject lastPerfManager = lastPerfManagerMap.get(personId);
|
|
|
- if(lastPerfManager != null && "1".equalsIgnoreCase(lastPerfManager.getString(PerfManagerFormConstant.NCKD_THESTATUS))) {
|
|
|
|
|
- lastPerfManager.set(PerfManagerFormConstant.NCKD_THESTATUS, "3");
|
|
|
|
|
- LocalDateTime localDateTime = DateUtil.minusYears(beginYear, 1);
|
|
|
|
|
- lastPerfManager.set(PerfManagerFormConstant.NCKD_ACTENDYEAR, DateUtil.toDate(localDateTime));
|
|
|
|
|
- dataEntity.set(PerfManagerFormConstant.NCKD_LASTPERFMANAGER, lastPerfManagerMap.get(personId));
|
|
|
|
|
|
|
+ if(lastPerfManager != null) {
|
|
|
|
|
+ if("1".equalsIgnoreCase(lastPerfManager.getString(PerfManagerFormConstant.NCKD_THESTATUS))) {
|
|
|
|
|
+ lastPerfManager.set(PerfManagerFormConstant.NCKD_THESTATUS, "3");
|
|
|
|
|
+ LocalDateTime localDateTime = DateUtil.minusYears(beginYear, 1);
|
|
|
|
|
+ lastPerfManager.set(PerfManagerFormConstant.NCKD_ACTENDYEAR, DateUtil.toDate(localDateTime));
|
|
|
|
|
+ dataEntity.set(PerfManagerFormConstant.NCKD_LASTPERFMANAGER, lastPerfManagerMap.get(personId));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ LocalDateTime lastBeginYear = DateUtil.toLocalDateTime(lastPerfManager.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR));
|
|
|
|
|
+ LocalDateTime lastEndYear = DateUtil.toLocalDateTime(lastPerfManager.getDate(PerfManagerFormConstant.NCKD_ENDYEAR));
|
|
|
|
|
+ if(!Objects.equals(lastBeginYear, beginYear) || !Objects.equals(lastEndYear, endYear)) {
|
|
|
|
|
+ //当周期范围发生变化,需要保障数据连续性:若新旧考评周期存在重叠年份,且该年份在旧周期中已存在来源于【年度绩效排名】的考核结果,则新周期将自动继承该结果。
|
|
|
|
|
+ DynamicObjectCollection lastPerfManagerEntrys = lastPerfManager.getDynamicObjectCollection(PerfManagerFormConstant.NCKD_PERFMANAGERENTRY);
|
|
|
|
|
+ DynamicObjectCollection perfManagerEntrys = dataEntity.getDynamicObjectCollection(PerfManagerFormConstant.NCKD_PERFMANAGERENTRY);
|
|
|
|
|
+ for (DynamicObject lastPerfManagerEntry : lastPerfManagerEntrys) {
|
|
|
|
|
+ Date lastAppraisalYear = lastPerfManagerEntry.getDate(PerfManagerFormConstant.NCKD_APPRAISALYEAR);
|
|
|
|
|
+ DynamicObject appraisalResult = lastPerfManagerEntry.getDynamicObject(PerfManagerFormConstant.NCKD_APPRAISALRESULT);
|
|
|
|
|
+ if (lastAppraisalYear != null && appraisalResult != null) {
|
|
|
|
|
+ boolean isAllRankSource = lastPerfManagerEntry.getBoolean(PerfManagerFormConstant.NCKD_ISALLRANKSOURCE);
|
|
|
|
|
+ if (isAllRankSource) {
|
|
|
|
|
+ LocalDateTime lastAppraisalYearLocalDateTime = DateUtil.toLocalDateTime(lastAppraisalYear);
|
|
|
|
|
+ //判断appraisalYearLocalDateTime是不是在beginYear和endYear之间
|
|
|
|
|
+ if (DateUtil.isInRange(lastAppraisalYearLocalDateTime, beginYear, endYear)) {
|
|
|
|
|
+ boolean isExist = false;
|
|
|
|
|
+ for (DynamicObject perfManager : perfManagerEntrys) {
|
|
|
|
|
+ Date appraisalYear = perfManager.getDate(PerfManagerFormConstant.NCKD_APPRAISALYEAR);
|
|
|
|
|
+ if(appraisalYear != null){
|
|
|
|
|
+ //如果分录存在相同年份则更新
|
|
|
|
|
+ LocalDateTime appraisalYearLocalDateTime = DateUtil.toLocalDateTime(appraisalYear);
|
|
|
|
|
+ if(appraisalYearLocalDateTime.getYear() == lastAppraisalYearLocalDateTime.getYear()){
|
|
|
|
|
+ perfManager.set(PerfManagerFormConstant.NCKD_APPRAISALRESULT, appraisalResult);
|
|
|
|
|
+ isExist = true;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if(!isExist) {
|
|
|
|
|
+ //分录不存在当前年份,则添加
|
|
|
|
|
+ DynamicObject dynamicObject = perfManagerEntrys.addNew();
|
|
|
|
|
+ dynamicObject.set(PerfManagerFormConstant.NCKD_APPRAISALYEAR, lastAppraisalYear);
|
|
|
|
|
+ dynamicObject.set(PerfManagerFormConstant.NCKD_APPRAISALRESULT, appraisalResult);
|
|
|
|
|
+ dynamicObject.set(PerfManagerFormConstant.NCKD_ISALLRANKSOURCE, true);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
//上一周期标记为“已结束”并设置“实际结束时间” end
|
|
//上一周期标记为“已结束”并设置“实际结束时间” end
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
|
|
|
|
|
- DynamicObject[] lastPerfManagerArray = lastPerfManagerMap.values().toArray(new DynamicObject[0]);
|
|
|
|
|
- SaveServiceHelper.update(lastPerfManagerArray);
|
|
|
|
|
|
|
+ dataEntity.set(PerfManagerFormConstant.NCKD_FIRSTYEARRESULT, null);
|
|
|
|
|
+ dataEntity.set(PerfManagerFormConstant.NCKD_SECONDYEARRESULT, null);
|
|
|
|
|
+ dataEntity.set(PerfManagerFormConstant.NCKD_THIRDYEARRESULT, null);
|
|
|
|
|
+ DynamicObjectCollection entrys = dataEntity.getDynamicObjectCollection(PerfManagerFormConstant.NCKD_PERFMANAGERENTRY);
|
|
|
|
|
+ for (DynamicObject entry : entrys) {
|
|
|
|
|
+ boolean isAllRankSource = entry.getBoolean(PerfManagerFormConstant.NCKD_ISALLRANKSOURCE);
|
|
|
|
|
+ Date appraisalYear = entry.getDate(PerfManagerFormConstant.NCKD_APPRAISALYEAR);
|
|
|
|
|
+ DynamicObject appraisalResult = entry.getDynamicObject(PerfManagerFormConstant.NCKD_APPRAISALRESULT);
|
|
|
|
|
+
|
|
|
|
|
+ if (appraisalYear != null && appraisalResult != null) {
|
|
|
|
|
+ LocalDateTime appraisalLocalDate = DateUtil.toLocalDateTime(appraisalYear);
|
|
|
|
|
+ LocalDateTime beginLocalDate = beginYear;
|
|
|
|
|
+
|
|
|
|
|
+ // 计算是第几年(分录中的年份-(周期开始时间 + 1))
|
|
|
|
|
+ long yearsDiff = appraisalLocalDate.getYear() - beginLocalDate.getYear() + 1;
|
|
|
|
|
+ // 根据年份差异设置表头对应的考核结果字段
|
|
|
|
|
+ switch ((int) yearsDiff) {
|
|
|
|
|
+ case 1:
|
|
|
|
|
+ dataEntity.set(PerfManagerFormConstant.NCKD_FIRSTYEARRESULT, appraisalResult);
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 2:
|
|
|
|
|
+ dataEntity.set(PerfManagerFormConstant.NCKD_SECONDYEARRESULT, appraisalResult);
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 3:
|
|
|
|
|
+ dataEntity.set(PerfManagerFormConstant.NCKD_THIRDYEARRESULT, appraisalResult);
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if(lastPerfManagerMap != null && !lastPerfManagerMap.values().isEmpty()) {
|
|
|
|
|
+ DynamicObject[] lastPerfManagerArray = lastPerfManagerMap.values().toArray(new DynamicObject[0]);
|
|
|
|
|
+ SaveServiceHelper.update(lastPerfManagerArray);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -260,7 +334,7 @@ public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn impl
|
|
|
InteractionContext interactionContext = new InteractionContext();
|
|
InteractionContext interactionContext = new InteractionContext();
|
|
|
interactionContext.setSimpleMessage("存在【未结束】的考核周期");
|
|
interactionContext.setSimpleMessage("存在【未结束】的考核周期");
|
|
|
OperateErrorInfo errorInfo = new OperateErrorInfo();
|
|
OperateErrorInfo errorInfo = new OperateErrorInfo();
|
|
|
- errorInfo.setMessage(StrFormatter.format("检测到本次新增的人员中存在【未结束】的考核周期,新周期新增成功后会自动结束上一周期。{}", confirMmsg));
|
|
|
|
|
|
|
+ errorInfo.setMessage(StrFormatter.format("检测到本次新增的人员中存在【未结束】的考核周期,新周期新增成功后会自动结束上一周期,并将上一周期结束时间更新为当前新周期开始年前一年。{}", confirMmsg));
|
|
|
errorInfo.setLevel(ErrorLevel.Warning);
|
|
errorInfo.setLevel(ErrorLevel.Warning);
|
|
|
|
|
|
|
|
Map<String, String> custInfos = new HashMap<>();
|
|
Map<String, String> custInfos = new HashMap<>();
|
|
@@ -297,34 +371,35 @@ public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn impl
|
|
|
public static class PersonPerfInfo {
|
|
public static class PersonPerfInfo {
|
|
|
private Long id;
|
|
private Long id;
|
|
|
private final DynamicObject person;
|
|
private final DynamicObject person;
|
|
|
|
|
+ private final DynamicObject empPosOrgRel;
|
|
|
private final LocalDateTime beginYear;
|
|
private final LocalDateTime beginYear;
|
|
|
private final LocalDateTime endYear;
|
|
private final LocalDateTime endYear;
|
|
|
private final String description;
|
|
private final String description;
|
|
|
private int dataEntityIndex;
|
|
private int dataEntityIndex;
|
|
|
private DynamicObjectCollection entrys;
|
|
private DynamicObjectCollection entrys;
|
|
|
- private DynamicObject useorg;
|
|
|
|
|
- private DynamicObject org;
|
|
|
|
|
- private DynamicObject createorg;
|
|
|
|
|
private String whyEnd;
|
|
private String whyEnd;
|
|
|
private LocalDateTime actEndYear;
|
|
private LocalDateTime actEndYear;
|
|
|
|
|
|
|
|
- public PersonPerfInfo(DynamicObject person, Date beginYear, Date endYear, String description) {
|
|
|
|
|
|
|
+ public PersonPerfInfo(DynamicObject person,DynamicObject empPosOrgRel, Date beginYear, Date endYear, String description) {
|
|
|
this.person = person;
|
|
this.person = person;
|
|
|
|
|
+ this.empPosOrgRel = empPosOrgRel;
|
|
|
this.beginYear = DateUtil.toLocalDateTime(beginYear);
|
|
this.beginYear = DateUtil.toLocalDateTime(beginYear);
|
|
|
this.endYear = DateUtil.toLocalDateTime(endYear);
|
|
this.endYear = DateUtil.toLocalDateTime(endYear);
|
|
|
this.description = description;
|
|
this.description = description;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public PersonPerfInfo(DynamicObject person, Date beginYear, Date endYear, String description, int dataEntityIndex) {
|
|
|
|
|
|
|
+ public PersonPerfInfo(DynamicObject person, DynamicObject empPosOrgRel, Date beginYear, Date endYear, String description, int dataEntityIndex) {
|
|
|
this.person = person;
|
|
this.person = person;
|
|
|
|
|
+ this.empPosOrgRel = empPosOrgRel;
|
|
|
this.beginYear = DateUtil.toLocalDateTime(beginYear);
|
|
this.beginYear = DateUtil.toLocalDateTime(beginYear);
|
|
|
this.endYear = DateUtil.toLocalDateTime(endYear);
|
|
this.endYear = DateUtil.toLocalDateTime(endYear);
|
|
|
this.description = description;
|
|
this.description = description;
|
|
|
this.dataEntityIndex = dataEntityIndex;
|
|
this.dataEntityIndex = dataEntityIndex;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public PersonPerfInfo(DynamicObject person, Date beginYear, Date endYear, String description, int dataEntityIndex, DynamicObjectCollection entrys) {
|
|
|
|
|
|
|
+ public PersonPerfInfo(DynamicObject person, DynamicObject empPosOrgRel, Date beginYear, Date endYear, String description, int dataEntityIndex, DynamicObjectCollection entrys) {
|
|
|
this.person = person;
|
|
this.person = person;
|
|
|
|
|
+ this.empPosOrgRel = empPosOrgRel;
|
|
|
this.beginYear = DateUtil.toLocalDateTime(beginYear);
|
|
this.beginYear = DateUtil.toLocalDateTime(beginYear);
|
|
|
this.endYear = DateUtil.toLocalDateTime(endYear);
|
|
this.endYear = DateUtil.toLocalDateTime(endYear);
|
|
|
this.description = description;
|
|
this.description = description;
|
|
@@ -352,33 +427,14 @@ public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn impl
|
|
|
return person;
|
|
return person;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public DynamicObjectCollection getEntrys() {
|
|
|
|
|
- return entrys;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public DynamicObject getCreateorg() {
|
|
|
|
|
- return createorg;
|
|
|
|
|
|
|
+ public DynamicObject getEmpPosOrgRel() {
|
|
|
|
|
+ return empPosOrgRel;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public void setCreateorg(DynamicObject createorg) {
|
|
|
|
|
- this.createorg = createorg;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public DynamicObject getOrg() {
|
|
|
|
|
- return org;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public void setOrg(DynamicObject org) {
|
|
|
|
|
- this.org = org;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public DynamicObject getUseorg() {
|
|
|
|
|
- return useorg;
|
|
|
|
|
|
|
+ public DynamicObjectCollection getEntrys() {
|
|
|
|
|
+ return entrys;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public void setUseorg(DynamicObject useorg) {
|
|
|
|
|
- this.useorg = useorg;
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
public Long getId() {
|
|
public Long getId() {
|
|
|
return id;
|
|
return id;
|