Selaa lähdekoodia

refactor(hr): 调整年度调整相关报表插件结构

- 重命名未调整报表插件包路径,从 report.adjust 移至 form.adjust.report
- 更新未调整报表数据插件中的查询数量限制,从 10000 提升至 100000
- 新增年度调整报表表单插件,实现批量生成年度调整功能
- 新增未生成年度调整报表数据查询插件,支持上年度考核结果关联查询
- 修改年度调整表单插件,将未调整列表改为报表展示方式
- 优化未年度调整列表插件的查询逻辑和过滤条件处理
- 修复年度调整操作插件中的考核结果验证逻辑,修正年份显示格式
wyc 1 viikko sitten
vanhempi
säilyke
f8cd8e22ce

+ 1 - 1
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/report/adjust/UnAdjustedReportFormPlugin.java → code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/form/adjust/report/UnAdjustedReportFormPlugin.java

@@ -1,4 +1,4 @@
-package nckd.jxccl.hr.psms.plugin.report.adjust;
+package nckd.jxccl.hr.psms.plugin.form.adjust.report;
 
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.entity.report.ReportQueryParam;

+ 2 - 2
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/report/adjust/UnAdjustedReportReportListDataPlugin.java → code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/form/adjust/report/UnAdjustedReportReportListDataPlugin.java

@@ -1,4 +1,4 @@
-package nckd.jxccl.hr.psms.plugin.report.adjust;
+package nckd.jxccl.hr.psms.plugin.form.adjust.report;
 
 import kd.bos.algo.DataSet;
 import kd.bos.common.enums.EnableEnum;
@@ -54,7 +54,7 @@ public class UnAdjustedReportReportListDataPlugin extends AbstractReportListData
 
         // 执行基础查询
         DataSet dataSet = QueryServiceHelper.queryDataSet(PositionStructureConstant.PERSONPOSFILE_ENTITYID, "unadjustquery",
-                queryFieldBuilder.buildSelect(), new QFilter[]{qFilter}, null,10000);
+                queryFieldBuilder.buildSelect(), new QFilter[]{qFilter}, null,100000);
 
         // 添加扩展过滤条件
         DataSet filteredDataSet = addExtendedFilters(dataSet);

+ 8 - 1
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/form/annualadjust/AnnualAdjustmentFormPlugin.java

@@ -8,6 +8,7 @@ import kd.bos.list.ListShowParameter;
 import kd.bos.list.plugin.AbstractListPlugin;
 import kd.bos.logging.Log;
 import kd.bos.logging.LogFactory;
+import kd.bos.report.ReportShowParameter;
 import nckd.jxccl.hr.psms.common.PositionStructureConstant;
 
 import java.util.EventObject;
@@ -59,7 +60,13 @@ public class AnnualAdjustmentFormPlugin extends AbstractListPlugin implements Ta
             openTargetPage(PositionStructureConstant.ANNUALADJUST_QUERY, PositionStructureConstant.NCKD_ADJUSTED,"已生成年度调整");
         } else if (PositionStructureConstant.NCKD_UNADJUSTED.equalsIgnoreCase(currentTab)) {
             //打开“未生成年度调整”列表
-            openTargetPage(PositionStructureConstant.UNANNUALADJUST_QUERY,PositionStructureConstant.NCKD_UNADJUSTED,"未生成年度调整");
+//            openTargetPage(PositionStructureConstant.UNANNUALADJUST_QUERY,PositionStructureConstant.NCKD_UNADJUSTED,"未生成年度调整");
+            ReportShowParameter reportShowParameter = new ReportShowParameter();
+            reportShowParameter.setFormId("nckd_unannualadjustreort");
+            reportShowParameter.getOpenStyle().setShowType(ShowType.InContainer);
+            reportShowParameter.getOpenStyle().setTargetKey(PositionStructureConstant.NCKD_UNADJUSTED);
+            reportShowParameter.setCaption("未生成年度调整");
+            this.getView().showForm(reportShowParameter);
         }
     }
 

+ 13 - 9
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/form/annualadjust/UnAnnualAdjustListPlugin.java

