浏览代码

新增规则-发起人和岗位取部门交集

cczhang 1 个月前
父节点
当前提交
4e49950499

+ 2
- 2
src/main/java/com/horizon/common/constant/Constants.java 查看文件

@@ -13,9 +13,9 @@ public class Constants {
13 13
      */
14 14
     // public static final String WF_PRE_URL = "http://172.16.7.51:10034/jlyypt";
15 15
     // 金岭
16
-    // public static final String WF_PRE_URL = "http://10.198.1.18:8003";
16
+     public static final String WF_PRE_URL = "http://10.198.1.18:8003";
17 17
     // 安全
18
-    public static final String WF_PRE_URL = "http://10.19.13.206/gateway";
18
+//    public static final String WF_PRE_URL = "http://10.19.13.206/gateway";
19 19
     public static final ExecutorService EXECUTOR_SERVICE = Executors.newFixedThreadPool(10);
20 20
 
21 21
 }

+ 41
- 0
src/main/java/com/horizon/custom/GroupCreator.java 查看文件

@@ -0,0 +1,41 @@
1
+package com.horizon.custom;
2
+
3
+import com.horizon.common.collect.Lists;
4
+import com.horizon.db.Access;
5
+import com.horizon.wf.core.rule.BaseRuleImpl;
6
+import com.horizon.wf.core.rule.IBaseRule;
7
+
8
+import java.util.List;
9
+import java.util.Map;
10
+
11
+/**
12
+ * 根据组织机构里的群组或者岗位,与流程创建者做交集
13
+ * com.horizon.custom.GroupOrPositionCreator
14
+ */
15
+public class GroupCreator extends BaseRuleImpl implements IBaseRule {
16
+    @Override
17
+    public boolean executeRule() {
18
+        String userId = "";
19
+        // 获取流程创建人id
20
+        String creator = getRunningdata().getWork().getCreator();
21
+
22
+        String dbIdentifier = "shindi";
23
+
24
+        // 获取组长ID
25
+        String queryGroupIdSql =
26
+                "SELECT z.EMP_NO AS GROUP_ID " +
27
+                "FROM SHINDI.T_COST_BANK_ACCOUNT z " +
28
+                "WHERE z.SUB_PARK = (SELECT Z.SUB_PARK FROM SHINDI.T_COST_BANK_ACCOUNT Z WHERE Z.EMP_NO = ?)" +
29
+                "AND z.IS_EXAM = '0'";
30
+
31
+        List<String> list = Lists.newArrayList();
32
+        // 参数传递
33
+        list.add(creator);
34
+        Map resmap = Access.getSingleMap(queryGroupIdSql, list, dbIdentifier);
35
+        userId = (String) resmap.get("group_id");
36
+
37
+        setResult(userId);
38
+        return true;
39
+    }
40
+
41
+}

+ 91
- 0
src/main/java/com/horizon/custom/GroupOrPositionByVars.java 查看文件

@@ -0,0 +1,91 @@
1
+package com.horizon.custom;
2
+
3
+import com.horizon.core.HorizonCore;
4
+import com.horizon.third.adapter.OrganizationAdapter;
5
+import com.horizon.utils.StringUtil;
6
+import com.horizon.wf.core.rule.BaseRuleImpl;
7
+import com.horizon.wf.core.rule.IBaseRule;
8
+import com.horizon.wf.core.runtime.RunningData;
9
+import com.horizon.wf.definition.pub.IFlowNode;
10
+import com.horizon.wf.global.StaticVarExtend;
11
+
12
+import java.util.*;
13
+
14
+/**
15
+ * 根据组织机构里的群组或者岗位,与流程创建者做交集
16
+ * com.horizon.custom.GroupOrPositionCreator
17
+ */
18
+public class GroupOrPositionByVars extends BaseRuleImpl implements IBaseRule {
19
+    @Override
20
+    public boolean executeRule() {
21
+        RunningData runningdata = getRunningdata();
22
+        Map<String, String> flowVar = runningdata.getFlowVar().getAllFlowVarMap();
23
+
24
+        // 3. 获取办理人的节点定义对象
25
+        IFlowNode flowNode = (IFlowNode) getParameter(StaticVarExtend.Parameter_CustomeUser_IFlowNode);
26
+        // 获取主办中设置的id
27
+        String groups[] = flowNode.getParticipantsUserList().get(1).getGroup().split(";");
28
+        String positions[] = flowNode.getParticipantsUserList().get(1).getPosition().split(";");
29
+//        String depts[] = flowNode.getParticipantsUserList().get(1).getDept().split(";");
30
+//
31
+//        // 获取业务传入的参数变量
32
+//        String customDept = flowVar.get("customDept");
33
+//        if(StringUtil.hasValue(customDept)){
34
+//            depts = customDept.split(";");
35
+//        }
36
+
37
+        String[] originalDepts = flowNode.getParticipantsUserList().get(1).getDept().split(";");
38
+        Set<String> deptSet = new LinkedHashSet<>(Arrays.asList(originalDepts)); // 保持顺序并去重
39
+
40
+        String customDept = flowVar.get("customDept");
41
+        if (StringUtil.hasValue(customDept)) {
42
+            deptSet.addAll(Arrays.asList(customDept.split(";")));
43
+        }
44
+
45
+        String[] depts = deptSet.toArray(new String[0]);
46
+
47
+        // 获取岗位与部门交集+传入部门的交集
48
+
49
+        // 获取岗位与用户所属部门交集
50
+
51
+        String userId = "";
52
+
53
+        if(depts.length > 0){
54
+            userId += this.getUserBySameDeptAndOrg(positions, depts) + ";";
55
+        }
56
+
57
+        setResult(userId);
58
+        return true;
59
+    }
60
+
61
+    public String getUserBySameDeptAndOrg(String orgIds[], String[] depts) {
62
+        OrganizationAdapter organization = new OrganizationAdapter();
63
+        // 最终办理人用户id
64
+        String userIds = "";
65
+        // 获取群组下的所有用户信息
66
+        if (orgIds.length < 1) return "";
67
+        for (String orgId : orgIds) {
68
+            String orgUserIds = "";
69
+            // 获取群组下的所有用户id
70
+            if (orgId.contains("G_")) {
71
+                orgUserIds = organization.getAllUserFromGroup(orgId.replace("G_", ""), HorizonCore.TENANT_IDENTIFIER.value());
72
+            } else if (orgId.contains("P_")) {
73
+                orgUserIds = organization.getAllUserFromPosition(orgId.replace("P_", ""), HorizonCore.TENANT_IDENTIFIER.value());
74
+            }
75
+            if (!StringUtil.hasValue(orgUserIds)) return "";
76
+            // 根据多个用户id,获取用户信息
77
+            List<Map<String, String>> userByIDs = organization.getUserByIDs(orgUserIds.split(";"), HorizonCore.TENANT_IDENTIFIER.value());
78
+
79
+            // 对比用户所属部门,如果相同,则添加到userIds中
80
+            for (Map<String, String> user : userByIDs) {
81
+                String deptId = "D_" + user.get("dept_id");
82
+                if (Arrays.asList(depts).contains(deptId)) {
83
+                    userIds += user.get("id") + "/" + orgId + ";";
84
+                }
85
+            }
86
+        }
87
+        return userIds;
88
+    }
89
+
90
+
91
+}

