Просмотр исходного кода

refactor(hr): 优化岗位单据确认回调服务逻辑

- 修改 PositionBillConfirmCallBackService 中的回调判断逻辑,避免正常回调误入错误分支
- 重命名 changeOrgConfirm 方法为 changeOrgOrPositionConfirm 以更好地反映功能
- 调整回调ID后缀截取长度从11位改为16位以适配新的回调格式
- 移除代码中的多余空行以改善代码格式
- 在 PositionBillServiceHelper 中将组织相关变量重命名为岗位相关变量
- 修正 PositionBillFormPlugin 中的字段引用错误,将 NCKD_PARENT 改为 NCKD_POSITION
- 添加岗位过滤逻辑,避免选择下级岗位时出现重复数据
- 增加 HRObjectUtils 的导入以支持新的判断逻辑
jtd 1 неделя назад
Родитель
Сommit
655301fe4f

+ 5 - 4
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbpm/business/service/hr/PositionBillConfirmCallBackService.java

@@ -77,6 +77,8 @@ public class PositionBillConfirmCallBackService extends PositionBillBaseService
 
                 getView().showSuccessNotification("删除成功");
                 hrBaseServiceHelper.delete(entryIdList.toArray(new Long[0]));
+            } else if (!PositionBillConstant.CB_CLOSE_BILL.equals(callBackId)) {
+                // 避免正常的回调操作误入else,需要增加这个判断(比如select_position_的回调)
             } else {
                 if (PositionBillConstant.CB_CLOSE_BILL.equals(callBackId) && event.getResult() == MessageBoxResult.Cancel) {
                     return;
@@ -104,7 +106,7 @@ public class PositionBillConfirmCallBackService extends PositionBillBaseService
             }
         }
 
-        changeOrgConfirm(event, callBackId);
+        changeOrgOrPositionConfirm(event, callBackId);
     }
 
     private int[] validateHasChildPositionAndDelete() {
@@ -184,9 +186,9 @@ public class PositionBillConfirmCallBackService extends PositionBillBaseService
         return deleteRowIndexList.stream().mapToInt(Integer::intValue).toArray();
     }
 
