天天看點

工作流相關API執行個體

相關api 執行個體

基礎部分

1.建立一個流程執行個體

@Override
    public Result createProcessInstance(Paramenter paramenter) {
        Result result = new Result();
        String processInstanceByKey=paramenter.getProcessInstanceByKey();
        try {
            String processInstanceId=ProcessUtils.createProcessInstance(processEngine,processInstanceByKey);
            result.setResult(true);
            result.setCode(ConstCode.OPERAT_SUCCESS);
            result.setData(processInstanceId);
        } catch (Exception e) {
            logger.error("業務流程執行個體化失敗!");
            logger.error(e.getMessage());
            result.setResult(false);
            result.setCode(ConstCode.OPERAT_FAILURE);
            result.setMessage("業務流程執行個體化失敗!");
            result.setError(e.getMessage());
        }
        return result;
    }
           

2.查找任務

@Override
    public Result createProcessInstance(Paramenter paramenter) {
        Result result = new Result();
        String processInstanceByKey=paramenter.getProcessInstanceByKey();
        try {
            String processInstanceId=ProcessUtils.createProcessInstance(processEngine,processInstanceByKey);
            result.setResult(true);
            result.setCode(ConstCode.OPERAT_SUCCESS);
            result.setData(processInstanceId);
        } catch (Exception e) {
            logger.error("業務流程執行個體化失敗!");
            logger.error(e.getMessage());
            result.setResult(false);
            result.setCode(ConstCode.OPERAT_FAILURE);
            result.setMessage("業務流程執行個體化失敗!");
            result.setError(e.getMessage());
        }
        return result;
    }
           

3.執行處理任務

@Override
    public Result completeTask(Paramenter paramenter) {
        Result result = new Result();
        String taskId=paramenter.getTaskId();
        Object signal=paramenter.getSignal();
        try {
            ProcessUtils.completeTask(processEngine, taskId, signal);
            result.setResult(true);
            result.setCode(ConstCode.OPERAT_SUCCESS);
        } catch (Exception e) {
            logger.error("使用者作業處理失敗!");
            logger.error(e.getMessage());
            result.setResult(false);
            result.setCode(ConstCode.OPERAT_FAILURE);
            result.setMessage("使用者作業處理失敗!");
            result.setError(e.getMessage());
        }
        return result;
    }
           

4.查找曆史任務

@Override
    public Result historyTaskList(Paramenter paramenter) {
        Result result = new Result();
        String processInstanceId=paramenter.getProcessInstanceId();
        List<TaskDto> taskDtoList=null;
        TaskDto taskDto=null;
        try {
            List<HistoricTaskInstance> list=ProcessUtils.historyTaskList(processEngine, processInstanceId);
            if(list!=null){
                taskDtoList=new ArrayList<TaskDto>();
                for (HistoricTaskInstance historicTaskInstance : list) {
                    taskDto=new TaskDto();
                    taskDto.setId(historicTaskInstance.getId());
                    taskDto.setExecutionId(historicTaskInstance.getExecutionId());
                    taskDto.setName(historicTaskInstance.getName());
                    taskDto.setProcessInstanceId(historicTaskInstance.getProcessInstanceId());
                    taskDto.setStartTime(historicTaskInstance.getStartTime());
                    taskDto.setEndTime(historicTaskInstance.getEndTime());
                    taskDtoList.add(taskDto);
                }
            }
            result.setResult(true);
            result.setCode(ConstCode.OPERAT_SUCCESS);
            result.setListData(taskDtoList);
        } catch (Exception e) {
            logger.error("檢視流轉日志失敗!");
            logger.error(e.getMessage());
            result.setResult(false);
            result.setCode(ConstCode.OPERAT_FAILURE);
            result.setMessage("檢視流轉日志失敗!");
            result.setError(e.getMessage());
        }
        return result;
    }
           

5查找曆史Activity任務