+ 9
- 65
src/main/java/com/horizon/custom/GroupOrPositionCreator.java 查看文件

@@ -1,18 +1,10 @@
1 1
 package com.horizon.custom;
2 2
 
3
-import com.horizon.core.HorizonCore;
4
-import com.horizon.third.adapter.OrganizationAdapter;
5
-import com.horizon.utils.StringUtil;
6 3
 import com.horizon.wf.core.rule.BaseRuleImpl;
7 4
 import com.horizon.wf.core.rule.IBaseRule;
8
-import com.horizon.wf.core.runtime.RunningData;
9 5
 import com.horizon.wf.definition.pub.IFlowNode;
10 6
 import com.horizon.wf.global.StaticVarExtend;
11 7
 
12
-import java.util.Arrays;
13
-import java.util.List;
14
-import java.util.Map;
15
-
16 8
 /**
17 9
  * 根据组织机构里的群组或者岗位,与流程创建者做交集
18 10
  * com.horizon.custom.GroupOrPositionCreator
@@ -20,70 +12,22 @@ import java.util.Map;
20 12
 public class GroupOrPositionCreator extends BaseRuleImpl implements IBaseRule {
21 13
     @Override
22 14
     public boolean executeRule() {
23
-        //3. 获取办理人的节点定义对象
15
+        // 3. 获取办理人的节点定义对象
24 16
         IFlowNode flowNode = (IFlowNode) getParameter(StaticVarExtend.Parameter_CustomeUser_IFlowNode);
25
-        //获取主办中设置的id
17
+        // 获取主办中设置的id
26 18
         String groups[] = flowNode.getParticipantsUserList().get(1).getGroup().split(";");
27 19
         String positions[] = flowNode.getParticipantsUserList().get(1).getPosition().split(";");
28
-        //5. 获取的办理人返回
20
+        // 5. 获取的办理人返回
29 21
         String userId = "";
30
-
31
-        //获取群组与用户所属部门交集
32
-        if(StringUtil.hasValue(Arrays.toString(groups))){
33
-            userId += getUserBySameDeptAndGroup(groups)+";";
34
-        }
35
-        //获取岗位与用户所属部门交集
36
-        if(StringUtil.hasValue(Arrays.toString(positions))){
37
-            userId += getUserBySameDeptAndPosition(positions)+";";
38
-        }
22
+        // 获取流程创建人id
23
+        String creator = getRunningdata().getWork().getCreator();
24
+        // 获取群组与用户所属部门交集
25
+        userId += GroupOrPositionUtil.getUserBySameDeptAndOrg(groups, creator) + ";";
26
+        // 获取岗位与用户所属部门交集
27
+        userId += GroupOrPositionUtil.getUserBySameDeptAndOrg(positions, creator) + ";";
39 28
         setResult(userId);
40 29
         return true;
41 30
     }
42 31
 
43
-    private String getUserBySameDeptAndPosition(String positions[]) {
44
-        OrganizationAdapter organization = new OrganizationAdapter();
45
-
46
-        //获取群组下的所有用户信息
47
-        if (positions.length < 1) return "";
48
-        String positionId = positions[0].replace("P_", "");
49
-        String positionIdUserIds = organization.getAllUserFromPosition(positionId, HorizonCore.TENANT_IDENTIFIER.value());
50
-        if (!StringUtil.hasValue(positionId)) return "";
51
-        List<Map<String, String>> userByIDs = organization.getUserByIDs(positionIdUserIds.split(";"), HorizonCore.TENANT_IDENTIFIER.value());
52
-        //获取流程创建人id
53
-        String creator = getRunningdata().getWork().getCreator();
54
-        //根据用户id获取用户信息
55
-        Map<String,String> userMap  = organization.getUserById(creator, HorizonCore.TENANT_IDENTIFIER.value());
56
-        String deptId = userMap.get("dept_id");
57
-        //循环群组里用户的id
58
-        for (Map<String, String> user : userByIDs) {
59
-            if (user.get("dept_id").equals(deptId)) {
60
-                return user.get("id") + "/P_" + positionId;
61
-            }
62
-        }
63
-        return "";
64
-    }
65
-
66
-    private String getUserBySameDeptAndGroup(String groups[]) {
67
-        OrganizationAdapter organization = new OrganizationAdapter();
68
-
69
-        //获取群组下的所有用户信息
70
-        if (groups.length < 1) return "";
71
-        String groupId = groups[0].replace("G_", "");
72
-        String groupUserIds = organization.getAllUserFromGroup(groupId, HorizonCore.TENANT_IDENTIFIER.value());
73
-        if (!StringUtil.hasValue(groupUserIds)) return "";
74
-        List<Map<String, String>> userByIDs = organization.getUserByIDs(groupUserIds.split(";"), HorizonCore.TENANT_IDENTIFIER.value());
75
-        //获取流程创建人id
76
-        String creator = getRunningdata().getWork().getCreator();
77
-        //根据用户id获取用户信息
78
-        Map<String,String> userMap  = organization.getUserById(creator, HorizonCore.TENANT_IDENTIFIER.value());
79
-        String deptId = userMap.get("dept_id");
80
-        for (Map<String, String> user : userByIDs) {
81
-            if (user.get("dept_id").equals(deptId)) {
82
-                return user.get("id") + "/G_" + groupId;
83
-            }
84
-        }
85
-        return "";
86
-    }
87
-
88 32
 
89 33
 }

+ 88
- 0
src/main/java/com/horizon/custom/GroupOrPositionCreatorBak.java 查看文件

@@ -0,0 +1,88 @@
1
+package com.horizon.custom;
2
+
3
+import com.horizon.core.HorizonCore;
4
+import com.horizon.third.adapter.OrganizationAdapter;
5
+import com.horizon.utils.StringUtil;
6
+import com.horizon.wf.core.rule.BaseRuleImpl;
7
+import com.horizon.wf.core.rule.IBaseRule;
8
+import com.horizon.wf.definition.pub.IFlowNode;
9
+import com.horizon.wf.global.StaticVarExtend;
10
+
11
+import java.util.Arrays;
12
+import java.util.List;
13
+import java.util.Map;
14
+
15
+/**
16
+ * 根据组织机构里的群组或者岗位,与流程创建者做交集
17
+ * com.horizon.custom.GroupOrPositionCreator
18
+ */
19
+public class GroupOrPositionCreatorBak extends BaseRuleImpl implements IBaseRule {
20
+    @Override
21
+    public boolean executeRule() {
22
+        //3. 获取办理人的节点定义对象
23
+        IFlowNode flowNode = (IFlowNode) getParameter(StaticVarExtend.Parameter_CustomeUser_IFlowNode);
24
+        //获取主办中设置的id
25
+        String groups[] = flowNode.getParticipantsUserList().get(1).getGroup().split(";");
26
+        String positions[] = flowNode.getParticipantsUserList().get(1).getPosition().split(";");
27
+        //5. 获取的办理人返回
28
+        String userId = "";
29
+
30
+        //获取群组与用户所属部门交集
31
+        if(StringUtil.hasValue(Arrays.toString(groups))){
32
+            userId += getUserBySameDeptAndGroup(groups)+";";
33
+        }
34
+        //获取岗位与用户所属部门交集
35
+        if(StringUtil.hasValue(Arrays.toString(positions))){
36
+            userId += getUserBySameDeptAndPosition(positions)+";";
37
+        }
38
+        setResult(userId);
39
+        return true;
40
+    }
41
+
42
+    private String getUserBySameDeptAndPosition(String positions[]) {
43
+        OrganizationAdapter organization = new OrganizationAdapter();
44
+
45
+        //获取群组下的所有用户信息
46
+        if (positions.length < 1) return "";
47
+        String positionId = positions[0].replace("P_", "");
48
+        String positionIdUserIds = organization.getAllUserFromPosition(positionId, HorizonCore.TENANT_IDENTIFIER.value());
49
+        if (!StringUtil.hasValue(positionId)) return "";
50
+        List<Map<String, String>> userByIDs = organization.getUserByIDs(positionIdUserIds.split(";"), HorizonCore.TENANT_IDENTIFIER.value());
51
+        //获取流程创建人id
52
+        String creator = getRunningdata().getWork().getCreator();
53
+        //根据用户id获取用户信息
54
+        Map<String,String> userMap  = organization.getUserById(creator, HorizonCore.TENANT_IDENTIFIER.value());
55
+        String deptId = userMap.get("dept_id");
56
+        //循环群组里用户的id
57
+        for (Map<String, String> user : userByIDs) {
58
+            if (user.get("dept_id").equals(deptId)) {
59
+                return user.get("id") + "/P_" + positionId;
60
+            }
61
+        }
62
+        return "";
63
+    }
64
+
65
+    private String getUserBySameDeptAndGroup(String groups[]) {
66
+        OrganizationAdapter organization = new OrganizationAdapter();
67
+
68
+        //获取群组下的所有用户信息
69
+        if (groups.length < 1) return "";
70
+        String groupId = groups[0].replace("G_", "");
71
+        String groupUserIds = organization.getAllUserFromGroup(groupId, HorizonCore.TENANT_IDENTIFIER.value());
72
+        if (!StringUtil.hasValue(groupUserIds)) return "";
73
+        List<Map<String, String>> userByIDs = organization.getUserByIDs(groupUserIds.split(";"), HorizonCore.TENANT_IDENTIFIER.value());
74
+        //获取流程创建人id
75
+        String creator = getRunningdata().getWork().getCreator();
76
+        //根据用户id获取用户信息
77
+        Map<String,String> userMap  = organization.getUserById(creator, HorizonCore.TENANT_IDENTIFIER.value());
78
+        String deptId = userMap.get("dept_id");
79
+        for (Map<String, String> user : userByIDs) {
80
+            if (user.get("dept_id").equals(deptId)) {
81
+                return user.get("id") + "/G_" + groupId;
82
+            }
83
+        }
84
+        return "";
85
+    }
86
+
87
+
88
+}

