|
@@ -32,15 +32,7 @@ import nckd.jxccl.opmc.pm.helper.PerfManagerHelper;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
-import java.util.ArrayList;
|
|
|
|
|
-import java.util.Arrays;
|
|
|
|
|
-import java.util.Collections;
|
|
|
|
|
-import java.util.Date;
|
|
|
|
|
-import java.util.HashMap;
|
|
|
|
|
-import java.util.List;
|
|
|
|
|
-import java.util.Map;
|
|
|
|
|
-import java.util.Objects;
|
|
|
|
|
-import java.util.StringJoiner;
|
|
|
|
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -65,6 +57,7 @@ public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn impl
|
|
|
e.addValidator(new AbstractValidator() {
|
|
e.addValidator(new AbstractValidator() {
|
|
|
@Override
|
|
@Override
|
|
|
public void validate() {
|
|
public void validate() {
|
|
|
|
|
+ Boolean isCycleGenerate = ConvertUtil.toBoolean(this.getOption().getVariableValue("cyclegenerate",StringUtils.EMPTY),Boolean.FALSE);
|
|
|
//第一个循环先获取表单数据,这里需要兼容单人和批量的数据包
|
|
//第一个循环先获取表单数据,这里需要兼容单人和批量的数据包
|
|
|
Map<Long, List<PersonPerfInfo>> currentBatchData = new HashMap<>();
|
|
Map<Long, List<PersonPerfInfo>> currentBatchData = new HashMap<>();
|
|
|
for (ExtendedDataEntity rowDataEntity : getDataEntities()) {
|
|
for (ExtendedDataEntity rowDataEntity : getDataEntities()) {
|
|
@@ -94,33 +87,34 @@ public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn impl
|
|
|
|
|
|
|
|
currentBatchData.computeIfAbsent(personId, k -> new ArrayList<>()).add(perfInfo);
|
|
currentBatchData.computeIfAbsent(personId, k -> new ArrayList<>()).add(perfInfo);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- //检查同一批次内同一人员的周期重叠
|
|
|
|
|
- for (Map.Entry<Long, List<PersonPerfInfo>> entry : currentBatchData.entrySet()) {
|
|
|
|
|
- List<PersonPerfInfo> personPerfList = entry.getValue();
|
|
|
|
|
- if (personPerfList.size() > 1) {
|
|
|
|
|
- // 对同一人员的多个周期进行相互比较
|
|
|
|
|
- for (int i = 0; i < personPerfList.size(); i++) {
|
|
|
|
|
- PersonPerfInfo info1 = personPerfList.get(i);
|
|
|
|
|
- for (int j = i + 1; j < personPerfList.size(); j++) {
|
|
|
|
|
- PersonPerfInfo info2 = personPerfList.get(j);
|
|
|
|
|
- String personName = info2.getPerson().getString(FormConstant.NAME_KEY);
|
|
|
|
|
-
|
|
|
|
|
- // 检查开始年份是否相同
|
|
|
|
|
- if (isSameYear(info1.getBeginYear(), info2.getBeginYear())) {
|
|
|
|
|
- addFatalErrorMessage(getDataEntities()[info1.getDataEntityIndex()],
|
|
|
|
|
- StrFormatter.format("同批次数据中,人员【{}】存在相同的周期开始年份:{}",
|
|
|
|
|
- personName,info1.getBeginYear().getYear()));
|
|
|
|
|
- } else {
|
|
|
|
|
- // 只有开始年份不相同时才检查重叠
|
|
|
|
|
- // 检查周期是否重叠
|
|
|
|
|
- String overlapInfo = getCycleOverlapInfo(
|
|
|
|
|
- info1.getBeginYear(), info1.getEndYear(), null,
|
|
|
|
|
- info2.getBeginYear(), info2.getEndYear(), null);
|
|
|
|
|
-
|
|
|
|
|
- if (StringUtils.isNotBlank(overlapInfo)) {
|
|
|
|
|
|
|
+ if(!isCycleGenerate) {
|
|
|
|
|
+ //检查同一批次内同一人员的周期重叠
|
|
|
|
|
+ for (Map.Entry<Long, List<PersonPerfInfo>> entry : currentBatchData.entrySet()) {
|
|
|
|
|
+ List<PersonPerfInfo> personPerfList = entry.getValue();
|
|
|
|
|
+ if (personPerfList.size() > 1) {
|
|
|
|
|
+ // 对同一人员的多个周期进行相互比较
|
|
|
|
|
+ for (int i = 0; i < personPerfList.size(); i++) {
|
|
|
|
|
+ PersonPerfInfo info1 = personPerfList.get(i);
|
|
|
|
|
+ for (int j = i + 1; j < personPerfList.size(); j++) {
|
|
|
|
|
+ PersonPerfInfo info2 = personPerfList.get(j);
|
|
|
|
|
+ String personName = info2.getPerson().getString(FormConstant.NAME_KEY);
|
|
|
|
|
+
|
|
|
|
|
+ // 检查开始年份是否相同
|
|
|
|
|
+ if (isSameYear(info1.getBeginYear(), info2.getBeginYear())) {
|
|
|
addFatalErrorMessage(getDataEntities()[info1.getDataEntityIndex()],
|
|
addFatalErrorMessage(getDataEntities()[info1.getDataEntityIndex()],
|
|
|
- StrFormatter.format("同批次数据中,人员【{}】存在重叠周期:{}",personName ,overlapInfo));
|
|
|
|
|
|
|
+ StrFormatter.format("同批次数据中,人员【{}】存在相同的周期开始年份:{}",
|
|
|
|
|
+ personName, info1.getBeginYear().getYear()));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 只有开始年份不相同时才检查重叠
|
|
|
|
|
+ // 检查周期是否重叠
|
|
|
|
|
+ String overlapInfo = getCycleOverlapInfo(
|
|
|
|
|
+ info1.getBeginYear(), info1.getEndYear(), null,
|
|
|
|
|
+ info2.getBeginYear(), info2.getEndYear(), null);
|
|
|
|
|
+
|
|
|
|
|
+ if (StringUtils.isNotBlank(overlapInfo)) {
|
|
|
|
|
+ addFatalErrorMessage(getDataEntities()[info1.getDataEntityIndex()],
|
|
|
|
|
+ StrFormatter.format("同批次数据中,人员【{}】存在重叠周期:{}", personName, overlapInfo));
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -172,12 +166,14 @@ public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn impl
|
|
|
Date actEndYear = dynamicObject.getDate(PerfManagerFormConstant.NCKD_ACTENDYEAR);
|
|
Date actEndYear = dynamicObject.getDate(PerfManagerFormConstant.NCKD_ACTENDYEAR);
|
|
|
LocalDateTime dbActEndYear = actEndYear != null ? DateUtil.toLocalDateTime(actEndYear) : null;
|
|
LocalDateTime dbActEndYear = actEndYear != null ? DateUtil.toLocalDateTime(actEndYear) : null;
|
|
|
|
|
|
|
|
- // 判断周期是否重叠并获取重叠信息,已结束周期使用实际结束时间
|
|
|
|
|
- String overlapInfo = getCycleOverlapInfo(beginYear, endYear, null, dbBeginYear, dbEndYear, dbActEndYear);
|
|
|
|
|
- if (StringUtils.isNotBlank(overlapInfo)) {
|
|
|
|
|
- addFatalErrorMessage(rowDataEntity,
|
|
|
|
|
- StrFormatter.format("人员【{}】的考核周期与已有周期在{}重叠,请检查!",
|
|
|
|
|
- personName, overlapInfo));
|
|
|
|
|
|
|
+ if(!isCycleGenerate) {
|
|
|
|
|
+ // 判断周期是否重叠并获取重叠信息,已结束周期使用实际结束时间
|
|
|
|
|
+ String overlapInfo = getCycleOverlapInfo(beginYear, endYear, null, dbBeginYear, dbEndYear, dbActEndYear);
|
|
|
|
|
+ if (StringUtils.isNotBlank(overlapInfo)) {
|
|
|
|
|
+ addFatalErrorMessage(rowDataEntity,
|
|
|
|
|
+ StrFormatter.format("人员【{}】的考核周期与已有周期在{}重叠,请检查!",
|
|
|
|
|
+ personName, overlapInfo));
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//判断beginYear和dbBeginYear的年份是否相同
|
|
//判断beginYear和dbBeginYear的年份是否相同
|
|
@@ -187,6 +183,7 @@ public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn impl
|
|
|
personName,
|
|
personName,
|
|
|
beginYear.getYear()));
|
|
beginYear.getYear()));
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
//当前周期必须大于之前周期的开始时间
|
|
//当前周期必须大于之前周期的开始时间
|
|
|
/*if (beginYear != null && beginYear.isBefore(dbBeginYear)) {
|
|
/*if (beginYear != null && beginYear.isBefore(dbBeginYear)) {
|
|
|
addFatalErrorMessage(rowDataEntity,
|
|
addFatalErrorMessage(rowDataEntity,
|
|
@@ -484,9 +481,23 @@ public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn impl
|
|
|
PerfManagerHelper.markAsCurrentNewest(personBeginYearMap.keySet(),null);
|
|
PerfManagerHelper.markAsCurrentNewest(personBeginYearMap.keySet(),null);
|
|
|
|
|
|
|
|
//上一周期标记为“已结束”并设置“实际结束时间” begin
|
|
//上一周期标记为“已结束”并设置“实际结束时间” begin
|
|
|
|
|
+ Set<Long> personIds = new HashSet<>();
|
|
|
|
|
+ for (DynamicObject dataEntity : e.getDataEntities()) {
|
|
|
|
|
+ DynamicObject person = dataEntity.getDynamicObject(FormConstant.NCKD_PERSON);
|
|
|
|
|
+ person = person == null ? dataEntity.getDynamicObject(FormConstant.NCKD_EMPPOSORGREL).getDynamicObject(FormConstant.EMPLOYEE_KEY) : person;
|
|
|
|
|
+ long personId = person.getLong(FormConstant.ID_KEY);
|
|
|
|
|
+ personIds.add(personId);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
Boolean isCycleGenerate = ConvertUtil.toBoolean(this.getOption().getVariableValue("cyclegenerate",StringUtils.EMPTY),Boolean.FALSE);
|
|
Boolean isCycleGenerate = ConvertUtil.toBoolean(this.getOption().getVariableValue("cyclegenerate",StringUtils.EMPTY),Boolean.FALSE);
|
|
|
Boolean isUpdate = ConvertUtil.toBoolean(this.getOption().getVariableValue("isUpdate",StringUtils.EMPTY),Boolean.FALSE);
|
|
Boolean isUpdate = ConvertUtil.toBoolean(this.getOption().getVariableValue("isUpdate",StringUtils.EMPTY),Boolean.FALSE);
|
|
|
|
|
+ DynamicObject[] beforeBeginYearList = null;
|
|
|
|
|
+ if(!isUpdate){
|
|
|
|
|
+ beforeBeginYearList = PerfManagerHelper.getByPersonId(personIds, null);
|
|
|
|
|
+ }
|
|
|
List<DynamicObject> updatePerManager = new ArrayList<>();
|
|
List<DynamicObject> updatePerManager = new ArrayList<>();
|
|
|
|
|
+ List<DynamicObject> updateDataEntity = new ArrayList<>();
|
|
|
for (DynamicObject dataEntity : e.getDataEntities()) {
|
|
for (DynamicObject dataEntity : e.getDataEntities()) {
|
|
|
long id = dataEntity.getLong(FormConstant.ID_KEY);
|
|
long id = dataEntity.getLong(FormConstant.ID_KEY);
|
|
|
DynamicObject person = dataEntity.getDynamicObject(FormConstant.NCKD_PERSON);
|
|
DynamicObject person = dataEntity.getDynamicObject(FormConstant.NCKD_PERSON);
|
|
@@ -502,10 +513,25 @@ public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn impl
|
|
|
if (id > 0) {
|
|
if (id > 0) {
|
|
|
filter = new QFilter(FormConstant.ID_KEY, QCP.not_in, id);
|
|
filter = new QFilter(FormConstant.ID_KEY, QCP.not_in, id);
|
|
|
}
|
|
}
|
|
|
- DynamicObject[] beforeBeginYear = PerfManagerHelper.getBeforeBeginYear(DateUtil.toDate(beginYear), Collections.singletonList(personId), filter);
|
|
|
|
|
- if (beforeBeginYear != null && beforeBeginYear.length > 0) {
|
|
|
|
|
- DynamicObject[] allPerfManagerArray = PerfManagerHelper.getByPersonId(Collections.singletonList(personId), filter);
|
|
|
|
|
- List<DynamicObject> allPerfManagerList = new ArrayList<>(Arrays.asList(allPerfManagerArray));
|
|
|
|
|
|
|
+// DynamicObject[] beforeBeginYear = PerfManagerHelper.getBeforeBeginYear(DateUtil.toDate(beginYear), Collections.singletonList(personId), filter);
|
|
|
|
|
+ List<DynamicObject> beforeBeginYear = Arrays.stream(beforeBeginYearList)
|
|
|
|
|
+ .filter(obj -> {
|
|
|
|
|
+ Date dbBeginYear = obj.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR);
|
|
|
|
|
+ Long dbPersonId = obj.getDynamicObject(FormConstant.NCKD_PERSON).getLong(FormConstant.ID_KEY);
|
|
|
|
|
+ Long dbId = obj.getLong(FormConstant.ID_KEY);
|
|
|
|
|
+ String theStatus = obj.getString(PerfManagerFormConstant.NCKD_THESTATUS);
|
|
|
|
|
+ return dbBeginYear != null && dbBeginYear.compareTo(DateUtil.toDate(beginYear)) <= 0 && dbPersonId.equals(personId) && !dbId.equals(id) && theStatus.equalsIgnoreCase(EnableEnum.YES.getCode());
|
|
|
|
|
+ })
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+ if (!beforeBeginYear.isEmpty()) {
|
|
|
|
|
+// DynamicObject[] allPerfManagerArray = PerfManagerHelper.getByPersonId(Collections.singletonList(personId), filter);
|
|
|
|
|
+ List<DynamicObject> allPerfManagerList = Arrays.stream(beforeBeginYearList)
|
|
|
|
|
+ .filter(obj -> {
|
|
|
|
|
+ Long dbPersonId = obj.getDynamicObject(FormConstant.NCKD_PERSON).getLong(FormConstant.ID_KEY);
|
|
|
|
|
+ Long dbId = obj.getLong(FormConstant.ID_KEY);
|
|
|
|
|
+ return dbPersonId.equals(personId) && !dbId.equals(id);
|
|
|
|
|
+ })
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
allPerfManagerList.add(dataEntity);
|
|
allPerfManagerList.add(dataEntity);
|
|
|
for (DynamicObject lastPerfManager : beforeBeginYear) {
|
|
for (DynamicObject lastPerfManager : beforeBeginYear) {
|
|
|
lastPerfManager.set(PerfManagerFormConstant.NCKD_THESTATUS, "3");
|
|
lastPerfManager.set(PerfManagerFormConstant.NCKD_THESTATUS, "3");
|
|
@@ -539,7 +565,7 @@ public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn impl
|
|
|
DynamicObject previousCycle = findPreviousCycle(allPerfManagerList, DateUtil.toDate(beginYear));
|
|
DynamicObject previousCycle = findPreviousCycle(allPerfManagerList, DateUtil.toDate(beginYear));
|
|
|
if (previousCycle != null) {
|
|
if (previousCycle != null) {
|
|
|
dataEntity.set(PerfManagerFormConstant.NCKD_LASTPERFMANAGER, previousCycle);
|
|
dataEntity.set(PerfManagerFormConstant.NCKD_LASTPERFMANAGER, previousCycle);
|
|
|
- SaveServiceHelper.update(dataEntity);
|
|
|
|
|
|
|
+ updateDataEntity.add(dataEntity);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -549,6 +575,9 @@ public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn impl
|
|
|
DynamicObject[] lastPerfManagerArray = updatePerManager.toArray(new DynamicObject[0]);
|
|
DynamicObject[] lastPerfManagerArray = updatePerManager.toArray(new DynamicObject[0]);
|
|
|
SaveServiceHelper.update(lastPerfManagerArray);
|
|
SaveServiceHelper.update(lastPerfManagerArray);
|
|
|
}
|
|
}
|
|
|
|
|
+ if(!updateDataEntity.isEmpty()) {
|
|
|
|
|
+ SaveServiceHelper.update(updateDataEntity.toArray(new DynamicObject[0]));
|
|
|
|
|
+ }
|
|
|
//上一周期标记为“已结束”并设置“实际结束时间” end
|
|
//上一周期标记为“已结束”并设置“实际结束时间” end
|
|
|
}
|
|
}
|
|
|
|
|
|