浏览代码

fix(hr): 修复职级计算服务中的空指针异常

- 在JobLevelCalculatorService中添加null检查,避免jobLevel或jobLevelResult为null时出现异常
- 使用StringUtils.EMPTY作为默认值防止空指针异常

refactor(opmc): 优化周期生成插件中的查询逻辑

- 修正新入职员工查询中的字段路径错误
- 简化动态对象集合查询的字段构建逻辑
- 移除不必要的表连接路径,提高查询效率

feat(hr): 增强绩效排名管理表单插件功能

- 添加NotNull注解增强方法参数安全性
- 实现getEntityType方法以支持实体类型克隆
- 更新视图刷新机制,添加刷新操作调用
- 注释掉不必要的缓存更新代码以优化性能
wyc 4 小时之前
父节点
当前提交
dfb8e995a9

+ 2 - 2
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/business/JobLevelCalculatorService.java

@@ -264,7 +264,7 @@ public class JobLevelCalculatorService {
             jobLevelResult.jobScoreInfo = jobScoreInfo;
             jobLevelResult.rankingResultInfo = rankingInfo;
             logger.info("序列转换处理完成 - 最终职级序号: {}, 调整类型: {}",
-                    jobLevel.getInt(FormConstant.JOBLEVELSEQ), jobLevelResult.adjustType);
+                    jobLevel != null ? jobLevel.getInt(FormConstant.JOBLEVELSEQ) : StringUtils.EMPTY, jobLevelResult != null ? jobLevelResult.adjustType : StringUtils.EMPTY);
             return jobLevelResult;
         } else if (jobSeqInfo.isCrossUnitTransfer) {
             logger.info("检测到跨单位调动,开始处理");
@@ -274,7 +274,7 @@ public class JobLevelCalculatorService {
             jobLevelResult.jobScoreInfo = jobScoreInfo;
             jobLevelResult.rankingResultInfo = rankingInfo;
             logger.info("跨单位调动处理完成 - 最终职级序号: {}, 调整类型: {}",
-                    jobLevel.getInt(FormConstant.JOBLEVELSEQ), jobLevelResult.adjustType);
+                    jobLevel != null ? jobLevel.getInt(FormConstant.JOBLEVELSEQ) : StringUtils.EMPTY, jobLevelResult != null ? jobLevelResult.adjustType : StringUtils.EMPTY);
             return jobLevelResult;
         }
 

+ 19 - 4
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/form/performance/PerfRankMgmtFormPlugin.java

@@ -20,6 +20,7 @@ import kd.bos.entity.datamodel.events.AfterAddRowEventArgs;
 import kd.bos.entity.datamodel.events.BeforeDeleteRowEventArgs;
 import kd.bos.entity.datamodel.events.BeforeImportEntryEventArgs;
 import kd.bos.entity.datamodel.events.ChangeData;
+import kd.bos.entity.datamodel.events.GetEntityTypeEventArgs;
 import kd.bos.entity.datamodel.events.PropertyChangedArgs;
 import kd.bos.entity.filter.CompareTypeEnum;
 import kd.bos.entity.filter.FilterValue;
@@ -60,6 +61,7 @@ import nckd.jxccl.hr.psms.common.PerfRankMgmtConstant;
 import nckd.jxccl.hr.psms.common.PositionStructureConstant;
 import nckd.jxccl.hr.psms.helper.PositionFileHelper;
 import org.apache.commons.lang3.StringUtils;
+import org.jetbrains.annotations.NotNull;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
@@ -452,7 +454,7 @@ public class PerfRankMgmtFormPlugin extends AbstractFormPlugin implements Wizard
 
 
     @Override