+ 31
- 0
src/main/java/com/horizon/custom/GroupOrPositionCreatorByFDept.java 查看文件

@@ -0,0 +1,31 @@
1
+package com.horizon.custom;
2
+
3
+import com.horizon.wf.core.rule.BaseRuleImpl;
4
+import com.horizon.wf.core.rule.IBaseRule;
5
+import com.horizon.wf.definition.pub.IFlowNode;
6
+import com.horizon.wf.global.StaticVarExtend;
7
+
8
+/**
9
+ * 根据组织机构里的群组或者岗位,与流程创建者做交集
10
+ * com.horizon.custom.GroupOrPositionCreator
11
+ */
12
+public class GroupOrPositionCreatorByFDept extends BaseRuleImpl implements IBaseRule {
13
+    @Override
14
+    public boolean executeRule() {
15
+        // 3. 获取办理人的节点定义对象
16
+        IFlowNode flowNode = (IFlowNode) getParameter(StaticVarExtend.Parameter_CustomeUser_IFlowNode);
17
+        // 获取主办中设置的id
18
+        String groups[] = flowNode.getParticipantsUserList().get(1).getGroup().split(";");
19
+        String positions[] = flowNode.getParticipantsUserList().get(1).getPosition().split(";");
20
+        // 5. 获取的办理人返回
21
+        String userId = "";
22
+        // 获取流程创建人id
23
+        String creator = getRunningdata().getWork().getCreator();
24
+        // 获取群组与用户所属部门交集
25
+        userId += GroupOrPositionUtil.getUserBySameFDeptAndFOrg(groups, creator) + ";";
26
+        // 获取岗位与用户所属部门交集
27
+        userId += GroupOrPositionUtil.getUserBySameFDeptAndFOrg(positions, creator) + ";";
28
+        setResult(userId);
29
+        return true;
30
+    }
31
+}

