返回的实体类
@Data
@Accessors(chain = true)
@ApiModel(value = "待办、已办任务实体")
public class Tasks {
@ApiModelProperty(value = "任务id")
private String id;
@ApiModelProperty(value = "工作id")
private String activityId;
@ApiModelProperty(value = "委托人")
private String owner;
@ApiModelProperty(value = "执行线路id")
private String executionId;
@ApiModelProperty(value = "流程名称")
private String actReProcdefName;
@ApiModelProperty(value = "任务创建时间")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date createTime;
@ApiModelProperty(value = "任务名称")
private String name;
@ApiModelProperty(value = "受理人")
private String assignee;
@ApiModelProperty(value = "任务的优先级")
private Integer priority;
@ApiModelProperty(value = "任务标题")
private String taskTitle;
@ApiModelProperty(value = "页面地址")
private String pageAddress;
}
待办任务、已办任务接口
import cloud.main.service.conf.Swagger2Config;
import cloud.main.service.contants.JsonData;
import cloud.main.service.dto.OperLog;
import cloud.main.service.model.gk.*;
import cloud.main.service.model.process.Tasks;
import cloud.main.service.service.gk.*;
import cloud.main.service.util.SecurityUtils;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.activiti.engine.HistoryService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.task.Task;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/task")
@Api(value = "TaskController", tags = {Swagger2Config.TAG_FLOW})
public class TaskController {
@Autowired
public TaskService taskService;
@Autowired
public RepositoryService repositoryService;
@Resource
QAM001Service qam001Service;
@Resource
FWR0001Service fwr0001Service;
@Resource
OAM001Service oam001Service;
@Resource
FWC0001Service fwc0001Service;
@Resource
CMM001Service cmm001Service;
@Resource
SteelMainService steelMainService;
@Resource
HistoryService historyService;
@ApiOperation(value = "个人中心-查询待办任务", notes = "查询待办任务")
@PostMapping(value = "/findToDoTasks")
@OperLog(operModul = "流程管理", operType = "查询", operDesc = "查询待办任务")
public JsonData findToDoTasks(@RequestParam(value = "assignee", required = false) String assignee,//分配人
String taskName,
@RequestParam(value = "pageNum", required = false) int pageNum,
@RequestParam(value = "pageSize", required = false) int pageSize) {
if (StringUtils.isEmpty(assignee)) {
assignee = SecurityUtils.getCurrentUser().getUsername();
}
//调用service方法获取到Task集合m
List<Task> taskList = null;
//总条数
long count = 0;
if (StringUtils.isEmpty(taskName)) {
taskList = taskService.createTaskQuery()
.taskCandidateOrAssigned(assignee).orderByTaskCreateTime().desc()
.listPage(pageNum * pageSize - pageSize, pageSize);
count = taskService.createTaskQuery()
.taskCandidateOrAssigned(assignee)
.orderByTaskCreateTime().desc().count();
} else {
taskList = taskService.createTaskQuery().taskNameLike(taskName)
.taskCandidateOrAssigned(assignee).orderByTaskCreateTime().desc()
.listPage(pageNum * pageSize - pageSize, pageSize);
count = taskService.createTaskQuery().taskNameLike(taskName)
.taskCandidateOrAssigned(assignee)
.orderByTaskCreateTime().desc().count();
}
List<Tasks> tasks = new ArrayList<>();
//任务标题
String taskTitle = "";
String actReProcdefName = "";
String actReProcdefKey = "";
//页面地址
String pageAddress = "";
String id = "";
Map<String, Object> map = new HashMap<>();
//将Task接口集合遍历并保存到自己新建的实体类集合中
for (Task task : taskList) {
//根据ID获取name
ProcessDefinition pd = repositoryService
.createProcessDefinitionQuery()
.processDefinitionId(task.getProcessDefinitionId())
.singleResult();
actReProcdefKey = pd.getKey();
actReProcdefName = pd.getName();
if (actReProcdefName.indexOf("QualityAlarmProcess") >= 0)
actReProcdefName = "质量报警";
else if (actReProcdefName.indexOf("RainPrevention") >= 0)
actReProcdefName = "防雨防汛";
else if (actReProcdefName.indexOf("StopAlarmProcess") >= 0)
actReProcdefName = "停机报警";
else if (actReProcdefName.indexOf("ColdPrevention") >= 0)
actReProcdefName = "防寒防冻";
else if (actReProcdefName.indexOf("MeetingProcess") >= 0)
actReProcdefName = "会议纪要";
else if (actReProcdefName.indexOf("SteelProcess") >= 0)
actReProcdefName = "钢种物料";
map.put("activityId", task.getId());
map.put("processInstanceId", task.getProcessInstanceId());
Map<String, String> map1 = getProcessMap(map, actReProcdefKey, task.getFormKey());
taskTitle = map1.get("taskTitle");
id = map1.get("id");
pageAddress = map1.get("pageAddress");
tasks.add(new Tasks()
.setId(id)
.setActivityId(task.getId())
.setOwner(task.getOwner())
.setExecutionId(task.getExecutionId())
.setActReProcdefName(actReProcdefName)
.setCreateTime(task.getCreateTime())
.setName(task.getName())
.setAssignee(task.getAssignee())
.setPriority(task.getPriority())
.setTaskTitle(taskTitle)
.setPageAddress(pageAddress));
}
PageInfo pageInfo = new PageInfo();
pageInfo.setList(tasks);
pageInfo.setTotal(count); //总条数
pageInfo.setSize(tasks.size()); //总条数
pageInfo.setPages(((int)Math.ceil((double)count/(double)pageSize))); //总页数
pageInfo.setPageNum(pageNum); //页数
pageInfo.setPageSize(pageSize); //每页条数
return JsonData.success(pageInfo);
// return getPageInfo(tasks, pageNum, pageSize);
}
@ApiOperation(value = "查询已办任务", notes = "查询已办任务")
@PostMapping(value = "/findDoneTasks")
@OperLog(operModul = "流程管理", operType = "查询", operDesc = "查询已办任务")
public JsonData findDoneTasks(@RequestParam(value = "assignee", required = false) String assignee,//分配人
String taskName,
@RequestParam(value = "pageNum", required = false) int pageNum,
@RequestParam(value = "pageSize", required = false) int pageSize) {
//判断用户名是否为空
if (StringUtils.isEmpty(assignee)) {
//用户名若为空获取一下用户名
assignee = SecurityUtils.getCurrentUser().getUsername();
}
List<HistoricTaskInstance> taskList = null;
//总条数
long count = 0;
//判断任务名称是否为空,为空就查询全部,不为空就按模糊查询
if (StringUtils.isEmpty(taskName)) {
taskList = historyService.createHistoricTaskInstanceQuery()
.taskAssignee(assignee).orderByTaskCreateTime().desc()
.finished().listPage(pageNum * pageSize - pageSize, pageSize);
count = historyService.createHistoricTaskInstanceQuery()
.taskAssignee(assignee).orderByTaskCreateTime().desc()
.finished().count();
} else {
taskList = historyService.createHistoricTaskInstanceQuery().taskNameLike(taskName)
.taskAssignee(assignee).orderByTaskCreateTime().desc()
.finished().listPage(pageNum * pageSize - pageSize, pageSize);
count = historyService.createHistoricTaskInstanceQuery().taskNameLike(taskName)
.taskAssignee(assignee).orderByTaskCreateTime().desc()
.finished().count();
}
List<Tasks> tasks = new ArrayList<>();
//任务标题
String taskTitle = "";
String actReProcdefName = "";
String actReProcdefKey = "";
//页面地址
String pageAddress = "";
String id = "";
Map<String, Object> map = new HashMap<>();
for (HistoricTaskInstance task : taskList) {
//根据ID获取name
ProcessDefinition pd = repositoryService
.createProcessDefinitionQuery()
.processDefinitionId(task.getProcessDefinitionId())
.singleResult();
actReProcdefKey = pd.getKey();
actReProcdefName = pd.getName();
if (actReProcdefName.indexOf("QualityAlarmProcess") >= 0)
actReProcdefName = "质量报警";
else if (actReProcdefName.indexOf("RainPrevention") >= 0)
actReProcdefName = "防雨防汛";
else if (actReProcdefName.indexOf("StopAlarmProcess") >= 0)
actReProcdefName = "停机报警";
else if (actReProcdefName.indexOf("ColdPrevention") >= 0)
actReProcdefName = "防寒防冻";
else if (actReProcdefName.indexOf("MeetingProcess") >= 0)
actReProcdefName = "会议纪要";
else if (actReProcdefName.indexOf("SteelProcess") >= 0)
actReProcdefName = "钢种物料";
// map.put("activityId", task.getId());
map.put("processInstanceId", task.getProcessInstanceId());
Map<String, String> map1 = getProcessMap(map, actReProcdefKey, task.getFormKey());
taskTitle = map1.get("taskTitle");
id = map1.get("id");
pageAddress = map1.get("pageAddress");
tasks.add(new Tasks()
.setId(id)
.setActivityId(task.getId())
.setOwner(task.getOwner())
.setExecutionId(task.getExecutionId())
.setActReProcdefName(actReProcdefName)
.setCreateTime(task.getCreateTime())
.setName(task.getName())
.setAssignee(task.getAssignee())
.setPriority(task.getPriority())
.setTaskTitle(taskTitle)
.setPageAddress(pageAddress));
}
PageInfo pageInfo = new PageInfo();
pageInfo.setList(tasks);
pageInfo.setTotal(count); //总条数
pageInfo.setSize(tasks.size()); //总条数
pageInfo.setPages(((int)Math.ceil((double)count/(double)pageSize))); //总页数
pageInfo.setPageNum(pageNum); //页数
pageInfo.setPageSize(pageSize); //每页条数
return JsonData.success(pageInfo);
// return getPageInfo(tasks, pageNum, pageSize);
}
public Map<String,String> getProcessMap(Map<String, Object> map,String actReProcdefKey,String formKey){
//任务标题
String taskTitle = "";
//页面地址
String pageAddress = "";
String id = "";
if ("qualityAlarmProcess".equals(actReProcdefKey)) {//质量报警
List<QAM001> list = qam001Service.selectByMap(map);
if (list.size() > 0) {
taskTitle = list.get(0).getProblemName();
id = list.get(0).getId();
}
pageAddress = "/QualityAlarmManagement/ProcessManagement/"+formKey;
} else if ("rainPrevention".equals(actReProcdefKey)) { //防雨防汛
List<FWR0001> list = fwr0001Service.selectByMap(map);
if (list.size() > 0) {
taskTitle = list.get(0).getTitle();
id = list.get(0).getId();
}
pageAddress = "/forecastWeather/rainprocess/"+formKey;
} else if ("stopAlarmProcess".equals(actReProcdefKey)) { //停机报警
List<OAM001> list = oam001Service.selectByMap(map);
if (list.size() > 0) {
taskTitle = list.get(0).getStopTitle();
id = list.get(0).getId();
}
pageAddress = "/OutageAlarmManagement/stopalarmprocess/"+formKey;
} else if ("coldPrevention".equals(actReProcdefKey)) {//防寒防冻
List<FWC0001> list = fwc0001Service.selectByMap(map);
if (list.size() >0) {
taskTitle = list.get(0).getTitle();
id = list.get(0).getId();
}
pageAddress = "/ColdPrevention/ColdPreventionFlow/"+formKey;
} else if ("meetingProcess".equals(actReProcdefKey)) {//会议纪要
List<CMM001> list = cmm001Service.selectByMap(map);
if (list.size() >0) {
taskTitle = list.get(0).getTitle();
id = list.get(0).getId();
}
pageAddress = "/meetingMinutes/meetingProcess/"+formKey;
}else if ("steelProcess".equals(actReProcdefKey)) {//钢种物料
List<SteelMain> list = steelMainService.selectByMap(map);
if (list.size() >0) {
taskTitle = list.get(0).getTitle();
id = list.get(0).getId();
}
pageAddress = "/steelMaterial/submission/"+formKey;
}
Map<String,String> map1 = new HashMap<>();
map1.put("id",id);
map1.put("taskTitle",taskTitle);
map1.put("pageAddress",pageAddress);
return map1;
}
//对传进来的list进行分页操作
public JsonData getPageInfo(List<Tasks> tasks,int pageNum,int pageSize){
if (tasks.size() == 0)
return JsonData.success(tasks);
int count = tasks.size();
int pageCount = 0;
if (count % pageSize == 0) {
pageCount = count / pageSize;
} else {
pageCount = count / pageSize + 1;
}
int fromIndex = 0;
int toIndex = 0;
if (pageNum > pageCount)
pageNum = pageCount;
if (!((Integer) pageNum).equals(pageCount)) {
fromIndex = (pageNum - 1) * pageSize;
toIndex = fromIndex + pageSize;
} else {
fromIndex = (pageNum - 1) * pageSize;
toIndex = count;
}
List<Tasks> list = tasks.subList(fromIndex, toIndex);
PageInfo pageInfo = new PageInfo();
pageInfo.setList(list);
pageInfo.setTotal(count);
pageInfo.setSize(count);
pageInfo.setPages(pageCount);
pageInfo.setPageNum(pageNum);
pageInfo.setPageSize(pageSize);
return JsonData.success(pageInfo);
}
}
查询流程任务历史、动态获取流程图接口
@ApiOperation(value = "查询流程任务历史", notes = "查询流程任务历史")
@PostMapping(value = "/findTaskHistory")
@OperLog(operModul = "流程管理", operType = "查询", operDesc = "查询流程任务历史")
public JsonData findTaskHistory(@RequestParam String taskId) {
HistoricTaskInstance taskInstance = historyService.createHistoricTaskInstanceQuery().taskId(taskId).singleResult();
List<HistoricTaskInstance> historyList = historyService.createHistoricTaskInstanceQuery()
.processInstanceId(taskInstance.getProcessInstanceId())
.orderByHistoricTaskInstanceEndTime()
.asc()
.list();
return JsonData.success(historyList, "查询成功");
}
@ApiOperation(value = "动态获取流程图", notes = "动态获取流程图")
@PostMapping(value = "/getProcessImage")
@OperLog(operModul = "流程管理", operType = "动态获取流程图", operDesc = "动态获取流程图")// 操作说明) //这里添加了AOP的自定义注解
public void getProcessImage(@RequestParam("taskId") String taskId, HttpServletRequest request, HttpServletResponse response) {
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
// 取出流程定义ID
String processDefinitionId = task.getProcessDefinitionId();
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
// 从流程定义对象里面得到图片的名称
String resourceName = processDefinition.getDiagramResourceName();
//获取bpmn模型
BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
FlowElement flowElement = bpmnModel.getFlowElement(task.getTaskDefinitionKey());
GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowElement.getId());
ProcessDiagramGenerator processDiagramGenerator = processEngine.getProcessEngineConfiguration().getProcessDiagramGenerator();
//使用宋体
String fontName = "宋体";
//获取流程实例当前的节点,需要高亮显示
List<String> currentActs = runtimeService.getActiveActivityIds(task.getProcessInstanceId());
InputStream stream = processDiagramGenerator.generateDiagram(bpmnModel, "png", currentActs, new ArrayList<>(), fontName, fontName, fontName, null, 1.0);
BufferedImage image = null;
try {
image = ImageIO.read(stream);
OutputStream outputStream = response.getOutputStream();
ImageIO.write(image, "png", outputStream);
stream.close();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
最开始写的待办任务接口
import cloud.main.service.contants.JsonData;
import cloud.main.service.dto.OperLog;
import cloud.main.service.util.SecurityUtils;
import io.swagger.annotations.ApiOperation;
import org.activiti.engine.TaskService;
import org.activiti.engine.impl.persistence.entity.TaskEntityImpl;
import org.activiti.engine.task.Task;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping("/task")
public class TaskController {
@Autowired
public TaskService taskService;
@ApiOperation(value = "查询待办任务", notes = "查询待办任务")
@PostMapping(value = "/findToDoTasks")
@OperLog(operModul = "流程管理", operType = "查询", operDesc = "查询待办任务")
public JsonData findToDoTasks(@RequestParam(value = "assignee", required = false) String assignee,//分配人
@RequestParam(value = "pageNum", required = false) int pageNum,
@RequestParam(value = "pageSize", required = false) int pageSize) {
if (StringUtils.isEmpty(assignee)) {
assignee = SecurityUtils.getCurrentUser().getUsername();
}
//调用service方法获取到Task集合
List<Task> taskList = taskService.createTaskQuery()
.taskCandidateOrAssigned(assignee).orderByTaskCreateTime().desc()
.listPage(pageNum * pageSize - pageSize, pageSize);
List<Object> list = new ArrayList<>();
//将获取到的Task类接口转换成Task类对象并存到list中
taskList.forEach(task -> list.add(getTaskObject(task)));
return JsonData.success(list);
}
/**
* 将 Task类接口 转换成 Task类对象
* @param task
* @return
*/
private Object getTaskObject(Task task){
TaskEntityImpl taskEntity = new TaskEntityImpl();
try{
taskEntity = (TaskEntityImpl) task;
} catch (Exception e) {
e.printStackTrace();
}
return taskEntity.getPersistentState();
}
}