待办列表可以用 taskService.createTaskQuery()
但是已办列表就比较麻烦了。为什么呢?直接查询act_hi_procinst是不行的,已办要查询每个环节是否有当前登录工号处理过的记录,那这个记录是在act_hi_taskinst里的。
方式一:left join (不满足分页要求)
select * from act_hi_procinst left join act_hi_taskinst on ahp.PROC_INST_ID_ =aht.PROC_INST_ID_
这样写是没问题的,但是列表这东西不可能说不分页,一分页,由于它们是一对多的关系,因此就会出现一页中条数变少的问题,这个大家都懂,不懂的去补一下知识。
方式二:mybatis collection子查询 (不满足处理人条件过滤)
collection子查询是先查询主表,再根据主表查询结果再去查子表,因此现在子表act_hi_taskinst要过滤处理人条件,无法实现。
方式三:最终方案
select aa.NAME_ as '当前环节',aa.ASSIGNEE_ as '当前环节处理人',aa.START_TIME_ as '当前环节到达时间' ,aa.end_time_,ahp.*
from act_hi_procinst ahp
left join(
select aht.* from act_hi_taskinst aht where aht.START_TIME_ in(
select max(aht1.START_TIME_) from act_hi_taskinst aht1 where aht1.PROC_INST_ID_ in(
select PROC_INST_ID_ from act_hi_taskinst aht2 where aht2.ASSIGNEE_ ='张三'
)
group by aht1.PROC_INST_ID_
)
) aa on ahp.PROC_INST_ID_ =aa.PROC_INST_ID_
order by aa.START_TIME_ desc;
不是说查询“张三”的已办列表么,怎么有一个李四啊?
正常,张三前一个环节办过,所以这个任务也就算张三的已办了,现在是李四的环节。为什么更好的展示当前流程走到哪个环节了,所以处理人显示的是李四。