Browse Source

1.打卡同步优化
2.工作流插件,获取一级/二级部门

Tyx 1 week ago
parent
commit
c655607c22

+ 50 - 0
code/jyyy/nckd-jimin-jyyy-hr/src/main/java/nckd/jimin/jyyy/hr/plugin/workflow/GetFirstDeptChargerWorkflowPlugin.java

@@ -0,0 +1,50 @@
+package nckd.jimin.jyyy.hr.plugin.workflow;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.bos.servicehelper.DispatchServiceHelper;
+import kd.bos.workflow.api.AgentExecution;
+import kd.bos.workflow.engine.extitf.IWorkflowPlugin;
+import kd.hrmp.hrpi.business.domian.service.impl.PersonRoleServiceImpl;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 通用工作流插件 Tyx 2025-05-26
+ * 获取一级部门负责人
+ */
+public class GetFirstDeptChargerWorkflowPlugin implements IWorkflowPlugin {
+    private static final Log log = LogFactory.getLog(GetFirstDeptChargerWorkflowPlugin.class);
+    @Override
+    public List<Long> calcUserIds(AgentExecution execution) {
+        List<Long> approvers = execution.getCurrentApprover();
+        log.info(" before 获取流程变量 personId ");
+        String personId = execution.getVariable("personId").toString();
+        log.info(" 获取流程变量 personId : {} ", personId);
+        //获取人员主职部门
+        Map<String, Object> posOrgRel = DispatchServiceHelper.invokeBizService("hrmp", "hrpi", "IHRPIPersonService", "getPrimaryEmpposorgrel", Long.valueOf(personId));
+        Long adminOrgId = Long.valueOf(posOrgRel.get("adminorg_id").toString());
+        log.info(" personId对应部门Id : {}", adminOrgId);
+        //获取一级部门
+        Long firstDeptId = HRWorkflowUtils.getFirstDeptId(adminOrgId);
+        log.info(" 一级部门ID : {}", firstDeptId);
+        //获取一级部门负责人
+        List deptIds = new ArrayList();
+        deptIds.add(firstDeptId);
+        List mainChargeInfos = PersonRoleServiceImpl.getInstance().getMainChargeByOrg(deptIds);
+        List chargerIds = new ArrayList();
+        for(Object obj : mainChargeInfos) {
+            Map map = (Map) obj;
+            String charger = map.get("person").toString();
+            log.info(" 计算出参与人personId : {}", charger);
+            chargerIds.add(Long.valueOf(charger));
+        }
+        //personId转换userId
+        List chargerUserId = HRWorkflowUtils.transPersonIdToUserId(chargerIds);
+        approvers.addAll(chargerUserId);
+        return approvers;
+    }
+}

+ 50 - 0
code/jyyy/nckd-jimin-jyyy-hr/src/main/java/nckd/jimin/jyyy/hr/plugin/workflow/GetSecondDeptChargerWorkflowPlugin.java

@@ -0,0 +1,50 @@
+package nckd.jimin.jyyy.hr.plugin.workflow;
+
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.bos.servicehelper.DispatchServiceHelper;
+import kd.bos.workflow.api.AgentExecution;
+import kd.bos.workflow.engine.extitf.IWorkflowPlugin;
+import kd.hrmp.hrpi.business.domian.service.impl.PersonRoleServiceImpl;
+import kd.sdk.plugin.Plugin;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 通用工作流插件 Tyx 2025-05-26
+ * 获取一级部门负责人
+ */
+public class GetSecondDeptChargerWorkflowPlugin implements IWorkflowPlugin {
+    private static final Log log = LogFactory.getLog(GetSecondDeptChargerWorkflowPlugin.class);
+    @Override
+    public List<Long> calcUserIds(AgentExecution execution) {
+        List<Long> approvers = execution.getCurrentApprover();
+        log.info(" before 获取流程变量 personId ");
+        String personId = execution.getVariable("personId").toString();
+        log.info(" 获取流程变量 personId : {} ", personId);
+        //获取人员主职部门
+        Map<String, Object> posOrgRel = DispatchServiceHelper.invokeBizService("hrmp", "hrpi", "IHRPIPersonService", "getPrimaryEmpposorgrel", Long.valueOf(personId));
+        Long adminOrgId = Long.valueOf(posOrgRel.get("adminorg_id").toString());
+        log.info(" personId对应部门Id : {}", adminOrgId);
+        //获取一级部门
+        Long firstDeptId = HRWorkflowUtils.getSecondDeptId(adminOrgId);
+        log.info(" 二级部门ID : {}", firstDeptId);
+        //获取一级部门负责人
+        List deptIds = new ArrayList();
+        deptIds.add(firstDeptId);
+        List mainChargeInfos = PersonRoleServiceImpl.getInstance().getMainChargeByOrg(deptIds);
+        List chargerIds = new ArrayList();
+        for(Object obj : mainChargeInfos) {
+            Map map = (Map) obj;
+            String charger = map.get("person").toString();
+            log.info(" 计算出参与人personId : {}", charger);
+            chargerIds.add(Long.valueOf(charger));
+        }
+        //personId转换userId
+        List chargerUserId = HRWorkflowUtils.transPersonIdToUserId(chargerIds);
+        approvers.addAll(chargerUserId);
+        return approvers;
+    }
+}