@Override
    public Result historyActivityList(Paramenter paramenter) {
        Result result = new Result();
        String processInstanceId=paramenter.getProcessInstanceId();
        List<ActivityDto> activityDtoList=null;
        ActivityDto activityDto=null;
        try {
            List<HistoricActivityInstance> list=ProcessUtils.historyActivityList(processEngine, processInstanceId);
            if(list!=null){
                activityDtoList=new ArrayList<ActivityDto>();
                for (HistoricActivityInstance historicActivityInstance : list) {
                    activityDto=new ActivityDto();
                    activityDto.setActivitiId(historicActivityInstance.getActivityId());
                    activityDto.setActivityName(historicActivityInstance.getActivityName());
                    activityDto.setActivityType(historicActivityInstance.getActivityType());
                    activityDto.setDuration(historicActivityInstance.getDurationInMillis());
                    activityDto.setProcessInstanceId(historicActivityInstance.getProcessInstanceId());
                    activityDto.setTaskId(historicActivityInstance.getTaskId());
                    activityDto.setStartTime(historicActivityInstance.getStartTime());
                    activityDto.setEndTime(historicActivityInstance.getEndTime());
                    activityDtoList.add(activityDto);
                }
            }
            result.setResult(true);
            result.setCode(ConstCode.OPERAT_SUCCESS);
            result.setListData(activityDtoList);
        } catch (Exception e) {
            logger.error("檢視流轉日志失敗!");
            logger.error(e.getMessage());
            result.setResult(false);
            result.setCode(ConstCode.OPERAT_FAILURE);
            result.setMessage("檢視流轉日志失敗!");
            result.setError(e.getMessage());
        }
        return result;
    }
           

特殊部分

1.删除任務

@Override
    public Result deleteProcessInstance(Paramenter paramenter) {
        Result result = new Result();
        String processInstanceId=paramenter.getProcessInstanceId();
        String deleteReason=paramenter.getDeleteReason();
        try {
            ProcessUtils.deleteProcessInstance(processEngine, processInstanceId, deleteReason);
            result.setResult(true);
            result.setCode(ConstCode.OPERAT_SUCCESS);
        } catch (Exception e) {
            logger.error("删除業務流程執行個體失敗!");
            logger.error(e.getMessage());
            result.setResult(false);
            result.setCode(ConstCode.OPERAT_FAILURE);
            result.setMessage("删除業務流程執行個體失敗!");
            result.setError(e.getMessage());
        }
        return result;
    }
           

2.挂機和重新開機任務

@Override
    public Result suspendAndActivateProcessInstance(Paramenter paramenter) {
        Result result = new Result();
        String processInstanceId=paramenter.getProcessInstanceId();
        Boolean suspendOrActivate=paramenter.getSuspendOrActivate();
        try {
            ProcessUtils.suspendOrActivateProcessInstance(processEngine, processInstanceId, suspendOrActivate);
            result.setResult(true);
            result.setCode(ConstCode.OPERAT_SUCCESS);
        } catch (Exception e) {
            logger.error("流程的挂起或激活失敗!");
            logger.error(e.getMessage());
            result.setResult(false);
            result.setCode(ConstCode.OPERAT_FAILURE);
            result.setMessage("流程的挂起或激活失敗!");
            result.setError(e.getMessage());
        }
        return result;
    }
           

3.執行任務帶審批内容

@Override
    public Result completeTaskDetail(Paramenter paramenter) {
        Result result = new Result();
        String taskId=paramenter.getTaskId();
        Object signal=paramenter.getSignal();
        String context=paramenter.getContext();
        try {
            ProcessUtils.completeTaskDetail(processEngine, taskId, signal,context);
            result.setResult(true);
            result.setCode(ConstCode.OPERAT_SUCCESS);
        } catch (Exception e) {
            logger.error("使用者作業處理失敗!");
            logger.error(e.getMessage());
            result.setResult(false);
            result.setCode(ConstCode.OPERAT_FAILURE);
            result.setMessage("使用者作業處理失敗!");
            result.setError(e.getMessage());
        }
        return result;

    }
           

4.查找曆史流程執行個體帶審批

