wuxw
2019-11-06 53b8bf23182c764c1e38039436d5faddfa34b0e4
CommonService/src/main/java/com/java110/common/smo/impl/ResourceEntryStoreInnerServiceSMOImpl.java
@@ -1,17 +1,24 @@
package com.java110.common.smo.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.java110.core.base.smo.BaseServiceSMO;
import com.java110.core.smo.common.IResourceEntryStoreInnerServiceSMO;
import com.java110.dto.PageDto;
import com.java110.dto.resourceStore.ResourceOrderDto;
import com.java110.entity.audit.AuditUser;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -35,95 +42,91 @@
     *
     * @return
     */
    public String startProcess() {
    public ResourceOrderDto startProcess(@RequestBody ResourceOrderDto resourceOrderDto) {
        //将信息加入map,以便传入流程中
        Map<String, Object> variables = new HashMap<String, Object>();
        variables.put("employeeName", "廉斌");
        variables.put("day", 10);
        variables.put("resourceOrderDto", resourceOrderDto);
        //开启流程
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("resourceEntry", variables);
        //将得到的实例流程id值赋给之前设置的变量
        String processInstanceId = processInstance.getId();
        System.out.println("流程开启成功.......实例流程id:" + processInstanceId);
        // System.out.println("流程开启成功.......实例流程id:" + processInstanceId);
        return processInstanceId;
    }
        resourceOrderDto.setProcessInstanceId(processInstanceId);
    public void getTaskAndComplete(String processInstanceId) {
        //获取taskservice实例
        TaskService taskService = processEngine.getTaskService();
        //开始进行流程
        while (this.processEngine.getRuntimeService()
                .createProcessInstanceQuery()//获取查询对象
                .processInstanceId(processInstanceId)//根据id查询流程实例
                .singleResult()//获取查询结果,如果为空,说明这个流程已经执行完毕,否则,获取任务并执行
                != null) {
            Task task = taskService.createTaskQuery()//创建查询对象
                    .processInstanceId(processInstanceId)//通过流程实例id来查询当前任务
                    .singleResult();//获取单个查询结果
            String taskName = task.getName();
            if (taskName.equals("StartEvent")) {//职员节点
                completeEmployeeTask(task);
            } else if (taskName.equals("departmentManager")) {//领导节点
                completeLeaderTask(task);
            } else {//经理节点
                completeJingliTask(task);
            }
        }
        System.out.println("审核结束..........");
    }
    //职员提交申请
    public void completeEmployeeTask(Task task) {
        //获取任务id
        String taskId = task.getId();
        //完成任务
        this.processEngine.getTaskService().complete(taskId);
        System.out.println("职员已经提交申请.......");
    }
    //领导审批
    public void completeLeaderTask(Task task) {
        //获取任务id
        String taskId = task.getId();
        //领导意见
        Map<String, Object> variables = new HashMap<String, Object>();
        //variables.put("day",4);
        variables.put("leaderResult", 1);
        //完成任务
        this.processEngine.getTaskService().complete(taskId, variables);
        System.out.println("领导审核完毕........");
    }
    //经理审批
    public void completeJingliTask(Task task) {
        //获取任务id
        String taskId = task.getId();
        String name = task.getName();
        //经理意见
        Map<String, Object> variables = new HashMap<String, Object>();
        variables.put("result", 0);
        //完成任务
        this.processEngine.getTaskService().complete(taskId, variables);
        System.out.println("经理审核完毕........,审核经理:" + name);
        return resourceOrderDto;
    }
    /**
     * 查询用户任务数
     *
     * <p>描述: 根据用户id查询待办任务列表</p>
     * @author 范相如
     * @date 2018年2月25日
     * @param user
     * @return
     */
    public List<Task> findTasksByUserId(String userId) {
        List<Task> resultTask = taskService.createTaskQuery().processDefinitionKey("demo5").taskCandidateOrAssigned(userId).list();
        return resultTask;
    public long getUserTaskCount(@RequestBody AuditUser user) {
        TaskService taskService = processEngine.getTaskService();
        TaskQuery query = taskService.createTaskQuery().processDefinitionKey("resourceEntry");
        query.taskAssignee(user.getUserId());
        return query.count();
    }
    /**
     * 获取用户任务
     *
     * @param user 用户信息
     */
    public List<ResourceOrderDto> getUserTasks(@RequestBody AuditUser user) {
        TaskService taskService = processEngine.getTaskService();
        TaskQuery query = taskService.createTaskQuery().processDefinitionKey("resourceEntry");
        query.taskAssignee(user.getUserId());
        query.orderByTaskCreateTime().desc();
        List<Task> list = null;
        if (user.getPage() != PageDto.DEFAULT_PAGE) {
            list = query.listPage(user.getPage(), user.getRow());
        }else{
            list = query.list();
        }
        List<ResourceOrderDto> resourceOrderDtos = new ArrayList<>();
        for (Task task : list) {
            String id = task.getId();
            //System.out.println("tasks:" + JSONObject.toJSONString(task));
            ResourceOrderDto resourceOrderDto = (ResourceOrderDto) taskService.getVariable(id, "resourceOrderDto");
            resourceOrderDto.setTaskId(id);
            resourceOrderDtos.add(resourceOrderDto);
        }
        return resourceOrderDtos;
    }
    public boolean agreeCompleteTask(@RequestBody ResourceOrderDto resourceOrderDto) {
        TaskService taskService = processEngine.getTaskService();
        Map<String, Object> variables = new HashMap<String, Object>();
        variables.put("auditCode", resourceOrderDto.getAuditCode());
        taskService.complete(resourceOrderDto.getTaskId(), variables);
        return true;
    }
    public boolean refuteCompleteTask(@RequestBody ResourceOrderDto resourceOrderDto) {
        TaskService taskService = processEngine.getTaskService();
        Map<String, Object> variables = new HashMap<String, Object>();
        variables.put("auditCode", resourceOrderDto.getAuditCode());
        taskService.complete(resourceOrderDto.getTaskId(), variables);
        return true;
    }
    /**
     * 审核 当前任务
     *
     * @param resourceOrderDto 资源订单
     * @return
     */
    public boolean complete(@RequestBody ResourceOrderDto resourceOrderDto) {
        TaskService taskService = processEngine.getTaskService();
        taskService.complete(resourceOrderDto.getTaskId());
        return true;
    }
}