@@ -29,6 +29,7 @@ import nckd.jxccl.hr.psms.common.PositionStructureConstant;
 
 import java.time.LocalDateTime;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -70,6 +71,8 @@ public class UnAnnualAdjustListPlugin extends AbstractListPlugin implements Plug
 
 
         LocalDateTime lastYear = DateUtil.minusYears(localDateTime, 1);
+        LocalDateTime lastBegin = DateUtil.beginOfYear(lastYear);
+        LocalDateTime lastEnd = DateUtil.endOfYear(lastYear);
         QFilter qFilter = new QFilter(FormConstant.IS_PRIMARY, QCP.equals, EnableEnum.YES.getCode())
                 .and(FormConstant.IS_SEQLATESTRECORD, QCP.equals, EnableEnum.YES.getCode())
                 .and(FormConstant.IS_DELETED, QCP.equals, EnableEnum.NO.getCode())
@@ -80,18 +83,19 @@ public class UnAnnualAdjustListPlugin extends AbstractListPlugin implements Plug
                 //有初定的人员
                 .and(new QFilter(String.join(".", PositionStructureConstant.PERSONPOSFILE_ENTITYID+"init", PositionStructureConstant.NCKD_FIRSTRANK), QCP.equals, EnableEnum.YES.getCode()))
                 //初定时间不等于当年
-                .and(new QFilter(String.join(".", PositionStructureConstant.PERSONPOSFILE_ENTITYID+"init", PositionStructureConstant.NCKD_EXECUTEYEAR), QCP.not_equals2, localDateTime.getYear()))
+                .and(new QFilter(String.join(".", PositionStructureConstant.PERSONPOSFILE_ENTITYID+"init", PositionStructureConstant.NCKD_EXECUTEYEAR), QCP.not_equals2, localDateTime.getYear()));
                 //上年度有考核结果的人员
-//                .and(new QFilter(String.join(".", PositionStructureConstant.PERFMANAGER_ENTITYID, PositionStructureConstant.PERFMANAGER_ENTRY_ENTITYID, PositionStructureConstant.APPRAISAL_YEAR_KEY), QCP.equals, DateUtil.toDate(lastYear)))
+               /* .and(new QFilter(String.join(".", PositionStructureConstant.PERFMANAGER_ENTITYID, PositionStructureConstant.PERFMANAGER_ENTRY_ENTITYID, PositionStructureConstant.APPRAISAL_YEAR_KEY), QCP.large_equals, DateUtil.toDate(lastBegin)))
+                .and(new QFilter(String.join(".", PositionStructureConstant.PERFMANAGER_ENTITYID, PositionStructureConstant.PERFMANAGER_ENTRY_ENTITYID, PositionStructureConstant.APPRAISAL_YEAR_KEY), QCP.less_equals, DateUtil.toDate(lastEnd)))*/
                 //当年还未年度调整的人员
-                .and(new QFilter(FormConstant.EMPLOYEE_KEY, QCP.not_in, personIds));
-
-                /*.and(QFilter.join(FormConstant.EMPLOYEE_KEY,
-                                String.join(".", FormConstant.HRPI_PEREDUEXP, FormConstant.EMPLOYEE_KEY),
-                                QFilter.of(String.join(".", FormConstant.HRPI_PEREDUEXP, FormConstant.GRADUTIONDATE)+">="+String.join(".",PositionStructureConstant.PERSONPOSFILE_ENTITYID+"init", PositionStructureConstant.NCKD_BEGINDATE)),
-                        ORMHint.JoinHint.LEFT, Boolean.TRUE)
-                );*/
+                if(!personIds.isEmpty()) {
+                    qFilter.and(new QFilter(FormConstant.EMPLOYEE_KEY, QCP.not_in, personIds));
+                }
+        QFilter qFilter1 = QFilter.joinSQL(FormConstant.HRPI_EMPPOSORGREL,
+                "left join tk_nckd_perfmanager pm on pm.fk_nckd_personid = hrpi_empposorgrel.femployeeid",
+                null);
         e.addCustomQFilter(qFilter);
+//        e.getQFilters().add(qFilter1);
     }
 
     @Override

+ 78 - 0
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/form/annualadjust/report/UnAnnualAdjustReportFormPlugin.java

