Explorar o código

fix(hrmp): 修复岗位申请单生效处理中的数据映射问题

- 修改PositionBillEffectService中使用正确的枚举数值获取方法
- 添加行政组织信息的数据库查询和映射逻辑
- 修复父子组织关系设置中的字段引用错误
- 在PositionBillEffectOpPlugin中实现事务结束时的数据清理和更新
- 修正批量加载动态对象时的查询条件操作符
- 添加对新增岗位类型的版本ID映射和更新处理
jtd hai 1 semana
pai
achega
e8d747395b

+ 23 - 6
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbpm/business/hr/service/impl/PositionBillEffectService.java

@@ -1,6 +1,7 @@
 package nckd.jxccl.hrmp.hbpm.business.hr.service.impl;
 
 import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 import kd.bos.common.enums.EnableEnum;
 import kd.bos.dataentity.OperateOption;
@@ -52,8 +53,8 @@ public class PositionBillEffectService {
             long billId = bill.getLong(PositionBillConstant.ID_KEY);
             Map<String, List<DynamicObject>> billEntryPositionDyMap = getBillEntryPositionDyMap(billId);
             Map<Long, DynamicObject> positionBoIdMap = getAllCurrentVersionParentDyMap(billEntryPositionDyMap);
-            newAddPositionEffect(billEntryPositionDyMap.get(PositionChangeTypeEnum.ADD.getName()), billId, effDate);
-            confirmChangePositionEffect(billEntryPositionDyMap.get(PositionChangeTypeEnum.CHANGE.getName()), positionBoIdMap, billId, effDate);
+            newAddPositionEffect(billEntryPositionDyMap.get(PositionChangeTypeEnum.ADD.getNumber()), billId, effDate);
+            confirmChangePositionEffect(billEntryPositionDyMap.get(PositionChangeTypeEnum.CHANGE.getNumber()), positionBoIdMap, billId, effDate);
             auditBill(billId);
         }
     }
@@ -64,6 +65,19 @@ public class PositionBillEffectService {
             List<DynamicObject> confirmChangePositionDys = Lists.newArrayListWithExpectedSize(confirmChangePositionEntity.size());
             HisModelCopyUtil hisModelCopyUtil = new HisModelCopyUtil();
 
+            // 获取 行政组织业务ID
+            List<Long> adminorgBoIds = Lists.newArrayListWithExpectedSize(confirmChangePositionEntity.size());
+            for (DynamicObject confirmChangePosition : confirmChangePositionEntity) {
+                adminorgBoIds.add(confirmChangePosition.getLong(PositionBillConstant.NCKD_ADMINORGBOID_KEY));
+            }
+
+            // 根据组织BOID从数据库中获取组织信息
+            DynamicObject[] adminOrgDyos = HRBaseServiceHelper.create(PositionBillConstant.ADMINORG_ENTITYID).loadDynamicObjectArray(new QFilter[]{new QFilter(PositionBillConstant.ID_KEY, QCP.in, adminorgBoIds)});
+            Map<Long, DynamicObject> dbAdminOrgMap = Maps.newHashMapWithExpectedSize(adminOrgDyos.length);
+            for (DynamicObject adminOrgDyo : adminOrgDyos) {
+                dbAdminOrgMap.put(adminOrgDyo.getLong(PositionBillConstant.BOID_KEY), adminOrgDyo);
+            }
+
             // 获取岗位要转换的键值
             Map<String, String> positionTransKeyMap = PositionBillServiceHelper.getPositionTransKeyMap();
             for(DynamicObject confirmChangePosition : confirmChangePositionEntity) {
@@ -73,15 +87,18 @@ public class PositionBillEffectService {
                 if (dbPositionDy != null) {
                     DynamicObject copyDy = hisModelCopyUtil.copyTempVersionData(dbPositionDy, positionHelper);
                     HRDynamicObjectUtils.copy(confirmChangePosition, copyDy, positionTransKeyMap);
-                    DynamicObject parentOrgVersionDy = confirmChangePosition.getDynamicObject(PositionBillConstant.NCKD_PARENT);
-                    if (parentOrgVersionDy != null) {
-                        copyDy.set(PositionBillConstant.PARENT_KEY, positionBoIdMap.get(parentOrgVersionDy.getLong(PositionBillConstant.BOID_KEY)));
+                    DynamicObject parentVersionDy = confirmChangePosition.getDynamicObject(PositionBillConstant.NCKD_PARENT);
+                    if (parentVersionDy != null) {
+                        copyDy.set(PositionBillConstant.PARENT_KEY, positionBoIdMap.get(parentVersionDy.getLong(PositionBillConstant.BOID_KEY)));
                     } else {
                         copyDy.set(PositionBillConstant.PARENT_KEY, null);
                     }
 
                     copyDy.set(PositionBillConstant.BSED_KEY, effDate);
                     copyDy.set(PositionBillConstant.ENABLE, EnableEnum.YES.getCode());
+                    // 设置 行政组织为业务对象
+                    copyDy.set(PositionBillConstant.ADMINORG, dbAdminOrgMap.get(confirmChangePosition.getLong(PositionBillConstant.NCKD_ADMINORGBOID_KEY)));
+
                     confirmChangePositionDys.add(copyDy);
                 }
             }
@@ -212,7 +229,7 @@ public class PositionBillEffectService {
             }
         }
 
-        DynamicObject[] dbPositionDys = positionHelper.loadDynamicObjectArray(new QFilter[]{new QFilter(PositionBillConstant.ID_KEY, QCP.equals, parentPositionBoIds)});
+        DynamicObject[] dbPositionDys = positionHelper.loadDynamicObjectArray(new QFilter[]{new QFilter(PositionBillConstant.ID_KEY, QCP.in, parentPositionBoIds)});
         return Arrays.stream(dbPositionDys).collect(Collectors.toMap((dy) -> dy.getLong(PositionBillConstant.ID_KEY), Function.identity()));
     }
 

+ 76 - 0
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbpm/plugin/operate/hr/PositionBillEffectOpPlugin.java

@@ -1,14 +1,29 @@
 package nckd.jxccl.hrmp.hbpm.plugin.operate.hr;
 
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
 import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.db.tx.TXHandle;
 import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
 import kd.bos.entity.plugin.AddValidatorsEventArgs;
 import kd.bos.entity.plugin.PreparePropertysEventArgs;
 import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
+import kd.bos.entity.plugin.args.EndOperationTransactionArgs;
 import kd.bos.logging.Log;
 import kd.bos.logging.LogFactory;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.hr.hbp.business.servicehelper.HRBaseServiceHelper;
 import nckd.jxccl.hrmp.hbpm.business.hr.service.impl.PositionBillEffectService;
 import nckd.jxccl.hrmp.hbpm.common.hr.PositionBillConstant;
+import nckd.jxccl.hrmp.hbpm.common.hr.PositionChangeTypeEnum;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * 岗位申请单生效操作插件
@@ -44,4 +59,65 @@ public class PositionBillEffectOpPlugin extends AbstractOperationServicePlugIn {
             positionBillEffectService.billEffect(bills);
         }
     }