+ 9
- 60
src/main/java/com/horizon/custom/GroupOrPositionToDoUser.java 查看文件

@@ -1,21 +1,11 @@
1 1
 package com.horizon.custom;
2 2
 
3 3
 import com.horizon.core.HorizonCore;
4
-import com.horizon.core.tree.TreeModel;
5
-import com.horizon.core.tree.TreeNode;
6
-import com.horizon.third.adapter.OrganizationAdapter;
7
-import com.horizon.third.build.OrgDirector;
8
-import com.horizon.third.entity.OrgData;
9
-import com.horizon.utils.StringUtil;
10 4
 import com.horizon.wf.core.rule.BaseRuleImpl;
11 5
 import com.horizon.wf.core.rule.IBaseRule;
12 6
 import com.horizon.wf.definition.pub.IFlowNode;
13 7
 import com.horizon.wf.global.StaticVarExtend;
14 8
 
15
-import java.util.Arrays;
16
-import java.util.List;
17
-import java.util.Map;
18
-
19 9
 /**
20 10
  * 根据组织机构里的群组或者岗位,与当前操作人做交集
21 11
  * com.horizon.custom.GroupOrPositionToDoUser
@@ -23,63 +13,22 @@ import java.util.Map;
23 13
 public class GroupOrPositionToDoUser extends BaseRuleImpl implements IBaseRule {
24 14
     @Override
25 15
     public boolean executeRule() {
26
-        //3. 获取办理人的节点定义对象
16
+        // 3. 获取办理人的节点定义对象
27 17
         IFlowNode flowNode = (IFlowNode) getParameter(StaticVarExtend.Parameter_CustomeUser_IFlowNode);
28
-        //获取主办中设置的id
18
+        // 获取主办中设置的id
29 19
         String groups[] = flowNode.getParticipantsUserList().get(1).getGroup().split(";");
30 20
         String positions[] = flowNode.getParticipantsUserList().get(1).getPosition().split(";");
31
-        //5. 获取的办理人返回
21
+        // 5. 获取的办理人返回
32 22
         String userId = "";
33
-        //获取群组与用户所属部门交集
34
-        if(StringUtil.hasValue(Arrays.toString(groups))){
35
-            userId += getUserBySameDeptAndGroup(groups)+";";
36
-        }
37
-        //获取岗位与用户所属部门交集
38
-        if(StringUtil.hasValue(Arrays.toString(positions))){
39
-            userId += getUserBySameDeptAndPosition(positions)+";";
40
-        }
23
+        // 当前操作人,也就是当前登录用户
24
+        String todoUserId = HorizonCore.USER_ID.value();
25
+        // 获取群组与用户所属部门交集
26
+        userId += GroupOrPositionUtil.getUserBySameDeptAndOrg(groups, todoUserId) + ";";
27
+        // 获取岗位与用户所属部门交集
28
+        userId += GroupOrPositionUtil.getUserBySameDeptAndOrg(positions, todoUserId) + ";";
41 29
         setResult(userId);
42 30
         return true;
43 31
     }
44 32
 
45
-    private String getUserBySameDeptAndPosition(String positions[]) {
46
-        OrganizationAdapter organization = new OrganizationAdapter();
47
-
48
-        //获取岗位下的所有用户信息
49
-        if (positions.length < 1) return "";
50
-        String positionId = positions[0].replace("P_", "");
51
-        String positionIdUserIds = organization.getAllUserFromPosition(positionId, HorizonCore.TENANT_IDENTIFIER.value());
52
-        if (!StringUtil.hasValue(positionIdUserIds)) return "";
53
-        List<Map<String, String>> userByIDs = organization.getUserByIDs(positionIdUserIds.split(";"), HorizonCore.TENANT_IDENTIFIER.value());
54
-
55
-        String deptId = HorizonCore.DEPT_ID.value();
56
-        //循环群组里用户的id
57
-        for (Map<String, String> user : userByIDs) {
58
-            if (user.get("dept_id").equals(deptId)) {
59
-                return user.get("id") + "/P_" + positionId;
60
-            }
61
-        }
62
-        return "";
63
-    }
64
-
65
-    private String getUserBySameDeptAndGroup(String groups[]) {
66
-        OrganizationAdapter organization = new OrganizationAdapter();
67
-
68
-        //获取群组下的所有用户信息
69
-        if (groups.length < 1) return "";
70
-        String groupId = groups[0].replace("G_", "");
71
-        String groupUserIds = organization.getAllUserFromGroup(groupId, HorizonCore.TENANT_IDENTIFIER.value());
72
-        if (!StringUtil.hasValue(groupUserIds)) return "";
73
-        List<Map<String, String>> userByIDs = organization.getUserByIDs(groupUserIds.split(";"), HorizonCore.TENANT_IDENTIFIER.value());
74
-
75
-        String parentDeptId = HorizonCore.DEPT_ID.value();
76
-        for (Map<String, String> user : userByIDs) {
77
-            if (user.get("dept_id").equals(parentDeptId)) {
78
-                return user.get("id") + "/G_" + groupId;
79
-            }
80
-        }
81
-        return "";
82
-    }
83
-
84 33
 
85 34
 }

+ 81
- 0
src/main/java/com/horizon/custom/GroupOrPositionToDoUserBak.java 查看文件

@@ -0,0 +1,81 @@
1
+package com.horizon.custom;
2
+
3
+import com.horizon.core.HorizonCore;
4
+import com.horizon.third.adapter.OrganizationAdapter;
5
+import com.horizon.utils.StringUtil;
6
+import com.horizon.wf.core.rule.BaseRuleImpl;
7
+import com.horizon.wf.core.rule.IBaseRule;
8
+import com.horizon.wf.definition.pub.IFlowNode;
9
+import com.horizon.wf.global.StaticVarExtend;
10
+
11
+import java.util.Arrays;
12
+import java.util.List;
13
+import java.util.Map;
14
+
15
+/**
16
+ * 根据组织机构里的群组或者岗位,与当前操作人做交集
17
+ * com.horizon.custom.GroupOrPositionToDoUser
18
+ */
19
+public class GroupOrPositionToDoUserBak extends BaseRuleImpl implements IBaseRule {
20
+    @Override
21
+    public boolean executeRule() {
22
+        //3. 获取办理人的节点定义对象
23
+        IFlowNode flowNode = (IFlowNode) getParameter(StaticVarExtend.Parameter_CustomeUser_IFlowNode);
24
+        //获取主办中设置的id
25
+        String groups[] = flowNode.getParticipantsUserList().get(1).getGroup().split(";");
26
+        String positions[] = flowNode.getParticipantsUserList().get(1).getPosition().split(";");
27
+        //5. 获取的办理人返回
28
+        String userId = "";
29
+        //获取群组与用户所属部门交集
30
+        if(StringUtil.hasValue(Arrays.toString(groups))){
31
+            userId += getUserBySameDeptAndGroup(groups)+";";
32
+        }
33
+        //获取岗位与用户所属部门交集
34
+        if(StringUtil.hasValue(Arrays.toString(positions))){
35
+            userId += getUserBySameDeptAndPosition(positions)+";";
36
+        }
37
+        setResult(userId);
38
+        return true;
39
+    }
40
+
41
+    private String getUserBySameDeptAndPosition(String positions[]) {
42
+        OrganizationAdapter organization = new OrganizationAdapter();
43
+
44
+        //获取岗位下的所有用户信息
45
+        if (positions.length < 1) return "";
46
+        String positionId = positions[0].replace("P_", "");
47
+        String positionIdUserIds = organization.getAllUserFromPosition(positionId, HorizonCore.TENANT_IDENTIFIER.value());
48
+        if (!StringUtil.hasValue(positionIdUserIds)) return "";
49
+        List<Map<String, String>> userByIDs = organization.getUserByIDs(positionIdUserIds.split(";"), HorizonCore.TENANT_IDENTIFIER.value());
50
+
51
+        String deptId = HorizonCore.DEPT_ID.value();
52
+        //循环群组里用户的id
53
+        for (Map<String, String> user : userByIDs) {
54
+            if (user.get("dept_id").equals(deptId)) {
55
+                return user.get("id") + "/P_" + positionId;
56
+            }
57
+        }
58
+        return "";
59
+    }
60
+
61
+    private String getUserBySameDeptAndGroup(String groups[]) {
62
+        OrganizationAdapter organization = new OrganizationAdapter();
63
+
64
+        //获取群组下的所有用户信息
65
+        if (groups.length < 1) return "";
66
+        String groupId = groups[0].replace("G_", "");
67
+        String groupUserIds = organization.getAllUserFromGroup(groupId, HorizonCore.TENANT_IDENTIFIER.value());
68
+        if (!StringUtil.hasValue(groupUserIds)) return "";
69
+        List<Map<String, String>> userByIDs = organization.getUserByIDs(groupUserIds.split(";"), HorizonCore.TENANT_IDENTIFIER.value());
70
+
71
+        String parentDeptId = HorizonCore.DEPT_ID.value();
72
+        for (Map<String, String> user : userByIDs) {
73
+            if (user.get("dept_id").equals(parentDeptId)) {
74
+                return user.get("id") + "/G_" + groupId;
75
+            }
76
+        }
77
+        return "";
78
+    }
79
+
80
+
81
+}

