Переглянути джерело

feat(onlineperf): 新增在线即时考核数据获取服务

- 新增 OnlinePerfConstant 常量类定义考核相关字段标识
- 实现 OnlinePerfFetchDataService 数据获取逻辑
- 支持根据考核人员ID列表查询关联的在线即时考核数据
- 按年月及规则ID过滤考核数据
- 将查询结果按员工分组并转换为JSON格式返回
- 使用 DateUtil 工具类处理日期相关的年月提取逻辑
wyc 9 годин тому
батько
коміт
b908922399

+ 11 - 0
code/base/nckd-jxccl-base-common/src/main/java/nckd/jxccl/base/common/utils/DateUtil.java

@@ -300,6 +300,17 @@ public class DateUtil {
         return dateTime.getMonth();
     }
 
+
+    /**
+     * 获取月份数字(1-12)
+     *
+     * @param date 日期时间对象
+     * @return 月份数字
+     */
+    public static int getMonthValue(Date date) {
+        return getMonthValue(toLocalDateTime(date));
+    }
+
     /**
      * 获取月份数字(1-12)
      *

+ 30 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/onlineperf/common/OnlinePerfConstant.java

@@ -0,0 +1,30 @@
+package nckd.jxccl.swc.onlineperf.common;
+
+import nckd.jxccl.base.common.constant.FormConstant;
+
+/**
+ * 在线即时考核常量类
+ *
+ * @author W.Y.C
+ * @version 1.0
+ * @date 2025/12/17 19:38
+ */
+public class OnlinePerfConstant extends FormConstant {
+
+    /** 在线即时考核-实体标识 */
+    public static final String ONLINEPERF_ENTITYID = "nckd_onlineperf";
+    /** 计算规则 */
+    public static final String NCKD_CALRULE = "nckd_calrule";
+    /** 统计年 */
+    public static final String NCKD_PERIODYEAR = "nckd_periodyear";
+    /** 统计月 */
+    public static final String NCKD_PERIODMONTH = "nckd_periodmonth";
+    /** 所属组织 */
+    public static final String NCKD_ADMINORGUNIT = "nckd_adminorgunit";
+    /** 锁定 */
+    public static final String NCKD_ISCALDYNLOCK = "nckd_iscaldynlock";
+    /** 薪酬项目 */
+    public static final String NCKD_SALARYITEM = "nckd_salaryitem";
+    /** 相关金额 */
+    public static final String NCKD_NMONEY = "nckd_nmoney";
+}

+ 101 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/onlineperf/common/OnlinePerfFetchDataService.java

