|
@@ -22,11 +22,13 @@ import kd.bos.servicehelper.user.UserServiceHelper;
|
|
|
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.exception.ValidationException;
|
|
import nckd.jxccl.base.common.exception.ValidationException;
|
|
|
|
|
+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;
|
|
|
import nckd.jxccl.base.entity.helper.EntityHelper;
|
|
import nckd.jxccl.base.entity.helper.EntityHelper;
|
|
|
import nckd.jxccl.opmc.pm.common.PerfManagerFormConstant;
|
|
import nckd.jxccl.opmc.pm.common.PerfManagerFormConstant;
|
|
|
|
|
|
|
|
|
|
+import java.time.LocalDate;
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
@@ -36,14 +38,31 @@ import java.util.StringJoiner;
|
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
-* 年度绩效结果明细-归档/撤销归档
|
|
|
|
|
-* 实体标识:nckd_annualperfdetail
|
|
|
|
|
-* @author W.Y.C
|
|
|
|
|
-* @date 2025/11/26 17:15
|
|
|
|
|
-* @version 1.0
|
|
|
|
|
-*/
|
|
|
|
|
|
|
+ * 年度绩效结果明细-归档/撤销归档
|
|
|
|
|
+ * 实体标识:nckd_annualperfdetail
|
|
|
|
|
+ * @author W.Y.C
|
|
|
|
|
+ * @date 2025/11/26 17:15
|
|
|
|
|
+ * @version 1.0
|
|
|
|
|
+ */
|
|
|
public class PerfArchiveOrUnArchiveOpPlugin extends AbstractOperationServicePlugIn implements Plugin {
|
|
public class PerfArchiveOrUnArchiveOpPlugin extends AbstractOperationServicePlugIn implements Plugin {
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 从日期对象中提取年份
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param date 日期对象
|
|
|
|
|
+ * @return 年份
|
|
|
|
|
+ */
|
|
|
|
|
+ private int getYearFromDate(Object date) {
|
|
|
|
|
+ if (date == null) {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (date instanceof LocalDate) {
|
|
|
|
|
+ return ((LocalDate) date).getYear();
|
|
|
|
|
+ }
|
|
|
|
|
+ // 如果是其他日期类型,可以添加相应的处理逻辑
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
public void onAddValidators(AddValidatorsEventArgs e) {
|
|
public void onAddValidators(AddValidatorsEventArgs e) {
|
|
|
e.addValidator(new AbstractValidator() {
|
|
e.addValidator(new AbstractValidator() {
|
|
@@ -55,39 +74,58 @@ public class PerfArchiveOrUnArchiveOpPlugin extends AbstractOperationServicePlug
|
|
|
DynamicObject data = rowDataEntity.getDataEntity();
|
|
DynamicObject data = rowDataEntity.getDataEntity();
|
|
|
DynamicObject person = data.getDynamicObject(FormConstant.NCKD_PERSON);
|
|
DynamicObject person = data.getDynamicObject(FormConstant.NCKD_PERSON);
|
|
|
personMap.put(person.getLong(FormConstant.ID_KEY),rowDataEntity.getDataEntityIndex());
|
|
personMap.put(person.getLong(FormConstant.ID_KEY),rowDataEntity.getDataEntityIndex());
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- QueryFieldBuilder queryFieldBuilder = QueryFieldBuilder.create().addIdNumberName(FormConstant.NCKD_PERSON);
|
|
|
|
|
|
|
+ int year = DateUtil.now().getYear();
|
|
|
|
|
+ year = year--;
|
|
|
|
|
+ QueryFieldBuilder queryFieldBuilder = QueryFieldBuilder.create()
|
|
|
|
|
+ .addIdNumberName(FormConstant.NCKD_PERSON)
|
|
|
|
|
+ .add(PerfManagerFormConstant.NCKD_YEAR);
|
|
|
QFilter qFilter = new QFilter(FormConstant.NCKD_PERSON, QCP.in, personMap.keySet().toArray());
|
|
QFilter qFilter = new QFilter(FormConstant.NCKD_PERSON, QCP.in, personMap.keySet().toArray());
|
|
|
//查找已归档的记录(状态为1)
|
|
//查找已归档的记录(状态为1)
|
|
|
qFilter = qFilter.and(new QFilter(PerfManagerFormConstant.NCKD_ARCHIVESTATUS, QCP.equals, "1"));
|
|
qFilter = qFilter.and(new QFilter(PerfManagerFormConstant.NCKD_ARCHIVESTATUS, QCP.equals, "1"));
|
|
|
|
|
|
|
|
DynamicObjectCollection perfArchiveRecordQuery = QueryServiceHelper.query(PerfManagerFormConstant.PERFARCHIVERECORD_ENTITYID, queryFieldBuilder.buildSelect(), new QFilter[]{qFilter});
|
|
DynamicObjectCollection perfArchiveRecordQuery = QueryServiceHelper.query(PerfManagerFormConstant.PERFARCHIVERECORD_ENTITYID, queryFieldBuilder.buildSelect(), new QFilter[]{qFilter});
|
|
|
- // 创建已归档人员ID集合
|
|
|
|
|
- Set<Long> archivedPersonIds = perfArchiveRecordQuery.stream()
|
|
|
|
|
- .map(obj -> obj.getLong(String.join( ".",FormConstant.NCKD_PERSON,FormConstant.ID_KEY)))
|
|
|
|
|
|
|
+ // 创建已归档人员ID和年度的映射集合
|
|
|
|
|
+ Set<String> archivedPersonYearPairs = perfArchiveRecordQuery.stream()
|
|
|
|
|
+ .map(obj -> obj.getLong(String.join( ".",FormConstant.NCKD_PERSON,FormConstant.ID_KEY)) + "_" + getYearFromDate(obj.getDate(PerfManagerFormConstant.NCKD_YEAR)))
|
|
|
.collect(Collectors.toSet());
|
|
.collect(Collectors.toSet());
|
|
|
// 处理归档操作
|
|
// 处理归档操作
|
|
|
if(PerfManagerFormConstant.ARCHIVE_OP.equalsIgnoreCase(operateKey)){
|
|
if(PerfManagerFormConstant.ARCHIVE_OP.equalsIgnoreCase(operateKey)){
|
|
|
for (DynamicObject dynamicObject : perfArchiveRecordQuery) {
|
|
for (DynamicObject dynamicObject : perfArchiveRecordQuery) {
|
|
|
String personName = dynamicObject.getString(String.join( ".",FormConstant.NCKD_PERSON,FormConstant.NAME_KEY));
|
|
String personName = dynamicObject.getString(String.join( ".",FormConstant.NCKD_PERSON,FormConstant.NAME_KEY));
|
|
|
long personId = dynamicObject.getLong(String.join( ".",FormConstant.NCKD_PERSON,FormConstant.ID_KEY));
|
|
long personId = dynamicObject.getLong(String.join( ".",FormConstant.NCKD_PERSON,FormConstant.ID_KEY));
|
|
|
- this.addErrorMessage(getDataEntities()[personMap.get(personId)], StrFormatter.format("【{}】已归档,忽略此次处理;", personName));
|
|
|
|
|
|
|
+ String pairKey = personId + "_" + year;
|
|
|
|
|
+
|
|
|
|
|
+ // 检查当前处理的数据中是否有相同的人员和年度
|
|
|
|
|
+ Integer dataIndex = personMap.get(personId);
|
|
|
|
|
+ if (dataIndex != null) {
|
|
|
|
|
+ DynamicObject data = getDataEntities()[dataIndex].getDataEntity();
|
|
|
|
|
+ String dataPairKey = personId + "_" + year;
|
|
|
|
|
+
|
|
|
|
|
+ if (dataPairKey.equals(pairKey)) {
|
|
|
|
|
+ this.addErrorMessage(getDataEntities()[personMap.get(personId)], StrFormatter.format("【{}】【{}】已归档,忽略此条处理;", personName, year));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
// 处理撤销归档操作
|
|
// 处理撤销归档操作
|
|
|
else if(PerfManagerFormConstant.UNARCHIVE_OP.equalsIgnoreCase(operateKey)){
|
|
else if(PerfManagerFormConstant.UNARCHIVE_OP.equalsIgnoreCase(operateKey)){
|
|
|
// 找出在personMap中存在但未归档的人员
|
|
// 找出在personMap中存在但未归档的人员
|
|
|
personMap.entrySet().stream()
|
|
personMap.entrySet().stream()
|
|
|
- .filter(entry -> !archivedPersonIds.contains(entry.getKey()))
|
|
|
|
|
|
|
+ .filter(entry -> {
|
|
|
|
|
+ Long personId = entry.getKey();
|
|
|
|
|
+ String dataPairKey = personId+"";
|
|
|
|
|
+ return archivedPersonYearPairs.isEmpty() || archivedPersonYearPairs.stream().noneMatch(s -> s.indexOf(dataPairKey) > -1);
|
|
|
|
|
+ })
|
|
|
.forEach(entry -> {
|
|
.forEach(entry -> {
|
|
|
Long personId = entry.getKey();
|
|
Long personId = entry.getKey();
|
|
|
Integer dataIndex = entry.getValue();
|
|
Integer dataIndex = entry.getValue();
|
|
|
-
|
|
|
|
|
DynamicObject data = getDataEntities()[dataIndex].getDataEntity();
|
|
DynamicObject data = getDataEntities()[dataIndex].getDataEntity();
|
|
|
DynamicObject person = data.getDynamicObject(FormConstant.NCKD_PERSON);
|
|
DynamicObject person = data.getDynamicObject(FormConstant.NCKD_PERSON);
|
|
|
String personName = person.getString(FormConstant.NAME_KEY);
|
|
String personName = person.getString(FormConstant.NAME_KEY);
|
|
|
- this.addErrorMessage(getDataEntities()[dataIndex], StrFormatter.format("【{}】未归档无需撤销,忽略此次处理;", personName));
|
|
|
|
|
|
|
+ this.addErrorMessage(getDataEntities()[dataIndex], StrFormatter.format("【{}】未归档无需撤销,忽略此条处理;", personName));
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -100,6 +138,9 @@ public class PerfArchiveOrUnArchiveOpPlugin extends AbstractOperationServicePlug
|
|
|
List<DynamicObject> archiveList = new ArrayList<>();
|
|
List<DynamicObject> archiveList = new ArrayList<>();
|
|
|
List<Long> unArchivePersonList = new ArrayList<>();
|
|
List<Long> unArchivePersonList = new ArrayList<>();
|
|
|
StringJoiner personNameList = new StringJoiner(StrFormatter.LINE_SEPARATOR);
|
|
StringJoiner personNameList = new StringJoiner(StrFormatter.LINE_SEPARATOR);
|
|
|
|
|
+ int year = DateUtil.now().getYear();
|
|
|
|
|
+ year = year - 1 ;
|
|
|
|
|
+ LocalDate localDate = LocalDate.of(year, 1, 1);
|
|
|
for (DynamicObject dataEntity : e.getDataEntities()) {
|
|
for (DynamicObject dataEntity : e.getDataEntities()) {
|
|
|
if(PerfManagerFormConstant.ARCHIVE_OP.equalsIgnoreCase(operateKey)){
|
|
if(PerfManagerFormConstant.ARCHIVE_OP.equalsIgnoreCase(operateKey)){
|
|
|
DynamicObject newPerfArchiveRecord = EntityHelper.newEntity(PerfManagerFormConstant.PERFARCHIVERECORD_ENTITYID);
|
|
DynamicObject newPerfArchiveRecord = EntityHelper.newEntity(PerfManagerFormConstant.PERFARCHIVERECORD_ENTITYID);
|
|
@@ -107,8 +148,10 @@ public class PerfArchiveOrUnArchiveOpPlugin extends AbstractOperationServicePlug
|
|
|
newPerfArchiveRecord.set(PerfManagerFormConstant.NCKD_PERSON, person);
|
|
newPerfArchiveRecord.set(PerfManagerFormConstant.NCKD_PERSON, person);
|
|
|
newPerfArchiveRecord.set(PerfManagerFormConstant.NCKD_ARCHIVESTATUS, "1");
|
|
newPerfArchiveRecord.set(PerfManagerFormConstant.NCKD_ARCHIVESTATUS, "1");
|
|
|
newPerfArchiveRecord.set(FormConstant.CREATOR_KEY, UserServiceHelper.getCurrentUserId());
|
|
newPerfArchiveRecord.set(FormConstant.CREATOR_KEY, UserServiceHelper.getCurrentUserId());
|
|
|
|
|
+ newPerfArchiveRecord.set(PerfManagerFormConstant.NCKD_YEAR, DateUtil.toDate(localDate));
|
|
|
archiveList.add(newPerfArchiveRecord);
|
|
archiveList.add(newPerfArchiveRecord);
|
|
|
personNameList.add(StrFormatter.format("【{}】归档成功;", person.getString(FormConstant.NAME_KEY)));
|
|
personNameList.add(StrFormatter.format("【{}】归档成功;", person.getString(FormConstant.NAME_KEY)));
|
|
|
|
|
+
|
|
|
}else if(PerfManagerFormConstant.UNARCHIVE_OP.equalsIgnoreCase(operateKey)){
|
|
}else if(PerfManagerFormConstant.UNARCHIVE_OP.equalsIgnoreCase(operateKey)){
|
|
|
DynamicObject person = dataEntity.getDynamicObject(FormConstant.NCKD_PERSON);
|
|
DynamicObject person = dataEntity.getDynamicObject(FormConstant.NCKD_PERSON);
|
|
|
unArchivePersonList.add(person.getLong(FormConstant.ID_KEY));
|
|
unArchivePersonList.add(person.getLong(FormConstant.ID_KEY));
|