+
+    @Override
+    public void endOperationTransaction(EndOperationTransactionArgs e) {
+        super.endOperationTransaction(e);
+
+        DynamicObject[] bills = e.getDataEntities();
+        Set<Long> billIds = Sets.newHashSetWithExpectedSize(bills.length);
+        billIds = null;
+
+        for(DynamicObject bill : bills) {
+            billIds.add(bill.getLong(PositionBillConstant.ID_KEY));
+        }
+
+        HRBaseServiceHelper positionBillEntryEntityHelper = new HRBaseServiceHelper(PositionBillConstant.NCKD_POSITIONBILLENTRY_ENTITY);
+        QFilter positionIdFilter = new QFilter(PositionBillConstant.CREATOR_KEY, QCP.equals, 0);
+        QFilter billIdFilter = new QFilter(PositionBillConstant.NCKD_BILLID, QCP.in, billIds);
+        positionIdFilter.and(billIdFilter);
+        positionBillEntryEntityHelper.deleteByFilter(positionIdFilter.toArray());
+        QFilter filter = new QFilter(PositionBillConstant.NCKD_BILLID, QCP.in, billIds);
+        DynamicObject[] entries = positionBillEntryEntityHelper.loadDynamicObjectArray(new QFilter[]{filter});
+        Map<String, List<DynamicObject>> changeTypeGroupMap = Arrays.stream(entries).collect(Collectors.groupingBy((dy) -> dy.getString(String.join(".", PositionBillConstant.NCKD_CHANGETYPE, PositionBillConstant.NUMBER_KEY))));
+        List<DynamicObject> positionDyList = changeTypeGroupMap.get(PositionChangeTypeEnum.ADD.getNumber());
+        if (positionDyList != null && !positionDyList.isEmpty()) {
+            Map<Long, Long> positionBoIdToVidMap = Maps.newHashMapWithExpectedSize(positionDyList.size());
+
+            for(DynamicObject positionDy : positionDyList) {
+                DynamicObject positionBoDy = positionDy.getDynamicObject(PositionBillConstant.NCKD_POSITION_KEY);
+                positionBoIdToVidMap.put(positionBoDy.getLong(PositionBillConstant.ID_KEY), positionBoDy.getLong(PositionBillConstant.SOURCEVID_KEY));
+            }
+
+            List<DynamicObject> updateEntryValue = Lists.newArrayListWithExpectedSize(10);
+
+            for(Map.Entry<String, List<DynamicObject>> entry : changeTypeGroupMap.entrySet()) {
+                for(DynamicObject entryValue : entry.getValue()) {
+                    boolean change = false;
+                    long parentId = entryValue.getLong(String.join(".", PositionBillConstant.NCKD_PARENT, PositionBillConstant.ID_KEY));
+                    if (positionBoIdToVidMap.containsKey(parentId)) {
+                        entryValue.set(PositionBillConstant.NCKD_PARENT, positionBoIdToVidMap.get(parentId));
+                        change = true;
+                    }
+
+                    long positionId = entryValue.getLong(String.join(".", PositionBillConstant.NCKD_POSITION_KEY, PositionBillConstant.ID_KEY));
+                    if (positionBoIdToVidMap.containsKey(positionId)) {
+                        entryValue.set(PositionBillConstant.NCKD_POSITION_KEY, positionBoIdToVidMap.get(positionId));
+                        change = true;
+                    }
+
+                    if (change) {
+                        updateEntryValue.add(entryValue);
+                    }
+                }
+            }
+
+            if (!updateEntryValue.isEmpty()) {
+                positionBillEntryEntityHelper.save(updateEntryValue.toArray(new DynamicObject[0]));
+            }
+        }
+
+        TXHandle txHandle = TXHandle.get();
+        log.info("endOperationTransaction_tx_isRollBack_is_{}", txHandle.isRollback());
+    }
 }