流程引擎
大约 5 分钟使用指南
前言
服务端使用 Java
+ activiti7
实现,我们抽离了所有的与流程相关的业务。将系统对接以最大形式简单化。使用我们的服务只需要下面的两步:
注意
目前只开源了流程设计器,服务端需自行实现。
也可以使用我们的配套服务端实现,联系我们进行 授权。
技术栈
- 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;
}