package org.jeecg.modules.dncFlow.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; import org.flowable.bpmn.model.BpmnModel; import org.flowable.engine.*; import org.flowable.engine.history.HistoricActivityInstance; import org.flowable.image.ProcessDiagramGenerator; import org.flowable.task.api.Task; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.dncFlow.entity.HisWorkTask; import org.jeecg.modules.dncFlow.entity.WorkTaskData; import org.jeecg.modules.dncFlow.entity.WorkTaskDataVo; import org.jeecg.modules.dncFlow.service.IAssignFileStreamService; import org.jeecg.modules.dncFlow.service.IHisWorkTaskService; import org.jeecg.modules.dncFlow.service.IWorkTaskService; import org.jeecg.modules.dncFlow.service.IWorkTaskServiceVo; import org.jeecg.modules.dncFlow.vo.FlowMy; import org.jeecg.modules.flowable.apithird.business.dto.FlowMyBusinessDto; import org.jeecg.modules.flowable.apithird.business.service.impl.FlowMyBusinessServiceImpl; import org.jeecg.modules.flowable.domain.dto.FlowTaskDto; import org.jeecg.modules.flowable.service.IFlowTaskService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; @RestController @RequestMapping("/nc/assign/flow") @Slf4j public class AssignFileStreamFlowController { @Autowired FlowMyBusinessServiceImpl flowMyBusinessService; @Autowired IWorkTaskService workTaskService; @Autowired IFlowTaskService flowTaskService; @Autowired IWorkTaskServiceVo workTaskServicevo; @Autowired IHisWorkTaskService hisWorkTaskService; @Autowired private TaskService taskService; @Autowired private RepositoryService repositoryService; @Autowired private HistoryService historyService; @Autowired private ProcessEngine processEngine; @Autowired private IAssignFileStreamService assignFileStreamService; @GetMapping(value = "/list") public Result> queryPageList(FlowMyBusinessDto flowMyBusinessDto, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { Page page = new Page(pageNo, pageSize); IPage pageList = flowMyBusinessService.findPageList(page, flowMyBusinessDto); pageList.getRecords().forEach(item -> { //去除[] item.setTodoUsers(item.getTodoUsers().replaceAll("\\[", "").replaceAll("\\]", "")); item.setTodoUsers(item.getTodoUsers().replaceAll("\"", "")); item.setDoneUsers(item.getDoneUsers().replaceAll("\\[", "").replaceAll("\\]", "")); item.setDoneUsers(item.getDoneUsers().replaceAll("\"", "")); }); return Result.OK(pageList); } /* * 获取所有任务列表 * */ @GetMapping(value = "/workTasklist") public Result> queryTaskPageList(WorkTaskData workTaskData, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { List list = workTaskService.queryAllworkTask(); IPage pageList = new Page<>(pageNo, pageSize, list.size()); pageList.setRecords(list); return Result.OK(pageList); } @ApiOperation(value = "获取待办列表", response = FlowTaskDto.class) @GetMapping(value = "/todoList") public Result todoList(@ApiParam(value = "当前页码", required = true) @RequestParam (name="pageNum", defaultValue="1") Integer pageNum, @ApiParam(value = "每页条数", required = true) @RequestParam (name="pageSize", defaultValue="10") Integer pageSize) { return flowTaskService.todoList(pageNum, pageSize); } @ApiOperation(value = "获取本身待办", response = FlowTaskDto.class) @GetMapping(value = "/toTaskBySelf") public Result> toTaskBySelf(FlowMy flowMy, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { Page page = new Page(pageNo, pageSize); LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); flowMy.setUsername(user.getUsername()); return Result.OK(workTaskServicevo.toTaskBySelf(flowMy,page)); } @ApiOperation(value = "获取已办任务", response = FlowTaskDto.class) @GetMapping(value = "/finishedList") public Result finishedList(@ApiParam(value = "当前页码", required = true) @RequestParam Integer pageNo, @ApiParam(value = "每页条数", required = true) @RequestParam Integer pageSize) { return flowTaskService.finishedList(pageNo, pageSize); } @ApiOperation(value = "获取工作流历史任务", response = FlowTaskDto.class) @GetMapping(value = "/queryHisTaskList") public Result> queryHisTaskList(@RequestParam(name = "drapprovedataId") String drapprovedataId) { return Result.OK(hisWorkTaskService.queryHisTaskList(drapprovedataId)); } @ApiOperation(value = "审批任务-查看流程图") @GetMapping("/diagramView") public void showImages(@RequestParam(name = "taskId") String taskId, HttpServletResponse response) throws IOException { Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); String processDefinitionId = task.getProcessDefinitionId(); BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId); String processInstanceId = task.getProcessInstanceId(); List historyProcess = historyService.createHistoricActivityInstanceQuery() .processInstanceId(processInstanceId) .finished() .list(); List activityIds = new ArrayList<>(); List flows = new ArrayList<>(); for (HistoricActivityInstance hi : historyProcess) { String activityType = hi.getActivityType(); if (activityType.equals("sequenceFlow") || activityType.equals("exclusiveGateway")) { flows.add(hi.getActivityId()); } else if (activityType.equals("userTask") || activityType.equals("startEvent")) { activityIds.add(hi.getActivityId()); } } activityIds.add(task.getTaskDefinitionKey()); ProcessEngineConfiguration engConf = processEngine.getProcessEngineConfiguration(); ProcessDiagramGenerator processDiagramGenerator = engConf.getProcessDiagramGenerator(); InputStream in = processDiagramGenerator.generateDiagram(bpmnModel, "png", activityIds, flows, engConf.getActivityFontName(), engConf.getLabelFontName(), engConf.getAnnotationFontName(), engConf.getClassLoader(), 1.0, true); OutputStream out = response.getOutputStream(); byte[] buf = new byte[1024]; int length = 0; while ((length = in.read(buf)) != -1) { out.write(buf, 0, length); } in.close(); out.close(); } }