介绍

可处理人自定义,通过程序获取人员树

代码案例


package com.je.business.wf;

import com.je.common.base.util.SecurityUserHolder;
import com.je.core.entity.extjs.JSONTreeNode;
import com.je.rbac.model.AssignmentPermission;
import com.je.rbac.rpc.TreatableUserRpcServiceImpl;
import com.je.workflow.model.WorkFlowInfoVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@Service(value = "myWorkFlowGetCustomUserParserService")
public class MyWorkFlowGetCustomUserParserServiceImpl implements MyWorkFlowGetCustomUserParserService {
    @Autowired
    private TreatableUserRpcServiceImpl treatableUserRpcService;

    @Override
    public JSONTreeNode getUsers(WorkFlowInfoVo workFlowInfoVo) {
        //获取当前登录人的唯一id
        String userDeptId = SecurityUserHolder.getCurrentAccount().getDeptId();
        //是否包含当前登录人
        Boolean addOwn = workFlowInfoVo.getAddOwn();
        //是否是多人节点
        Boolean multiple = workFlowInfoVo.getMultiple();
        //业务bean信息
        Map<String, Object> bean = workFlowInfoVo.getBean();
        //当前节点id
        String nodeId = workFlowInfoVo.getNodeId();
        //当前节点名称
        String nodeName = workFlowInfoVo.getNodeName();
        //操作类型 2.2.3版本之后可用
        WorkFlowInfoVo.ExecutionTypeEnum operationId = workFlowInfoVo.getOperationId();

        AssignmentPermission permission = new AssignmentPermission();

        //指定角色展示
        String roleIds = "Ql0RYR3HggRgQ5wap9k";
        JSONTreeNode roleJsonTree = findRoleUsersAndBuildTreeNode(userDeptId, roleIds, permission, true, multiple, addOwn);

        //指定部门展示
        String deptIds = "YEJoxnpY94uE3V4QGjh";
        JSONTreeNode deptJsonTree = findDeptUsersAndBuildTreeNode(userDeptId, deptIds, permission, true, multiple, addOwn);

        //指定人员展示
        List<String> userDeptIds = new ArrayList<>();
        userDeptIds.add("7cf7e4b9a8864354b58c813338ca0e1f");
        userDeptIds.add("e0c50371df6f4aeaae6226985efcfc10");
        JSONTreeNode userJsonTree = findUsersAndBuildTreeNodeByAccountIds(userDeptIds, true, multiple, addOwn);

        //加载组织架构
        JSONTreeNode orgJsonTree = findOrgStructureAndBuildTreeNode(userDeptId, permission, multiple, addOwn);

        List<String> types = new ArrayList<>();
        String starterUser = workFlowInfoVo.getStarterUser(); 2.2.3版本之后可用
        types.add("LOGINED_USER");//当前登录人
        types.add("DIRECT_LEADER");//直接领导
        types.add("DEPT_LEADER");//部门领导
        types.add("DEPT_MONITOR_LEADER");//监管部门领导
        types.add("STARTER_USER");//流程启动人
        types.add("TASK_ASSGINE");//指派人
        types.add("TASK_ASSGINE_HEAD");//指派人直属领导
        types.add("PREV_ASSIGN_USER");//前置任务指派人
        types.add("PREV_ASSIGN_USER_DIRECT_LEADER");//前置任务指派人直接领导
        types.add("DEPT_USERS");//本部门人员
        types.add("DEPT_ALL_USERS");//本部门(包含子部门)人员
        types.add("DEPT_MONITOR_USERS");//监管部门内人员
        types.add("COMPANY_LEADERS");//本公司领导
        types.add("COMPANY_MONITOR_LEADERS");//本公司监管领导
        types.add("SUBSIDIARY");//所在子公司(展示组织结构)
        JSONTreeNode specialJsonTree = findUserToSpecialProcessing(types, userDeptId, "", "",
                starterUser, multiple, addOwn);

        return null;
    }

    /**
     * 指定角色展示
     *
     * @param userDeptId 用户唯一id,参照人员的id,用途 获取参照人信息,比如,获取参照人所在部门人员,获取参照人的直属领导等等
     * @param roleIds    角色id,多个用,号分开
     * @param perm       权限,不能为null
     * @param orgFlag    是否按照公司结构展示
     * @param multiple   是否是多人节点
     * @param addOwn     是否过滤掉当前登录人
     * @return
     */
    private JSONTreeNode findRoleUsersAndBuildTreeNode(String userDeptId, String roleIds, AssignmentPermission perm, Boolean
            orgFlag, Boolean multiple, Boolean addOwn) {
        return treatableUserRpcService.findRoleUsersAndBuildTreeNode(userDeptId, roleIds, perm, orgFlag, multiple, addOwn);
    }


