Ver código fonte

feat(hr): 优化三定计划表单插件及常量配置

- 修改 FormConstant 中退出按钮标识为 close
- 新增组织分类、行政组织类型等常量定义
- 创建 SdmBusinessService 提供获取最近三定计划方法
- 优化 SanDingPlanFormPlugin 查询逻辑与数据处理
- 更新 PosBillEntryAddFormPlugin 关闭操作调用方式
jtd 9 horas atrás
pai
commit
fe6bfa0979

+ 9 - 1
code/base/nckd-jxccl-base-common/src/main/java/nckd/jxccl/base/common/constant/FormConstant.java

@@ -158,7 +158,9 @@ public class FormConstant {
     /** 保存并新增按钮标识 */
     public static final String SAVE_AND_NEW_OP = "saveandnew";
     /** 退出按钮 */
-    public static final String CLOSE_OP = "tblclose";
+    public static final String TBLCLOSE_KEY = "tblclose";
+    /** 退出操作标识 */
+    public static final String CLOSE_OP = "close";
     /** 审核操作标识 */
     public static final String OP_BAR_AUDIT = "bar_audit";
     /** 反审核操作标识*/
@@ -369,6 +371,12 @@ public class FormConstant {
     public static final String NCKD_DEP = "nckd_dep";
     /** 任职经历 */
     public static final String NCKD_EMPPOSORGREL = "nckd_empposorgrel";
+    /** 组织分类 */
+    public static final String OTCLASSIFY_KEY = "otclassify";
+    /** 行政组织类型 */
+    public static final String ADMINORGTYPE_KEY = "adminorgtype";
+    /** 是否虚拟组织 */
+    public static final String ISVIRTUALORG_KEY = "isvirtualorg";
 
     /** 一级组织 */
     public static final String NCKD_FIRSTORG = "nckd_firstorg";

+ 28 - 0
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/sdm/business/SdmBusinessService.java

@@ -0,0 +1,28 @@
+package nckd.jxccl.hr.sdm.business;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.hr.hbp.business.servicehelper.HRBaseServiceHelper;
+import nckd.jxccl.base.common.utils.QueryFieldBuilder;
+import nckd.jxccl.hr.sdm.common.SanDingConstant;
+
+/**
+ * 三定管理业务服务
+ * @author: jtd
+ * @date: 2025/12/19 17:44
+ */
+public class SdmBusinessService {
+
+    public static DynamicObject getLastSanDingPlanDyo(Long id, String selectFields) {
+        // 排序 年度降序、适用批次人力资源需求批次.编码降序
+        String orderBys = QueryFieldBuilder.create().addDesc(SanDingConstant.NCKD_SANDINGYEAR_KEY).addDesc(SanDingConstant.NCKD_SANDINGTIME_KEY, SanDingConstant.NUMBER_KEY).buildOrder();
+        // 获取最近一个三定计划
+        DynamicObject[] lastSanDingPlanDyos = HRBaseServiceHelper.create(SanDingConstant.NCKD_SANDINGPLAN_ENTITY).queryOriginalArray(selectFields, new QFilter[]{new QFilter(SanDingConstant.ID_KEY, QCP.not_equals, id)}, orderBys);
+        if (lastSanDingPlanDyos.length > 0) {
+            return HRBaseServiceHelper.create(SanDingConstant.NCKD_SANDINGPLAN_ENTITY).loadSingle(lastSanDingPlanDyos[0].getLong(SanDingConstant.ID_KEY));
+        }
+        return null;
+    }
+
+}

+ 4 - 0
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/sdm/common/SanDingConstant.java

@@ -81,5 +81,9 @@ public class SanDingConstant extends FormConstant {
     /** HR行政组织.所属公司.业务ID */
     public static final String HAOS_ADMINORGHR_BELONGCOMPANY_BOID = "haos_adminorghr.belongcompany.boid";
 
+    /** 公司负责人.负责人.ID */
+    public static final String NCKD_COMPANYMANAGE_NCKD_MANAGER_ID = "nckd_companymanager.nckd_manager.id";
+    /** 公司负责人.负责人.员工编码 */
+    public static final String NCKD_COMPANYMANAGE_NCKD_MANAGER_EMPNUMBER = "nckd_companymanager.nckd_manager.empnumber";
 
 }

+ 32 - 14
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/sdm/plugin/form/SanDingPlanFormPlugin.java

@@ -4,8 +4,12 @@ import kd.bos.bill.OperationStatus;
 import kd.bos.common.enums.EnableEnum;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.EntityMetadataCache;
+import kd.bos.entity.QueryEntityType;
+import kd.bos.entity.constant.StatusEnum;
 import kd.bos.entity.datamodel.events.ChangeData;
 import kd.bos.entity.datamodel.events.PropertyChangedArgs;
+import kd.bos.ext.mmc.util.MetaDataHelper;
 import kd.bos.form.events.AfterDoOperationEventArgs;
 import kd.bos.form.field.DateEdit;
 import kd.bos.form.operate.FormOperate;
@@ -13,7 +17,11 @@ import kd.bos.form.plugin.AbstractFormPlugin;
 import kd.bos.mvc.base.BaseModel;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.MetadataServiceHelper;
 import kd.hr.hbp.business.servicehelper.HRBaseServiceHelper;
+import kd.hr.hbp.business.servicehelper.HRMetaDataServiceHelper;
+import kd.hr.hbp.business.servicehelper.HRQueryEntityHelper;
+import kd.hr.hbp.common.constants.history.HisModelDataStatusEnum;
 import kd.hr.hbp.common.util.HRDateTimeUtils;
 import kd.hr.hbp.common.util.HRObjectUtils;
 import kd.hr.hbp.common.util.HRStringUtils;
@@ -39,6 +47,8 @@ import java.util.stream.Collectors;
  * @date: 2025/12/2 18:28
  */
 public class SanDingPlanFormPlugin extends AbstractFormPlugin {
+    /** 获取公司负责人查询标识 */
+    private static final String NCKD_SDM_GETCOMPANYMANAGERQUERY_ENTITY = "nckd_sdm_getcompanymanagerquery";
 
     @Override
     public void afterCreateNewData(EventObject e) {
@@ -102,26 +112,34 @@ public class SanDingPlanFormPlugin extends AbstractFormPlugin {
         String managerIdKey = String.join(".", SanDingConstant.NCKD_MANAGER_KEY, SanDingConstant.ID_KEY);
         // 查询公司负责人
         String selectFields = QueryFieldBuilder.create()
-                .add(companyIdKey)
-                .add(managerIdKey)
+                .add(SanDingConstant.NCKD_COMPANYMANAGE_NCKD_MANAGER_ID)
+                .add(SanDingConstant.NCKD_COMPANYMANAGE_NCKD_MANAGER_EMPNUMBER)
                 .buildSelect();
         // 排序 物理层级、排序号
         String orderBys = QueryFieldBuilder.create()
-                .addAsc(SanDingConstant.NCKD_COMPANY_KEY, SanDingConstant.LEVEL_KEY)
-                .addAsc(SanDingConstant.NCKD_COMPANY_KEY, SanDingConstant.INDEX_KEY)
+                .addAsc(SanDingConstant.LEVEL_KEY)
+                .addAsc(SanDingConstant.INDEX_KEY)
                 .buildOrder();
-        DynamicObject[] companyManagerDyos = HRBaseServiceHelper.create(SanDingConstant.NCKD_COMPANYMANAGER_ENTITY).queryOriginalArray(selectFields, null, orderBys);
+        //DynamicObject[] companyManagerDyos = HRBaseServiceHelper.create(SanDingConstant.NCKD_COMPANYMANAGER_ENTITY).queryOriginalArray(selectFields, null, orderBys);
+        QFilter qFilter = new QFilter(String.join(".", SanDingConstant.PARENTORG_KEY, SanDingConstant.NUMBER_KEY), QCP.equals, "01")
+                .and(SanDingConstant.ENABLE, QCP.equals, EnableEnum.YES.getCode())
+                .and(SanDingConstant.STATUS, QCP.equals, StatusEnum.C.toString())
+                .and(SanDingConstant.DATA_STATUS, QCP.equals, HisModelDataStatusEnum.EFFECTING.getStatus())
+                .and(SanDingConstant.ADMINORGTYPE_KEY, QCP.equals, 1020L)
+                .and(SanDingConstant.OTCLASSIFY_KEY, QCP.equals, 1010L)
+                .and(SanDingConstant.ISVIRTUALORG_KEY, QCP.equals, EnableEnum.NO.getCode())
+                .and(SanDingConstant.IS_CURRENT_VERSION, QCP.equals, EnableEnum.YES.getCode());
+        DynamicObjectCollection companyManagerDyos = HRQueryEntityHelper.getInstance().getQueryDyoColl((QueryEntityType) MetadataServiceHelper.getDataEntityType(NCKD_SDM_GETCOMPANYMANAGERQUERY_ENTITY), selectFields, new QFilter[]{qFilter}, orderBys);
         // 处理数据
-        Map<Long, Long> companyManagerMap = new LinkedHashMap<>();
         Set<Long> companyIds = new HashSet<Long>();
         Set<Long> managerIds = new HashSet<Long>();
-        for (int i = 0; i < companyManagerDyos.length; i++) {
-            DynamicObject companyManagerDyo = companyManagerDyos[i];
-            Long companyId = companyManagerDyo.getLong(companyIdKey);
-            Long managerId = companyManagerDyo.getLong(managerIdKey);
-            companyManagerMap.put(companyId, managerId);
+        for (DynamicObject companyManagerDyo : companyManagerDyos) {
+            Long companyId = companyManagerDyo.getLong(SanDingConstant.ID_KEY);
+            Long managerId = (Long) companyManagerDyo.get(SanDingConstant.NCKD_COMPANYMANAGE_NCKD_MANAGER_ID);
             companyIds.add(companyId);
-            managerIds.add(managerId);
+            if (managerId != null) {
+                managerIds.add(managerId);
+            }
         }
         // 获取单位数据
         DynamicObject[] companyDyos = HRBaseServiceHelper.create(SanDingConstant.ADMINORG_ENTITYID).load(new QFilter[]{QFilterCommonHelper.getIdInFilter(companyIds)});
@@ -136,9 +154,9 @@ public class SanDingPlanFormPlugin extends AbstractFormPlugin {
         for (DynamicObject companyManagerDyo : companyManagerDyos) {
             DynamicObject entryDyo = entryEntityColl.addNew();
             // 设置 单位
-            entryDyo.set(SanDingConstant.NCKD_COMPANY_KEY, companyMap.get(companyManagerDyo.getLong(companyIdKey)));
+            entryDyo.set(SanDingConstant.NCKD_COMPANY_KEY, companyMap.get(companyManagerDyo.getLong(SanDingConstant.ID_KEY)));
             // 设置 负责人
-            entryDyo.set(SanDingConstant.NCKD_MANAGER_KEY, managerMap.get(companyManagerDyo.getLong(managerIdKey)));
+            entryDyo.set(SanDingConstant.NCKD_MANAGER_KEY, managerMap.getOrDefault((Long) companyManagerDyo.get(SanDingConstant.NCKD_COMPANYMANAGE_NCKD_MANAGER_ID), null));
             // 设置 状态
             entryDyo.set(SanDingConstant.NCKD_STATUS_KEY, SanDingPlanEntryStatus.UNSEND.getCode());// 默认未发起
         }

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

@@ -239,7 +239,7 @@ public class PosBillEntryAddFormPlugin extends AbstractFormPlugin {
                 }
             }
             getView().getPageCache().put("isclose", Boolean.TRUE.toString());
-            getView().invokeOperation("close");
+            getView().invokeOperation(PositionBillConstant.CLOSE_OP);
         }
     }