@@ -0,0 +1,101 @@
+package nckd.jxccl.swc.onlineperf.common;
+
+import com.alibaba.fastjson.JSONObject;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.QueryServiceHelper;
+import kd.sdk.swc.hscs.common.api.ICustomFetchDataService;
+import nckd.jxccl.base.common.constant.FormConstant;
+import nckd.jxccl.base.common.utils.DateUtil;
+import nckd.jxccl.base.common.utils.QueryFieldBuilder;
+import nckd.jxccl.swc.constants.SwcConstant;
+
+import java.math.BigDecimal;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 在线即时考核薪酬函数
+ *
+ * @author W.Y.C
+ * @version 1.0
+ * @date 2025/12/17 14:37
+ */
+public class OnlinePerfFetchDataService implements ICustomFetchDataService {
+
+    @Override
+    public Map<Long, Map<String, Object>> fetchDataCalPerson(List<Long> calPersonIdList, Map<Long, Map<String, Object>> paramsMap, Map<String, Object> extParamMap) {
+        QueryFieldBuilder queryFieldBuilder = QueryFieldBuilder.create()
+                .add(FormConstant.ID_KEY)
+                .add("empnumber")
+                .add("name")
+                .addGroup(new String[]{"caltask"}, "calcount", "payrolldate")
+                .addGroup(new String[]{"caltask", "calrule"}, FormConstant.ID_KEY)
+                .addGroup(new String[]{FormConstant.EMPLOYEE_KEY}, FormConstant.ID_KEY);
+        QFilter qFilter = new QFilter("id", "in", calPersonIdList);
+        DynamicObject[] load = SwcConstant.CALPERSON_HELPER.load(queryFieldBuilder.buildSelect(), new QFilter[]{qFilter});
+
+        Map<Long, Map<String, Object>> resultMap = new HashMap<Long, Map<String, Object>>();
+        if(load != null && load.length > 0) {
+            Map<Long, Long> employeeToCalPersonMap = Arrays.stream(load)
+                    .collect(Collectors.toMap(
+                            obj -> obj.getLong(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.ID_KEY)),
+                            obj -> obj.getLong(FormConstant.ID_KEY)
+                    ));
+
+            DynamicObject calTask = load[0].getDynamicObject("caltask");
+            Date date = calTask.getDate("payrolldate");
+            int year = DateUtil.getYear(date);
+            int month = DateUtil.getMonthValue(date);
+            long calRuleId = calTask.getLong(String.join(".", "calrule", FormConstant.ID_KEY));
+            //在线即时考核
+            QueryFieldBuilder onlinePerfQueryFieldBuilder = QueryFieldBuilder.create()
+                    .add(FormConstant.ID_KEY)
+                    .addIdNumberName(OnlinePerfConstant.NCKD_CALRULE)
+                    .addIdNumberName(OnlinePerfConstant.NCKD_ADMINORGUNIT)
+                    .add(OnlinePerfConstant.NCKD_PERIODYEAR)
+                    .add(OnlinePerfConstant.NCKD_PERIODMONTH)
+                    .addIdNumberName(OnlinePerfConstant.NCKD_ENTRYENTITY, FormConstant.NCKD_PERSON)
+                    .addIdNumberName(OnlinePerfConstant.NCKD_ENTRYENTITY, OnlinePerfConstant.NCKD_SALARYITEM)
+                    .add(OnlinePerfConstant.NCKD_ENTRYENTITY, OnlinePerfConstant.NCKD_NMONEY);
+            QFilter onlinePerfFilter = new QFilter(OnlinePerfConstant.NCKD_PERIODYEAR, QCP.equals, year)
+                    .and(OnlinePerfConstant.NCKD_PERIODMONTH, QCP.equals, month)
+                    .and(String.join(".", OnlinePerfConstant.NCKD_CALRULE, FormConstant.ID_KEY),QCP.equals, calRuleId)
+                    .and(String.join(".", OnlinePerfConstant.NCKD_ENTRYENTITY, OnlinePerfConstant.NCKD_PERSON),QCP.in, employeeToCalPersonMap.keySet());
+            DynamicObjectCollection onlinePerfColl = QueryServiceHelper.query(OnlinePerfConstant.ONLINEPERF_ENTITYID, onlinePerfQueryFieldBuilder.buildSelect(), new QFilter[]{onlinePerfFilter});
+            Map<Long, List<DynamicObject>> onlinePerfMap = onlinePerfColl.stream()
+                    .collect(Collectors.groupingBy(dynamicObject ->
+                            dynamicObject.getLong(String.join(".", OnlinePerfConstant.NCKD_ENTRYENTITY, OnlinePerfConstant.NCKD_PERSON, FormConstant.ID_KEY))
+                    ));
+            for (Map.Entry<Long, List<DynamicObject>> entrySet : onlinePerfMap.entrySet()) {
+                Long key = entrySet.getKey();
+                List<DynamicObject> value = entrySet.getValue();
+                JSONObject json = new JSONObject();
+                for (DynamicObject onlinePerf : value) {
+                    if(onlinePerf.getLong(String.join(".", OnlinePerfConstant.NCKD_ENTRYENTITY, OnlinePerfConstant.NCKD_SALARYITEM, FormConstant.ID_KEY))>0){
+                        String salaryItemNumber = onlinePerf.getString(String.join(".", OnlinePerfConstant.NCKD_ENTRYENTITY, OnlinePerfConstant.NCKD_SALARYITEM, FormConstant.NUMBER_KEY));
+                        BigDecimal money = onlinePerf.getBigDecimal(String.join(".", OnlinePerfConstant.NCKD_ENTRYENTITY, OnlinePerfConstant.NCKD_NMONEY));
+                        if(money.compareTo(BigDecimal.ZERO) > 0) {
+                            json.put(salaryItemNumber, money);
+                        }
+                    }
+                }
+                Map<String, Object> result = new HashMap<String, Object>();
+                result.put("resultJson",json.toString());
+                resultMap.put(employeeToCalPersonMap.get(key), result);
+            }
+        }
+        return resultMap;
+    }
+
+    @Override
+    public Map<String, Object> fetchDataCalTask(Long calTaskId, Map<String, Object> paramsMap, Map<String, Object> extParamMap) {
+        return ICustomFetchDataService.super.fetchDataCalTask(calTaskId, paramsMap, extParamMap);
+    }
+}