|
|
@@ -0,0 +1,101 @@
|
|
|
+package nckd.jxccl.hrmp.haos.plugin.operate.adminorg;
|
|
|
+
|
|
|
+import kd.bos.dataentity.entity.DynamicObject;
|
|
|
+import kd.bos.dataentity.entity.DynamicObjectCollection;
|
|
|
+import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
|
|
|
+import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
|
|
|
+import kd.bos.entity.plugin.args.EndOperationTransactionArgs;
|
|
|
+import kd.bos.orm.query.QCP;
|
|
|
+import kd.bos.orm.query.QFilter;
|
|
|
+import kd.bos.servicehelper.BusinessDataServiceHelper;
|
|
|
+import kd.bos.servicehelper.QueryServiceHelper;
|
|
|
+import kd.bos.servicehelper.operation.SaveServiceHelper;
|
|
|
+import kd.hr.hbp.common.util.HRDateTimeUtils;
|
|
|
+import nckd.jxccl.base.orm.helper.QFilterCommonHelper;
|
|
|
+import nckd.jxccl.hrmp.haos.common.adminorg.AdminOrgConstant;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.function.Function;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 组织快速维护确认变更操作插件
|
|
|
+ * @author: jtd
|
|
|
+ * @date: 2025-10-16 9:47
|
|
|
+ */
|
|
|
+public class AdminOrgDetailConfirmChangeOpPlugin extends AbstractOperationServicePlugIn {
|
|
|
+
|
|
|
+ private DynamicObjectCollection adminOrgOldDyColl;
|
|
|
+
|
|
|
+ private Boolean canDo(DynamicObject[] dataEntities) {
|
|
|
+ if (dataEntities == null || dataEntities.length <= 0) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ DynamicObject data = dataEntities[0];
|
|
|
+ // 非上级调整或未来生效
|
|
|
+ if (!"1020_S".equals(data.getDynamicObject(AdminOrgConstant.CHANGETYPE).getString(AdminOrgConstant.NUMBER_KEY)) || HRDateTimeUtils.dayAfter(data.getDate(AdminOrgConstant.BSED), HRDateTimeUtils.getNowDate())) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void beginOperationTransaction(BeginOperationTransactionArgs e) {
|
|
|
+ super.beginOperationTransaction(e);
|
|
|
+
|
|
|
+ DynamicObject[] dataEntities = e.getDataEntities();
|
|
|
+ if (!canDo(dataEntities)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取组织及下级组织(旧数据)
|
|
|
+ QFilter qFilter = QFilter.of("1!=1", new Object[0]);
|
|
|
+ Arrays.stream(dataEntities).map(dataEntity -> dataEntity.getString(AdminOrgConstant.STRUCTLONGNUMBER)+"%").forEach(structlongnumber -> {
|
|
|
+ qFilter.or(QFilter.like(AdminOrgConstant.STRUCTLONGNUMBER, structlongnumber));
|
|
|
+ });
|
|
|
+ adminOrgOldDyColl = QueryServiceHelper.query(AdminOrgConstant.ADMINORGHR_ENTITYID, AdminOrgConstant.BOID_KEY, new QFilter[]{QFilter.isNotNull(AdminOrgConstant.STRUCTLONGNUMBER).and(qFilter).and(QFilterCommonHelper.getCurrentVersionFilter())});
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void endOperationTransaction(EndOperationTransactionArgs e) {
|
|
|
+ super.endOperationTransaction(e);
|
|
|
+
|
|
|
+ DynamicObject[] dataEntities = e.getDataEntities();
|
|
|
+ if (!canDo(dataEntities)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取组织及下级组织(新数据)含历史版本
|
|
|
+ List<Long> adminOrgBoIds = adminOrgOldDyColl.stream().map(adminOrg -> adminOrg.getLong(AdminOrgConstant.BOID_KEY)).collect(Collectors.toList());
|
|
|
+ DynamicObject[] adminOrgDys = BusinessDataServiceHelper.load(AdminOrgConstant.ADMINORGHR_ENTITYID, String.join(",", AdminOrgConstant.BOID_KEY, AdminOrgConstant.STRUCTLONGNUMBER, AdminOrgConstant.LEVEL, String.join(",", AdminOrgConstant.ADMINORG_STRUCT_FIELDS)), new QFilter[]{QFilter.isNotNull(AdminOrgConstant.STRUCTLONGNUMBER).and(new QFilter(AdminOrgConstant.STRUCTLONGNUMBER, QCP.not_equals, "")).and(new QFilter(AdminOrgConstant.BOID_KEY, QCP.in, adminOrgBoIds))}, AdminOrgConstant.BOID_KEY);
|
|
|
+ // 遍历获取结构编码
|
|
|
+ Map<String, String> structMap = Arrays.stream(adminOrgDys)
|
|
|
+ .map(adminOrgDy -> adminOrgDy.getString(AdminOrgConstant.STRUCTLONGNUMBER))
|
|
|
+ .flatMap(structNumber -> Arrays.stream(structNumber.split("!")))
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ Function.identity(), // key就是遍历值 这里简写了 等价于 structNumber -> structNumber
|
|
|
+ structNumber -> "", // value为空
|
|
|
+ (existing, replacement) -> existing // 重复key处理 保留旧值或新值都可以 这里随便挑一个
|
|
|
+ ));
|
|
|
+
|
|
|
+ // 根据结构编码获取组织
|
|
|
+ DynamicObjectCollection adminOrgDyColl = QueryServiceHelper.query(AdminOrgConstant.ADMINORGHR_ENTITYID, String.join(",", AdminOrgConstant.BOID_KEY, AdminOrgConstant.STRUCTNUMBER), new QFilter[]{new QFilter(AdminOrgConstant.STRUCTNUMBER, QCP.in, new ArrayList<String>(structMap.keySet())).and(QFilterCommonHelper.getCurrentVersionFilter())}, AdminOrgConstant.LEVEL);
|
|
|
+ adminOrgDyColl.forEach(adminOrgDy -> structMap.put(adminOrgDy.getString(AdminOrgConstant.STRUCTNUMBER), adminOrgDy.getString(AdminOrgConstant.BOID_KEY)));
|
|
|
+
|
|
|
+ // 更新一二三四五六级组织
|
|
|
+ for (DynamicObject adminOrgDy : adminOrgDys) {
|
|
|
+ String[] structLongNumbers = adminOrgDy.getString(AdminOrgConstant.STRUCTLONGNUMBER).split("!");
|
|
|
+ for (int i = 0; i < AdminOrgConstant.ADMINORG_STRUCT_FIELDS.length; i++) {
|
|
|
+ adminOrgDy.set(AdminOrgConstant.ADMINORG_STRUCT_FIELDS[i], i < structLongNumbers.length ? structMap.get(structLongNumbers[i]) : null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 保存数据
|
|
|
+ SaveServiceHelper.save(adminOrgDys);
|
|
|
+ }
|
|
|
+}
|