Activiti中有一张表专门来存储记录,也就是act_hi_comment这张表,具体字段如下:
首先,先创建一个审批记录的类:
import lombok.Data;
/**
* @author MuYi
* 流程历史审批记录
* */
@Data
public class HttpApprovalHistory {
private String approvalOpinion;//审批意见
private String approvalUserName;//审批人
private String approvalTime;//审批时间
private String agree;//审批状态
}
因为使用了lombok,可以简化代码。
然后进行审批记录的添加:
// 由于流程用户上下文对象是线程独立的,所以要在需要的位置设置,要保证设置和获取操作在同一个线程中
Authentication.setAuthenticatedUserId(httpApproval.getUserId());// 批注人的名称
// 一定要写,不然查看的时候不知道人物信息
// 添加批注信息
processEngine.getTaskService().addComment(httpApproval.getTaskId(), processInstanceId,
approval + ":" + httpApproval.getApprovalOpinion());// comment为批注内容
现在就可以进行流程历史审批记录查看了:
/**
* 流程审批记录
*/
public List<HttpApprovalHistory> getApproveHistory1(String taskId) {
List<HttpApprovalHistory> httpApprovalHistoryList = new ArrayList<HttpApprovalHistory>();
List<Comment> list = getProcessComments(taskId);
for (Comment comment : list) {
HttpApprovalHistory httpApprovalHistory = new HttpApprovalHistory();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
httpApprovalHistory.setApprovalTime(dateFormat.format(comment.getTime()));
httpApprovalHistory
.setApprovalUserName(sysUserMapper.selectByPrimaryKey((comment.getUserId())).getUserName());
String[] str = comment.getFullMessage().split(":");//我前面添加建立的规则
String agree = str[0];
String approvalOpinion = comment.getFullMessage().substring(2);
httpApprovalHistory.setAgree(agree);
httpApprovalHistory.setApprovalOpinion(approvalOpinion);
httpApprovalHistoryList.add(httpApprovalHistory);
}
return httpApprovalHistoryList;
}
/**
* 获取历史审批记录comment
*
* @param taskId
* @return
*/
public List<Comment> getProcessComments(String taskId) {
List<Comment> historyCommnets = new ArrayList<>();
// 1) 获取流程实例的ID
HistoricTaskInstance task = processEngine.getHistoryService().createHistoricTaskInstanceQuery().taskId(taskId)
.singleResult();
String processInstanceId = task.getProcessInstanceId();
// 2)通过流程实例查询所有的(用户任务类型)历史活动
List<HistoricActivityInstance> hais = processEngine.getHistoryService().createHistoricActivityInstanceQuery()
.processInstanceId(processInstanceId).activityType("userTask").list();
// 3)查询每个历史任务的批注
for (HistoricActivityInstance hai : hais) {
String historytaskId = hai.getTaskId();
List<Comment> comments = processEngine.getTaskService().getTaskComments(historytaskId);
// 4)如果当前任务有批注信息,添加到集合中
if (comments != null && comments.size() > 0) {
historyCommnets.addAll(comments);
}
}
// 排序
Collections.sort(historyCommnets, new Comparator<Comment>() {
@Override
public int compare(Comment o1, Comment o2) {
return (int) -(o2.getTime().getTime() - o1.getTime().getTime());
}
});
// 5)返回
return historyCommnets;
}
这样就可以实现流程审批记录的记录和查看功能。