    /**
     * 指定部门展示
     *
     * @param userDeptId 用户唯一id,参照人员的id,用途 获取参照人信息,比如,获取参照人所在部门人员,获取参照人的直属领导等等
     * @param deptIds    部门id,多个用,号分开
     * @param perm       权限,不能为null
     * @param orgFlag    是否按照公司结构展示
     * @param multiple   是否是多人节点
     * @param addOwn     是否过滤掉当前登录人
     * @return
     */
    private JSONTreeNode findDeptUsersAndBuildTreeNode(String userDeptId, String deptIds, AssignmentPermission perm, Boolean
            orgFlag, Boolean multiple, Boolean addOwn) {
        return treatableUserRpcService.findDeptUsersAndBuildTreeNode(userDeptId, deptIds, perm, orgFlag, multiple, addOwn);
    }


    /**
     * 指定人员展示
     *
     * @param userDeptIds 用户唯一id,参照人员的id,用途 获取参照人信息,比如,获取参照人所在部门人员,获取参照人的直属领导等等s
     * @param orgFlag     是否按照公司结构展示
     * @param multiple    是否是多人节点
     * @param addOwn      是否过滤掉当前登录人
     * @return
     */
    private JSONTreeNode findUsersAndBuildTreeNodeByAccountIds(List<String> userDeptIds, Boolean orgFlag, Boolean
            multiple, Boolean addOwn) {
        return treatableUserRpcService.findUsersAndBuildTreeNodeByAccountIds(userDeptIds, orgFlag, multiple, addOwn);
    }

    /**
     * 加载组织架构
     *
     * @param userDeptId 用户唯一id,参照人员的id,用途 获取参照人信息,比如,获取参照人所在部门人员,获取参照人的直属领导等等
     * @param perm       权限,不能为null
     * @param multiple   是否是多人节点
     * @param addOwn     是否过滤掉当前登录人
     * @return
     */
    private JSONTreeNode findOrgStructureAndBuildTreeNode(String userDeptId, AssignmentPermission perm, Boolean
            multiple, Boolean addOwn) {
        return treatableUserRpcService.findOrgStructureAndBuildTreeNode(userDeptId, perm, multiple, addOwn);
    }


    /**
     * 特殊处理
     *
     * @param types             参照以下类型:
     *                          <p>
     *                          LOGINED_USER("当前登录人","1"),
     *                          DIRECT_LEADER("直接领导","2"),
     *                          DEPT_LEADER("部门领导","3"),
     *                          DEPT_MONITOR_LEADER("监管部门领导","4"),
     *                          STARTER_USER("流程启动人","5"),
     *                          TASK_ASSGINE("指派人","6"),
     *                          TASK_ASSGINE_HEAD("指派人直属领导","7"),
     *                          PREV_ASSIGN_USER("前置任务指派人","8"),
     *                          PREV_ASSIGN_USER_DIRECT_LEADER("前置任务指派人直接领导","9"),
     *                          DEPT_USERS("本部门人员","10"),
     *                          DEPT_ALL_USERS("本部门(包含子部门)人员","11"),
     *                          DEPT_MONITOR_USERS("监管部门内人员","12"),
     *                          COMPANY_LEADERS("本公司领导","13"),
     *                          COMPANY_MONITOR_LEADERS("本公司监管领导","14"),
     *                          SUBSIDIARY("所在子公司(展示组织结构)","15")
     *                          <p>
     * @param userDeptId        用户唯一id,用于获取参照人信息,比如获取参照人所在部门人员,获取参照人的直属领导等等
     * @param taskAssigner      任务指派人id上一个节点的提交人
     * @param frontTaskAssigner 前置任务指派人id 上上个节点的提交人
     * @param starterUser       流程启动人
     * @param multiple          是否是多人节点
     * @param addOwn            是否过滤掉当前登录人
     * @return
     */

    private JSONTreeNode findUserToSpecialProcessing(List<String> types, String userDeptId, String taskAssigner, String
            frontTaskAssigner, String starterUser, Boolean multiple, Boolean addOwn) {
        return treatableUserRpcService.findUserToSpecialProcessing(types, userDeptId, taskAssigner, frontTaskAssigner, starterUser, multiple, addOwn);
    }


}


最后编辑: 于春辉  文档更新时间: 2024-11-08 17:00   作者:呼丽华