-    private void changeOrgConfirm(MessageBoxClosedEvent messageBoxClosedEvent, String callBackId) {
+    private void changeOrgOrPositionConfirm(MessageBoxClosedEvent messageBoxClosedEvent, String callBackId) {
         if (callBackId.startsWith(PositionBillConstant.CB_SELECT_POSITION)) {
-            String suffix = callBackId.substring(11);
+            String suffix = callBackId.substring(16);
             String lineSuffix = "_" + suffix;
             HRBaseServiceHelper helper = new HRBaseServiceHelper(PositionBillConstant.HBPM_POSITIONHR);
             String positionRow = getView().getPageCache().get(PositionBillConstant.PC_POSITIONROW);
@@ -207,7 +209,6 @@ public class PositionBillConfirmCallBackService extends PositionBillBaseService
             }
 
             DataEntityPropertyCollection entryEntityInfo = getModel().getDataEntity(true).getDynamicObjectCollection(String.join("_", PositionBillConstant.NCKD_ENTRYENTITY, suffix)).getDynamicObjectType().getProperties();
-
             Map<String, String> transKeyMap = new HashMap<String, String>();
             // 获取分录要转换的键值,将单据分录字段转换转成分录页面字段
             transKeyMap.putAll(PositionBillServiceHelper.getPosBillEntryTransKeyMap());

+ 5 - 5
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbpm/business/service/hr/PositionBillServiceHelper.java

@@ -149,9 +149,9 @@ public class PositionBillServiceHelper {
         DynamicObject dataEntityParent = view.getModel().getDataEntity(true);
         QFilter isCurrentVersion = new QFilter(PositionBillConstant.IS_CURRENT_VERSION, QCP.equals, EnableEnum.NO.getCode());
         DynamicObjectCollection addCollection = dataEntityParent.getDynamicObjectCollection(PositionBillConstant.NCKD_ENTRYENTITY_ADD_KEY);
-        Set<String> adminOrgSet = addCollection.stream().map((s) -> s.getString(String.join("_", PositionBillConstant.NCKD_POSITION, PositionBillConstant.ADD_TAG))).collect(Collectors.toSet());
-        Set<Long> addOrgIdSet = adminOrgSet.stream().map(Long::valueOf).collect(Collectors.toSet());
-        QFilter currentOrderFilter = new QFilter(PositionBillConstant.ID_KEY, QCP.in, addOrgIdSet);
+        Set<String> positionSet = addCollection.stream().map((s) -> s.getString(String.join("_", PositionBillConstant.NCKD_POSITION, PositionBillConstant.ADD_TAG))).collect(Collectors.toSet());
+        Set<Long> addPositionIdSet = positionSet.stream().map(Long::valueOf).collect(Collectors.toSet());
+        QFilter currentOrderFilter = new QFilter(PositionBillConstant.ID_KEY, QCP.in, addPositionIdSet);
 
         AuthorizedOrgResult permResult = getOrgAuth(view);
         if (permResult != null && !permResult.isHasAllOrgPerm()) {
@@ -166,7 +166,7 @@ public class PositionBillServiceHelper {
             buOrg = positionObject.getDynamicObject(PositionBillConstant.ORG_KEY);
         }
 
-        Date effDate = HRObjectUtils.isEmpty(view.getModel().getValue(PositionBillConstant.NCKD_EFFDT)) ? DateUtils.truncate(new Date(), 5) : (Date)view.getModel().getValue(PositionBillConstant.NCKD_EFFDT);
+        Date effDate = HRObjectUtils.isEmpty(view.getModel().getValue(PositionBillConstant.NCKD_EFFDT)) ? DateUtils.truncate(new Date(), 5) : (Date) view.getModel().getValue(PositionBillConstant.NCKD_EFFDT);
         event.getCustomQFilters().add(new QFilter(PositionBillConstant.BSED_KEY, QCP.less_equals, effDate));
         event.getCustomQFilters().add(new QFilter(PositionBillConstant.BSLED_KEY, QCP.large_equals, effDate));
         if (buOrg != null) {
@@ -178,7 +178,7 @@ public class PositionBillServiceHelper {
         QFilter statusFilter = new QFilter(PositionBillConstant.STATUS, QCP.equals, StatusEnum.C);
         event.getCustomQFilters().add(statusFilter.or(currentOrderFilter));
         event.getCustomQFilters().add(isCurrentVersion.or(currentOrderFilter));
-        ListShowParameter formShowParameter = (ListShowParameter)event.getFormShowParameter();
+        ListShowParameter formShowParameter = (ListShowParameter) event.getFormShowParameter();
         formShowParameter.setShowApproved(false);
     }
 

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

@@ -53,6 +53,7 @@ import kd.hr.hbp.business.servicehelper.HRBaseServiceHelper;
 import kd.hr.hbp.common.model.AuthorizedOrgResult;
 import kd.hr.hbp.common.util.HRDateTimeUtils;
 import kd.hr.hbp.common.util.HRDynamicObjectUtils;
+import kd.hr.hbp.common.util.HRObjectUtils;
 import kd.hr.hbp.common.util.HRStringUtils;
 import kd.hr.hbp.common.util.concurrent.NullableConcurrentHashMap;
 import kd.sdk.hr.hdm.common.enums.reg.RegBillStatusEnum;
@@ -328,9 +329,17 @@ public class PositionBillFormPlugin extends AbstractFormPlugin implements Before
                     PositionBillServiceHelper.filterF7Org(getView(), beforeF7SelectEvent, null);
                     setFilterByOrg(beforeF7SelectEvent);
                 } else if (fieldKey.equals(String.join("_", PositionBillConstant.NCKD_PARENT, PositionBillConstant.CHANGE_TAG))) {
-                    DynamicObject position = focusEntryDyn.getDynamicObject(String.join("_", PositionBillConstant.NCKD_PARENT, PositionBillConstant.CHANGE_TAG));
+                    DynamicObject position = focusEntryDyn.getDynamicObject(String.join("_", PositionBillConstant.NCKD_POSITION, PositionBillConstant.CHANGE_TAG));
                     PositionBillServiceHelper.setParentFilter(getView(), position, beforeF7SelectEvent);
                     beforeF7SelectEvent.getFormShowParameter().setCaption("上级岗位");
+                    if (!HRObjectUtils.isEmpty(position)) {
+                        // 过滤下级岗位
+                        Date effDate = HRObjectUtils.isEmpty(getModel().getValue(PositionBillConstant.NCKD_EFFDT)) ? DateUtils.truncate(new Date(), 5) : (Date) getModel().getValue(PositionBillConstant.NCKD_EFFDT);
+                        List<Long> positionIds = PositionBillServiceHelper.getPositionAndChildren(position.getLong(PositionBillConstant.BOID_KEY), effDate);
+                        if (!positionIds.isEmpty()) {
+                            beforeF7SelectEvent.getCustomQFilters().add(new QFilter(PositionBillConstant.ID_KEY, QCP.not_in, positionIds));
+                        }
+                    }
                 } else if (fieldKey.equals(String.join("_", PositionBillConstant.NCKD_ORG_KEY, PositionBillConstant.CHANGE_TAG))) {
                     HasPermOrgResult permOrgResult = PermissionServiceHelper.getUserHasPermOrgs(RequestContext.get().getCurrUserId(), false);
                     if (!permOrgResult.hasAllOrgPerm()) {