@Override
    public Result historyTaskListDetail(Paramenter paramenter) {
        Result result = new Result();
        String processInstanceId=paramenter.getProcessInstanceId();

        String taskId=paramenter.getTaskId();
        List<TaskDto> taskDtoList=null;
        TaskDto taskDto=null;
        try {
            List<HistoricTaskInstance> list=ProcessUtils.historyTaskList(processEngine, processInstanceId);


            if(list!=null){

                taskDtoList=new ArrayList<TaskDto>();
                for (HistoricTaskInstance historicTaskInstance : list) {
                    taskDto=new TaskDto();
                    taskDto.setId(historicTaskInstance.getId());
                    taskDto.setExecutionId(historicTaskInstance.getExecutionId());
                    taskDto.setName(historicTaskInstance.getName());
                    taskDto.setProcessInstanceId(historicTaskInstance.getProcessInstanceId());
                    taskDto.setStartTime(historicTaskInstance.getStartTime());
                    taskDto.setEndTime(historicTaskInstance.getEndTime());
                    String executionId=taskDto.getExecutionId();
                    List<HistoricVariableInstance> lists = processEngine.getHistoryService()  
                            .createHistoricVariableInstanceQuery()//建立一個曆史的流程變量查詢  
                            .processInstanceId(processInstanceId)
                            .executionId(executionId)
                            .variableName("context") 
                            //.taskId(taskDto.getId())
                            .list();  

                        for(HistoricVariableInstance hiv : lists){ 
                            String context=(String) hiv.getValue();
                            taskDto.setContext(context);
                        }  

                    taskDtoList.add(taskDto);
                }  
            }
            result.setResult(true);
            result.setCode(ConstCode.OPERAT_SUCCESS);
            result.setListData(taskDtoList);
        } catch (Exception e) {
            logger.error("檢視流轉日志失敗!");
            logger.error(e.getMessage());
            result.setResult(false);
            result.setCode(ConstCode.OPERAT_FAILURE);
            result.setMessage("檢視流轉日志失敗!");
            result.setError(e.getMessage());
        }
        return result;
    }
           

定義工具類ProcessUtils

public class ProcessUtils {


    /**
     * 流程操作
     * 
     * @param taskId
     *            作業Id
     * @param content
     *            審批内容
     */
    public static void completeTask(ProcessEngine processEngine,String taskId, Object signal) {
        Map<String, Object> variables = new HashMap();
        variables.put("signal", signal);
        processEngine.getTaskService().complete(taskId, variables);
    }


    /**
     * 檢視流轉日志(某一次流程的執行經曆的任務)
     * 
     * @param processInstanceId
     */
    public static List<HistoricTaskInstance> historyTaskList(ProcessEngine processEngine,String processInstanceId) {
        List<HistoricTaskInstance> list = processEngine.getHistoryService().createHistoricTaskInstanceQuery()
                .processInstanceId(processInstanceId)
                // .finished()
                .list();
        return list;
    }
    /**
     * 檢視流轉日志(某一次流程的執行經曆的活動)
     * 
     * @param processInstanceId
     */
    public static List<HistoricActivityInstance> historyActivityList(ProcessEngine processEngine,String processInstanceId) {
        List<HistoricActivityInstance> list = processEngine.getHistoryService().createHistoricActivityInstanceQuery()
                .processInstanceId(processInstanceId)
                // .finished()
                .list();
        return list;
    }

    /**
     * 判斷目前流程是否執行完 0是,1否
     */
    public static String processState(ProcessEngine processEngine,String processInstanceId) {
        ProcessInstance pi = processEngine.getRuntimeService().createProcessInstanceQuery().processInstanceId(processInstanceId)
                .singleResult();
        String flag="1";
        if (pi == null) {
            flag="0";
        } 
        return flag;
    }

    /**
     * 删除目前流程執行個體 
     */
    public static void deleteProcessInstance(ProcessEngine processEngine,String processInstanceId,String deleteReason) {
          processEngine.getRuntimeService().deleteProcessInstance(processInstanceId, deleteReason);
    }

    /**挂起或激活目前流程執行個體 
     * 
     * @param processEngine
     * @param processInstanceId
     * @param suspendOrActivate ture:挂起,false:激活
     * @return
     */
    public static Boolean suspendOrActivateProcessInstance(ProcessEngine processEngine,String processInstanceId,Boolean suspendOrActivate) {
        RuntimeService ru=processEngine.getRuntimeService();
        if(suspendOrActivate){
            //挂起流程執行個體
            ru.suspendProcessInstanceById(processInstanceId);
             //驗證是否挂起
            return ru.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult().isSuspended();
        }if(!suspendOrActivate){
             //激活流程執行個體
            ru.activateProcessInstanceById(processInstanceId);
            //驗證是否激活
            return !ru.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult().isSuspended();
        }
       return false;
    }
    /**
     * 傳回使用者流程作業
     * 
     * @param candidateUser
     * @return
     */
    public static List<Task> findTask(ProcessEngine processEngine,String candidateUser) {
        List<Task> taskList = processEngine.getTaskService().createTaskQuery().taskCandidateUser(candidateUser).list();
        return taskList;
    }


