摘要
使用工作流的过程中,经常会用到跟踪查看,某个用户已经办理过流程的进度。而Acitiviti5本身没有提供这样的API,所以需要通过自定义SQL查询实现。
1.自定义SQL
SELECT
*
FROM
(SELECT
HiActTable.id_ AS id,
IF( HiActTable.act_name_ in ('End' , 'Exclusive Gateway'),'已结束',HiActTable.act_name_) AS NAME,
HiActTable.start_time_ AS createTime,
HiActTable.assignee_ AS assignee,
HiProcinst.START_USER_ID_ AS applyUser,
HiProcinst.START_TIME_ AS applyTime,
IFNULL(
HiActTable.END_TIME_,
'未结束'
) AS endTime,
HiProcinst.BUSINESS_KEY_ AS businessKey,
HiActTable.proc_inst_id_ AS processInstanceId,
ReProcdef.KEY_ AS processId,
ReProcdef.NAME_ AS processName
FROM
act_hi_actinst HiActTable
LEFT JOIN act_hi_procinst AS HiProcinst
ON HiActTable.PROC_INST_ID_ = HiProcinst.PROC_INST_ID_
LEFT JOIN act_re_procdef AS ReProcdef
ON ReProcdef.ID_ = HiProcinst.PROC_DEF_ID_
WHERE HiActTable.PROC_INST_ID_ IN
(SELECT DISTINCT
PROC_INST_ID_
FROM
act_hi_taskinst
WHERE ASSIGNEE_ = ${userId})
ORDER BY HiActTable.start_time_ DESC) SUB_TABLE_
GROUP BY SUB_TABLE_.processInstanceId
ORDER BY SUB_TABLE_.applyTime DESC ;
2.自定义bean
public class GbHiTaskEntity {
private java.lang.String id;
private java.lang.String name;
private java.lang.String formKey;
private java.lang.String createTime;
private java.lang.String assignee;
private java.lang.String applyUser;
private java.lang.String applyTime;
private java.lang.String endtime;
private java.lang.String processInstanceId;
private java.lang.String processId;
private java.lang.String processName;
private java.lang.String businessKey;
public java.lang.String getId(){
return this.id;
}
public void setId(java.lang.String id){
this.id = id;
}
public java.lang.String getName(){
return this.name;
}
public void setName(java.lang.String name){
this.name = name;
}
public java.lang.String getFormKey(){
return this.formKey;
}
public void setFormKey(java.lang.String formKey){
this.formKey = formKey;
}
public java.lang.String getCreateTime(){
return this.createTime;
}
public void setCreateTime(java.lang.String createTime){
this.createTime = createTime;
}
public java.lang.String getAssignee(){
return this.assignee;
}
public void setAssignee(java.lang.String assignee){
this.assignee = assignee;
}
public java.lang.String getApplyUser(){
return this.applyUser;
}
public void setApplyUser(java.lang.String applyUser){
this.applyUser = applyUser;
}
public java.lang.String getApplyTime(){
return this.applyTime;
}
public void setApplyTime(java.lang.String applyTime){
this.applyTime = applyTime;
}
public java.lang.String getEndtime(){
return this.endtime;
}
public void setEndtime(java.lang.String endtime){
this.endtime = endtime;
}
public java.lang.String getProcessInstanceId(){
return this.processInstanceId;
}
public void setProcessInstanceId(java.lang.String processInstanceId){
this.processInstanceId = processInstanceId;
}
public java.lang.String getProcessId(){
return this.processId;
}
public void setProcessId(java.lang.String processId){
this.processId = processId;
}
public java.lang.String getProcessName(){
return this.processName;
}
public void setProcessName(java.lang.String processName){
this.processName = processName;
}
public java.lang.String getBusinessKey(){
return this.businessKey;
}
public void setBusinessKey(java.lang.String businessKey){
this.businessKey = businessKey;
}
}