Procházet zdrojové kódy

fix(print): 修复打印插件中的数据过滤和验证问题

- 在EmployeePrintPlugin中添加ValidationException导入用于错误处理
- 修正EmployeePrintPlugin中年份索引获取逻辑,直接使用年份值
- 修改数据源名称判断逻辑从equals改为contains匹配
- 添加打印人员ID映射为空时的验证异常抛出
- 调整PerfDetailPrintPlugin中的条件判断结构以正确处理数据源
- 修复EmployeePrintPlugin中过滤逻辑,确保字段更新在添加行之前执行
- 将PrintPerfDetailReportListDataPlugin中的批次数量从3000调整为2000
- 在AnnualPerfDetailFormPlugin中添加报表显示参数配置
- 实现printlist操作的报表显示功能,支持新标签页打开
wyc před 4 dny
rodič
revize
5c7c925bd7

+ 29 - 23
code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/form/print/EmployeePrintPlugin.java

@@ -24,6 +24,7 @@ import kd.hr.hbp.common.cache.HRAppCache;
 import kd.sdk.plugin.Plugin;
 import nckd.jxccl.base.common.algo.GroupMaxStrFunction;
 import nckd.jxccl.base.common.constant.FormConstant;
+import nckd.jxccl.base.common.exception.ValidationException;
 import nckd.jxccl.base.common.utils.ConvertUtil;
 import nckd.jxccl.base.common.utils.DateUtil;
 import nckd.jxccl.base.common.utils.QueryFieldBuilder;
