跳至主要內容

流程引擎

zhangjin大约 5 分钟使用指南

前言

服务端使用 Java + activiti7 实现,我们抽离了所有的与流程相关的业务。将系统对接以最大形式简单化。使用我们的服务只需要下面的两步:

  1. 对接 组织架构
  2. 启动服务

注意

目前只开源了流程设计器,服务端需自行实现。
也可以使用我们的配套服务端实现,联系我们进行 授权

技术栈

  • jdk17
  • springboot
  • activiti7
  • mybatis-plus

快速启动

方式 1: 源码打包

# 1. 项目授权后,获取源码自行打包。
nvm package

# 2. 在jar的同级目录创建 config 文件夹,创建文件 appliaction.yml 配置文件,修改下面的配置
# 数据库配置
spring:
  datasource:
    url: jdbc:mysql://192.168.1.44:3306/flow?useUnicode=true&characterEncoding=utf8&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
    username: root
    password: root
# 文件存储配置
flow:
  max-file-size: 100
  max-request-size: 100
  ignore-auth-url:  # 配置无需鉴权的接口
    - /opentest/**
  organ-api:  # 配置组织架构服务所在地址
    name: base-service
    path: orgApi
    url: http://192.168.1.100:8080
  file-storage-strategy: aliyun_oss # 文件策略,本地(local)或者阿里云(aliyun_oss)
  local-storage: # 文件本地策略必填
    file-path: E:/rv/xiaojv/flow.backend/tmp
  aliyun-oss: # 阿里云策略必填
    folder: flow/
    access-key-id: access-key-id
    access-key-secret: access-key-secret
    endpoint: oss-cn-shanghai.aliyuncs.com
    bucket-name: bucket-flow

# 3. 启动项目,项目启动后配合我们开源前端就能使用完整的审批的功能了。
java -jar flow-1.0.1.jar

方式 2: 获取可运行 jar 包

# 修改 appliaction.yml 配置文件
# 启动项目
java -jar flow-1.0.1.jar

提示

项目中使用 mysql 数据库,系统启动后会自行创建所有的表。

系统对接

用户组织接口

组织服务提供下面的接口,在上述配置文件中配置组织服务地址即可。

public interface OrganApiService {
    /**
     * 用户认证
     *
     * @param tenantId 租户id
     * @param token
     * @return
     */
    @GetMapping("/authentication")
    public User authentication(@RequestParam("tenantId") String tenantId, @RequestParam("token") String token);

    /**
     * 获取上级id
     *
     * @param tenantId  租户id
     * @param userId    用户id
     * @param layerType 层级类型
     * @param level     层级
     * @return userId
     */
    @GetMapping("/getSuperior")
    public String getSuperior(@RequestParam("tenantId") String tenantId, @RequestParam("userId") String userId,
            @RequestParam("layerType") int layerType, @RequestParam("level") int level);

    /**
     * 获取部门领导id
     *
     * @param tenantId  租户id
     * @param userId    用户id
     * @param layerType 层级类型
     * @param level     层级
     * @return userId
     */
    @GetMapping("/getDeptLeader")
    public String getDeptLeader(@RequestParam("tenantId") String tenantId, @RequestParam("userId") String userId,
            @RequestParam("layerType") int layerType, @RequestParam("level") int level);

    /**
     * 获取多层级上级id列表
     *
     * @param tenantId  租户id
     * @param userId    用户id
     * @param layerType 层级类型
     * @param level     层级
     * @return list<userId>
     */
    @GetMapping("/getMultiLayerSuperior")
    public List<String> getMultiLayerSuperior(@RequestParam("tenantId") String tenantId,
            @RequestParam("userId") String userId, @RequestParam("layerType") int layerType,
            @RequestParam("level") int level);

    /**
     * 获取多层级部门领导id列表
     *
     * @param tenantId  租户id
     * @param userId    用户id
     * @param layerType 层级类型
     * @param level     层级
     * @return list<userId>
     */
    @GetMapping("/getMultiLayerDeptLeader")
    public List<String> getMultiLayerDeptLeader(@RequestParam("tenantId") String tenantId,
            @RequestParam("userId") String userId, @RequestParam("layerType") int layerType,
            @RequestParam("level") int level);

    /**
     * 获取所有的角色
     *
     * @param tenantId 租户id
     * @return
     */
    @GetMapping("/listRoles")
    public List<Role> listRoles(@RequestParam("tenantId") String tenantId);

    /**
     * 获取所有的用户
     *
     * @param tenantId 租户id
     * @return
     */
    @GetMapping("/listUsers")
    public List<User> listUsers(@RequestParam("tenantId") String tenantId);

    /**
     * 获取所有的部门
     *
     * @param tenantId 租户id
     * @return
     */
    @GetMapping("/listDepts")
    public List<Dept> listDepts(@RequestParam("tenantId") String tenantId);

    /**
     * 根据id获取用户
     *
     * @param tenantId 租户id
     * @param userId   用户id
     * @return
     */
    @GetMapping("/getUserById")
    public User getUserById(@RequestParam("tenantId") String tenantId, @RequestParam("userId") String userId);

    /**
     * 根据id获取部门
     *
     * @param tenantId 租户id
     * @param deptId   部门id
     * @return
     */
    @GetMapping("/getDeptById")
    public Dept getDeptById(@RequestParam("tenantId") String tenantId, @RequestParam("deptId") String deptId);

    /**
     * 获取用户详情
     *
     * @param tenantId 租户id
     * @param userId   用户id
     * @return
     */
    @GetMapping("/getUserDetailById")
    public UserDetail getUserDetailById(@RequestParam("tenantId") String tenantId,
            @RequestParam("userId") String userId);

    /**
     * 根据id列表查询用户
     *
     * @param tenantId 租户id
     * @param userIds  用户id列表
     * @return
     */
    @GetMapping("/listUserByIds")
    public List<User> listUserByIds(@RequestParam("tenantId") String tenantId, List<String> userIds);

    /**
     * 获取用户角色id列表
     *
     * @param tenantId 租户id
     * @param userId   用户id
     * @return list<roleId>
     */
    @GetMapping("/listUserRoleIds")
    public List<String> listUserRoleIds(@RequestParam("tenantId") String tenantId,
            @RequestParam("userId") String userId);

    /**
     * 获取用户部门id列表
     *
     * @param tenantId 租户id
     * @param userId   用户id
     * @return list<deptId>
     */
    @GetMapping("/listUserDeptIds")
    public List<String> listUserDeptIds(@RequestParam("tenantId") String tenantId,
            @RequestParam("userId") String userId);

    /**
     * 根据角色id查询所有的用户id
     *
     * @param tenantId 租户id
     * @param roleId   角色id
     * @return list<userId>
     */
    @GetMapping("/listUserIdsByRoleId")
    public List<String> listUserIdsByRoleId(@RequestParam("tenantId") String tenantId,
            @RequestParam("roleId") String roleId);

    /**
     * 判断用户是否属于部门
     *
     * @param tenantId 租户id
     * @param userId   用户id
     * @param deptIds  部门id列表
     * @return true/false
     */
    @GetMapping("/inDept")
    public boolean inDept(@RequestParam("tenantId") String tenantId, @RequestParam("userId") String userId,
            @RequestParam("deptIds") List<String> deptIds);

    /**
     * 判断用户是否拥有角色
     *
     * @param tenantId 租户id
     * @param userId   用户id
     * @param roleIds  角色id列表
     * @return true/false
     */
    @GetMapping("/hasRole")
    public boolean hasRole(@RequestParam("tenantId") String tenantId, @RequestParam("userId") String userId,
            @RequestParam("roleIds") List<String> roleIds);

    /**
     * 判断用户是否属于组织
     *
     * @param tenantId 租户id
     * @param userId   用户id 用户
     * @param organIds 用户、角色、部门等id
     * @return true/false
     */
    @GetMapping("/belong")
    public boolean belong(@RequestParam("tenantId") String tenantId, @RequestParam("userId") String userId,
            @RequestParam("organIds") List<String> organIds);
}

数据传输对象

// 用户
public class User {
    private String id; // 用户id
    private String name; // 用户姓名
    private String tenantId; // 租户id
}

// 用户详情
public class UserDetail {
    private String id; // 用户id
    private String name; // 用户姓名
    private String email; // 用户邮箱
    private String mobile; // 用户手机
    private String avatar; // 用户头像url
}

// 部门
public class Dept {
    private String pid; // 父id
    private String id; // id
    private String name; // 名称
}

// 角色
public class Role {
    private String id; // 角色id
    private String name; // 角色名称
}

层级枚举

// 层级类型
public enum ELayerType{
    DOWN_TO_UP(0, "自下而上"),
    UP_TO_DOWN(1, "自上而下");

    private final int code;
    private final String desc;
}

// 层级
public enum ELayer {
    LEVEL_1(0, "直属"), //
    LEVEL_2(1, "第二级"), //
    ... // 中间级数省略
    LEVEL_20(19, "第二十级");

    private final int code;
    private final String desc;
}
上次编辑于:
贡献者: zhangjin