示例图如上
首先通过instanceId获取任务进程列表
//通过instancId获取任务进程列表
List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery().processInstanceId(instanceId).list();
通过流遍历列表中的每一个HistoricTaskInstance,如果endTime不为空并且deleteReason为空,说明审批已经结束,可以获取到审批人、审批时间、审批意见和批注。审批意见和批注为创建审批流程图时自定义的表单数据。
否则通过其中的deleteReason来判断用户在这个节点已经撤销审批还是未进行审批。 如果deleteReason为空这表示未审批,否则表示用户撤销。
//遍历列表中每一个元素
list.stream().forEach(hp->{
//endTime不为空且deleteReason为空,此任务节点的审批已经结束
if(hp.getEndTime()!=null && hp.getDeleteReason()==null){
SearchFlowVo searchFlowVo = new SearchFlowVo();
//获取审批节点名称
searchFlowVo.setTitle(hp.getName());
//获取审批时间
searchFlowVo.setEndTime(DateUtils.formatTime(hp.getClaimTime()));
//获取审批人username
searchFlowVo.setUserName(hp.getAssignee());
//获取自定义表的key值
String formKey = hp.getFormKey();
//根据username获取审批人信息
SysUser sysUser = sysUserService.selectUserByUserName(hp.getAssignee());
searchFlowVo.setNickName(sysUser.getNickName());
searchFlowVo.setAvatar(sysUser.getAvatar());
//获取此审批节点开始时间
searchFlowVo.setStartTime(DateUtils.formatTime(hp.getStartTime()));
//通过businessKey和表单key获取表单信息
List<ActWorkflowFormData> actWorkflowFormData = actWorkflowFormDataMapper.selectActWorkflowFormDataByBusinessKeyAndFormKey(businessKey,formKey); //通过表单数据进行意见和批注的填充
actWorkflowFormData.forEach(afd->{
if(afd.getControlName().equals("审批意见"))
searchFlowVo.setState(afd.getControlValue());
else
searchFlowVo.setText(afd.getControlValue());
});
result.add(searchFlowVo);
//否则表示审批还未进行或者用户在这个节点已经主动撤销
}else {
SearchFlowVo searchFlowVo = new SearchFlowVo();
//获取审批节点名称
searchFlowVo.setTitle(hp.getName());
//判断是否为用户主动撤销
if(hp.getDeleteReason()!=null){
//填充撤销原因
searchFlowVo.setState(hp.getDeleteReason());
}else {
//否则表示未审批
searchFlowVo.setState("未审批");
}
//获取审批开始时间
searchFlowVo.setStartTime(DateUtils.formatTime(hp.getStartTime()));
result.add(searchFlowVo);
}
});
注:如果上个审批节点未开启,则下一个审批节点不会在查询的列表中出现。