# 1.产品使用手册
# 1.1.入口说明
# 1.2.功能说明
# 1.2.1.流程管理
流程管理的添加、删除、发布、撤销等操作,都需在第三方认证应用开发列表页中,点击对应应用的【进入控制台】--【流程中心组件】--【流程设计】中进行操作。
1.2.1.1.添加流程
第⑥步不同节点说明: 1、流程节点:
基础信息
节点名称:流程的节点名称信息 审批意见:当前审批节点,审批意见的填写与否的选中。必填,审批时审批意见需填写后才能提交;非必填,审批时审批意见可填写,也可不填写。不显示,审批时,审批意见输入框隐藏;拒绝、退回必填,审批选中拒绝或者退回时必须填写意见。 节点打印:当前节点是否添加打印按钮。 审批类型:单人审批,当前节点只需一个人审批即可完成;会签,多人审批需多人都审批通过;或签,多人审批时,有一人审批完成即可。 审批人甚至:按用户审批,添加要审批的用户信息。按角色审批,添加审批的角色信息;按部门审批,添加审批的部门信息。
权限设置 别名:点击对应别名的编辑按钮,可修改审批按钮的名称。 节点权限,当前节点是否有该按钮权限。 允许刘表操作,当前节点的对应的审批按钮,是否展示在列表页中的操作列中。
业务事件 触发动作:添加触发器,设置触发动作。
超时提醒:设置审批结点的超时提醒配置
2、分支条件,用于设置审批的分支条件信息
第⑦步不同按钮说明:
保存流程图:保存流程但不发布,流程状态属于未发布状态。
保存并发布流程图:保存流程且发布,流程状态属于已发布状态。
1.2.1.2.删除流程
点击待删除流程的删除按钮。流程状态为未发布的才可删除。
1.2.1.3.发布流程
流程状态为未发布的流程,可进行发布操作。发布成功后对应表单自动添加流程。
1.2.1.4.撤销流程
已发布流程,可进行撤销操作。撤销后绑定流程的表单将自动解绑流程。
# 1.2.2 设计流程
1.2.2.1.基础信息
基础信息
节点名称:流程的节点名称信息
审批意见:当前审批节点,审批意见的填写与否的选中。必填,审批时审批意见需填写后才能提交;非必填,审批时审批意见可填写,也可不填写。不显示,审批时,审批意见输入框隐藏;拒绝、退回必填,审批选中拒绝或者退回时必须填写意见。
节点打印:当前节点是否添加打印按钮。
审批类型:单人审批,当前节点只需一个人审批即可完成;会签,多人审批需多人都审批通过;或签,多人审批时,有一人审批完成即可。
审批人甚至:按用户审批,添加要审批的用户信息。按角色审批,添加审批的角色信息;按部门审批,添加审批的部门信息。
1.2.2.2.权限设置
权限设置
别名:点击对应别名的编辑按钮,可修改审批按钮的名称。
节点权限,当前节点是否有该按钮权限。
允许刘表操作,当前节点的对应的审批按钮,是否展示在列表页中的操作列中。
1.2.2.3.业务事件
1.2.2.3.1.触发动作
业务事件
触发动作:添加触发器,设置触发动作。
1.2.2.3.2.超时提醒
超时提醒:设置审批结点的超时提醒配置
# 2.后端集成说明(程洋)
# 2.1.数据库设计
业务表中需要先添加这五个字段,为接入做准备。
PROCESS_INSTANCE_ID
varchar(255) DEFAULT NULL COMMENT '流程实例id',
TASK_ID
varchar(255) DEFAULT NULL COMMENT '任务id',
TASK_NAME
varchar(255) DEFAULT NULL COMMENT '节点名称',
CANDIDATE_USER
varchar(255) DEFAULT NULL COMMENT '候选人员',
CANDIDATE_ROLE
varchar(255) DEFAULT NULL COMMENT '候选角色',
# 2.2.实体类说明
实体类额外加入几个字段
注意:成员变量authority名称不能修改
@TableField(exist = false)
@ApiModelProperty(value = "节点权限", required = false)
private TaskAuthority authority;
/**
* 流程实例id
*/
@TableField(strategy = FieldStrategy.IGNORED)
@ApiModelProperty(value = "流程实例id", required = false)
private String processInstanceId;
/**
* 任务id
*/
@TableField(strategy = FieldStrategy.IGNORED)
@ApiModelProperty(value = "任务id", required = false)
private String taskId;
/**
* 任务名称
*/
@TableField(strategy = FieldStrategy.IGNORED)
@ApiModelProperty(value = "任务名称", required = false)
private String taskName;
/**
* 审批人
*/
@TableField(strategy = FieldStrategy.IGNORED)
@ApiModelProperty(value = "审批人", required = false)
private String candidateUser;
/**
* 审批角色
*/
@TableField(strategy = FieldStrategy.IGNORED)
@ApiModelProperty(value = "审批角色", required = false)
private String candidateRole;
/**
* 审批参数
*/
@TableField(exist = false)
@ApiModelProperty(value = "审批参数", required = false)
private TaskCompleteVo processParam;
# 2.3.能力调用
# 2.3.1.发起流程
2.3.1.1.说明
业务数据接入并发起一条工作流
2.3.1.2.包名方法名
com.bywin.activiti.api.RemoteActivitiService#taskAction
@PostMapping("/workFlow/taskAction")
R<TaskMeta> taskAction(@RequestBody TaskCompleteVo taskCompleteVo);
2.3.1.3.参数说明
需要传递的流程的参数:
procDefKey: 流程唯一标识
action: 0 保存成草稿 9 提交
assigneeList 下一节点审批人
ccList 抄送人员工号
variables 流程分支变量
businessKey 必填 命名格式为 模块缩写:业务id
2.3.1.4.代码实例
//发起流程审批
TaskCompleteVo processParam = tGxxxzxKycgglXshy.getProcessParam();
processParam.setId(tGxxxzxKycgglXshy.getId());
processParam.setBusinessKey("kyxshy:" + tGxxxzxKycgglXshy.getId());
processParam.setCcList(ccList);
Map<String, Object> variables = new HashMap<>();
variables.put("lx", "kyxshy");
processParam.setVariables(variables);
kycgService.taskAction(processParam);
/**
* 审批:1. 通过 2.拒绝 3.撤回 4.退回 5.转发 0.草稿
*/
@Override
public R<String> taskAction(TaskCompleteVo taskCompleteVo) {
TGxxxzxKycgglXshy info = getById(taskCompleteVo.getId());
R<TaskMeta> ret = activitiService.taskAction(taskCompleteVo);
if (ret.getCode() != 0) {
return R.fail(ret.getMsg());
}
// 获取当前节点的审批信息,存储到业务表中
TaskMeta taskMeta = ret.getData();
BeanUtil.copyBeanProp(info, taskMeta);
updateById(info);
return R.ok();
}
# 2.3.2.审批流程
2.3.2.1.说明
审批某条流程:传入对应的参数进行审批,接口返回审批完成后的节点信息(审批人/节点名称等),再将其设置到业务表中进行存储
2.3.2.2.包名方法名
com.bywin.activiti.api.RemoteActivitiService#taskAction
@PostMapping("/workFlow/taskAction")
R<TaskMeta> taskAction(@RequestBody TaskCompleteVo taskCompleteVo);
2.3.2.3.参数说明
需要传递的流程字段:
// 发起: assigneeList action procDefKey ccList variables businessKey startUsername
// 同意/拒绝 id taskId comment assigneeList action
// 撤回 id taskId action
// 退回 id taskId action assigneeList
实体类:
public class TaskCompleteVo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("业务表id")
private Long id;
@ApiModelProperty("任务id")
private String taskId;
@ApiModelProperty("审批意见")
private String comment;
@ApiModelProperty("下一审批人")
private List<String> assigneeList;
@ApiModelProperty("审批动作(1. 通过 2.拒绝 3.撤回 4.退回 5.转发 9.提交 0.保存)")
private Integer action;
@ApiModelProperty("退回到的任务节点")
private String rejectTaskKey;
@ApiModelProperty("流程key")
private String procDefKey;
@ApiModelProperty("抄送列表工号")
private List<String> ccList;
@ApiModelProperty("实例id")
private String processInstanceId;
@ApiModelProperty("转发给的用户职工号")
private String forwardName;
@ApiModelProperty("流程分支变量")
private Map<String, Object> variables;
@ApiModelProperty("工作流查询业务表的标识 格式 标识:业务表id 例 xshy:1")
private String businessKey;
@ApiModelProperty("发起用户工号,不传默认为当前登陆用户")
private String startUsername;
@ApiModelProperty("表单信息")
private DynamicFormVo dynamicFormVo;
@ApiModelProperty("操作人员工号")
private String operUsername;
@ApiModelProperty("是否直接结束")
private Boolean finish;
@ApiModelProperty("是否异步")
private Boolean async;
@ApiModelProperty("异步处理获取数据标识")
private String processingNo;
@ApiModelProperty("当前处理用户")
private LoginUser loginUser;
private Boolean result;
@ApiModelProperty("api应用标识")
private String appKey;
@ApiModelProperty("应用id")
private String clientId;
@ApiModelProperty("电子签章数据")
private ActDynamicFormSignatureVo signature;
}
2.3.2.4.代码实例
/**
* 审批:1. 通过 2.拒绝 3.撤回 4.退回 5.转发 0.草稿
*/
@Override
public R<String> taskAction(TaskCompleteVo taskCompleteVo) {
TGxxxzxKycgglXshy info = getById(taskCompleteVo.getId());
R<TaskMeta> ret = activitiService.taskAction(taskCompleteVo);
if (ret.getCode() != 0) {
return R.fail(ret.getMsg());
}
// 获取当前节点的审批信息,存储到业务表中
TaskMeta taskMeta = ret.getData();
BeanUtil.copyBeanProp(info, taskMeta);
updateById(info);
return R.ok();
}
# 2.3.3.列表查询
2.3.3.1.说明
列表查询
先查询出登陆用户待办已办的流程实例id,再根据任务实例ids在业务表中进行筛选得到列表数据
2.3.3.2.包名方法名
com.bywin.activiti.api.RemoteActivitiService#listYw
/**
* 查询列表
*
* @param params listType: 1.待办 2.已办 3.关于我的 4.我的发起
* params typeName: 流程类型
* params pageNum
* params pageSize
*/
@GetMapping("/workFlow/listYw")
R<List<String>> listYw(@RequestParam Map<String, Object> params);
2.3.3.3.参数说明
listType: 1.待办 2.已办 3.关于我的 4.我的发起
2.3.3.4.代码实例
注解版(推荐)
注意:value = "表源授权申请" 这个值是流程分类名
@WorkFlowList(value = "表源授权申请", authority = false)
@Override
public TableDataInfo<?> authedList(Map<String, Object> params) {
QueryWrapper<TableSourceAuthApply> qw = new QueryWrapper<>();
.in(params.get(FlowConstants.PROCESS_INSTANCE_IDS_FIELD) != null && !((ArrayList) params.get(FlowConstants.PROCESS_INSTANCE_IDS_FIELD)).isEmpty(), "PROCESS_INSTANCE_ID", (ArrayList) params.get(FlowConstants.PROCESS_INSTANCE_IDS_FIELD));
IPage<TableSourceAuthApply> page = page(
new Query<TableSourceAuthApply>().getPage(params),
qw
);
return new TableDataInfo<>(page);
}
普通版(旧版)
params.put("typeName","学术会议审批");
List<TaskListYwVo> taskList = activitiService.listYw(params).getData();
List<String> processInstanceIds = taskList.stream().map(TaskListYwVo::getProcessInstanceId).collect(Collectors.toList());
params.put("processInstanceIds", processInstanceIds);
# 2.3.4.列表查询 带出工作流节点权限
2.3.4.1.说明
列表数据 批量带出每条数据的工作流节点权限
2.3.4.2.包名方法名
无
2.3.4.3.参数说明(实体类字段说明)
public class TaskAuthority implements Serializable {
@ApiModelProperty("审批")
private Boolean canApproval;
@ApiModelProperty("撤回")
private String canChe;
@ApiModelProperty("退回")
private String canTui;
@ApiModelProperty("重新发起")
private String canAgain;
@ApiModelProperty("加签")
private String canAddSign;
@ApiModelProperty("编辑")
private String canEdit;
@ApiModelProperty("转发")
private String canForward;
@ApiModelProperty("抄送")
private String canCc;
@ApiModelProperty("通过")
private String canPass;
@ApiModelProperty("拒绝")
private String canRefuse;
@ApiModelProperty("列表审批")
private String canListApproval;
@ApiModelProperty("是否可以打印,默认为是")
private Boolean print = Boolean.TRUE;
}
2.3.4.4.代码实例
注解版
authority = true
@WorkFlowList(value = "表源授权申请", authority = true)
@Override
public TableDataInfo<?> authedList(Map<String, Object> params) {
QueryWrapper<TableSourceAuthApply> qw = new QueryWrapper<>();
.in(params.get(FlowConstants.PROCESS_INSTANCE_IDS_FIELD) != null && !((ArrayList) params.get(FlowConstants.PROCESS_INSTANCE_IDS_FIELD)).isEmpty(), "PROCESS_INSTANCE_ID", (ArrayList) params.get(FlowConstants.PROCESS_INSTANCE_IDS_FIELD));
IPage<TableSourceAuthApply> page = page(
new Query<TableSourceAuthApply>().getPage(params),
qw
);
return new TableDataInfo<>(page);
}
普通版
# 2.3.5.单条查询 带出工作流节点权限校验
2.3.5.1.说明
查询目前某条数据的节点工作流权限
2.3.5.2.包名方法名
com.bywin.activiti.api.RemoteActivitiService#authority
@PostMapping("/workFlow/authority")
R<TaskAuthority> authority(@RequestParam(FlowConstants.PROCESS_INSTANCE_ID_FIELD) String processInstanceId,
@RequestParam(FlowConstants.KEY_LIST_TYPE) Object listType);
2.3.5.3.参数说明(实体类字段说明)
public class TaskAuthority implements Serializable {
@ApiModelProperty("审批")
private Boolean canApproval;
@ApiModelProperty("撤回")
private String canChe;
@ApiModelProperty("退回")
private String canTui;
@ApiModelProperty("重新发起")
private String canAgain;
@ApiModelProperty("加签")
private String canAddSign;
@ApiModelProperty("编辑")
private String canEdit;
@ApiModelProperty("转发")
private String canForward;
@ApiModelProperty("抄送")
private String canCc;
@ApiModelProperty("通过")
private String canPass;
@ApiModelProperty("拒绝")
private String canRefuse;
@ApiModelProperty("列表审批")
private String canListApproval;
@ApiModelProperty("是否可以打印,默认为是")
private Boolean print = Boolean.TRUE;
}
2.3.5.4.代码实例
TGxxxzxKycgglRjzzqVo info = tGxxxzxKycgglRjzzqService.getRjzzqInfo(id);
R<TaskAuthority> authority = activitiService.authority(info.getProcessInstanceId(), FlowList.ALL.getCode());
if (authority != null) {
TaskAuthority authorityData = authority.getData();
info.setAuthority(authorityData);
} else {
TaskAuthority authorityData = new TaskAuthority();
authorityData.setCanEdit("true");
info.setAuthority(authorityData);
}
return R.ok(info);
# 2.3.6.删除流程数据
2.3.6.1.说明
删除某条工作流
2.3.6.2.包名方法名
com.bywin.activiti.api.RemoteActivitiService#delTask
@PostMapping("/workFlow/delTask")
R<TaskMeta> delTask(@RequestParam(FlowConstants.PROCESS_INSTANCE_ID_FIELD) String processInstanceId);
2.3.6.3.参数说明
processInstanceId 流程示例id
2.3.6.4.代码实例
for (Long id : ids) {
TJwCjglCjbgsq info = getById(id);
activitiService.delTask(info.getProcessInstanceId());
}
# 2.3.7.流程设置本部门筛选
若使用本部门过滤查询,在查询审批人的接口,/chooseAssignee 提交的参数formData需要添加 dept_id,查询角色在该部门下的数据,若提交参数中不存在dept_id,那么当前用户的主部门将会作为本部过滤条件进行查询
例如:
{
"procDefKey": "_3d0c3b07-f652-419d-b2c2-063aef5e38d5",
"formData": {
"dept_id":"17999"
}
}
# 3.前端集成说明(花姐)
3.1.工作流审批弹框
src/components/activiti/ApprovalModal.vue(代码位置)
3.2.工作流审批按钮
src/components/activiti/ApprovalButtons.vue
3.3.工作流审批流程
src/components/activiti/ApprovalProcess.vue
3.4.代码示例
src/components/activiti/ApprovalProcess.vue