部署管理首页显示
public String deployHome(){
List<Deployment> depList = workflowService.findDeployment();
List<ProcessDefinition> pdList = workflowService.findProcessDefinition();
ValueContext.putValueContext("depList", depList);
ValueContext.putValueContext("pdList", pdList);
return "deployHome";
}
/**
* 查询部署对象信息
*/
@Override
public List<Deployment> findDeployment() {
List<Deployment> list = repositoryService.createDeploymentQuery()
.orderByDeploymenTime().asc().list();
return list;
}
/**
* 查询流程定义的信息
*/
@Override
public List<ProcessDefinition> findProcessDefinition() {
List<ProcessDefinition> list = repositoryService
.createProcessDefinitionQuery().orderByProcessDefinitionName()
.asc().list();
return list;
}
发布流程
public String newdeploy(){
File file = workflowBean.getFile();
String filename = workflowBean.getFilename();
workflowService.saveNewDelove(file,filename);
return "list";
}
@Override
public void saveNewDelove(File file, String filename) {
try {
ZipInputStream zipInputStream = new ZipInputStream(
new FileInputStream(file));
repositoryService.createDeployment()
.name(filename)
.addZipInputStream(zipInputStream)
.deploy();
} catch (Exception e) {
e.printStackTrace();
}
}
删除部署信息
public String delDeployment(){
String deploymentId = workflowBean.getDeploymentId();
workflowService.delDeploymentById(deploymentId);
return "list";
}
/**
* 删除流程定义
*/
@Override
public void delDeploymentById(String deploymentId) {
try {
repositoryService.deleteDeployment(deploymentId, true);
} catch (Exception e) {
LogUtils.info("你好啊啊啊", this.getClass());
repositoryService.deleteDeployment(deploymentId);
}
}
查看流程图
public String viewImage(){
try {
String deploymentId = workflowBean.getDeploymentId();
String imageName = workflowBean.getImageName();
InputStream in = workflowService.findImageView(deploymentId,imageName);
OutputStream out = ServletActionContext.getResponse().getOutputStream();
for(int b=-1;(b=in.read())!=-1;){
out.write(b);
}
out.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 查看流程图
*/
@Override
public InputStream findImageView(String deploymentId, String imageName) {
InputStream in = repositoryService.getResourceAsStream(deploymentId, imageName);
return in;
}
启动流程
public String startProcess(){
workflowService.saveStartProcess(workflowBean);
return "listTask";
}
/**
* 启动流程
*/
@Override
public void saveStartProcess(WorkflowBean workflowBean) {
Long id = workflowBean.getId();
LeaveBill leaveBill = leaveBillDao.findLeaveBillById(id);
leaveBill.setState(1);
String key = leaveBill.getClass().getSimpleName();
/**
* 4:从Session中获取当前任务的办理人,使用流程变量设置下一个任务的办理人
* inputUser是流程变量的名称,
* 获取的办理人是流程变量的值
*/
Map<String, Object> variables = new HashMap<String,Object>();
variables.put("inputUser", SessionContext.get().getName());
/**
* 5: (1)使用流程变量设置字符串(格式:LeaveBill.id的形式),通过设置,让启动的流程(流程实例)关联业务
(2)使用正在执行对象表中的一个字段BUSINESS_KEY(Activiti提供的一个字段),让启动的流程(流程实例)关联业务
*/
String objId = key+"."+id;
variables.put("objId", objId);
runtimeService.startProcessInstanceByKey(key,objId,variables);
}
任务管理首页显示
public String listTask(){
List<Task> list = workflowService.findPersonalTask();
ValueContext.putValueContext("taskList", list);
return "task";
}
/**
* 查询个人任务列表
*/
@Override
public List<Task> findPersonalTask() {
String name = SessionContext.get().getName();
List<Task> list = taskService.createTaskQuery().taskAssignee(name).orderByTaskCreateTime().asc().list();
return list;
}
打开任务表单
public String viewTaskForm(){
String taskId = workflowBean.getTaskId();
String url = workflowService.findTaskFormKeyByTaskId(taskId);
url += "?taskId="+taskId;
ValueContext.putValueContext("url", url);
return "viewTaskForm";
}
/**
* 获取任务表单中任务节点的url连接
*/
@Override
public String findTaskFormKeyByTaskId(String taskId) {
TaskFormData formData = formService.getTaskFormData(taskId);
String url = formData.getFormKey();
return url;
}
准备表单数据
public String audit(){
String taskId = workflowBean.getTaskId();
/**一:使用任务ID,查找请假单ID,从而获取请假单信息*/
LeaveBill leaveBill = workflowService.findLeaveBillByTaskId(taskId);
ValueContext.putValueStack(leaveBill);
/**二:已知任务ID,查询ProcessDefinitionEntiy对象,从而获取当前任务完成之后的连线名称,并放置到List<String>集合中*/
List<String> outcomeList = workflowService.findOutComeListByTaskId(taskId);
ValueContext.putValueContext("outcomeList", outcomeList);
/**三:查询所有历史审核人的审核信息,帮助当前人完成审核,返回List<Comment>*/
List<Comment> commentList = workflowService.findCommentByTaskId(taskId);
ValueContext.putValueContext("commentList", commentList);
return "taskForm";
}
/**一:使用任务ID,查找请假单ID,从而获取请假单信息*/
@Override
public LeaveBill findLeaveBillByTaskId(String taskId) {
Task task = taskService.createTaskQuery()
.taskId(taskId)
.singleResult();
String processInstanceId = task.getProcessInstanceId();
ProcessInstance pi = runtimeService.createProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();
String buniness_key = pi.getBusinessKey();
String id = "";
if(StringUtils.isNotBlank(buniness_key)){
id = buniness_key.split("\\.")[1];
}
LeaveBill leaveBill = leaveBillDao.findLeaveBillById(Long.parseLong(id));
return leaveBill;
}
@Override
public List<String> findOutComeListByTaskId(String taskId) {
List<String> list = new ArrayList<String>();
Task task = taskService.createTaskQuery()
.taskId(taskId)
.singleResult();
String processDefinitionId = task.getProcessDefinitionId();
ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(processDefinitionId);
String processInstanceId = task.getProcessInstanceId();
ProcessInstance pi = runtimeService.createProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();
String activityId = pi.getActivityId();
ActivityImpl activityImpl = processDefinitionEntity.findActivity(activityId);
List<PvmTransition> pvmList = activityImpl.getOutgoingTransitions();
if(pvmList!=null && pvmList.size()>0){
for(PvmTransition pvm:pvmList){
String name = (String) pvm.getProperty("name");
if(StringUtils.isNotBlank(name)){
list.add(name);
}
else{
list.add("默认提交");
}
}
}
return list;
}
/**
* 获取批注信息,传递的是当前任务ID,获取历史任务ID对应的批注
*/
@Override
public List<Comment> findCommentByTaskId(String taskId) {
List<Comment> list = new ArrayList<Comment>();
Task task = taskService.createTaskQuery()
.taskId(taskId)
.singleResult();
String processInstanceId = task.getProcessInstanceId();
list = taskService.getProcessInstanceComments(processInstanceId);
return list;
}
提交任务
public String submitTask(){
workflowService.saveSubmitTask(workflowBean);
return "listTask";
}
/**
* 提交任务
*/
@Override
public void saveSubmitTask(WorkflowBean workflowBean) {
String taskId = workflowBean.getTaskId();
String outcome = workflowBean.getOutcome();
String message = workflowBean.getComment();
Long id = workflowBean.getId();
/**
* 1:在完成之前,添加一个批注信息,向act_hi_comment表中添加数据,用于记录对当前申请人的一些审核信息
*/
Task task = taskService.createTaskQuery()
.taskId(taskId)
.singleResult();
String processInstanceId = task.getProcessInstanceId();
/**
* 注意:添加批注的时候,由于Activiti底层代码是使用:
* String userId = Authentication.getAuthenticatedUserId();
CommentEntity comment = new CommentEntity();
comment.setUserId(userId);
所有需要从Session中获取当前登录人,作为该任务的办理人(审核人),对应act_hi_comment表中的User_ID的字段,不过不添加审核人,该字段为null
所以要求,添加配置执行使用Authentication.setAuthenticatedUserId();添加当前任务的审核人
* */
Authentication.setAuthenticatedUserId(SessionContext.get().getName());
taskService.addComment(taskId, processInstanceId, message);
/**
* 2:如果连线的名称是“默认提交”,那么就不需要设置,如果不是,就需要设置流程变量
* 在完成任务之前,设置流程变量,按照连线的名称,去完成任务
流程变量的名称:outcome
流程变量的值:连线的名称
*/
Map<String, Object> variables = new HashMap<String,Object>();
if(outcome!=null && !outcome.equals("默认提交")){
variables.put("outcome", outcome);
}
taskService.complete(taskId, variables);
/**
* 5:在完成任务之后,判断流程是否结束
如果流程结束了,更新请假单表的状态从1变成2(审核中-->审核完成)
*/
ProcessInstance pi = runtimeService.createProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();
if(pi==null){
LeaveBill bill = leaveBillDao.findLeaveBillById(id);
bill.setState(2);
}
}
查看当前流程图(查看当前活动节点,并使用红色的框标注)
public String viewCurrentImage(){
String taskId = workflowBean.getTaskId();
/**一:查看流程图*/
ProcessDefinition pd = workflowService.findProcessDefinitionByTaskId(taskId);
ValueContext.putValueContext("deploymentId", pd.getDeploymentId());
ValueContext.putValueContext("imageName", pd.getDiagramResourceName());
/**二:查看当前活动,获取当期活动对应的坐标x,y,width,height,将4个值存放到Map<String,Object>中*/
Map<String, Object> map = workflowService.findCoordingByTask(taskId);
ValueContext.putValueContext("acs", map);
return "image";
}
public List<Comment> findCommentByLeaveBillId(Long id) {
LeaveBill leaveBill = leaveBillDao.findLeaveBillById(id);
String objectName = leaveBill.getClass().getSimpleName();
String objId = objectName+"."+id;
/**1:使用历史的流程实例查询,返回历史的流程实例对象,获取流程实例ID*/
/**2:使用历史的流程变量查询,返回历史的流程变量的对象,获取流程实例ID*/
HistoricVariableInstance hvi = historyService.createHistoricVariableInstanceQuery()
.variableValueEquals("objId", objId)
.singleResult();
String processInstanceId = hvi.getProcessInstanceId();
List<Comment> list = taskService.getProcessInstanceComments(processInstanceId);
return list;
}
@Override
public Map<String, Object> findCoordingByTask(String taskId) {
Map<String, Object> map = new HashMap<String,Object>();
Task task = taskService.createTaskQuery()
.taskId(taskId)
.singleResult();
String processDefinitionId = task.getProcessDefinitionId();
ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity)repositoryService.getProcessDefinition(processDefinitionId);
String processInstanceId = task.getProcessInstanceId();
ProcessInstance pi = runtimeService.createProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();
String activityId = pi.getActivityId();
ActivityImpl activityImpl = processDefinitionEntity.findActivity(activityId);
map.put("x", activityImpl.getX());
map.put("y", activityImpl.getY());
map.put("width", activityImpl.getWidth());
map.put("height", activityImpl.getHeight());
return map;
}
查看历史的批注信息
public String viewHisComment(){
Long id = workflowBean.getId();
LeaveBill leaveBill = leaveBillService.findLeaveBillById(id);
ValueContext.putValueStack(leaveBill);
List<Comment> commentList = workflowService.findCommentByLeaveBillId(id);
ValueContext.putValueContext("commentList", commentList);
return "viewHisComment";
}
@Override
public List<Comment> findCommentByLeaveBillId(Long id) {
LeaveBill leaveBill = leaveBillDao.findLeaveBillById(id);
String objectName = leaveBill.getClass().getSimpleName();
String objId = objectName+"."+id;
/**1:使用历史的流程实例查询,返回历史的流程实例对象,获取流程实例ID*/
/**2:使用历史的流程变量查询,返回历史的流程变量的对象,获取流程实例ID*/
HistoricVariableInstance hvi = historyService.createHistoricVariableInstanceQuery()
.variableValueEquals("objId", objId)
.singleResult();
String processInstanceId = hvi.getProcessInstanceId();
List<Comment> list = taskService.getProcessInstanceComments(processInstanceId);
return list;
}