+ 77 - 0
code/jyyy/nckd-jimin-jyyy-hr/src/main/java/nckd/jimin/jyyy/hr/plugin/workflow/HRWorkflowUtils.java

@@ -0,0 +1,77 @@
+package nckd.jimin.jyyy.hr.plugin.workflow;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.hrmp.hrpi.business.domian.service.impl.PersonServiceImpl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class HRWorkflowUtils {
+
+    private static final Log log = LogFactory.getLog(GetFirstDeptChargerWorkflowPlugin.class);
+
+    /**
+     * 根据部门ID获取一级部门ID
+     * @param adminOrgId
+     * @return
+     */
+    public static Long getFirstDeptId (Long adminOrgId) {
+        String adminType = "";
+        DynamicObject adminDyn = BusinessDataServiceHelper.loadSingle(adminOrgId, "haos_adminorghr");
+        adminType = adminDyn.getString("orgtype.name");
+        while(!adminType.equals("一级部门")) {
+            adminDyn = BusinessDataServiceHelper.loadSingle(adminOrgId, "haos_adminorghr");
+            adminType = adminDyn.getString("orgtype.name");
+            adminOrgId = adminDyn.getLong("parent.id");
+            if(adminOrgId == 0L)
+                break;
+        }
+        return adminOrgId;
+    }
+
+    /**
+     * 根据部门ID获取二级部门ID
+     * @param adminOrgId
+     * @return
+     */
+    public static Long getSecondDeptId (Long adminOrgId) {
+        String adminType = "";
+        DynamicObject adminDyn = BusinessDataServiceHelper.loadSingle(adminOrgId, "haos_adminorghr");
+        adminType = adminDyn.getString("orgtype.name");
+        while(!adminType.equals("二级部门")) {
+            adminDyn = BusinessDataServiceHelper.loadSingle(adminOrgId, "haos_adminorghr");
+            adminType = adminDyn.getString("orgtype.name");
+            adminOrgId = adminDyn.getLong("parent.id");
+            if(adminOrgId == 0L)
+                break;
+        }
+        return adminOrgId;
+    }
+
+
+    public static List<Long> transPersonIdToUserId(List<Long> personIds) {
+        log.info(" HRWorkflowUtils transPersonIdToUserId {}", personIds);
+        List<Long> userIds = new ArrayList(personIds.size());
+        Map<String, List<Long>> queryMap = new HashMap();
+        queryMap.put("person", personIds);
+        Map<String, Object> userInfoMap = PersonServiceImpl.getInstance().getUserIdByPersonInfo(queryMap);
+        if (!userInfoMap.isEmpty() && userInfoMap.get("success") == Boolean.TRUE) {
+            Map<Long, Object> data = (Map)userInfoMap.get("data");
+            data.values().forEach((user) -> {
+                Map<String, Long> userMap = (Map)user;
+                if (userMap != null && !userMap.isEmpty()) {
+                    userIds.add(userMap.get("user"));
+                }
+
+            });
+        }
+
+        return userIds;
+    }
+
+}

+ 7 - 2
code/jyyy/nckd-jimin-jyyy-hr/src/main/java/nckd/jimin/jyyy/hr/wtc/wtis/util/SyncAttendanceHelper.java

@@ -65,8 +65,13 @@ public class SyncAttendanceHelper {
             //实际调用
             JSONObject reponseObject = doPost(url, param);
             log.info("钉钉单据同步实际返回信息 : {}", reponseObject.toJSONString());
-            //保存日志
-            DingTalkSyncUtil.createLog("A", billNo, param.toJSONString(),reponseObject.toJSONString(),DingTalkSyncUtil.typeMap.get(bizType));
+            //保存日志 errcode == "0"为成功
+            if("0".equals(reponseObject.getString("errcode"))) {
+                DingTalkSyncUtil.createLog("A", billNo, param.toJSONString(),reponseObject.toJSONString(),DingTalkSyncUtil.typeMap.get(bizType));
+            }
+            else {
+                DingTalkSyncUtil.createLog("C", billNo, param.toJSONString(),reponseObject.toJSONString(),DingTalkSyncUtil.typeMap.get(bizType));
+            }
         } catch (Exception e) {
             DingTalkSyncUtil.createLog("C", billNo, bill.getString("billno") + "调用失败", e.getMessage(), DingTalkSyncUtil.typeMap.get(bizType));
             throw new RuntimeException(e);