@@ -0,0 +1,78 @@
+package nckd.jxccl.hr.psms.plugin.form.annualadjust.report;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.datamodel.ListSelectedRow;
+import kd.bos.entity.datamodel.ListSelectedRowCollection;
+import kd.bos.form.CloseCallBack;
+import kd.bos.form.FormShowParameter;
+import kd.bos.form.ShowType;
+import kd.bos.form.control.events.ItemClickEvent;
+import kd.bos.form.plugin.AbstractFormPlugin;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.report.ReportList;
+import kd.bos.report.plugin.AbstractReportFormPlugin;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.sdk.plugin.Plugin;
+import nckd.jxccl.base.common.constant.FormConstant;
+import nckd.jxccl.base.common.utils.ConvertUtil;
+import nckd.jxccl.hr.psms.common.PositionStructureConstant;
+
+import java.util.ArrayList;
+import java.util.EventObject;
+import java.util.List;
+
+/**
+* TODO
+* 实体标识:TODO
+* @author W.Y.C
+* @date 2026/1/2 17:35
+* @version 1.0
+*/
+public class UnAnnualAdjustReportFormPlugin extends AbstractReportFormPlugin implements Plugin {
+
+    @Override
+    public void registerListener(EventObject e) {
+        this.addItemClickListeners(FormConstant.TOOLBARAP);
+    }
+
+    @Override
+    public void itemClick(ItemClickEvent evt) {
+        String itemKey = evt.getItemKey();
+
+        if("nckd_new".equals(itemKey) ) {
+            ReportList reportList = this.getView().getControl(FormConstant.REPORTLISTAP);
+            int[] selectedRowIndexes = reportList.getEntryState().getSelectedRows();
+            if (selectedRowIndexes == null || selectedRowIndexes.length == 0) {
+                this.getView().showTipNotification("请至少选择一条数据");
+                return;
+            }
+            //任职经历ID
+            List<Long> personIds = new ArrayList<>();
+            if(selectedRowIndexes != null && selectedRowIndexes.length > 0) {
+                for (int selectedRowIndex : selectedRowIndexes) {
+                    DynamicObject rowData = reportList.getReportModel().getRowData(selectedRowIndex);
+                    personIds.add(rowData.getLong(String.join(".", FormConstant.NCKD_EMPLOYEE,FormConstant.ID_KEY)));
+                }
+            }
+
+            if (personIds.isEmpty()) {
+                this.getView().showErrorNotification("请选择正确的数据");
+                return;
+            }
+            if ("nckd_new".equals(itemKey)) {
+                //弹出【批量】在职人员初定窗口
+                FormShowParameter showParameter = new FormShowParameter();
+                showParameter.setFormId(PositionStructureConstant.NEWANNUALADJUST_ENTITYID);
+                showParameter.getOpenStyle().setShowType(ShowType.Modal);
+                showParameter.setCaption("生成年度调整");
+                showParameter.setSendToClient(true);
+                showParameter.setCustomParam(FormConstant.NCKD_PERSON, personIds);
+                showParameter.setCloseCallBack(new CloseCallBack(this, PositionStructureConstant.NEWANNUALADJUST_ENTITYID));
+                this.getView().showForm(showParameter);
+
+            }
+        }
+    }
+}

+ 302 - 0
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/form/annualadjust/report/UnAnnualAdjustReportListDataPlugin.java