-    public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) {
+    public void afterDoOperation(@NotNull AfterDoOperationEventArgs afterDoOperationEventArgs) {
         String itemKey = afterDoOperationEventArgs.getOperateKey();
         if(PerfRankMgmtConstant.GETRANKLIST_OP.equalsIgnoreCase(itemKey)){
             /*IBillView billView = (IBillView)this.getView();
@@ -599,8 +601,9 @@ public class PerfRankMgmtFormPlugin extends AbstractFormPlugin implements Wizard
                             entryCol.set(PerfRankMgmtConstant.NCKD_POSTALLOWANCE, hasAllowance);
                         }
 
-                        this.getModel().updateEntryCache(entryEntityCols);
-                        this.getView().updateView(PerfRankMgmtConstant.NCKD_PERFRANKMGMTENTRY);
+                        /*this.getModel().updateEntryCache(entryEntityCols);
+                        this.getView().updateView(PerfRankMgmtConstant.NCKD_PERFRANKMGMTENTRY);*/
+
 
                         /*for (int i = 0; i < entryEntityCols.size(); i++) {
                             Boolean isRanking = ConvertUtil.toBoolean(this.getModel().getValue(PerfRankMgmtConstant.NCKD_ISRANKING, i));
@@ -613,8 +616,8 @@ public class PerfRankMgmtFormPlugin extends AbstractFormPlugin implements Wizard
                             this.getView().updateView(PerfRankMgmtConstant.NCKD_ISRANKING,i);
 
                         }*/
-
                         this.getView().showSuccessNotification("名单获取完成");
+                        this.getView().invokeOperation(FormConstant.REFRESH_OP);
                     } else {
                         this.getView().showTipNotification("未获取到人员");
                     }
@@ -643,6 +646,18 @@ public class PerfRankMgmtFormPlugin extends AbstractFormPlugin implements Wizard
         // this.getView().setStatus(OperationStatus.EDIT);
     }
 
+    @Override
+    public void getEntityType(GetEntityTypeEventArgs e) {
+        super.getEntityType(e);
+
+        MainEntityType originalEntityType = e.getOriginalEntityType();
+        try {
+            e.setNewEntityType((MainEntityType)originalEntityType.clone());
+        } catch (CloneNotSupportedException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
     private void importResultStep() {
         this.getModel().setValue(PerfRankMgmtConstant.NCKD_STEP,1);
         this.getView().setVisible(false, FormConstant.NUMBER_KEY, PerfRankMgmtConstant.NCKD_GETRANKLIST,"nckd_advconbaritemap2","nckd_advconbaritemap3");

+ 7 - 7
code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/operate/cycle/CycleGenerateOpPlugin.java

@@ -191,7 +191,7 @@ public class CycleGenerateOpPlugin extends AbstractOperationServicePlugIn implem
 
         if (!userAdminOrgWithSub.isHasAllOrgPerm()) {
             List<Long> orgIds = extractOrgIds(userAdminOrgWithSub.getHasPermOrgsWithSub());
-            newHireFilter.and(String.join(".", FormConstant.HRPI_EMPPOSORGREL, FormConstant.ADMINORG), QCP.in, orgIds);
+            newHireFilter.and(String.join( ".",FormConstant.ADMINORG,FormConstant.ID_KEY), QCP.in, orgIds);
         }
 
 
@@ -250,7 +250,7 @@ public class CycleGenerateOpPlugin extends AbstractOperationServicePlugIn implem
                 .and(String.join(".", FormConstant.HRPI_EMPENTREL, FormConstant.LABOR_REL_STATUS, FormConstant.IS_HIRED),
                         QCP.equals, EnableEnum.YES.getCode())
                 //岗位绩效工资制
-                .and(String.join(".", FormConstant.HRPI_EMPPOSORGREL, FormConstant.POSITION_KEY,FormConstant.NCKD_PAYSTDPLAN, FormConstant.NUMBER_KEY),QCP.equals,FormConstant.POST_PERF_WAGE_SYS);
+                .and(String.join(".",FormConstant.POSITION_KEY,FormConstant.NCKD_PAYSTDPLAN, FormConstant.NUMBER_KEY),QCP.equals,FormConstant.POST_PERF_WAGE_SYS);
 
     }
 
@@ -269,9 +269,9 @@ public class CycleGenerateOpPlugin extends AbstractOperationServicePlugIn implem
     private static DynamicObjectCollection queryNewHirePersons(QFilter filter) {
         QueryFieldBuilder queryFieldBuilder = QueryFieldBuilder.create()
                 .addIdNumberName(FormConstant.HRPI_EMPLOYEE)
-                .addGroup(new String[]{FormConstant.HRPI_EMPPOSORGREL},FormConstant.ID_KEY)
-                .addGroup(new String[]{FormConstant.HRPI_EMPPOSORGREL,FormConstant.ADMINORG},FormConstant.ID_KEY);
-        QueryEntityType queryEntityType = (QueryEntityType) EntityMetadataCache.getDataEntityType(QueryConstant.PERSON_QUERY);
+                .add(FormConstant.ID_KEY)
+                .addIdNumberName(FormConstant.ADMINORG);
+        QueryEntityType queryEntityType = (QueryEntityType) EntityMetadataCache.getDataEntityType("personfilequery");
         return HRQueryEntityHelper.getInstance().getQueryDyoColl(queryEntityType, queryFieldBuilder.buildSelect(), new QFilter[]{filter}, null);
     }
 
@@ -327,8 +327,8 @@ public class CycleGenerateOpPlugin extends AbstractOperationServicePlugIn implem
         logger.debug("开始为新入职员工生成考核周期,新入职员工总数: {}", newHirePersonList.size());
         for (DynamicObject person : newHirePersonList) {
             long personId = person.getLong(String.join(".", FormConstant.HRPI_EMPLOYEE, FormConstant.ID_KEY));
-            long empPosOrgRelId = person.getLong(String.join(".", FormConstant.HRPI_EMPPOSORGREL, FormConstant.ID_KEY));
-            long adminOrgId = person.getLong(String.join(".", FormConstant.HRPI_EMPPOSORGREL,FormConstant.ADMINORG, FormConstant.ID_KEY));
+            long empPosOrgRelId = person.getLong(FormConstant.ID_KEY);
+            long adminOrgId = person.getLong(String.join(".", FormConstant.ADMINORG, FormConstant.ID_KEY));
             // 判断是否已有周期,如果有则不生成
             if (!personIds.contains(personId)) {
                 DynamicObject empPosOrgRel = EntityHelper.newEntity(FormConstant.HRPI_EMPPOSORGREL);