0
点赞
收藏
分享

微信扫一扫

activity待办任务、已办任务接口

爱动漫建模 2022-04-23 阅读 26
java

返回的实体类

@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();
    }

}
举报

相关推荐

0 条评论