Commit aa25e164 by Java-曹文达

添加查看高亮流程图

parent 58127b81
package com.bbd.bpm.controller.taskOperate; package com.bbd.bpm.controller.taskOperate;
import com.alibaba.fastjson.JSON;
import com.bbd.bpm.dto.PageUtil; import com.bbd.bpm.dto.PageUtil;
import com.bbd.bpm.dto.SysCode; import com.bbd.bpm.dto.SysCode;
import com.bbd.bpm.dto.request.CompleteTaskRequest; import com.bbd.bpm.dto.request.CompleteTaskRequest;
import com.bbd.bpm.dto.request.PendingTaskListRequest; import com.bbd.bpm.dto.request.PendingTaskListRequest;
import com.bbd.bpm.dto.request.QueryStartedPiByUserIdRequest; import com.bbd.bpm.dto.request.QueryStartedPiByUserIdRequest;
import com.bbd.bpm.dto.request.SpecialRequest;
import com.bbd.bpm.dto.response.BpmResponse; import com.bbd.bpm.dto.response.BpmResponse;
import com.bbd.bpm.dto.response.PendingTaskListBean; import com.bbd.bpm.dto.response.PendingTaskListBean;
import com.bbd.bpm.dto.response.QueryPiByUserIdBean; import com.bbd.bpm.dto.response.QueryPiByUserIdBean;
import com.bbd.bpm.service.ActivitiService;
import com.bbd.bpm.util.validate.ValidateUtil; import com.bbd.bpm.util.validate.ValidateUtil;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.activiti.engine.*; import org.activiti.engine.*;
import org.activiti.engine.history.HistoricActivityInstance;
import org.activiti.engine.history.HistoricProcessInstance; import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task; import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -26,10 +27,13 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -26,10 +27,13 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.ArrayList; import javax.servlet.ServletException;
import java.util.HashMap; import javax.servlet.http.HttpServletRequest;
import java.util.List; import javax.servlet.http.HttpServletResponse;
import java.util.Map; import java.io.*;
import java.util.*;
import static com.sun.mail.util.ASCIIUtility.getBytes;
/** /**
* Created by houkang on 2019/2/27. * Created by houkang on 2019/2/27.
...@@ -50,19 +54,22 @@ public class TaskOperateController { ...@@ -50,19 +54,22 @@ public class TaskOperateController {
private RuntimeService runtimeService; private RuntimeService runtimeService;
@Autowired
private ActivitiService activitiService;
/** /**
* taskStatus 1 已完成 2 未完成 3 全部 * taskStatus 1 已完成 2 未完成 3 全部
* */ */
@ApiOperation(value = "查询我发起的流程") @ApiOperation(value = "查询我发起的流程")
@PostMapping("/queryStartedPiByUserId") @PostMapping("/queryStartedPiByUserId")
@ResponseBody @ResponseBody
public BpmResponse queryStartedPiByUserId(QueryStartedPiByUserIdRequest req,PageUtil pageUtil) { public BpmResponse queryStartedPiByUserId(QueryStartedPiByUserIdRequest req, PageUtil pageUtil) {
BpmResponse resp = new BpmResponse(); BpmResponse resp = new BpmResponse();
try{ try {
//数据校验 //数据校验
String error = ValidateUtil.check_queryStartedPiByUserId(req); String error = ValidateUtil.check_queryStartedPiByUserId(req);
if(error!=null){ if (error != null) {
Log.error("查询我发起的流程,数据校验失败"+error); Log.error("查询我发起的流程,数据校验失败" + error);
resp.setCode(SysCode.VALIDATE_ERROR); resp.setCode(SysCode.VALIDATE_ERROR);
resp.setMessage(error); resp.setMessage(error);
resp.setSuccess(false); resp.setSuccess(false);
...@@ -70,15 +77,15 @@ public class TaskOperateController { ...@@ -70,15 +77,15 @@ public class TaskOperateController {
} }
// QueryPiByUserIdBean // QueryPiByUserIdBean
//任务办理人 //任务办理人
PageHelper.startPage(pageUtil.getPageNumber(),pageUtil.getPageSize()); PageHelper.startPage(pageUtil.getPageNumber(), pageUtil.getPageSize());
List<HistoricProcessInstance> listPi = historyService.createHistoricProcessInstanceQuery().involvedUser(req.getUserId()).listPage(pageUtil.getPageNumber(),pageUtil.getPageSize()); List<HistoricProcessInstance> listPi = historyService.createHistoricProcessInstanceQuery().involvedUser(req.getUserId()).listPage(pageUtil.getPageNumber(), pageUtil.getPageSize());
if(listPi!=null && !listPi.isEmpty()){ if (listPi != null && !listPi.isEmpty()) {
List<QueryPiByUserIdBean> datalist = new ArrayList<>(); List<QueryPiByUserIdBean> datalist = new ArrayList<>();
for(HistoricProcessInstance hpi:listPi){ for (HistoricProcessInstance hpi : listPi) {
List<Task> taskList = taskService.createTaskQuery().processInstanceId(hpi.getId()).list(); List<Task> taskList = taskService.createTaskQuery().processInstanceId(hpi.getId()).list();
QueryPiByUserIdBean bean = new QueryPiByUserIdBean(); QueryPiByUserIdBean bean = new QueryPiByUserIdBean();
//业务密钥 //业务密钥
bean.setBusinessKey(hpi.getBusinessKey()); bean.setBusinessKey(hpi.getBusinessKey());
//流程名称 //流程名称
bean.setProcessDefinitionName(hpi.getProcessDefinitionName()); bean.setProcessDefinitionName(hpi.getProcessDefinitionName());
...@@ -88,79 +95,80 @@ public class TaskOperateController { ...@@ -88,79 +95,80 @@ public class TaskOperateController {
bean.setStartTime(hpi.getStartTime()); bean.setStartTime(hpi.getStartTime());
//结束时间 //结束时间
bean.setEndTime(hpi.getEndTime()); bean.setEndTime(hpi.getEndTime());
if(hpi.getEndTime()!=null){ if (hpi.getEndTime() != null) {
bean.setEnded(true); bean.setEnded(true);
} }
if("1".equals(req.getTaskStatus())){ if ("1".equals(req.getTaskStatus())) {
if(bean.isEnded()){ if (bean.isEnded()) {
//当前操作人 //当前操作人
bean.setName("已审批完成"); bean.setName("已审批完成");
bean.setProcessNodeName("审批完成"); bean.setProcessNodeName("审批完成");
datalist.add(bean); datalist.add(bean);
} }
} else if("2".equals(req.getTaskStatus())){ } else if ("2".equals(req.getTaskStatus())) {
if(!bean.isEnded()){ if (!bean.isEnded()) {
for(Task t:taskList){ for (Task t : taskList) {
//当前操作人 //当前操作人
bean.setName( t.getAssignee()); bean.setName(t.getAssignee());
bean.setTaskId(t.getId());
bean.setExecutionId(t.getExecutionId());
bean.setProcessNodeName(t.getName()); bean.setProcessNodeName(t.getName());
} }
datalist.add(bean); datalist.add(bean);
} }
}else{ } else {
//当前操作人 //当前操作人
bean.setName("已审批完成"); bean.setName("已审批完成");
bean.setProcessNodeName("审批完成"); bean.setProcessNodeName("审批完成");
for(Task t:taskList){ for (Task t : taskList) {
//当前操作人 //当前操作人
bean.setName( t.getAssignee()); bean.setName(t.getAssignee());
bean.setProcessNodeName(t.getName()); bean.setProcessNodeName(t.getName());
bean.setTaskId(t.getId());
bean.setExecutionId(t.getExecutionId());
} }
datalist.add(bean); datalist.add(bean);
} }
} }
PageInfo pageInfo=new PageInfo(datalist); PageInfo pageInfo = new PageInfo(datalist);
resp.setData(pageInfo); resp.setData(pageInfo);
} }
resp.setCode(SysCode.SUCCESS_CODE); resp.setCode(SysCode.SUCCESS_CODE);
resp.setSuccess(true); resp.setSuccess(true);
}catch (Exception e){ } catch (Exception e) {
Log.error("查询我发起的流程失败",e); Log.error("查询我发起的流程失败", e);
resp.setSuccess(false); resp.setSuccess(false);
resp.setCode(SysCode.SYS_ERROR); resp.setCode(SysCode.SYS_ERROR);
resp.setMessage("查询我发起的流程失败"+e.getMessage()); resp.setMessage("查询我发起的流程失败" + e.getMessage());
} }
return resp; return resp;
} }
@ApiOperation(value = "查询待处理任务") @ApiOperation(value = "查询待处理任务")
@PostMapping("/pendingTaskList") @PostMapping("/pendingTaskList")
@ResponseBody @ResponseBody
public BpmResponse pendingTaskList(PendingTaskListRequest req,PageUtil pageUtil) { public BpmResponse pendingTaskList(PendingTaskListRequest req, PageUtil pageUtil) {
BpmResponse resp = new BpmResponse(); BpmResponse resp = new BpmResponse();
try{ try {
//数据校验 //数据校验
String error = ValidateUtil.check_pendingTaskList(req); String error = ValidateUtil.check_pendingTaskList(req);
if(error!=null){ if (error != null) {
Log.error("查询待处理任务,数据校验失败"+error); Log.error("查询待处理任务,数据校验失败" + error);
resp.setCode(SysCode.VALIDATE_ERROR); resp.setCode(SysCode.VALIDATE_ERROR);
resp.setMessage(error); resp.setMessage(error);
resp.setSuccess(false); resp.setSuccess(false);
return resp; return resp;
} }
//任务办理人 //任务办理人
PageHelper.startPage(pageUtil.getPageNumber(),pageUtil.getPageSize()); PageHelper.startPage(pageUtil.getPageNumber(), pageUtil.getPageSize());
List<Task> taskList = taskService.createTaskQuery().taskAssignee(req.getAssignee()).listPage(pageUtil.getPageNumber(),pageUtil.getPageSize()); List<Task> taskList = taskService.createTaskQuery().taskAssignee(req.getAssignee()).listPage(pageUtil.getPageNumber(), pageUtil.getPageSize());
if(taskList!=null && taskList.size()>0){ if (taskList != null && taskList.size() > 0) {
List<PendingTaskListBean> dataList = new ArrayList<>(); List<PendingTaskListBean> dataList = new ArrayList<>();
for(Task task : taskList){ for (Task task : taskList) {
ProcessInstance pi =runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult(); ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();
PendingTaskListBean bean = new PendingTaskListBean(); PendingTaskListBean bean = new PendingTaskListBean();
//业务密钥 //业务密钥
bean.setBusinessKey(pi.getBusinessKey()); bean.setBusinessKey(pi.getBusinessKey());
//发起人 //发起人
...@@ -175,17 +183,17 @@ public class TaskOperateController { ...@@ -175,17 +183,17 @@ public class TaskOperateController {
bean.setProcessInstanceId(task.getProcessInstanceId()); bean.setProcessInstanceId(task.getProcessInstanceId());
dataList.add(bean); dataList.add(bean);
} }
PageInfo pageInfo=new PageInfo(dataList); PageInfo pageInfo = new PageInfo(dataList);
resp.setData(pageInfo); resp.setData(pageInfo);
} }
resp.setSuccess(true); resp.setSuccess(true);
resp.setCode(SysCode.SUCCESS_CODE); resp.setCode(SysCode.SUCCESS_CODE);
resp.setMessage("查询待处理任务成功"); resp.setMessage("查询待处理任务成功");
}catch (Exception e){ } catch (Exception e) {
Log.error("查询待处理任务失败",e); Log.error("查询待处理任务失败", e);
resp.setSuccess(false); resp.setSuccess(false);
resp.setCode(SysCode.SYS_ERROR); resp.setCode(SysCode.SYS_ERROR);
resp.setMessage("查询待处理任务失败"+e.getMessage()); resp.setMessage("查询待处理任务失败" + e.getMessage());
} }
return resp; return resp;
} }
...@@ -193,20 +201,20 @@ public class TaskOperateController { ...@@ -193,20 +201,20 @@ public class TaskOperateController {
@ApiOperation(value = "改变任务处理人") @ApiOperation(value = "改变任务处理人")
@GetMapping("/appointTaskTo") @GetMapping("/appointTaskTo")
@ResponseBody @ResponseBody
public BpmResponse appointTaskTo(String taskId,String userId) { public BpmResponse appointTaskTo(String taskId, String userId) {
BpmResponse resp = new BpmResponse(); BpmResponse resp = new BpmResponse();
try{ try {
//校验参数 //校验参数
if(StringUtils.isBlank(taskId)||StringUtils.isBlank(userId) ){ if (StringUtils.isBlank(taskId) || StringUtils.isBlank(userId)) {
resp.setMessage("请求参数"+SysCode.NOT_ALLOW_NULL); resp.setMessage("请求参数" + SysCode.NOT_ALLOW_NULL);
resp.setCode(SysCode.VALIDATE_ERROR); resp.setCode(SysCode.VALIDATE_ERROR);
resp.setSuccess(false); resp.setSuccess(false);
return resp; return resp;
} }
Task task=taskService.createTaskQuery().taskId(taskId).singleResult(); Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
//校验参数 //校验参数
if(task==null || task.getId()==null){ if (task == null || task.getId() == null) {
resp.setMessage("任务不存在或已完成"); resp.setMessage("任务不存在或已完成");
resp.setCode(SysCode.VALIDATE_ERROR); resp.setCode(SysCode.VALIDATE_ERROR);
resp.setSuccess(false); resp.setSuccess(false);
...@@ -217,10 +225,10 @@ public class TaskOperateController { ...@@ -217,10 +225,10 @@ public class TaskOperateController {
resp.setSuccess(true); resp.setSuccess(true);
resp.setMessage("改变任务处理人成功"); resp.setMessage("改变任务处理人成功");
resp.setCode(SysCode.SUCCESS_CODE); resp.setCode(SysCode.SUCCESS_CODE);
}catch (Exception e){ } catch (Exception e) {
Log.error("改变任务处理人失败",e); Log.error("改变任务处理人失败", e);
resp.setSuccess(false); resp.setSuccess(false);
resp.setMessage("改变任务处理人失败"+e.getMessage()); resp.setMessage("改变任务处理人失败" + e.getMessage());
resp.setCode(SysCode.SYS_ERROR); resp.setCode(SysCode.SYS_ERROR);
} }
return resp; return resp;
...@@ -232,12 +240,12 @@ public class TaskOperateController { ...@@ -232,12 +240,12 @@ public class TaskOperateController {
public BpmResponse deleteTask(String taskId) { public BpmResponse deleteTask(String taskId) {
BpmResponse resp = new BpmResponse(); BpmResponse resp = new BpmResponse();
//todo //todo
try{ try {
taskService.deleteTask(taskId); taskService.deleteTask(taskId);
resp.setSuccess(true); resp.setSuccess(true);
resp.setMessage("删除任务成功"); resp.setMessage("删除任务成功");
}catch (Exception e){ } catch (Exception e) {
Log.error("删除任务失败",e); Log.error("删除任务失败", e);
resp.setSuccess(false); resp.setSuccess(false);
} }
return resp; return resp;
...@@ -246,48 +254,102 @@ public class TaskOperateController { ...@@ -246,48 +254,102 @@ public class TaskOperateController {
@ApiOperation(value = "任务办理") @ApiOperation(value = "任务办理")
@PostMapping("/completeTask") @PostMapping("/completeTask")
@ResponseBody @ResponseBody
public BpmResponse completeTask(CompleteTaskRequest req ) { public BpmResponse completeTask(CompleteTaskRequest req) {
BpmResponse resp = new BpmResponse(); BpmResponse resp = new BpmResponse();
try{ try {
//数据校验 //数据校验
String error = ValidateUtil.check_completeTask(req); String error = ValidateUtil.check_completeTask(req);
if(error!=null){ if (error != null) {
Log.error("任务办理,数据校验失败"+error); Log.error("任务办理,数据校验失败" + error);
resp.setCode(SysCode.VALIDATE_ERROR); resp.setCode(SysCode.VALIDATE_ERROR);
resp.setMessage(error); resp.setMessage(error);
resp.setSuccess(false); resp.setSuccess(false);
return resp; return resp;
} }
Task task=taskService.createTaskQuery().taskId(req.getTaskId()).singleResult(); Task task = taskService.createTaskQuery().taskId(req.getTaskId()).singleResult();
//校验参数 //校验参数
if(task==null || task.getId()==null){ if (task == null || task.getId() == null) {
resp.setMessage("任务不存在或已完成"); resp.setMessage("任务不存在或已完成");
resp.setCode(SysCode.VALIDATE_ERROR); resp.setCode(SysCode.VALIDATE_ERROR);
resp.setSuccess(false); resp.setSuccess(false);
return resp; return resp;
} }
//增加批注 //增加批注
if(req.getComments()!=null){ if (req.getComments() != null) {
taskService.addComment(req.getTaskId(), null, req.getComments()); taskService.addComment(req.getTaskId(), null, req.getComments());
} }
Map<String, Object> variables = null; Map<String, Object> variables = null;
if(req.getVariables()==null){ if (req.getVariables() == null) {
variables = new HashMap<String, Object>(); variables = new HashMap<String, Object>();
}else{ } else {
variables = req.getVariables(); variables = req.getVariables();
} }
variables.put("userId",task.getAssignee()); variables.put("userId", task.getAssignee());
taskService.complete(req.getTaskId(),variables); taskService.complete(req.getTaskId(), variables);
resp.setSuccess(true); resp.setSuccess(true);
resp.setMessage("任务办理成功"); resp.setMessage("任务办理成功");
resp.setCode(SysCode.SUCCESS_CODE); resp.setCode(SysCode.SUCCESS_CODE);
}catch(Exception e){ } catch (Exception e) {
Log.error("任务办理失败",e); Log.error("任务办理失败", e);
resp.setSuccess(false); resp.setSuccess(false);
resp.setMessage("任务办理失败"+e.getMessage()); resp.setMessage("任务办理失败" + e.getMessage());
resp.setCode(SysCode.SYS_ERROR); resp.setCode(SysCode.SYS_ERROR);
} }
return resp; return resp;
} }
/**
* 带当前节点的流程图
*
* @param request
* @return
*/
@RequestMapping("/process/trace/current")
@ApiOperation(value = "流程图获取接口", notes = "获取当前流程的流程图")
@ResponseBody
public void traceProcessImage(SpecialRequest request, HttpServletResponse response) {
try {
byte[] bytes = activitiService.traceProcessImage(request);
OutputStream toClient=response.getOutputStream();
toClient.write(bytes);
toClient.flush();
toClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/*@RequestMapping("/process/trace/current")
@ApiOperation(value = "流程图获取接口", notes = "获取当前流程的流程图")
@ResponseBody
public void traceProcessImage(SpecialRequest request, HttpServletResponse response) {
FileInputStream fis = null;
OutputStream os = null;
try {
byte[] bytes = activitiService.traceProcessImage(request);
File file = new File("D:\\" + 1 + ".jpg");
OutputStream out = new FileOutputStream(file);
out.write(bytes);
out.flush();
System.out.println("download success");
out.close();
//得到文件大小
FileInputStream hFile = new FileInputStream("D:/1.jpg");
int i=hFile.available();
//读数据
byte data[]=new byte[i];
//得到向客户端输出二进制数据的对象
hFile.read(data);
//输出数据
OutputStream toClient=response.getOutputStream();
toClient.write(data);
toClient.flush();
toClient.close();
hFile.close();
} catch (IOException e) {
e.printStackTrace();
}
}*/
} }
...@@ -5,6 +5,7 @@ import com.bbd.bpm.result.Result; ...@@ -5,6 +5,7 @@ import com.bbd.bpm.result.Result;
import com.bbd.bpm.service.UserInfoService; import com.bbd.bpm.service.UserInfoService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
/** /**
* 用户功能模块管理 * 用户功能模块管理
...@@ -102,6 +103,18 @@ public class UserWebController { ...@@ -102,6 +103,18 @@ public class UserWebController {
return "deployment/importDeployment"; return "deployment/importDeployment";
} }
/**
* @Author:cwd
* @Description:进入组织管理
* @Date: 2019/03/04 22:53
* @Param:
* @return
**/
@GetMapping(value = "toSee")
public String toSee(String taskId,String executionId,ModelMap modelMap){
modelMap.addAttribute("taskId",taskId);
modelMap.addAttribute("executionId",executionId);
return "deployment/deplyment";
}
} }
package com.bbd.bpm.dto.request;
import java.io.Serializable;
/**
* Created by yanlj on 2017/10/19.
*/
public class SpecialRequest implements Serializable {
private String userToken;
private String taskId;
private String executionId;
private String processInstanceId;
private String procdefId;
public String getUserToken() {
return userToken;
}
public void setUserToken(String userToken) {
this.userToken = userToken;
}
public String getTaskId() {
return taskId;
}
public void setTaskId(String taskId) {
this.taskId = taskId;
}
public String getExecutionId() {
return executionId;
}
public void setExecutionId(String executionId) {
this.executionId = executionId;
}
public String getProcessInstanceId() {
return processInstanceId;
}
public void setProcessInstanceId(String processInstanceId) {
this.processInstanceId = processInstanceId;
}
public String getProcdefId() {
return procdefId;
}
public void setProcdefId(String procdefId) {
this.procdefId = procdefId;
}
}
...@@ -18,6 +18,12 @@ public class QueryPiByUserIdBean { ...@@ -18,6 +18,12 @@ public class QueryPiByUserIdBean {
private String processNodeName; private String processNodeName;
private String taskId;
private String executionId;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date startTime; private Date startTime;
...@@ -91,4 +97,21 @@ public class QueryPiByUserIdBean { ...@@ -91,4 +97,21 @@ public class QueryPiByUserIdBean {
public void setProcessNodeName(String processNodeName) { public void setProcessNodeName(String processNodeName) {
this.processNodeName = processNodeName; this.processNodeName = processNodeName;
} }
public String getExecutionId() {
return executionId;
}
public void setExecutionId(String executionId) {
this.executionId = executionId;
}
public String getTaskId() {
return taskId;
}
public void setTaskId(String taskId) {
this.taskId = taskId;
}
} }
package com.bbd.bpm.service;
import com.bbd.bpm.dto.request.SpecialRequest;
import java.io.IOException;
/**
* Created by yanlj on 2017/9/1.
*/
public interface ActivitiService {
/**
* 带跟踪的图片
*
* @param request
* @return
*/
byte[] traceProcessImage(SpecialRequest request) throws IOException;
}
package com.bbd.bpm.serviceImpl;
import com.bbd.bpm.dto.request.SpecialRequest;
import com.bbd.bpm.service.ActivitiService;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.engine.*;
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti.engine.impl.context.Context;
import org.activiti.engine.runtime.Execution;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.image.ProcessDiagramGenerator;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
* Created by yanlj on 2017/9/1.
*/
@Component("activitiService")
public class ActivitiServiceImpl implements ActivitiService {
@Autowired
private RepositoryService repositoryService;
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
@Autowired
private ProcessEngineConfiguration processEngineConfiguration;
@Autowired
private ProcessEngine processEngine;
@Override
public byte[] traceProcessImage(SpecialRequest request) throws IOException {
Execution execution = null;
if (StringUtils.isNotBlank(request.getExecutionId())) {
execution = runtimeService.createExecutionQuery().executionId(request.getExecutionId()).singleResult();//执行实例
}
if (execution == null) {
if (StringUtils.isNotBlank(request.getTaskId())) {
Task task = taskService.createTaskQuery().taskId(request.getTaskId()).singleResult();
if (task != null) {
execution = runtimeService.createExecutionQuery().executionId(task.getExecutionId()).singleResult();//执行实例
}
}
}
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(execution.getProcessInstanceId()).singleResult();
BpmnModel bpmnModel = repositoryService.getBpmnModel(processInstance.getProcessDefinitionId());
List<String> activeActivityIds = runtimeService.getActiveActivityIds(execution.getId());
// 使用spring注入引擎请使用下面的这行代码
processEngineConfiguration = processEngine.getProcessEngineConfiguration();
Context.setProcessEngineConfiguration((ProcessEngineConfigurationImpl) processEngineConfiguration);
ProcessDiagramGenerator diagramGenerator = processEngineConfiguration.getProcessDiagramGenerator();
InputStream imageStream = diagramGenerator.generateDiagram(
bpmnModel,
"png",
activeActivityIds,
new ArrayList<String>(),
"宋体",
"宋体",
null,
null,1.0);
byte[] bytes = IOUtils.toByteArray(imageStream);
return bytes;
}
}
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" th:href="@{/css/common/base.css}" />
<link rel="stylesheet" th:href="@{/css/common/page_new.css}" />
<link rel="stylesheet" th:href="@{/js/plugins/bootstrapselect/css/product_list.css}" />
<link rel="stylesheet" th:href="@{/css/layui.css}" media="all">
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
</head>
<style>
#goBack {
background: #fff no-repeat 5px center;
}
</style>
<body>
<div class="box">
<h2><span></span>流程查看<button id="goBack" onclick="javascript:history.go(-1)" style="margin-right: 100px">返回</button><button onclick="location.reload()">刷新</button></h2>
<img id="image">
</div>
<input type="hidden" id="taskId" th:value="${taskId}">
<input type="hidden" id="executionId" th:value="${executionId}">
</body>
</html>
<script src="/js/plugins/jquery.min.js"></script>
<script src="/js/plugins/layer/layer.js"></script>
<script src="/js/layui.js"></script>
<script type="text/javascript" src="/js/plugins/page_new.js"></script>
<script>
$(function () {
var taskId=$("#taskId").val()
var executionId=$("#executionId").val()
var url="http://localhost:8087/api/bpm/task/process/trace/current?executionId="+executionId+"&taskId="+taskId
$("#image").attr("src",url)
})
</script>
...@@ -144,7 +144,7 @@ ...@@ -144,7 +144,7 @@
var total = data.total; var total = data.total;
data = data.list; data = data.list;
var content = ''; var content = '';
content += '<thead><tr><th>流程实例Id</th><th>流程名称</th><th style="width: 8%">业务密钥</th><th>当前审批人</th><th style="width: 8%">审批节点名称</th><th style="width: 8%">审批开始时间</th><th style="width: 8%">审批结束时间</th></tr></thead>'; content += '<thead><tr><th>流程实例Id</th><th>流程名称</th><th style="width: 8%">业务密钥</th><th>当前审批人</th><th style="width: 8%">审批节点名称</th><th style="width: 8%">审批开始时间</th><th style="width: 8%">审批结束时间</th><th style="width: 8%">操作</th></tr></thead>';
if(data!=null){ if(data!=null){
for (var i in data) { for (var i in data) {
if(data[i].endTime==null){ if(data[i].endTime==null){
...@@ -158,6 +158,11 @@ ...@@ -158,6 +158,11 @@
content += '<td class="product_name" style="width: 5%;">'+data[i].processNodeName+'</td>'; content += '<td class="product_name" style="width: 5%;">'+data[i].processNodeName+'</td>';
content += '<td class="product_name" style="width: 5%;">'+data[i].startTime+'</td>'; content += '<td class="product_name" style="width: 5%;">'+data[i].startTime+'</td>';
content += '<td class="product_name" style="width: 5%;">'+data[i].endTime+'</td>'; content += '<td class="product_name" style="width: 5%;">'+data[i].endTime+'</td>';
if(data[i].name=='已审批完成'){
content += '<td class="cao_zuo" disabled><span style="width: 16%">完成</span>';
}else {
content += '<td class="cao_zuo"><span style="width: 16%" onclick="toActivityDetail('+data[i].taskId+',\''+data[i].executionId+'\')">查看</span>';
}
content += '</tr></tbody>'; content += '</tr></tbody>';
} }
$('#pages').text(pages); $('#pages').text(pages);
...@@ -202,6 +207,13 @@ ...@@ -202,6 +207,13 @@
},'json') },'json')
flushHtml(null,taskStatus); flushHtml(null,taskStatus);
} }
/*查看流程 */
function toActivityDetail(taskId,executionId) {
location.href="/web/bpm/user/toSee?taskId="+taskId+"&executionId="+executionId
}
</script> </script>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment