Browse Source

feat(hrmp): 优化岗位调整申请单功能

- 在PositionBillClosedCallBackService中添加新增分录后调用操作的逻辑
- 移除PositionBillPropertyChangedService中上级岗位变更的注释代码
- 将PositionBillSaveHelper中的setPositionBoId方法重命名为setAdminOrgBoId并修改逻辑
- 从PositionBillConstant中移除岗位BOID常量并添加最近一次新增岗位数据ID常量
- 在PosBillEntryAddFormPlugin中添加设置最近新增岗位信息的方法
- 使用HRStringUtils.equalsAny方法优化操作类型判断逻辑
- 在PositionBillEntryAddFormPlugin中添加岗位申请单分录导入数据校验器
- 修复PositionBillFormPlugin中字符串格式化问题
jtd 1 week ago
parent
commit
4e8fb3485e

+ 4 - 0
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbpm/business/hr/service/impl/PositionBillClosedCallBackService.java

@@ -49,6 +49,10 @@ public class PositionBillClosedCallBackService extends PositionBillBaseService {
                     return;
                 }
                 updateAddEntryEntity();
+
+                if (getView().getPageCache().get(PositionBillConstant.PC_LASTTIMEADDENTRYID) != null) {
+                    getView().invokeOperation(PositionBillConstant.NEWENTRY_ADD_OP);
+                }
                 break;
             case  PositionBillConstant.NCKD_ENTRYENTITY_CHANGE_KEY:
                 saveReturn(closedCallBackEvent.getReturnData(), PositionBillConstant.NCKD_ENTRYENTITY_CHANGE_KEY);

+ 0 - 2
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbpm/business/hr/service/impl/PositionBillPropertyChangedService.java

@@ -59,8 +59,6 @@ public class PositionBillPropertyChangedService extends PositionBillBaseService
                 } else if (objectNew != null) {
                     showConfirmByOldValue(changedArgs, suffix, rowIndex);
                 }
-            } else if (fieldKey.equals(String.join("_", PositionBillConstant.NCKD_PARENT, PositionBillConstant.CHANGE_TAG))) {
-                // 上级岗位变更业务逻辑
             } else if (fieldKey.equals(String.join("_", PositionBillConstant.NCKD_ORG_KEY, suffix))) {
                 DynamicObject oldObj = (DynamicObject) objectOld;
                 DynamicObject newObj = (DynamicObject) objectNew;

+ 7 - 10
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbpm/business/hr/service/impl/PositionBillSaveHelper.java

@@ -6,7 +6,6 @@ import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.dataentity.metadata.IDataEntityProperty;
 import kd.bos.dataentity.metadata.clr.DataEntityPropertyCollection;
-import kd.bos.entity.property.BigIntProp;
 import kd.bos.logging.Log;
 import kd.bos.logging.LogFactory;
 import kd.bos.orm.query.QCP;
@@ -81,7 +80,7 @@ public class PositionBillSaveHelper {
             }
 
             resetSequence(needSaveEntryDynList);
-            setPositionBoId(needSaveEntryDynList, positionId2BasicInfoDynMap);
+            setAdminOrgBoId(needSaveEntryDynList, positionId2BasicInfoDynMap);
             if (needSaveEntryDynList.isEmpty()) {
                 logger.info("needSaveEntryDynList is empty");
             } else {
@@ -165,11 +164,11 @@ public class PositionBillSaveHelper {
         return positionIdList;
     }
 
-    private void setPositionBoId(List<DynamicObject> needSaveEntryDynList, Map<Long, DynamicObject> positionId2BasicInfoDynMap) {
+    private void setAdminOrgBoId(List<DynamicObject> needSaveEntryDynList, Map<Long, DynamicObject> positionId2BasicInfoDynMap) {
         needSaveEntryDynList.forEach((entryDyn) -> {
             long positionId = entryDyn.getLong(String.join(".", PositionBillConstant.NCKD_POSITION_KEY, PositionBillConstant.ID_KEY));
             DynamicObject basicInfoDyn = positionId2BasicInfoDynMap.get(positionId);
-            entryDyn.set(PositionBillConstant.NCKD_POSITIONBOID_KEY, basicInfoDyn.getLong(PositionBillConstant.BOID_KEY));
+            entryDyn.set(PositionBillConstant.NCKD_ADMINORGBOID_KEY, basicInfoDyn.getDynamicObject(PositionBillConstant.ADMINORG).getLong(PositionBillConstant.BOID_KEY));
         });
     }
 
@@ -181,11 +180,6 @@ public class PositionBillSaveHelper {
 
         for(IDataEntityProperty property : entryEntity.getDataEntityType().getProperties()) {
             String propName = property.getName();
-            // 如果岗位是长整数则不能覆盖从数据库中拿到的对象,否则后续获取岗位对象的时候就会类型转换异常
-            if (property instanceof BigIntProp && HRStringUtils.equals(String.join("_", PositionBillConstant.NCKD_POSITION_KEY, suffix), propName)) {
-                continue;
-            }
-
             if (PatternUtil.isExProperty(propName) && propName.endsWith("_"+suffix)) {
                 String propNameSub = PositionBillServiceHelper.getNoLineSuffixProp(propName, "_"+suffix);
                 propNameSub = posBillEntryTransKeyMap.getOrDefault(propNameSub, propNameSub);
@@ -198,7 +192,10 @@ public class PositionBillSaveHelper {
                     }
                 }
 
-                positionBillEntryDyn.set(propNameSub, newVal);
+                // 类型相同的情况下才覆盖值,避免后续获取值的时候类型转换异常
+                if (prop != null && property.getPropertyType() == prop.getPropertyType()) {
+                    positionBillEntryDyn.set(propNameSub, newVal);
+                }
             }
         }
         positionBillEntryDyn.set(PositionBillConstant.ID_KEY, entryEntity.get(PositionBillConstant.ID_KEY));

+ 2 - 2
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbpm/common/hr/PositionBillConstant.java

@@ -75,8 +75,6 @@ public class PositionBillConstant extends FormConstant {
     public static final String NCKD_ADMINORG = "nckd_adminorg";
     /** 岗位ID */
     public static final String NCKD_POSITIONID_KEY = "nckd_positionid";
-    /** 岗位BOID */
-    public static final String NCKD_POSITIONBOID_KEY = "nckd_positionboid";
     /** 上级岗位 */
     public static final String NCKD_PARENT = "nckd_parent";
     /** 上级岗位 */
@@ -177,6 +175,8 @@ public class PositionBillConstant extends FormConstant {
     public static final String PC_ISFROMBILLCLICK = "isFromBillClick";
     /** 业务单元页面缓存参数 */
     public static final String PC_BUSINESSUNIT = "businessUnit";
+    /** 最近一次新增岗位的数据ID */
+    public static final String PC_LASTTIMEADDENTRYID = "lastTimeAddEntryId";
 
     /** 变更组织体系管理组织回调标识 */
     public static final String CB_CHG_ORG = "chg_org";

+ 20 - 1
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbpm/plugin/form/hr/PosBillEntryAddFormPlugin.java

@@ -76,6 +76,7 @@ public class PosBillEntryAddFormPlugin extends AbstractFormPlugin {
         }
 
         getModel().setValue(PositionBillConstant.ENABLE, EnableEnum.YES.getCode());
+        setLastTimeAddPositionInfo();
         // 设置岗位编码
         if (HRStringUtils.isEmpty(getModel().getDataEntity().getString(PositionBillConstant.NUMBER_KEY))) {
             setPositionNumber(PositionBillServiceHelper.getPositionHrDy(getModel().getDataEntity()), true);
@@ -350,7 +351,7 @@ public class PosBillEntryAddFormPlugin extends AbstractFormPlugin {
         }
         IPageCache parentPageCache = getView().getParentView().getPageCache();
         String operateKey = eventArgs.getOperateKey();
-        if (HRStringUtils.equals(operateKey, PositionBillConstant.SAVE_AND_NEW_OP) || HRStringUtils.equals(operateKey, PositionBillConstant.SAVE_OP)) {
+        if (HRStringUtils.equalsAny(operateKey, PositionBillConstant.SAVE_AND_NEW_OP, PositionBillConstant.SAVE_OP)) {
             String beforeParentPositionId = getView().getPageCache().get(PositionBillConstant.PC_BEFOREPARENTPOSITIONID);
             String addPositionParentChange = Boolean.FALSE.toString();
             DynamicObject parentPosition = getModel().getDataEntity().getDynamicObject(PositionBillConstant.NCKD_PARENT);
@@ -370,6 +371,24 @@ public class PosBillEntryAddFormPlugin extends AbstractFormPlugin {
             getView().getPageCache().put(PositionBillConstant.PC_SAVERESULT, Boolean.TRUE.toString());
             getView().returnDataToParent(map);
         }
+
+        if (HRStringUtils.equals(operateKey, PositionBillConstant.SAVE_AND_NEW_OP)) {
+            parentPageCache.put(PositionBillConstant.PC_LASTTIMEADDENTRYID, String.valueOf(getModel().getDataEntity().getLong(PositionBillConstant.ID_KEY)));
+        }
+    }
+
+    private void setLastTimeAddPositionInfo() {
+        String positionIdStr = getView().getParentView().getPageCache().get(PositionBillConstant.PC_LASTTIMEADDENTRYID);
+        if (!HRStringUtils.isEmpty(positionIdStr)) {
+            Long lastTimeAddEntryId = Long.valueOf(positionIdStr);
+            /*HRBaseServiceHelper billHelper = new HRBaseServiceHelper(PositionBillConstant.NCKD_POSITIONBILLENTRY_ENTITY);
+            DynamicObject addPositionDy = billHelper.queryOne("", lastTimeAddEntryId);
+            if (addPositionDy != null) {
+                getModel().setValue();
+            }*/
+
+            getView().getParentView().getPageCache().remove(PositionBillConstant.PC_LASTTIMEADDENTRYID);
+        }
     }
 
     private void propertyChangedGetNumber(String fieldKey, Object oldValue) {

+ 1 - 1
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbpm/plugin/form/hr/PositionBillFormPlugin.java

@@ -156,7 +156,7 @@ public class PositionBillFormPlugin extends AbstractFormPlugin implements Before
             HRBaseServiceHelper hrBaseServiceHelper = new HRBaseServiceHelper(PositionBillConstant.NCKD_POSITIONBILL_ENTITY);
             DynamicObject billObject = hrBaseServiceHelper.queryOne(String.join(",", PositionBillConstant.ID_KEY, PositionBillConstant.BILL_NO_KEY), billShowParameter.getPkId());
             if (billObject != null) {
-                caption.setLocaleValue(String.format(Locale.ROOT, "岗位调整申请-%s", billObject.getString("billno")));
+                caption.setLocaleValue(String.format(Locale.ROOT, "岗位调整申请-%s", billObject.getString(PositionBillConstant.BILL_NO_KEY)));
             }
         }
 

+ 21 - 0
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbpm/plugin/operate/hr/validator/PositionBillEntryImportValidator.java

@@ -0,0 +1,21 @@
+package nckd.jxccl.hrmp.hbpm.plugin.operate.hr.validator;
+
+import kd.bos.entity.validate.AbstractValidator;
+
+/**
+ * 岗位申请单分录导入数据校验器
+ * @from: kd.hr.homs.opplugin.web.orgbatch.validator.AdminOrgBatchDetailImportValidator
+ * @author: jtd
+ * @date: 2026/1/4 11:27
+ */
+public class PositionBillEntryImportValidator extends AbstractValidator {
+    private final String this_bill_msg = "岗位已存在%s中,不允许同时对岗位进行多种变动操作。";
+    private final String this_bill_msg_no_type = "岗位已存在本单中,不允许同时对岗位进行多种变动操作。";
+    private final String loop_self = "不能选择自己或者自己的下级岗位为上级岗位,请修改。";
+
+
+    @Override
+    public void validate() {
+        // 导入数据校验业务逻辑
+    }
+}