@@ -0,0 +1,302 @@
+package nckd.jxccl.hr.psms.plugin.form.annualadjust.report;
+
+import kd.bos.algo.DataSet;
+import kd.bos.algo.JoinType;
+import kd.bos.algo.Row;
+import kd.bos.common.enums.EnableEnum;
+import kd.bos.context.RequestContext;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.report.AbstractReportListDataPlugin;
+import kd.bos.entity.report.FastFilter;
+import kd.bos.entity.report.ReportQueryParam;
+import kd.bos.orm.ORMHint;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.QueryServiceHelper;
+import kd.bos.servicehelper.model.PermissionStatus;
+import kd.sdk.hr.hbp.business.helper.permission.HRPermissionServiceHelper;
+import nckd.jxccl.base.common.constant.FormConstant;
+import nckd.jxccl.base.common.enums.psms.TypeStateEnum;
+import nckd.jxccl.base.common.utils.DateUtil;
+import nckd.jxccl.base.common.utils.QueryFieldBuilder;
+import nckd.jxccl.hr.psms.common.PositionStructureConstant;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+* 未生成年度调整报表查询插件
+* 实体标识:nckd_unannualadjustreort
+* @author W.Y.C
+* @date 2026/1/2 17:44
+* @version 1.0
+*/
+public class UnAnnualAdjustReportListDataPlugin extends AbstractReportListDataPlugin {
+    @Override
+    public DataSet query(ReportQueryParam reportQueryParam, Object o) throws Throwable {
+        // 构建查询字段
+        QueryFieldBuilder queryFieldBuilder = buildQueryFieldBuilder();
+
+        // 构建基础查询条件
+        QFilter qFilter = buildBaseQueryFilter();
+
+        // 处理快速过滤条件
+        processFastFilter(reportQueryParam, qFilter);
+
+        //其他过滤条件
+        processFilter(reportQueryParam, qFilter);
+        //权限过滤
+        QFilter dataRule = HRPermissionServiceHelper.getDataRule(
+                RequestContext.get().getCurrUserId(), "nckd_psmsfile", "unannualadjustquery",
+                PermissionStatus.View, new HashMap<>());
+        if(dataRule != null){
+            qFilter.and(dataRule);
+        }
+
+        LocalDateTime localDateTime = DateUtil.beginOfYear(DateUtil.now());
+        LocalDateTime lastYear = DateUtil.minusYears(localDateTime, 1);
+        LocalDateTime lastBegin = DateUtil.beginOfYear(lastYear);
+        LocalDateTime lastEnd = DateUtil.endOfYear(lastYear);
+
+
+        // 执行基础查询
+        DataSet mainDataSet = QueryServiceHelper.queryDataSet(PositionStructureConstant.PERSONPOSFILE_ENTITYID, "unannualadjustquery",
+                queryFieldBuilder.buildSelect(), new QFilter[]{qFilter}, null,1000000);
+        String[] mainTableFieldNames = mainDataSet.getRowMeta().getFieldNames();
+        String[] newMainTableFieldNames = new String[mainTableFieldNames.length + 1];
+        System.arraycopy(mainTableFieldNames, 0, newMainTableFieldNames, 0, mainTableFieldNames.length);
+        // 添加当前年度
+        newMainTableFieldNames[mainTableFieldNames.length] = "'"+localDateTime.getYear()+"' as nckd_currentyear";
+
+        //--------------------- 获取上年度考核结果 begin---------------------
+        DataSet mainDataSetCopy = mainDataSet.copy();
+        Set<Long> personIds = new HashSet<>();
+        while (mainDataSetCopy.hasNext()) {
+            Row next = mainDataSetCopy.next();
+            Long personId = next.getLong(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.ID_KEY));
+            personIds.add(personId);
+        }
+        if(!personIds.isEmpty()) {
+            DataSet lastAppraisalYearDateSet = lastAppraisalYear(personIds, DateUtil.toDate(lastBegin), DateUtil.toDate(lastEnd));
+            mainDataSet = mainDataSet.join(lastAppraisalYearDateSet, JoinType.INNER)
+                    .on(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.ID_KEY), String.join(".", FormConstant.NCKD_PERSON, FormConstant.ID_KEY))
+                    .select(newMainTableFieldNames, QueryFieldBuilder.create().add(PositionStructureConstant.NCKD_PERFMANAGERENTRY,PositionStructureConstant.NCKD_APPRAISALRESULT).buildSelectArray()).finish();
+        }
+
+        //--------------------- 获取上年度考核结果 end---------------------
+
+        return mainDataSet;
+    }
+
+
+    private DataSet lastAppraisalYear(Set<Long> personIds,Date beginYear,Date endYear){
+        QueryFieldBuilder queryFieldBuilder = QueryFieldBuilder.create()
+                .addIdNumberName(PositionStructureConstant.NCKD_PERSON)
+                .add(PositionStructureConstant.NCKD_PERFMANAGERENTRY,PositionStructureConstant.NCKD_APPRAISALRESULT);
+        QFilter qFilter = new QFilter(PositionStructureConstant.NCKD_PERSON, QCP.in, personIds)
+                .and(new QFilter(String.join(".", PositionStructureConstant.NCKD_PERFMANAGERENTRY, PositionStructureConstant.NCKD_APPRAISALYEAR), QCP.large_equals, beginYear))
+                .and(new QFilter(String.join(".", PositionStructureConstant.NCKD_PERFMANAGERENTRY, PositionStructureConstant.NCKD_APPRAISALYEAR), QCP.less_equals, endYear))
+                .and(new QFilter(String.join(".", PositionStructureConstant.NCKD_PERFMANAGERENTRY, PositionStructureConstant.NCKD_APPRAISALRESULT), QCP.is_notnull, null))
+                .and(new QFilter(String.join(".", PositionStructureConstant.NCKD_PERFMANAGERENTRY, PositionStructureConstant.NCKD_APPRAISALRESULT), QCP.not_equals2, 0));
+
+        return QueryServiceHelper.queryDataSet(this.getClass().getName()+"nckd_perfmanager", "nckd_perfmanager",
+                queryFieldBuilder.buildSelect(), new QFilter[]{qFilter}, null,10000);
+    }
+
+    /**
+     * 构建基础查询条件
+     */
+    private QFilter buildBaseQueryFilter() {
+        LocalDateTime localDateTime = DateUtil.beginOfYear(DateUtil.now());
+        //查询当年已执行年度调整的人员
+        QueryFieldBuilder queryFieldBuilder = QueryFieldBuilder.create().addIdNumberName(FormConstant.NCKD_PERSON);
+        QFilter yearFilter = new QFilter(PositionStructureConstant.NCKD_EXECUTEYEAR, QCP.equals, localDateTime.getYear())
+                .and(new QFilter(PositionStructureConstant.NCKD_DISABLE, QCP.equals, EnableEnum.NO.getCode()))
+                .and(new QFilter(PositionStructureConstant.NCKD_TYPESTATE, QCP.equals, TypeStateEnum.ANNUAL_ADJUSTMENT.getCode()));
+        DynamicObjectCollection query = QueryServiceHelper.query(PositionStructureConstant.PERSONPOSFILE_ENTITYID, queryFieldBuilder.buildSelect(), new QFilter[]{yearFilter});
+        List<Long> personIds = new ArrayList<>(query.size());
+        for (DynamicObject dynamicObject : query) {
+            long personId = dynamicObject.getLong(String.join(".", FormConstant.NCKD_PERSON, FormConstant.ID_KEY));
+            personIds.add(personId);
+        }
+        QFilter qFilter = new QFilter(FormConstant.IS_PRIMARY, QCP.equals, EnableEnum.YES.getCode())
+                .and(FormConstant.IS_SEQLATESTRECORD, QCP.equals, EnableEnum.YES.getCode())
+                .and(FormConstant.IS_DELETED, QCP.equals, EnableEnum.NO.getCode())
+                .and(String.join(".", FormConstant.ASSIGNMENT, FormConstant.IS_PRIMARY), QCP.equals, EnableEnum.YES.getCode())
+                .and(String.join(".", FormConstant.ASSIGNMENT, FormConstant.IS_DELETED), QCP.equals, EnableEnum.NO.getCode())
+                .and(String.join(".", PositionStructureConstant.PERSONPOSFILE_ENTITYID, PositionStructureConstant.NCKD_DISABLE), QCP.equals, EnableEnum.NO.getCode())
+                .and(String.join(".", PositionStructureConstant.PERSONPOSFILE_ENTITYID, PositionStructureConstant.NCKD_ISCURRENTNEWEST), QCP.equals, EnableEnum.YES.getCode())
+                //在岗
+                .and(String.join( ".", FormConstant.POS_STATUS, FormConstant.POST_STATE_CLS, FormConstant.NUMBER_KEY),QCP.equals,"1010_S")
+                //有初定的人员
+                .and(new QFilter(String.join(".", PositionStructureConstant.PERSONPOSFILE_ENTITYID+"init", PositionStructureConstant.NCKD_FIRSTRANK), QCP.equals, EnableEnum.YES.getCode()))
+                //初定时间不等于当年
+                .and(new QFilter(String.join(".", PositionStructureConstant.PERSONPOSFILE_ENTITYID+"init", PositionStructureConstant.NCKD_EXECUTEYEAR), QCP.not_equals2, localDateTime.getYear()))
+
+
+                .and(QFilter.join(FormConstant.EMPLOYEE_KEY, String.join(".", FormConstant.HRPI_PERPROTITLE, FormConstant.EMPLOYEE_KEY), new QFilter(String.join(".", FormConstant.HRPI_PERPROTITLE, "iscompany"),
+                        QCP.equals, EnableEnum.YES.getCode()),
+                ORMHint.JoinHint.LEFT, Boolean.FALSE))
+                .and(QFilter.join(FormConstant.EMPLOYEE_KEY, String.join(".", FormConstant.HRPI_PEROCPQUAL, FormConstant.EMPLOYEE_KEY), new QFilter(String.join(".", FormConstant.HRPI_PEROCPQUAL, "ismajor"),
+                                QCP.equals, EnableEnum.YES.getCode()),
+                        ORMHint.JoinHint.LEFT, Boolean.FALSE))
+                .and(QFilter.join(FormConstant.EMPLOYEE_KEY, String.join(".", FormConstant.HRPI_PEREDUEXP, FormConstant.EMPLOYEE_KEY), new QFilter(String.join(".", FormConstant.HRPI_PEREDUEXP, "ishighestdegree"),
+                                QCP.equals, EnableEnum.YES.getCode()),
+                        ORMHint.JoinHint.LEFT, Boolean.FALSE));
+
+        //当年还未年度调整的人员
+        if(!personIds.isEmpty()) {
+            qFilter.and(new QFilter(FormConstant.EMPLOYEE_KEY, QCP.not_in, personIds));
+        }
+
+        return qFilter;
+    }
+
+
+    /**
+     * 处理快速过滤条件
+     */
+    private void processFastFilter(ReportQueryParam reportQueryParam, QFilter qFilter) {
+        FastFilter fastFilter = reportQueryParam.getFilter().getFastFilter();
+        if (fastFilter != null) {
+            List<Map<String, List<Object>>> fastFilterList = fastFilter.getFastFilter();
+            for (Map<String, List<Object>> stringListMap : fastFilterList) {
+                //nckd_empnumfastfilter转为employee.empnumber,nckd_namefastfilter转换为employee.name,转换后添加到fields中
+                List<Object> fieldList = stringListMap.get("FieldName");
+                List<Object> valueList = stringListMap.get("Value");
+                String[] fields = new String[fieldList.size()];
+                for (int i = 0; i < fieldList.size(); i++) {
+                    fields[i] = fieldList.get(i).toString()
+                            .replace("nckd_empnumfastfilter", "employee.empnumber")
+                            .replace("nckd_namefastfilter", "employee.name");
+                }
+                //valueList转到values
+                String[] values = new String[valueList.size()];
+                for (int i = 0; i < valueList.size(); i++) {
+                    values[i] = valueList.get(i).toString();
+                }
+                qFilter.and(QFilter.ftlike(values, fields));
+            }
+        }
+    }
+
+    /**
+     * 处理过滤条件
+     */
+    private void processFilter(ReportQueryParam reportQueryParam, QFilter qFilter) {
+        List<QFilter> qFilters = reportQueryParam.getFilter().getQFilters();
+        for (QFilter filter : qFilters) {
+            //由于页面命名限制不允许配置对应数据库字段(例如:position.id的格式),这里只能手动转换为数据库实际的字段
+            String property = filter.getProperty();
+            if ("nckd_positionfilter.id".equalsIgnoreCase(property)){
+                qFilter.and(new QFilter(String.join(".", FormConstant.POSITION_KEY, FormConstant.ID_KEY),filter.getCP(),filter.getValue()));
+            }
+            if("nckd_orgfilter.id".equalsIgnoreCase(property)){
+                qFilter.and(new QFilter(String.join(".", FormConstant.COMPANY_KEY, FormConstant.ID_KEY),filter.getCP(),filter.getValue()));
+            }
+            if("nckd_joblevelhrffilter.id".equalsIgnoreCase(property)){
+                qFilter.and(new QFilter(String.join(".", PositionStructureConstant.PERSONPOSFILE_ENTITYID, PositionStructureConstant.NCKD_JOBLEVELHR,FormConstant.ID_KEY),filter.getCP(),filter.getValue()));
+            }
+            if("nckd_begindatefilter".equalsIgnoreCase(property)){
+                qFilter.and(new QFilter(String.join(".", PositionStructureConstant.PERSONPOSFILE_ENTITYID, PositionStructureConstant.NCKD_BEGINDATE),filter.getCP(),filter.getValue()));
+            }
+            if ("nckd_secondorg.id".equalsIgnoreCase(property)){
+                qFilter.and(new QFilter(String.join(".", FormConstant.ADMINORG,FormConstant.NCKD_SECONDORG,FormConstant.ID_KEY),filter.getCP(),filter.getValue()));
+            }
+            if ("nckd_thirdorg.id".equalsIgnoreCase(property)){
+                qFilter.and(new QFilter(String.join(".", FormConstant.ADMINORG,FormConstant.NCKD_THIRDORG,FormConstant.ID_KEY),filter.getCP(),filter.getValue()));
+            }
+            if ("nckd_fourthorg.id".equalsIgnoreCase(property)){
+                qFilter.and(new QFilter(String.join(".", FormConstant.ADMINORG,FormConstant.NCKD_FOURTHORG,FormConstant.ID_KEY),filter.getCP(),filter.getValue()));
+            }
+            if ("nckd_fifthorg.id".equalsIgnoreCase(property)){
+                qFilter.and(new QFilter(String.join(".", FormConstant.ADMINORG,FormConstant.NCKD_FIFTHORG,FormConstant.ID_KEY),filter.getCP(),filter.getValue()));
+            }
+            if ("nckd_sixthorg.id".equalsIgnoreCase(property)){
+                qFilter.and(new QFilter(String.join(".", FormConstant.ADMINORG,FormConstant.NCKD_SIXTHORG,FormConstant.ID_KEY),filter.getCP(),filter.getValue()));
+            }
+            if ("nckd_position.id".equalsIgnoreCase(property)){
+                qFilter.and(new QFilter(String.join(".", FormConstant.POSITION_KEY,FormConstant.ID_KEY),filter.getCP(),filter.getValue()));
+            }
+            if ("nckd_jobseq.id".equalsIgnoreCase(property)){
+                qFilter.and(new QFilter(String.join(".", PositionStructureConstant.PERSONPOSFILE_ENTITYID,PositionStructureConstant.NCKD_JOBSEQHR,FormConstant.ID_KEY),filter.getCP(),filter.getValue()));
+            }
+            if ("nckd_begindate".equalsIgnoreCase(property)){
+                qFilter.and(new QFilter(String.join(".", "nckd_personposfileinit",PositionStructureConstant.NCKD_BEGINDATE),filter.getCP(),filter.getValue()));
+            }
+        }
+    }
+
+    /**
+     * 构建查询字段
+     */
+    private QueryFieldBuilder buildQueryFieldBuilder() {
+        return QueryFieldBuilder.create()
+                .add(FormConstant.ID_KEY)
+                .add(FormConstant.EMPLOYEE_KEY)
+                .addGroup(new String[]{FormConstant.EMPLOYEE_KEY},FormConstant.ID_KEY, FormConstant.EMP_NUMBER_KEY, FormConstant.NAME_KEY)
+                .addGroup(new String[]{FormConstant.ADMINORG},
+                        FormConstant.NCKD_FIRSTORG,
+                        FormConstant.NCKD_SECONDORG,
+                        FormConstant.NCKD_THIRDORG,
+                        FormConstant.NCKD_FOURTHORG,
+                        FormConstant.NCKD_FIFTHORG,
+                        FormConstant.NCKD_SIXTHORG)
+                .add("nckd_personposfileinit",PositionStructureConstant.NCKD_BEGINDATE)
+                .addGroup(new String[]{PositionStructureConstant.PERSONPOSFILE_ENTITYID},
+                        PositionStructureConstant.NCKD_POSITIONHR,
+                        PositionStructureConstant.NCKD_JOBSEQHR,
+                        PositionStructureConstant.NCKD_PROTITLELEVEL,
+                        PositionStructureConstant.NCKD_OCPQUALLEVEL,
+                        PositionStructureConstant.NCKD_DIPLOMA,
+                        PositionStructureConstant.NCKD_ALLSUMSCORE,
+                        PositionStructureConstant.NCKD_BEGINDATE,
+                        PositionStructureConstant.NCKD_JOBLEVELHR,
+                        PositionStructureConstant.NCKD_PERSON,
+                        PositionStructureConstant.NCKD_DEP,
+                        PositionStructureConstant.NCKD_ALLOWANCERANKMARK,
+                        PositionStructureConstant.NCKD_ALLOWANCERANKSEL,
+                        PositionStructureConstant.NCKD_COEFFICIENT,
+                        PositionStructureConstant.NCKD_CURRENTPOSTSALARY,
+                        PositionStructureConstant.NCKD_POSTALLOWANCE,
+                        PositionStructureConstant.NCKD_TYPESTATE,
+                        PositionStructureConstant.NCKD_APPRAISALRESULT,
+                        PositionStructureConstant.NCKD_RANKSCORE,
+                        PositionStructureConstant.NCKD_JOBSTATUSSCORE,
+                        PositionStructureConstant.NCKD_DIPLOMASCORE,
+                        PositionStructureConstant.NCKD_ORGINSSCORE,
+                        PositionStructureConstant.NCKD_SUMSCORE,
+                        PositionStructureConstant.NCKD_RESULTSCORE,
+                        PositionStructureConstant.NCKD_LYRCONTRIBSCORE,
+                        PositionStructureConstant.NCKD_YEARSCORESUMA,
+                        PositionStructureConstant.NCKD_YEARSCORESUMB,
+                        PositionStructureConstant.NCKD_YEARSCORESUMC,
+                        PositionStructureConstant.NCKD_YEARSCORESUMD,
+                        PositionStructureConstant.NCKD_YEARSCORESUME,
+                        PositionStructureConstant.NCKD_YEARSCORESUMF,
+                        PositionStructureConstant.NCKD_YEARSCORESUMG,
+                        PositionStructureConstant.NCKD_YEARSCORESUMH,
+                        PositionStructureConstant.NCKD_YEARSCORESUMI,
+                        PositionStructureConstant.NCKD_ALLYEARSCORESUM
+
+                )
+                .addGroup(new String[]{FormConstant.HRPI_PERPROTITLE}, FormConstant.PROLEVEL_KEY)
+                .addGroup(new String[]{FormConstant.HRPI_PEROCPQUAL}, FormConstant.QUALIFICATION_KEY)
+                .addGroup(new String[]{FormConstant.HRPI_PEREDUEXP}, FormConstant.EDUCATION_KEY)
+                .add(FormConstant.COMPANY_KEY)
+                .addIdNumberName(FormConstant.COMPANY_KEY)
+                .add(FormConstant.ADMINORG)
+                .addIdNumberName(FormConstant.POSITION_KEY)
+                .addGroup(new String[]{FormConstant.HBPM_POSITIONHR}, PositionStructureConstant.NCKD_JOBSEQ)
+                .addGroup(new String[]{FormConstant.HBPM_POSITIONHR, PositionStructureConstant.NCKD_JOBSEQ}, FormConstant.NUMBER_KEY);
+
+
+    }
+}

+ 1 - 1
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/operate/annualadjust/AnnualAdjustmentOperationPlugin.java

@@ -124,7 +124,7 @@ public class AnnualAdjustmentOperationPlugin extends AbstractOperationServicePlu
                 LocalDateTime lastYear = DateUtil.minusYears(DateUtil.toLocalDateTime(adjustDate), 1);
                 DynamicObject performanceResult = PerformanceManagerHelper.getPerformanceResult(personId, lastYear);
                 if(performanceResult == null){
-                    addFatalErrorMessage(rowDataEntity,StrFormatter.format("人员【{}】缺少【{}】年考核结果", personName,lastYear));
+                    addFatalErrorMessage(rowDataEntity,StrFormatter.format("人员【{}】缺少【{}】年考核结果", personName,lastYear.getYear()));
                 }
 
                 PositionAppointmentBO positionAppointment = PositionFileHelper.positionAppointmentQuery(personId, adjustDate);