@@ -61,7 +62,7 @@ public class EmployeePrintPlugin extends AbstractPrintPlugin implements Plugin {
         // 3. 组装数据(例如:从数据库查询、计算衍生字段等)
 
         DataRowSet rowSet = new DataRowSet();
-        rowSet.put("year", new IntegerField(getYearIndexFromPrintYear(DateUtil.getYear(printYear))));
+        rowSet.put("year", new IntegerField(DateUtil.getYear(printYear)));
         int printYearValue = DateUtil.getYear(printYear);
         rowSet.put("yearIndex", new IntegerField(getYearIndexFromPrintYear(printYearValue)));
 
@@ -104,9 +105,12 @@ public class EmployeePrintPlugin extends AbstractPrintPlugin implements Plugin {
     @Override
     public void afterLoadData(AfterLoadDataEvent evt) {
         String dsName = evt.getDataSource().getDsName();
-        if(!dsName.equalsIgnoreCase("custom")) {
+        if(!dsName.contains("custom")) {
             Date printYear = HRAppCache.get("nckd_pm").get("printYear", Date.class);
             Map<Integer, Long> selectPrintPersonIdMap = HRAppCache.get("nckd_pm").get("employeePrintIdMap", Map.class);
+            if(selectPrintPersonIdMap == null){
+                throw new ValidationException("请选择要打印的日期!");
+            }
             List<String> seqs = ConvertUtil.toList(selectPrintPersonIdMap.keySet(), ArrayList::new);
             LocalDate now = LocalDate.now();
             // 获取5年前的年份
@@ -156,6 +160,7 @@ public class EmployeePrintPlugin extends AbstractPrintPlugin implements Plugin {
             // 2. 获取当前打印的数据集
             List<DataRowSet> dataRowSets = evt.getDataRowSets();
             List<DataRowSet> filteredDataRowSets = new ArrayList<>();
+
             for (DataRowSet dataRowSet : dataRowSets) {
                 if (dataRowSet.containerKey("reportEntry")) {
                     CollectionField entryField = (CollectionField) dataRowSet.getField("reportEntry");
@@ -166,28 +171,29 @@ public class EmployeePrintPlugin extends AbstractPrintPlugin implements Plugin {
                         Long personId = selectPrintPersonIdMap.get(seq + "");
                         // 判断该分录行是否在用户勾选的列表中
                         if (seqs.contains(seq)) {
-                            filteredEntryRows.add(entryRow); // 保留被勾选的行
-                        }
-                        for (String fieldKey : entryRow.getFieldKeys()) {
-                            if (fieldKey.startsWith("nckd_position_")) {
-                                String positionName = positionMap.get(personId + fieldKey);
-                                Field field = entryRow.getField(fieldKey);
-                                field.setValue(positionName != null ? positionName : "");
-                                entryRow.put(fieldKey, field);
-                            }
-                            if (fieldKey.startsWith("nckd_perfrank_topran_")) {
-                                Integer perfRankMgmt = perfRankMgmtMap.get(personId + fieldKey);
-                                Field field = entryRow.getField(fieldKey);
-                                field.setValue(perfRankMgmt != null ? perfRankMgmt : 0);
-                                entryRow.put(fieldKey, field);
-                            }
-                            if (fieldKey.startsWith("nckd_perfrank_topranks_")) {
-                                Integer perfRankMgmt = perfRankMgmtMap.get(personId + fieldKey);
-                                Field field = entryRow.getField(fieldKey);
-                                field.setValue(perfRankMgmt != null ? perfRankMgmt : 0);
-                                entryRow.put(fieldKey, field);
+                            for (String fieldKey : entryRow.getFieldKeys()) {
+                                if (fieldKey.startsWith("nckd_position_")) {
+                                    String positionName = positionMap.get(personId + fieldKey);
+                                    Field field = entryRow.getField(fieldKey);
+                                    field.setValue(positionName != null ? positionName : "");
+                                    entryRow.put(fieldKey, field);
+                                }
+                                if (fieldKey.startsWith("nckd_perfrank_topran_")) {
+                                    Integer perfRankMgmt = perfRankMgmtMap.get(personId + fieldKey);
+                                    Field field = entryRow.getField(fieldKey);
+                                    field.setValue(perfRankMgmt != null ? perfRankMgmt : 0);
+                                    entryRow.put(fieldKey, field);
+                                }
+                                if (fieldKey.startsWith("nckd_perfrank_topranks_")) {
+                                    Integer perfRankMgmt = perfRankMgmtMap.get(personId + fieldKey);
+                                    Field field = entryRow.getField(fieldKey);
+                                    field.setValue(perfRankMgmt != null ? perfRankMgmt : 0);
+                                    entryRow.put(fieldKey, field);
+                                }
                             }
+                            filteredEntryRows.add(entryRow);
                         }
+
                     }
                     // 用过滤后的分录数据替换原数据
                     if (!filteredEntryRows.isEmpty()) {
@@ -196,8 +202,8 @@ public class EmployeePrintPlugin extends AbstractPrintPlugin implements Plugin {
                         filteredDataRowSets.add(newDataRowSet);
                     }
                 }
-
             }
+
             // 将过滤后的数据集设置回事件,实现只打印勾选行
             evt.setDataRowSets(filteredDataRowSets);
         }

+ 78 - 77
code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/form/print/PerfDetailPrintPlugin.java

@@ -45,107 +45,108 @@ public class PerfDetailPrintPlugin extends AbstractPrintPlugin implements Plugin
 
     @Override
     public void afterLoadData(AfterLoadDataEvent evt) {
-        List<Integer> seqs = HRAppCache.get("nckd_pm").get("selectPrintSeq", List.class);
-        if (seqs == null || seqs.isEmpty()) {
-            return;
-        }
+        String dsName = evt.getDataSource().getDsName();
+        if(!dsName.contains("custom")) {
+            List<Integer> seqs = HRAppCache.get("nckd_pm").get("selectPrintSeq", List.class);
+            if (seqs == null || seqs.isEmpty()) {
+                return;
+            }
 
-        Map<Integer,Long> selectPrintPersonIdMap = HRAppCache.get("nckd_pm").get("selectPrintPersonIdMap", Map.class);
-        LocalDate now = LocalDate.now();
-        // 获取5年前的年份
-        int fiveYearsAgo = LocalDate.now().minusYears(5).getYear();
-        Date beginDate = DateUtil.toDate(LocalDate.of(fiveYearsAgo, 1, 1));
+            Map<Integer, Long> selectPrintPersonIdMap = HRAppCache.get("nckd_pm").get("selectPrintPersonIdMap", Map.class);
+            LocalDate now = LocalDate.now();
+            // 获取5年前的年份
+            int fiveYearsAgo = LocalDate.now().minusYears(5).getYear();
+            Date beginDate = DateUtil.toDate(LocalDate.of(fiveYearsAgo, 1, 1));
 
-        int currentYear = LocalDate.now().getYear() - 1; // 不包含今年
-        Date endDate = DateUtil.toDate(LocalDate.of(currentYear, 1, 1));
+            int currentYear = LocalDate.now().getYear() - 1; // 不包含今年
+            Date endDate = DateUtil.toDate(LocalDate.of(currentYear, 1, 1));
 
-        Map<String,String> positionMap = new HashMap<>();
-        Map<String,Integer> perfRankMgmtMap = new HashMap<>();
-        try(AlgoContext context = Algo.newContext()) {
-            Collection<Long> personIds = selectPrintPersonIdMap.values();
-            DataSet positionDateSet = getPositions(fiveYearsAgo, currentYear, personIds);
-            if (positionDateSet != null) {
-                while (positionDateSet.hasNext()) {
-                    Row next = positionDateSet.next();
-                    Long personId = next.getLong(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.ID_KEY));
-                    int tempIndex = 1;
-                    for (int year = fiveYearsAgo; year <= currentYear; year++) {
-                        String positionName = next.getString("position_" + tempIndex);
-                        positionMap.put(personId + "nckd_position_" + tempIndex, positionName);
-                        tempIndex++;
+            Map<String, String> positionMap = new HashMap<>();
+            Map<String, Integer> perfRankMgmtMap = new HashMap<>();
+            try (AlgoContext context = Algo.newContext()) {
+                Collection<Long> personIds = selectPrintPersonIdMap.values();
+                DataSet positionDateSet = getPositions(fiveYearsAgo, currentYear, personIds);
+                if (positionDateSet != null) {
+                    while (positionDateSet.hasNext()) {
+                        Row next = positionDateSet.next();
+                        Long personId = next.getLong(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.ID_KEY));
+                        int tempIndex = 1;
+                        for (int year = fiveYearsAgo; year <= currentYear; year++) {
+                            String positionName = next.getString("position_" + tempIndex);
+                            positionMap.put(personId + "nckd_position_" + tempIndex, positionName);
+                            tempIndex++;
+                        }
                     }
                 }
-            }
 
-            DataSet perfRankMgmtDataSet = getPerfRankMgmt(personIds, fiveYearsAgo, currentYear);
-            if (perfRankMgmtDataSet != null) {
-                while (perfRankMgmtDataSet.hasNext()) {
-                    Row next = perfRankMgmtDataSet.next();
-                    Long personId = next.getLong(String.join(".", FormConstant.NCKD_PERSON, FormConstant.ID_KEY));
-                    int tempIndex = 1;
-                    for (int year = fiveYearsAgo; year <= currentYear; year++) {
-                        Integer topran = next.getInteger("perfrank_topran_" + tempIndex);
-                        Integer topranks = next.getInteger("perfrank_topranks_" + tempIndex);
-                        perfRankMgmtMap.put(personId + "nckd_perfrank_topran_" + tempIndex, topran);
-                        perfRankMgmtMap.put(personId + "nckd_perfrank_topranks_" + tempIndex, topranks);
-                        tempIndex++;
+                DataSet perfRankMgmtDataSet = getPerfRankMgmt(personIds, fiveYearsAgo, currentYear);
+                if (perfRankMgmtDataSet != null) {
+                    while (perfRankMgmtDataSet.hasNext()) {
+                        Row next = perfRankMgmtDataSet.next();
+                        Long personId = next.getLong(String.join(".", FormConstant.NCKD_PERSON, FormConstant.ID_KEY));
+                        int tempIndex = 1;
+                        for (int year = fiveYearsAgo; year <= currentYear; year++) {
+                            Integer topran = next.getInteger("perfrank_topran_" + tempIndex);
+                            Integer topranks = next.getInteger("perfrank_topranks_" + tempIndex);
+                            perfRankMgmtMap.put(personId + "nckd_perfrank_topran_" + tempIndex, topran);
+                            perfRankMgmtMap.put(personId + "nckd_perfrank_topranks_" + tempIndex, topranks);
+                            tempIndex++;
+                        }
                     }
                 }
             }
-        }
 
 
+            // 获取当前打印的数据集并准备过滤后的集合
+            // 2. 获取当前打印的数据集
+            List<DataRowSet> dataRowSets = evt.getDataRowSets();
+            List<DataRowSet> filteredDataRowSets = new ArrayList<>();
+            for (DataRowSet dataRowSet : dataRowSets) {
 
-        // 获取当前打印的数据集并准备过滤后的集合
-        // 2. 获取当前打印的数据集
-        List<DataRowSet> dataRowSets = evt.getDataRowSets();
-        List<DataRowSet> filteredDataRowSets = new ArrayList<>();
-        for (DataRowSet dataRowSet : dataRowSets) {
-
-            CollectionField entryField = (CollectionField) dataRowSet.getField("reportEntry");
-            List<DataRowSet> entryRows = entryField.getValue();
-            List<DataRowSet> filteredEntryRows = new ArrayList<>();
-            for (DataRowSet entryRow : entryRows) {
-                if(dataRowSet.containerKey("reportEntry")) {
-                    Integer seq = ConvertUtil.toInt(entryRow.getField(FormConstant.SEQ_KEY).getValue());
-                    Long personId = selectPrintPersonIdMap.get(seq + "");
-                    // 判断该分录行是否在用户勾选的列表中
-                    if (seqs.contains(seq)) {
-                        filteredEntryRows.add(entryRow); // 保留被勾选的行
-                    }
-                    for (String fieldKey : entryRow.getFieldKeys()) {
-                        if (fieldKey.startsWith("nckd_position_")) {
-                            String positionName = positionMap.get(personId + fieldKey);
-                            Field field = entryRow.getField(fieldKey);
-                            field.setValue(positionName != null ? positionName : "");
-                            entryRow.put(fieldKey, field);
-                        }
-                        if (fieldKey.startsWith("nckd_perfrank_topran_")) {
-                            Integer perfRankMgmt = perfRankMgmtMap.get(personId + fieldKey);
-                            Field field = entryRow.getField(fieldKey);
-                            field.setValue(perfRankMgmt != null ? perfRankMgmt : 0);
-                            entryRow.put(fieldKey, field);
+                CollectionField entryField = (CollectionField) dataRowSet.getField("reportEntry");
+                List<DataRowSet> entryRows = entryField.getValue();
+                List<DataRowSet> filteredEntryRows = new ArrayList<>();
+                for (DataRowSet entryRow : entryRows) {
+                    if (dataRowSet.containerKey("reportEntry")) {
+                        Integer seq = ConvertUtil.toInt(entryRow.getField(FormConstant.SEQ_KEY).getValue());
+                        Long personId = selectPrintPersonIdMap.get(seq + "");
+                        // 判断该分录行是否在用户勾选的列表中
+                        if (seqs.contains(seq)) {
+                            filteredEntryRows.add(entryRow); // 保留被勾选的行
                         }
-                        if (fieldKey.startsWith("nckd_perfrank_topranks_")) {
-                            Integer perfRankMgmt = perfRankMgmtMap.get(personId + fieldKey);
-                            Field field = entryRow.getField(fieldKey);
-                            field.setValue(perfRankMgmt != null ? perfRankMgmt : 0);
-                            entryRow.put(fieldKey, field);
+                        for (String fieldKey : entryRow.getFieldKeys()) {
+                            if (fieldKey.startsWith("nckd_position_")) {
+                                String positionName = positionMap.get(personId + fieldKey);
+                                Field field = entryRow.getField(fieldKey);
+                                field.setValue(positionName != null ? positionName : "");
+                                entryRow.put(fieldKey, field);
+                            }
+                            if (fieldKey.startsWith("nckd_perfrank_topran_")) {
+                                Integer perfRankMgmt = perfRankMgmtMap.get(personId + fieldKey);
+                                Field field = entryRow.getField(fieldKey);
+                                field.setValue(perfRankMgmt != null ? perfRankMgmt : 0);
+                                entryRow.put(fieldKey, field);
+                            }
+                            if (fieldKey.startsWith("nckd_perfrank_topranks_")) {
+                                Integer perfRankMgmt = perfRankMgmtMap.get(personId + fieldKey);
+                                Field field = entryRow.getField(fieldKey);
+                                field.setValue(perfRankMgmt != null ? perfRankMgmt : 0);
+                                entryRow.put(fieldKey, field);
+                            }
                         }
                     }
                 }
-
                 // 用过滤后的分录数据替换原数据
                 if (!filteredEntryRows.isEmpty()) {
                     DataRowSet newDataRowSet = dataRowSet.deepCopy(); // 深拷贝,避免影响原数据
                     newDataRowSet.put("reportEntry", new CollectionField(filteredEntryRows));
                     filteredDataRowSets.add(newDataRowSet);
                 }
-            }
 
+            }
+            // 将过滤后的数据集设置回事件,实现只打印勾选行
+            evt.setDataRowSets(filteredDataRowSets);
         }
-        // 将过滤后的数据集设置回事件,实现只打印勾选行
-        evt.setDataRowSets(filteredDataRowSets);
     }
 
 

+ 1 - 1
code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/form/print/PrintPerfDetailReportListDataPlugin.java

@@ -68,7 +68,7 @@ public class PrintPerfDetailReportListDataPlugin extends AbstractReportListDataP
             qFilter.and(dataRule);
         }
         IReportBatchQueryInfo byBatchInfo = queryParam.byBatchInfo();
-        byBatchInfo.setCountPerBatch(3000);
+        byBatchInfo.setCountPerBatch(2000);
         return QueryServiceHelper.queryDataSet(this.getClass().getName(),PerfManagerFormConstant.PERFMANAGER_ENTITYID, queryFieldBuilder.buildSelect(), new QFilter[]{qFilter}, queryFieldBuilder.buildOrder(),1000000);
     }
 

+ 7 - 1
code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/form/result/AnnualPerfDetailFormPlugin.java

@@ -14,8 +14,8 @@ import kd.bos.form.MessageBoxOptions;
 import kd.bos.form.ShowType;
 import kd.bos.form.events.AfterDoOperationEventArgs;
 import kd.bos.form.events.PreOpenFormEventArgs;
-import kd.bos.form.plugin.AbstractFormPlugin;
 import kd.bos.report.ReportList;
+import kd.bos.report.ReportShowParameter;
 import kd.bos.report.plugin.AbstractReportFormPlugin;
 import kd.bos.servicehelper.operation.OperationServiceHelper;
 import kd.sdk.plugin.Plugin;
@@ -116,6 +116,12 @@ public class AnnualPerfDetailFormPlugin extends AbstractReportFormPlugin impleme
                         this.getView().showConfirm("提示",result.getMessage(), MessageBoxOptions.OK,null,null,null,null);
                     }
                 }
+            }else if("printlist".equalsIgnoreCase(operateKey)){
+
+                ReportShowParameter reportShowParameter = new ReportShowParameter();
+                reportShowParameter.setFormId("nckd_printlistrpt");
+                reportShowParameter.getOpenStyle().setShowType(ShowType.MainNewTabPage);
+                this.getView().showForm(reportShowParameter);
             }
         }
     }