+ 125
- 0
src/main/java/com/horizon/custom/GroupOrPositionUtil.java 查看文件

@@ -0,0 +1,125 @@
1
+package com.horizon.custom;
2
+
3
+import com.horizon.common.collect.Lists;
4
+import com.horizon.core.HorizonCore;
5
+import com.horizon.db.Access;
6
+import com.horizon.third.adapter.OrganizationAdapter;
7
+import com.horizon.utils.StringUtil;
8
+import org.slf4j.Logger;
9
+import org.slf4j.LoggerFactory;
10
+
11
+import java.util.List;
12
+import java.util.Map;
13
+
14
+/**
15
+ * @Author: yangff  2025/4/23
16
+ */
17
+public class GroupOrPositionUtil {
18
+
19
+    private static final Logger LOGGER = LoggerFactory.getLogger(GroupOrPositionUtil.class);
20
+
21
+    /**
22
+     * 获取userid所属部门,与设置的群组/岗位 下的人同部门的用户
23
+     *
24
+     * @param orgIds
25
+     * @param userId
26
+     * @return
27
+     */
28
+    public static String getUserBySameFDeptAndFOrg(String orgIds[], String userId) {
29
+        OrganizationAdapter organization = new OrganizationAdapter();
30
+        // 最终办理人用户id
31
+        String userIds = "";
32
+        // 获取群组下的所有用户信息
33
+        if (orgIds.length < 1) return "";
34
+        for (String orgId : orgIds) {
35
+            String orgUserIds = "";
36
+            // 获取群组下的所有用户id
37
+            if (orgId.contains("G_")) {
38
+                orgUserIds = organization.getAllUserFromGroup(orgId.replace("G_", ""), HorizonCore.TENANT_IDENTIFIER.value());
39
+            } else if (orgId.contains("P_")) {
40
+                orgUserIds = organization.getAllUserFromPosition(orgId.replace("P_", ""), HorizonCore.TENANT_IDENTIFIER.value());
41
+            }
42
+            if (!StringUtil.hasValue(orgUserIds)) return "";
43
+            // 根据多个用户id,获取用户信息
44
+            List<Map<String, String>> userByIDs = organization.getUserByIDs(orgUserIds.split(";"), HorizonCore.TENANT_IDENTIFIER.value());
45
+            // 根据userid获取用户信息
46
+            Map<String, String> userMap = organization.getUserById(userId, HorizonCore.TENANT_IDENTIFIER.value());
47
+            String deptId = userMap.get("dept_id");
48
+            String fDeptId =  GroupOrPositionUtil.queryFDept(deptId);
49
+
50
+            // 对比用户所属部门,如果相同,则添加到userIds中
51
+            for (Map<String, String> user : userByIDs) {
52
+                String fDeptIdTmp =  GroupOrPositionUtil.queryFDept(user.get("dept_id"));
53
+                if (fDeptIdTmp.equals(fDeptId)) {
54
+                    userIds += user.get("id") + "/" + orgId + ";";
55
+                    LOGGER.info("获取到{}里同步人员id:{}", orgId, user.get("id"));
56
+                }
57
+            }
58
+        }
59
+        return userIds;
60
+    }
61
+
62
+
63
+
64
+    /**
65
+     * 获取userid所属部门,与设置的群组/岗位 下的人同部门的用户
66
+     *
67
+     * @param orgIds
68
+     * @param userId
69
+     * @return
70
+     */
71
+    public static String getUserBySameDeptAndOrg(String orgIds[], String userId) {
72
+        OrganizationAdapter organization = new OrganizationAdapter();
73
+        // 最终办理人用户id
74
+        String userIds = "";
75
+        // 获取群组下的所有用户信息
76
+        if (orgIds.length < 1) return "";
77
+        for (String orgId : orgIds) {
78
+            String orgUserIds = "";
79
+            // 获取群组下的所有用户id
80
+            if (orgId.contains("G_")) {
81
+                orgUserIds = organization.getAllUserFromGroup(orgId.replace("G_", ""), HorizonCore.TENANT_IDENTIFIER.value());
82
+            } else if (orgId.contains("P_")) {
83
+                orgUserIds = organization.getAllUserFromPosition(orgId.replace("P_", ""), HorizonCore.TENANT_IDENTIFIER.value());
84
+            }
85
+            if (!StringUtil.hasValue(orgUserIds)) return "";
86
+            // 根据多个用户id,获取用户信息
87
+            List<Map<String, String>> userByIDs = organization.getUserByIDs(orgUserIds.split(";"), HorizonCore.TENANT_IDENTIFIER.value());
88
+            // 根据userid获取用户信息
89
+            Map<String, String> userMap = organization.getUserById(userId, HorizonCore.TENANT_IDENTIFIER.value());
90
+            String deptId = userMap.get("dept_id");
91
+            // 对比用户所属部门,如果相同,则添加到userIds中
92
+            for (Map<String, String> user : userByIDs) {
93
+                if (user.get("dept_id").equals(deptId)) {
94
+                    userIds += user.get("id") + "/" + orgId + ";";
95
+                    LOGGER.info("获取到{}里同步人员id:{}", orgId, user.get("id"));
96
+                }
97
+            }
98
+        }
99
+        return userIds;
100
+    }
101
+
102
+    public static String queryFDept(String deptId){
103
+        // 机关部门,不取父ID,直接返回
104
+        if(deptId.startsWith("D0101")){
105
+            return deptId;
106
+        }
107
+        //D0110  D011003 质计中心
108
+        //D0101  D010101机关
109
+        String dbIdentifier = "jl_sgiip";
110
+        // 查询当前人所在部门的父部门D1101
111
+        String queryFDeptSql = "SELECT * from JLOPAPUSER.SYS_DEPARTMENT where ID = ?";
112
+        List<String> list = Lists.newArrayList();
113
+        // 参数传递
114
+        list.add(deptId);
115
+        Map resmap = Access.getSingleMap(queryFDeptSql, list, dbIdentifier);
116
+
117
+
118
+        String fDeptId = (String) resmap.get("f_id");
119
+
120
+        if(fDeptId.length() > 4){
121
+            fDeptId = fDeptId.substring(0, 5); // 截取前5位
122
+        }
123
+        return fDeptId;
124
+    }
125
+}