    /** 查詢 曆史任務的使用者清單 */
    public static List<HistoricIdentityLink> findHistoryGroupCandidate(ProcessEngine processEngine,String processInstanceId) {
        // 流程執行個體ID
        List<HistoricIdentityLink> list = processEngine.getHistoryService()
                .getHistoricIdentityLinksForProcessInstance(processInstanceId);
        if (list != null && list.size() > ) {
            for (HistoricIdentityLink identityLink : list) {
                System.out.println("任務ID:" + identityLink.getTaskId());
                System.out.println("使用者ID:" + identityLink.getUserId());
                System.out.println("工作流角色ID:" + identityLink.getGroupId());
            }
        }
        return list;
    }

    /**
     * 建立一個流程執行個體task(流程作業)
     * 
     * @throws Exception
     */
    public static String createProcessInstance(ProcessEngine processEngine,String processInstanceByKey) throws Exception {
        ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey(processInstanceByKey);
        return processInstance.getId();
    }

    /**
     * 建立一個流程執行個體task(流程作業帶業務主鍵)
     * 
     * @param businessKey業務主鍵
     * @return
     * @throws Exception
     */
    public static String createProcessInstance(ProcessEngine processEngine,String processInstanceByKey,String businessKey) throws Exception {
        ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey(processInstanceByKey,
                businessKey);
        return processInstance.getId();
    }

    public static void deploy(ProcessEngine processEngine,String name,String bpmn,String png) throws Exception {
        // 擷取倉庫服務
        RepositoryService repositoryService = processEngine.getRepositoryService();
        // 建立釋出配置對象
        DeploymentBuilder builder = repositoryService.createDeployment();
        // 設定釋出資訊
        builder.name(name)// 添加部署規則的顯示别名
                .addClasspathResource(bpmn)// 添加規則檔案
                .addClasspathResource(png);// 添加規則圖檔
        // 不添加會自動産生一個圖檔不推薦
        // 完成釋出
        builder.deploy();
    }

    public void deployZIP(ProcessEngine processEngine,String name,String zip) throws Exception {
        // 擷取倉庫服務
        RepositoryService repositoryService = processEngine.getRepositoryService();
        // 建立釋出配置對象
        DeploymentBuilder builder = repositoryService.createDeployment();
        // 獲得上傳檔案的輸入流程
        InputStream in = this.getClass().getClassLoader().getResourceAsStream(zip);
        ZipInputStream zipInputStream = new ZipInputStream(in);
        // 設定釋出資訊
        builder.name(name)// 添加部署規則的顯示别名
                .addZipInputStream(zipInputStream);
        // 完成釋出
        builder.deploy();
    }
    /**
     * 流程操作
     * 
     * @param taskId
     *            作業Id
     * @param content
     *            審批内容
     */
    public static void completeTaskDetail(ProcessEngine processEngine,String taskId, Object signal,String context) {
        Map<String, Object> variables = new HashMap();
        variables.put("context", context);
        variables.put("signal", signal);
        processEngine.getTaskService().complete(taskId, variables);

    }

    public static void main(String[] args) throws Exception {
        // 部署
        // deploy();

        // 流程執行個體化
        // String proc_inst_id=createProcessInstance();

        // 目前使用者作業
        // findTask("aa");
        // 處理
        // completeTask("c8452602-08e4-11e7-8486-dc536091e18b","11");

        //historyTaskList("c4c5bfff-08e0-11e7-a7bc-dc536091e18b");

    }
/*  public void setVariableValues() throws Exception {
        TaskService taskService = processEngine.getTaskService();
        String taskId = "";
        String variableName = "";
        taskService.setVariable("", "", "");
    }

    public void getVariableValues() throws Exception {
        TaskService taskService = processEngine.getTaskService();
        String taskId = "";
        String variableName = "";
        taskService.getVariable(taskId, variableName);
    }

    public void setRuVariableValues() throws Exception {
        RuntimeService runtimeService = processEngine.getRuntimeService();
        runtimeService.setVariable("", "", "");
        String taskId = "";
        String variableName = "";
    }

    public void setPVariableValues() throws Exception {
        String processDefinitionKey = "varTest";
        // 建立流程變量
        Map<String, Object> variables = new HashMap<String, Object>();
        variables.put("請假人", "馮小剛");
        // 在啟動時設定流程變量
        ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey,
                variables);
        System.out.println("pid:" + pi.getId());
    }*/
}