|
|
@@ -33,6 +33,7 @@ import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.Arrays;
|
|
|
import java.util.Collections;
|
|
|
import java.util.Date;
|
|
|
import java.util.HashMap;
|
|
|
@@ -52,9 +53,8 @@ import java.util.stream.Collectors;
|
|
|
public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn implements Plugin {
|
|
|
|
|
|
|
|
|
- private Map<Long, DynamicObject> lastPerfManagerMap = new HashMap<>();
|
|
|
|
|
|
- private List<Long> personIds = new ArrayList<>();
|
|
|
+ Map<Long, Date> personBeginYearMap = new HashMap<>();
|
|
|
private List<Long> ids = new ArrayList<>();
|
|
|
|
|
|
private final static String INTERACTION_SPONORE = PerfManagerSaveOpPlugin.class.getName();
|
|
|
@@ -77,15 +77,19 @@ public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn impl
|
|
|
Date endYear = data.getDate(PerfManagerFormConstant.NCKD_ENDYEAR);
|
|
|
String description = data.getString(FormConstant.DESCRIPTION_KEY);
|
|
|
DynamicObjectCollection perfManagerEntry = data.getDynamicObjectCollection(PerfManagerFormConstant.NCKD_PERFMANAGERENTRY);
|
|
|
- personIds.add(person.getLong(FormConstant.ID_KEY));
|
|
|
+ Long personId = person.getLong(FormConstant.ID_KEY);
|
|
|
+ if (beginYear != null) {
|
|
|
+ personBeginYearMap.put(personId, beginYear);
|
|
|
+ }
|
|
|
ids.add(id);
|
|
|
}
|
|
|
|
|
|
QueryFieldBuilder queryFieldBuilder = QueryFieldBuilder.create()
|
|
|
.addIdNumberName(FormConstant.NCKD_PERSON)
|
|
|
.add(PerfManagerFormConstant.NCKD_BEGINYEAR)
|
|
|
- .add(PerfManagerFormConstant.NCKD_ENDYEAR);
|
|
|
- QFilter filter = new QFilter(FormConstant.NCKD_PERSON, QCP.in, personIds);
|
|
|
+ .add(PerfManagerFormConstant.NCKD_ENDYEAR)
|
|
|
+ .add(PerfManagerFormConstant.NCKD_ACTENDYEAR);
|
|
|
+ QFilter filter = new QFilter(FormConstant.NCKD_PERSON, QCP.in, personBeginYearMap.keySet());
|
|
|
if(!ids.isEmpty()) {
|
|
|
filter = filter.and(new QFilter(FormConstant.ID_KEY, QCP.not_in, ids));
|
|
|
}
|
|
|
@@ -120,6 +124,18 @@ public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn impl
|
|
|
List<DynamicObject> personRecords = groupedQueryResults.getOrDefault(personId, Collections.emptyList());
|
|
|
for (DynamicObject dynamicObject : personRecords) {
|
|
|
LocalDateTime dbBeginYear = DateUtil.toLocalDateTime(dynamicObject.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR));
|
|
|
+ LocalDateTime dbEndYear = DateUtil.toLocalDateTime(dynamicObject.getDate(PerfManagerFormConstant.NCKD_ENDYEAR));
|
|
|
+ Date actEndYear = dynamicObject.getDate(PerfManagerFormConstant.NCKD_ACTENDYEAR);
|
|
|
+ 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));
|
|
|
+ }
|
|
|
+
|
|
|
//判断beginYear和dbBeginYear的年份是否相同
|
|
|
if (isSameYear(beginYear, dbBeginYear)) {
|
|
|
addFatalErrorMessage(rowDataEntity,
|
|
|
@@ -177,36 +193,71 @@ public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn impl
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 判断两个考核周期是否重叠,并返回重叠描述
|
|
|
+ *
|
|
|
+ * @param beginYear1 第一个周期开始年份
|
|
|
+ * @param endYear1 第一个周期结束年份
|
|
|
+ * @param actEndYear1 第一个周期实际结束年份(如果已结束)
|
|
|
+ * @param beginYear2 第二个周期开始年份
|
|
|
+ * @param endYear2 第二个周期结束年份
|
|
|
+ * @param actEndYear2 第二个周期实际结束年份(如果已结束)
|
|
|
+ * @return 如果周期重叠返回重叠描述,否则返回空字符串
|
|
|
+ */
|
|
|
+ private String getCycleOverlapInfo(LocalDateTime beginYear1, LocalDateTime endYear1, LocalDateTime actEndYear1,
|
|
|
+ LocalDateTime beginYear2, LocalDateTime endYear2, LocalDateTime actEndYear2) {
|
|
|
+ if (beginYear1 == null || endYear1 == null || beginYear2 == null || endYear2 == null) {
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果周期已结束,使用实际结束时间,否则使用计划结束时间
|
|
|
+ LocalDateTime realEndYear1 = actEndYear1 != null ? actEndYear1 : endYear1;
|
|
|
+ LocalDateTime realEndYear2 = actEndYear2 != null ? actEndYear2 : endYear2;
|
|
|
+
|
|
|
+ // 两个区间重叠的条件是:一个区间的开始时间小于等于另一个区间的结束时间,
|
|
|
+ // 且该区间的结束时间大于等于另一个区间的开始时间
|
|
|
+ if (!beginYear1.isAfter(realEndYear2) && !realEndYear1.isBefore(beginYear2)) {
|
|
|
+ // 计算重叠区间
|
|
|
+ LocalDateTime overlapStart = beginYear1.isAfter(beginYear2) ? beginYear1 : beginYear2;
|
|
|
+ LocalDateTime overlapEnd = realEndYear1.isBefore(realEndYear2) ? realEndYear1 : realEndYear2;
|
|
|
+
|
|
|
+ if (overlapStart.equals(overlapEnd)) {
|
|
|
+ return StrFormatter.format("{}年", overlapStart.getYear());
|
|
|
+ } else {
|
|
|
+ return StrFormatter.format("{}年~{}年", overlapStart.getYear(), overlapEnd.getYear());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public void beforeExecuteOperationTransaction(BeforeOperationArgs e) {
|
|
|
if(!this.getOperationResult().isSuccess()){
|
|
|
e.setCancel(true);
|
|
|
return;
|
|
|
}
|
|
|
- //最新上一考核周期
|
|
|
- QFilter filter = null;
|
|
|
- if(!ids.isEmpty()) {
|
|
|
- filter = new QFilter(FormConstant.ID_KEY, QCP.not_in, ids);
|
|
|
- }
|
|
|
- List<DynamicObject> newestPerfManagerByPerson = PerfManagerHelper.getNewestPerfManagerByPersonAndBeginYear(personIds,filter);
|
|
|
- lastPerfManagerMap = newestPerfManagerByPerson.stream()
|
|
|
- .collect(Collectors.toMap(
|
|
|
- perfManager -> perfManager.getDynamicObject(FormConstant.NCKD_PERSON).getLong(FormConstant.ID_KEY),
|
|
|
- perfManager -> perfManager,
|
|
|
- (existing, replacement) -> existing
|
|
|
- ));
|
|
|
-
|
|
|
- String ignoreInteraction = this.getOption().getVariableValue(OperateOptionConst.IGNOREINTERACTION, "");
|
|
|
- if(!"true".equalsIgnoreCase(ignoreInteraction)){
|
|
|
- StringJoiner confirMmsg = new StringJoiner(",");
|
|
|
- for (DynamicObject lastPerfManager : lastPerfManagerMap.values()) {
|
|
|
- String personName = lastPerfManager.getDynamicObject(FormConstant.NCKD_PERSON).getString(FormConstant.NAME_KEY);
|
|
|
- LocalDateTime beginYear = DateUtil.toLocalDateTime(lastPerfManager.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR));
|
|
|
- LocalDateTime endYear = DateUtil.toLocalDateTime(lastPerfManager.getDate(PerfManagerFormConstant.NCKD_ENDYEAR));
|
|
|
- confirMmsg.add(StrFormatter.format("{}(周期:{}~{})", personName, beginYear.getYear(), endYear.getYear()));
|
|
|
+ String ignoreInteraction = this.getOption().getVariableValue(OperateOptionConst.IGNOREINTERACTION,StringUtils.EMPTY);
|
|
|
+ if(StringUtils.isBlank(ignoreInteraction) || !"true".equalsIgnoreCase(ignoreInteraction)) {
|
|
|
+ StringJoiner confirmMsg = new StringJoiner(",");
|
|
|
+ for (DynamicObject dataEntity : e.getDataEntities()) {
|
|
|
+ long id = dataEntity.getLong(FormConstant.ID_KEY);
|
|
|
+ Date date = dataEntity.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR);
|
|
|
+ long personId = dataEntity.getDynamicObject(FormConstant.NCKD_PERSON).getLong(FormConstant.ID_KEY);
|
|
|
+ QFilter filter = null;
|
|
|
+ if (id > 0) {
|
|
|
+ filter = new QFilter(FormConstant.ID_KEY, QCP.not_in, id);
|
|
|
+ }
|
|
|
+ DynamicObject[] lastPerfManagerArray = PerfManagerHelper.getBeforeBeginYear(date, Collections.singletonList(personId), filter);
|
|
|
+ for (DynamicObject lastPerfManager : lastPerfManagerArray) {
|
|
|
+ String personName = lastPerfManager.getDynamicObject(FormConstant.NCKD_PERSON).getString(FormConstant.NAME_KEY);
|
|
|
+ LocalDateTime beginYear = DateUtil.toLocalDateTime(lastPerfManager.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR));
|
|
|
+ LocalDateTime endYear = DateUtil.toLocalDateTime(lastPerfManager.getDate(PerfManagerFormConstant.NCKD_ENDYEAR));
|
|
|
+ confirmMsg.add(StrFormatter.format("{}(周期:{}~{})", personName, beginYear.getYear(), endYear.getYear()));
|
|
|
+ }
|
|
|
}
|
|
|
- if(!lastPerfManagerMap.isEmpty()){
|
|
|
- e.cancel = !this.showInteractionMessage(confirMmsg.toString());
|
|
|
+ if (confirmMsg.length() > 0) {
|
|
|
+ e.cancel = !this.showInteractionMessage(confirmMsg.toString());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -214,9 +265,11 @@ public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn impl
|
|
|
@Override
|
|
|
public void beginOperationTransaction(BeginOperationTransactionArgs e) {
|
|
|
//事务开始之后将其他考核周期设置为非最新
|
|
|
- PerfManagerHelper.markAsNotCurrentNewest(personIds.toArray(new Long[0]));
|
|
|
+ PerfManagerHelper.markAsNotCurrentNewest(personBeginYearMap.keySet().toArray(new Long[0]));
|
|
|
|
|
|
+ List<DynamicObject> updatePerManager = new ArrayList<>();
|
|
|
for (DynamicObject dataEntity : e.getDataEntities()) {
|
|
|
+ long id = dataEntity.getLong(FormConstant.ID_KEY);
|
|
|
DynamicObject person = dataEntity.getDynamicObject(FormConstant.NCKD_PERSON);
|
|
|
person = person == null ? dataEntity.getDynamicObject(FormConstant.NCKD_EMPPOSORGREL).getDynamicObject(FormConstant.EMPLOYEE_KEY) : person;
|
|
|
dataEntity.set(FormConstant.NCKD_PERSON, person);
|
|
|
@@ -231,16 +284,59 @@ public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn impl
|
|
|
dataEntity.set(FormConstant.NAME_KEY, StrFormatter.format("【{}】{}~{}的考核周期",personName,beginYear.getYear(),endYear.getYear()));
|
|
|
}
|
|
|
//上一周期标记为“已结束”并设置“实际结束时间” begin
|
|
|
- DynamicObject lastPerfManager = lastPerfManagerMap.get(personId);
|
|
|
- if(lastPerfManager != null) {
|
|
|
- if("1".equalsIgnoreCase(lastPerfManager.getString(PerfManagerFormConstant.NCKD_THESTATUS))) {
|
|
|
+ //找出当前周期前还未结束的考核周期
|
|
|
+ QFilter filter = null;
|
|
|
+ if (id > 0) {
|
|
|
+ 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));
|
|
|
+ allPerfManagerList.add(dataEntity);
|
|
|
+ for (DynamicObject lastPerfManager : beforeBeginYear) {
|
|
|
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));
|
|
|
+ //找到当前周期的下一周期
|
|
|
+ Date currentBeginYear = lastPerfManager.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR);
|
|
|
+ Date currentEndYear = lastPerfManager.getDate(PerfManagerFormConstant.NCKD_ENDYEAR);
|
|
|
+
|
|
|
+ DynamicObject nextCycle = findNextCycle(allPerfManagerList, currentBeginYear);
|
|
|
+ if (nextCycle != null) {
|
|
|
+ // 获取下一周期的开始年份
|
|
|
+ Date nextBeginYear = nextCycle.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR);
|
|
|
+ LocalDateTime nextBeginLocalDateTime = DateUtil.toLocalDateTime(nextBeginYear);
|
|
|
+ // 计算预期的实际结束年份:下一周期开始时间-1年
|
|
|
+ LocalDateTime expectedActEndYear = DateUtil.minusYears(nextBeginLocalDateTime, 1);
|
|
|
+ LocalDateTime currentEndLocalDateTime = DateUtil.toLocalDateTime(currentEndYear);
|
|
|
+ // 如果预期结束时间大于等于当前周期的结束时间,说明中间有断层
|
|
|
+ // 则实际结束时间设置为当前周期的结束时间
|
|
|
+ // 否则设置为预期的实际结束时间(下一周期开始时间-1年)
|
|
|
+ LocalDateTime actEndYear = expectedActEndYear.isAfter(currentEndLocalDateTime) ?
|
|
|
+ currentEndLocalDateTime : expectedActEndYear;
|
|
|
+ lastPerfManager.set(PerfManagerFormConstant.NCKD_ACTENDYEAR, DateUtil.toDate(actEndYear));
|
|
|
+ } else {
|
|
|
+ // 如果没有找到下一周期,则实际结束时间设置为当前周期的结束时间
|
|
|
+ lastPerfManager.set(PerfManagerFormConstant.NCKD_ACTENDYEAR, currentEndYear);
|
|
|
+ }
|
|
|
+ lastPerfManager.set(PerfManagerFormConstant.NCKD_WHYEND, StrFormatter.format("新增周期({}~{}),系统自动结束前周期",beginYear.getYear(), endYear.getYear()));
|
|
|
+ updatePerManager.add(lastPerfManager);
|
|
|
+ }
|
|
|
+ //找到当前周期的上一周期
|
|
|
+ DynamicObject previousCycle = findPreviousCycle(allPerfManagerList, DateUtil.toDate(beginYear));
|
|
|
+ if(previousCycle != null) {
|
|
|
+ dataEntity.set(PerfManagerFormConstant.NCKD_LASTPERFMANAGER, previousCycle);
|
|
|
}
|
|
|
+ }
|
|
|
+ //上一周期标记为“已结束”并设置“实际结束时间” end
|
|
|
+
|
|
|
+ /*DynamicObject lastPerfManager = lastPerfManagerMap.get(personId);
|
|
|
+ if(lastPerfManager != null) {
|
|
|
+ LocalDateTime date = DateUtil.toLocalDateTime(lastPerfManager.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR));
|
|
|
+ if("1".equalsIgnoreCase(lastPerfManager.getString(PerfManagerFormConstant.NCKD_THESTATUS)) && date.getYear() >= beginYear.getYear()) {
|
|
|
|
|
|
- LocalDateTime lastBeginYear = DateUtil.toLocalDateTime(lastPerfManager.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR));
|
|
|
+ }
|
|
|
+
|
|
|
+ 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)) {
|
|
|
//当周期范围发生变化,需要保障数据连续性:若新旧考评周期存在重叠年份,且该年份在旧周期中已存在来源于【年度绩效排名】的考核结果,则新周期将自动继承该结果。
|
|
|
@@ -279,9 +375,10 @@ public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn impl
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- //上一周期标记为“已结束”并设置“实际结束时间” end
|
|
|
+ }*/
|
|
|
|
|
|
+
|
|
|
+ //分录考核结果写入到表头 begin
|
|
|
dataEntity.set(PerfManagerFormConstant.NCKD_FIRSTYEARRESULT, null);
|
|
|
dataEntity.set(PerfManagerFormConstant.NCKD_SECONDYEARRESULT, null);
|
|
|
dataEntity.set(PerfManagerFormConstant.NCKD_THIRDYEARRESULT, null);
|
|
|
@@ -311,16 +408,81 @@ public class PerfManagerSaveOpPlugin extends AbstractOperationServicePlugIn impl
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ //分录考核结果写入到表头 end
|
|
|
}
|
|
|
- if(lastPerfManagerMap != null && !lastPerfManagerMap.values().isEmpty()) {
|
|
|
- DynamicObject[] lastPerfManagerArray = lastPerfManagerMap.values().toArray(new DynamicObject[0]);
|
|
|
+ if(!updatePerManager.isEmpty()) {
|
|
|
+ DynamicObject[] lastPerfManagerArray = updatePerManager.toArray(new DynamicObject[0]);
|
|
|
SaveServiceHelper.update(lastPerfManagerArray);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 查找给定日期之后的第一个考核周期
|
|
|
+ *
|
|
|
+ * @param allPerfManagerList 该人员的所有考核周期列表
|
|
|
+ * @param currentDate 当前周期的开始日期
|
|
|
+ * @return 下一个考核周期,如果不存在则返回null
|
|
|
+ */
|
|
|
+ private DynamicObject findNextCycle(List<DynamicObject> allPerfManagerList, Date currentDate) {
|
|
|
+ if (allPerfManagerList == null || allPerfManagerList.isEmpty() || currentDate == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ LocalDateTime currentLocalDate = DateUtil.toLocalDateTime(currentDate);
|
|
|
+
|
|
|
+ return allPerfManagerList.stream()
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .filter(perfManager -> {
|
|
|
+ Date beginYear = perfManager.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR);
|
|
|
+ if (beginYear != null) {
|
|
|
+ LocalDateTime beginYearLocal = DateUtil.toLocalDateTime(beginYear);
|
|
|
+ return beginYearLocal.isAfter(currentLocalDate);
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ })
|
|
|
+ .min((perf1, perf2) -> {
|
|
|
+ LocalDateTime begin1 = DateUtil.toLocalDateTime(perf1.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR));
|
|
|
+ LocalDateTime begin2 = DateUtil.toLocalDateTime(perf2.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR));
|
|
|
+ return begin1.compareTo(begin2);
|
|
|
+ })
|
|
|
+ .orElse(null);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查找给定日期之前的最后一个考核周期
|
|
|
+ *
|
|
|
+ * @param allPerfManagerList 该人员的所有考核周期列表
|
|
|
+ * @param currentDate 当前周期的开始日期
|
|
|
+ * @return 上一个考核周期,如果不存在则返回null
|
|
|
+ */
|
|
|
+ private DynamicObject findPreviousCycle(List<DynamicObject> allPerfManagerList, Date currentDate) {
|
|
|
+ if (allPerfManagerList == null || allPerfManagerList.isEmpty() || currentDate == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ LocalDateTime currentLocalDate = DateUtil.toLocalDateTime(currentDate);
|
|
|
+
|
|
|
+ return allPerfManagerList.stream()
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .filter(perfManager -> {
|
|
|
+ Date beginYear = perfManager.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR);
|
|
|
+ if (beginYear != null) {
|
|
|
+ LocalDateTime beginYearLocal = DateUtil.toLocalDateTime(beginYear);
|
|
|
+ return beginYearLocal.isBefore(currentLocalDate);
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ })
|
|
|
+ .max((perf1, perf2) -> {
|
|
|
+ LocalDateTime begin1 = DateUtil.toLocalDateTime(perf1.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR));
|
|
|
+ LocalDateTime begin2 = DateUtil.toLocalDateTime(perf2.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR));
|
|
|
+ return begin1.compareTo(begin2);
|
|
|
+ })
|
|
|
+ .orElse(null);
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public void endOperationTransaction(EndOperationTransactionArgs e) {
|
|
|
- PerfManagerHelper.markAsCurrentNewest(personIds,null);
|
|
|
+ PerfManagerHelper.markAsCurrentNewest(personBeginYearMap.keySet(),null);
|
|
|
}
|
|
|
|
|
|
private boolean showInteractionMessage(String confirMmsg) {
|