流程审核代码
目前还没具体懂先写上当前理解以免忘记
private void inputVerifyStart(WarehosueMgr warehosueMgr){
//获取登录用户信息
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
//获取流程定义
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionKey("in_bound")
.orderByProcessDefinitionVersion().desc() //如果多次部署时要获取最新的版本
.list().get(0);
//获取流程实例(启动新流程)通过id进行绑定,绑定流程图和表
ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinition.getId(),warehosueMgr.getId()); //流程定义ID,业务ID
//设置任务完成 (从from变成step1了)
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult(); //form
//System.out.println("当前任务节点:"+task.getName()); //form
//form直接在这里完成
taskService.complete(task.getId());
//System.out.println("当前任务节点(完成后):"+taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult().getName());// step1
//流程全局属性,用于存放每个节点的审批信息
{
List<AuditHistroyVO> formVariables = new ArrayList<AuditHistroyVO>();
AuditHistroyVO vo = new AuditHistroyVO()
.setAuditType("入库审核")
.setTaskId(task.getId())
.setAuditCreateTime( new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(task.getCreateTime()))
.setAuditEndTime(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()))
.setTaskName("form")
.setTaskDescr("材料员填写表单")
.setAuditUserId(sysUser.getId()); //审批人,这里表示提交人
formVariables.add(vo);
runtimeService.setVariable(processInstance.getId(),"form",formVariables);
List<AuditHistroyVO> step1Variables = new ArrayList<AuditHistroyVO>();
runtimeService.setVariable(processInstance.getId(),"step1",step1Variables);
List<AuditHistroyVO> step2Variables = new ArrayList<AuditHistroyVO>();
runtimeService.setVariable(processInstance.getId(),"step2",step2Variables);
}
warehosueMgr.setVerifyStatus(1);//设置状态为提交审核
warehosueMgr.setActInstanceId(processInstance.getId()); //记录入库流程ID
}
首先我们审核的用户都是来自于sysuser,其中这里的sysuser其实是封装的名字,
将系统登录用户编程本类中的loginuser
//获取登录用户信息
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
之后获取的流程,流程具体在系统设置中可以看到,然后我们将整个流程的密钥,key统一设置为in——bound,就是所有该流程的节点都是通过这个key来进行传递验证的
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionKey("in_bound")
.orderByProcessDefinitionVersion().desc() //如果多次部署时要获取最新的版本
.list().get(0);
流程跑起来之后我们的id,标记改数据流向的是流程实例ProcessInstance
//获取流程实例(启动新流程)通过id进行绑定,绑定流程图和表
ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinition.getId(),warehosueMgr.getId()); //流程定义ID,业务ID
如图所示我们的任务其实有三个节点,分别是form,step1,step2三个任务节点,但是form在我们的业务中是填写的表单,所以在逻辑上其实这个任务不需要审核,直接通过即可
//设置任务完成 (从from变成step1了)
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult(); //form
//System.out.println("当前任务节点:"+task.getName()); //form
//form直接在这里完成
taskService.complete(task.getId());
//System.out.println("当前任务节点(完成后):"+taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult().getName());// step1
以下流程主要记录节点的审批信息,即表单每个节点的审批意见,不同审批的过程中的信息不同,这里仅作为入库处理
{
List<AuditHistroyVO> formVariables = new ArrayList<AuditHistroyVO>();
AuditHistroyVO vo = new AuditHistroyVO()
.setAuditType("入库审核")
.setTaskId(task.getId())
.setAuditCreateTime( new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(task.getCreateTime()))
.setAuditEndTime(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()))
.setTaskName("form")
.setTaskDescr("材料员填写表单")
.setAuditUserId(sysUser.getId()); //审批人,这里表示提交人
formVariables.add(vo);
runtimeService.setVariable(processInstance.getId(),"form",formVariables);
List<AuditHistroyVO> step1Variables = new ArrayList<AuditHistroyVO>();
runtimeService.setVariable(processInstance.getId(),"step1",step1Variables);
List<AuditHistroyVO> step2Variables = new ArrayList<AuditHistroyVO>();
runtimeService.setVariable(processInstance.getId(),"step2",step2Variables);
}
其中流程中的节点变量formVariables
中记录结点的信息,流程中要过哪些节点就要从这里进行记录
form表单没有list审核但是存在相应节点,所以虽然存在但是不一样
最后设置审核结果,通过就修改为1然后再做记录
warehosueMgr.setVerifyStatus(1);//设置状态为提交审核
warehosueMgr.setActInstanceId(processInstance.getId()); //记录入库流程ID