+ 13
- 5
src/main/java/com/horizon/org/OrgBuilderImpl.java 查看文件

@@ -23,9 +23,17 @@ public class OrgBuilderImpl extends OrgBuilder {
23 23
 //        String deptsql = "select id,dept_code,dept_name,parent_id,order_no from to_horizon_dept where  id!='root_node_id' order by order_no";
24 24
 
25 25
         String deptsql = "";
26
-        deptsql += " select d.id,d.dept_code,d.dept_name, ( select a.id from JLOPAPUSER.sys_department a where a.dept_code = d.f_id and a.cancel_flag = '0' ) as parent_id  ,";
27
-        deptsql += " 'D' as type ,0 as order_no ";
28
-        deptsql += " from JLOPAPUSER.sys_department d where d.cancel_flag = '0' and  d.dept_code!='D' ";
26
+        deptsql += " select d.id, d.dept_code, d.dept_name, a.id as parent_id, ";
27
+        deptsql += " 'D' as type, 0 as order_no ";
28
+        deptsql += " from JLOPAPUSER.sys_department d ";
29
+        deptsql += " left join JLOPAPUSER.sys_department a ";
30
+        deptsql += " on a.dept_code = d.f_id and a.cancel_flag = '0' ";
31
+        deptsql += " where d.cancel_flag = '0' and d.dept_code != 'D' ";
32
+
33
+//        String deptsql = "";
34
+//        deptsql += " select d.id,d.dept_code,d.dept_name, ( select a.id from JLOPAPUSER.sys_department a where a.dept_code = d.f_id and a.cancel_flag = '0' ) as parent_id  ,";
35
+//        deptsql += " 'D' as type ,0 as order_no ";
36
+//        deptsql += " from JLOPAPUSER.sys_department d where d.cancel_flag = '0' and  d.dept_code!='D' ";
29 37
 
30 38
 
31 39
         List<Map<String, Object>> deptmap = Access.getMultiMap(deptsql, null, dbIdentifier);
@@ -75,7 +83,7 @@ public class OrgBuilderImpl extends OrgBuilder {
75 83
 //        String usersql = "select u.id,u.login_name,u.name,tor.dept_id from to_horizon_user u,tor_horizon_user_dept tor where u.id = tor.user_id";
76 84
 //        String usersql = "select u.id,u.user_name as login_name,u.user_desc,tor.dept_id from JLOPAPUSER.sys_user u,JLOPAPUSER.sys_user_department tor where u.id = tor.user_id";
77 85
         String usersql = "";
78
-        usersql += "  SELECT u.id,u.user_name as LOGIN_NAME,u.user_desc as NAME,tor.DEPT_ID ,'' as type FROM JLOPAPUSER.sys_user u,JLOPAPUSER.sys_user_department tor WHERE u.ID = tor.USER_ID";
86
+        usersql += "  SELECT u.id,u.user_name as LOGIN_NAME,u.user_desc as NAME,tor.DEPT_ID ,'' as type FROM JLOPAPUSER.sys_user u,JLOPAPUSER.sys_user_department tor WHERE u.ID = tor.USER_ID  AND u.cancel_flag = '0' AND tor.cancel_flag = '0'";
79 87
         usersql += "  union all";
80 88
         usersql += " select '1' as id ,'admin' as login_name  ,'超级管理员' as NAME ,'0' as DEPT_ID  ,'' as type from dual";
81 89
 
@@ -282,7 +290,7 @@ public class OrgBuilderImpl extends OrgBuilder {
282 290
 //        String sql="SELECT u.id,u.LOGIN_NAME,'F;D' as type,u.NAME,tor.DEPT_ID FROM TO_HORIZON_USER u,TOR_HORIZON_USER_DEPT tor WHERE u.ID = tor.USER_ID";
283 291
 
284 292
         String sql = "";
285
-        sql += "  SELECT u.id,u.user_name as LOGIN_NAME,u.user_desc as NAME,tor.DEPT_ID ,'' as type FROM JLOPAPUSER.sys_user u,JLOPAPUSER.sys_user_department tor WHERE u.ID = tor.USER_ID";
293
+        sql += "  SELECT u.id,u.user_name as LOGIN_NAME,u.user_desc as NAME,tor.DEPT_ID ,'' as type FROM JLOPAPUSER.sys_user u,JLOPAPUSER.sys_user_department tor WHERE u.ID = tor.USER_ID AND u.cancel_flag = '0' AND tor.cancel_flag = '0'";
286 294
         sql += "  union all";
287 295
         sql += " select '1' as id ,'admin' as login_name  ,'超级管理员' as NAME ,'0' as DEPT_ID  ,'' as type from dual";
288 296
 

+ 16
- 13
src/main/java/com/horizon/wf/util/PushWorkflowToPortal.java 查看文件

@@ -94,6 +94,8 @@ public class PushWorkflowToPortal {
94 94
                     jsonObject.put("startUserId", creator);
95 95
                     jsonObject.put("startTime", startTime);
96 96
                     jsonObject.put("nextUserId", nextUserId);
97
+                    // 业务类型:工作流业务默认为1
98
+                    jsonObject.put("businessType", "1");
97 99
                     jsonObject.put("toWebPath", "/workflow/detail");
98 100
 
99 101
                     JSONObject businessParam = new JSONObject();
@@ -103,6 +105,7 @@ public class PushWorkflowToPortal {
103 105
                     businessParam.put("trackId", trackId);
104 106
                     businessParam.put("subjectionId", subjectionId);
105 107
                     businessParam.put("nodeId", nodeId);
108
+                    businessParam.put("nodeName", nodeName);
106 109
                     businessParam.put("type", "3");
107 110
                     jsonObject.put("businessParam", businessParam.toJSONString());
108 111
 
@@ -162,19 +165,19 @@ public class PushWorkflowToPortal {
162 165
                             String todoDetailUrl;
163 166
                             String todoDetailUrlMobile;
164 167
                             if(subjectionId != null && !subjectionId.isEmpty()){
165
-                                 todoDetailUrl = "http://10.198.1.15/#/workflow/detail?userId="
168
+                                todoDetailUrl = "http://10.198.1.15/#/workflow/detail?userId="
166 169
                                         + nextUserId + "&from=oa&workId=" + workId + "&trackId="
167 170
                                         + trackId + "&flowId=" + flowId + "&subjectionId=" + subjectionId;
168 171
 
169
-                                 todoDetailUrlMobile = "https://jlwuliu.shansteelgroup.com/h5/workflow?userId="
172
+                                todoDetailUrlMobile = "https://jlwuliu.shansteelgroup.com/h5/workflow?userId="
170 173
                                         + nextUserId + "&workId=" + workId + "&trackId="
171 174
                                         + trackId + "&flowId=" + flowId + "&subjectionId=" + subjectionId;
172 175
                             }else {
173
-                                 todoDetailUrl = "http://10.198.1.15/#/workflow/detail?userId="
176
+                                todoDetailUrl = "http://10.198.1.15/#/workflow/detail?userId="
174 177
                                         + nextUserId + "&from=oa&workId=" + workId + "&trackId="
175 178
                                         + trackId + "&flowId=" + flowId;
176 179
 
177
-                                 todoDetailUrlMobile = "https://jlwuliu.shansteelgroup.com/h5/workflow?userId="
180
+                                todoDetailUrlMobile = "https://jlwuliu.shansteelgroup.com/h5/workflow?userId="
178 181
                                         + nextUserId + "&workId=" + workId + "&trackId="
179 182
                                         + trackId + "&flowId=" + flowId ;
180 183
                             }
@@ -282,18 +285,17 @@ public class PushWorkflowToPortal {
282 285
                 for(int index = 0; index < insertFields.length; index++){
283 286
                     insertTodo.put(insertFields[index], insertParas.getString(index));
284 287
                 }
285
-                //{AGENT_ID=-null-, SENDUSERNAME=李泰, SUBJECTION_TYPE=D, ISAGENT=0, PRIORITY=0,
286
-                // FLOWID=Test, NODEID=Node2, FLOWNAME=测试流程, AUTH_ID=D56A1065B85242908BB025B7C91B0B62,
287
-                // DOTIME=null, STATUS=Author, WORKID=HZ90e9939623dbe7019623dc18680005,
288
-                // SENDTIME=2025-04-11 15:59:34, ID=HZ90e9939623dbe7019623dc7d980019,
289
-                // STATUS_NO=101, WORKVER=2, TRACKACTIVE=1, SUBJECTIONNAME=, TRACKID=HZ90e9939623dbe7019623dc18680006,
290
-                // SENDUSERID=2, ISACTIVE=1, TRACKSTATUS=110, ISCLAIM=0, NODENAME=经理审批, SENDSUBJECTIONNAME=,
291
-                // LIMITTIME=0(天), TITLE=测试流程,请办理., SENDSUBJECTIONID=3, SUBJECTION_ID=2, SENDSUBJECTIONTYPE=D}
288
+
292 289
                 String status = insertTodo.get("STATUS"); //Author主办
293 290
                 String statusNo = insertTodo.get("STATUS_NO"); //Author主办
294 291
                 String authId = insertTodo.get("AUTH_ID"); //办理人id
295 292
                 // String agentId = insertTodo.get("AGENT_ID"); //代办人id
296
-                Map<String, String> author = organizationAdapter.getUserById(authId, paraBean.getFlowIdentifier());
293
+                Map<String, String> author = null;
294
+                try {
295
+                    author = organizationAdapter.getUserById(authId, paraBean.getFlowIdentifier());
296
+                }catch (Exception e){
297
+                    continue;
298
+                }
297 299
                 String authName = author.get("name"); //办理人姓名
298 300
                 String authLoginName = author.get("login_name"); //办理人账号
299 301
                 String sendUserName = insertTodo.get("SENDUSERNAME");
@@ -337,7 +339,8 @@ public class PushWorkflowToPortal {
337 339
                 map.put("id", id);
338 340
                 insertSaveMap.put(id, map);
339 341
 
340
-            } else if(sqlType.equals("UPDATE")&&flag.equals("DONE")){ //待办变已办
342
+            }
343
+            else if(sqlType.equals("UPDATE")&&flag.equals("DONE")){ //待办变已办
341 344
                 JSONArray todoIds = currentItem.getJSONArray("WherePara");
342 345
                 String workId = paraBean.getWorkId(); //workid
343 346
                 String[] setFields = currentItem.getString("SetFields").substring(1, currentItem.getString("SetFields").length()-1).split(",");

+ 1
- 1
src/main/resources/workflow-conf/workflow-context.xml 查看文件

@@ -141,7 +141,7 @@
141 141
 <!--	</bean>-->
142 142
 	<!-- 组织机构实现-->
143 143
 	<bean id="workflowAdapterFactory" class="com.horizon.third.init.WorkflowAdapterFactory">
144
-		<property name="organizationBuilder" value="com.horizon.org.OrgBuilderImplSgiip"/>
144
+		<property name="organizationBuilder" value="com.horizon.org.OrgBuilderImpl"/>
145 145
 	</bean>
146 146
 
147 147
 	<!-- 流程外部表单 -->

正在加载...
取消
保存