activiti查询我的待办任务以及审批
前言
一、查询与我相关的流程
if (StringUtils.equals(type, "0")) {
List<String> relatedMyprocess = basUserInfoMapper.relatedMyprocess(userCode);
}
if (StringUtils.equals(type, "1")) {
//查询所有我待办的流程
List<String> map = basUserInfoMapper.taskCandidate(userCode);
//赋值给返回结果集
List<String> collect = map.stream()
.distinct()
.collect(Collectors.toList());
}
if (StringUtils.equals(type, "2")) {
//查询所有我参与的流程
List<Map<String, Object>> maps = basUserInfoMapper.hisTaskCandidate(userCode);
List<String> collect1 = new ArrayList<>();
//筛选所有我参与未结束的流程
if (ObjectUtils.isNotEmpty(maps)) {
//筛选出所有我参与的进行中的流程
collect1 = maps.stream().filter(a -> a.get("END_TIME_") == null).map(a -> (String) a.get("BUSINESS_KEY_")).distinct().collect(Collectors.toList());
}
}
if (StringUtils.equals(type, "3")) {
//查询所有我发起的流程
List<ProcessInstance> list = processEngine.getRuntimeService().createProcessInstanceQuery().startedBy(userCode).list();
//查询所有我发起的未结束流程
List<String> collect1 = list.stream().map(a -> a.getBusinessKey()).distinct().collect(Collectors.toList());
}
对应的sql
basUserInfoMapper.relatedMyprocess
<select id="relatedMyprocess" resultType="String">
SELECT DISTINCT
a.BUSINESS_KEY_
FROM
ACT_HI_PROCINST a,
(
SELECT DISTINCT
RES.*
FROM
ACT_HI_TASKINST RES
INNER JOIN ACT_HI_IDENTITYLINK HI ON HI.TASK_ID_ = RES.ID_
WHERE
HI.USER_ID_ = #{userId}
OR RES.ASSIGNEE_ = #{userId}
ORDER BY
RES.ID_ ASC
) b
WHERE
a.PROC_INST_ID_ = b.PROC_INST_ID_ or a.START_USER_ID_ = #{userId}
</select>
basUserInfoMapper.taskCandidate
SELECT
a.BUSINESS_KEY_
FROM
ACT_RU_EXECUTION a,
(
SELECT DISTINCT
RES.*
FROM
ACT_RU_TASK RES
INNER JOIN ACT_RU_IDENTITYLINK I ON I.TASK_ID_ = RES.ID_
WHERE
(I.USER_ID_ = #{userId})
ORDER BY
RES.ID_ ASC
) b
WHERE
a.PROC_INST_ID_ = b.PROC_INST_ID_
AND a.BUSINESS_KEY_ IS NOT NULL
basUserInfoMapper.hisTaskCandidate
SELECT
a.*
FROM
ACT_HI_PROCINST a,
(
SELECT DISTINCT
RES.*
FROM
ACT_HI_TASKINST RES
INNER JOIN ACT_HI_IDENTITYLINK HI ON HI.TASK_ID_ = RES.ID_
WHERE
RES.ASSIGNEE_ IS NOT NULL
AND RES.END_TIME_ IS NOT NULL
AND (HI.USER_ID_ = #{userId})
ORDER BY
RES.ID_ ASC
) b
WHERE
a.PROC_INST_ID_ = b.PROC_INST_ID_
二、审批流程
1.流程审批
由于没有给前端提供task_id所以需要前端提供用户账号和businesskey来审批流程、businessKey能够找到proc_inst_id,再加上用户ID就可以在表ACT_RU_IDENTITYLINK中找到task_id
varialbes是流程判断条件即为排他网关那里输入的条件
(String) map.get(“ID_”)为任务ID即为ACT_RU_TASK的id字段的值
记录审批同意、驳回、结束、发起可以使用ACT_HI_TASKINST表中的DESCRIPTION_字段
//设置流程执行所需变量
Map<String, Object> varialbes = new HashMap<>();
//记录审批意见
//如果意见不为空则提交意见
if (StringUtils.isNotEmpty(proposal)) {
taskService.addComment((String) map.get("ID_"), processInstance.getProcessInstanceId(), proposal);
}
varialbes.put("lczt", lczt);
//设置实际审批人
taskService.setAssignee((String) map.get("ID_"), userCode);
taskService.complete((String) map.get("ID_"), varialbes);