1、调整流程启动模板和流程节点获取功能
2、调整文件上传和下载功能
已修改6个文件
652 ■■■■■ 文件已修改
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/VciFileUploadController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebProcessDefineController.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/dao/impl/WebProcessDaoImpl.java 540 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/VciFileObjectServiceImpl.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/VciFileUploadServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebProcessDefineServiceImpl.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/VciFileUploadController.java
@@ -136,6 +136,16 @@
    }
    /**
     * 删除文件
     * @param oids 文件的主键
     * @return 执行结果
     */
    @PostMapping("/deleteFilesPost")
    public BaseResult deleteFilesPost(String oids){
        return deleteFiles(oids);
    }
    /**
     * 读取上传文件的内容
     * @param file 文件的对象
     * @return 内容
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebProcessDefineController.java
@@ -5,6 +5,7 @@
import com.vci.starter.web.annotation.controller.VciUnCheckRight;
import com.vci.starter.web.annotation.log.VciBusinessLog;
import com.vci.starter.web.annotation.permission.VciReferPermission;
import com.vci.starter.web.exception.VciBaseException;
import com.vci.starter.web.pagemodel.*;
import com.vci.starter.web.util.ControllerUtil;
import com.vci.web.pageModel.*;
@@ -212,7 +213,13 @@
         }
         return result;
    }
    /**
     * 获取某个分类下的userid可以使用的流程模板
     * @param type 流程分类
     * @param filterTemplate 指定模板
     * @return 可用的流程模版
     */
    @ResponseBody
    @RequestMapping("/getTemplateByType")
    @VciBusinessLog(operateName="获取流程模板",notStore=true)
@@ -234,7 +241,13 @@
            return BaseResult.fail("没有可用的版本");
        }
    }
    /**
     * 获取流程中定义的所有任务节点
     * @param processOid 流程模版的主键
     * @param maxSecret 数据中的最大密级值
     * @return 该流程模版中所有的任务节点,其中包含所有可以选择的用户
     */
    @ResponseBody
    @RequestMapping("/getAllProcessNode")
    @VciBusinessLog(operateName="获取流程的节点",notStore=true)
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/dao/impl/WebProcessDaoImpl.java
@@ -5,7 +5,6 @@
import com.vci.corba.common.data.UserEntityInfo;
import com.vci.corba.omd.data.BusinessObject;
import com.vci.corba.omd.data.LinkObject;
import com.vci.corba.workflow.WorkflowService;
import com.vci.corba.workflow.WorkflowServicePrx;
import com.vci.corba.workflow.data.*;
import com.vci.frameworkcore.compatibility.SmUserQueryServiceI;
@@ -19,25 +18,29 @@
import com.vci.starter.web.util.BeanUtil;
import com.vci.starter.web.util.VciBaseUtil;
import com.vci.starter.web.util.VciDateUtil;
import com.vci.web.constant.WFVariablesKeyConstant;
import com.vci.web.dao.WebProcessDaoI;
import com.vci.web.model.ProcessInstance;
import com.vci.web.model.ProcessTask;
import com.vci.web.model.WFProcessClassifyDO;
import com.vci.web.model.WFProcessTemplateDO;
import com.vci.web.pageModel.*;
import com.vci.web.service.WebBoServiceI;
import com.vci.web.service.OsLifeCycleServiceI;
import com.vci.web.service.WebBoServiceI;
import com.vci.web.service.WebLoServiceI;
import com.vci.web.util.PlatformClientUtil;
import com.vci.web.util.WebUtil;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.stream.Collectors;
import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
/**
@@ -105,16 +108,16 @@
     * @throws VciBaseException
     */
    private void getCategory() throws VciBaseException {
//        try {
//            ProcessCategoryInfo[] pcia = getWorkService().getProcessCategories("root");
//            if(pcia!=null&&pcia.length>0){
//                for(ProcessCategoryInfo pci : pcia){
//                    categoryMap.put(pci.name.toLowerCase(), pci.id);
//                }
//            }
//        } catch (VCIError e) {
//            WebUtil.getVciBaseException(e);
//        }//平台没有根据分类名称获取流程分类的接口
        try {
            ProcessCategoryInfo[] pcia = getWorkService().getProcessCategories("root");
            if(pcia!=null&&pcia.length>0){
                for(ProcessCategoryInfo pci : pcia){
                    categoryMap.put(pci.name.toLowerCase(), pci.id);
                }
            }
        } catch (PLException e) {
            WebUtil.getVciBaseException(e);
        }
    }
    
    /**
@@ -131,6 +134,7 @@
        WebUtil.alertNotNull(type,"模板分类");
        ProcessDefinitionInfo[] allFlowInType = null;
        if(StringUtils.isBlank(filterTemplate)) {
            //无指定模板情况下,获取模板分类下的所有模板
            type = type.toLowerCase();
            if (categoryMap.isEmpty() || !categoryMap.containsKey(type)) {
                getCategory();
@@ -141,49 +145,58 @@
            } else {
                throw new VciBaseException(msgCodePrefix + "typeNotExist", new String[]{type});
            }
//            try {
//                allFlowInType = getWorkService().getProcessDefinitions(typeOid);
//            } catch (VCIError e) {
//                throw WebUtil.getVciBaseException(e);
//            }
        }else{
            try {
                allFlowInType = getWorkService().getProcessDefinitions(typeOid);
            } catch (PLException e) {
                throw WebUtil.getVciBaseException(e);
            }
        }else{
            List<ProcessDefinitionInfo> infoList = new ArrayList<>();
            VciBaseUtil.str2List(filterTemplate).stream().forEach(name->{
//                try {
//                    String nameUnRev = name;
//                    String revision = "";
//                    if(name.contains("-")){
//                        nameUnRev = name.substring(0,name.lastIndexOf("-"));
//                        revision = name.substring(name.lastIndexOf("-")+1);
//                    }
//                    ProcessDefinitionInfo[] definition = getWorkService().getProcessDefinitionByProcessDefinitionName(nameUnRev, "");
//                    if(definition!=null){
//                        if(StringUtils.isBlank(revision)) {
//                            Collections.addAll(infoList, definition);
//                        }else{
//                            //过滤版本
//                            String finalRevision = revision;
//                            infoList.addAll(Arrays.stream(definition).filter(s -> finalRevision.equalsIgnoreCase(String.valueOf(s.version))).collect(Collectors.toList()));
//                        }
//                    }
//                } catch (VCIError e) {
//                    throw WebUtil.getVciBaseException(e);
//                }
            });
            List<String> templateList = VciBaseUtil.str2List(filterTemplate);
            if(!CollectionUtils.isEmpty(templateList)){
                templateList.forEach(name->{
                    try {
                        String nameUnRev = name;
                        String revision = "";
                        if(name.contains("-")){
                            nameUnRev = name.substring(0,name.lastIndexOf("-"));
                            revision = name.substring(name.lastIndexOf("-")+1);
                        }
                        ProcessDefinitionInfo[] definition = getWorkService().getProcessDefinitionByProcessDefinitionName(nameUnRev, "");
                        if(definition!=null){
                            if(StringUtils.isBlank(revision)) {
                                Collections.addAll(infoList, definition);
                            }else{
                                //过滤版本
                                String finalRevision = revision;
                                infoList.addAll(Arrays.stream(definition).filter(s -> finalRevision.equalsIgnoreCase(String.valueOf(s.version))).collect(Collectors.toList()));
                            }
                        }
                    } catch (PLException e) {
                        throw WebUtil.getVciBaseException(e);
                    }
                });
            }
            allFlowInType = infoList.toArray(new ProcessDefinitionInfo[0]);
        }
        return swapProcessTemplate(allFlowInType, type, showAll);
    }
    /**
     * 根据部署主键,获取流程模板对象
     * @param deployId 部署主键
     * @return
     * @throws VciBaseException
     */
    @Override
    public ProcessTemplateVO getTemplateByDeployId(String deployId) throws VciBaseException {
        WebUtil.alertNotNull(deployId,"流程部署主键");
        ProcessDefinitionInfo pdi = null;
//        try {
//            pdi = getWorkService().getProcessDefinitionByDeployId(deployId.trim());
//        } catch (VCIError e) {
//            throw new VciBaseException(msgCodePrefix + "deployIdNotExist", new String[]{deployId});
//        }
        try {
            pdi = getWorkService().getProcessDefinitionByDeployId(deployId.trim());
        } catch (PLException e) {
            throw new VciBaseException(msgCodePrefix + "deployIdNotExist", new String[]{deployId});
        }
        List<ProcessTemplateVO> proTemplates = swapProcessTemplate(new ProcessDefinitionInfo[]{pdi},"",false);
        if(proTemplates == null || proTemplates.size() == 0){
            throw new VciBaseException(msgCodePrefix + "deployIdNotExist", new String[]{deployId});
@@ -205,7 +218,7 @@
                    pt.setName(pd.name);
                    pt.setStatus(pd.status);
                    pt.setTaskType(type);
//                    pt.setVersion(pd.version);
                    pt.setVersion((int) pd.version);
                    allTemplate.add(pt);
                }
            }
@@ -233,19 +246,27 @@
        }
        return allNode;
    }
    /**
     * 获取流程中的第一个节点的名称
     * @param deployId 部署主键
     * @return
     * @throws VciBaseException
     */
    @Override
    public String getFirstNodeName(String deployId) throws VciBaseException {
        WebUtil.alertNotNull(deployId,"部署主键");
//        try {
//            ProcessTaskInfo firstProcessTask = getWorkService().getFirstProcessTask(deployId);
//            if(firstProcessTask!=null){
//                return firstProcessTask.taskName;
//            }
//        } catch (VCIError e) {
//            throw WebUtil.getVciBaseException(e);
//        }
        try {
            ProcessTaskInfo firstProcessTask = getWorkService().getFirstProcessTask(deployId);
            if(firstProcessTask!=null){
                return firstProcessTask.taskName;
            }
        } catch (PLException e) {
            throw WebUtil.getVciBaseException(e);
        }
        return null;
    }
    /**
     * 获取流程的所有节点名称
     * @param processOid
@@ -271,11 +292,11 @@
    @Override
    public String[] getAllProcessNodeNameByDeploy(String deploymentId) throws VciBaseException{
        String[] allTaskNames = null;
//        try {
//            allTaskNames = getWorkService().getAllTaskNames(deploymentId);
//        } catch (VCIError e) {
//            throw WebUtil.getVciBaseException(e);
//        }
        try {
            allTaskNames = getWorkService().getAllTaskNames(deploymentId);
        } catch (PLException e) {
            throw WebUtil.getVciBaseException(e);
        }
        return allTaskNames;
    }
@@ -285,54 +306,65 @@
     */
    @Override
    public String getJbpmDeploymentId(String processOid) throws VciBaseException{
//        WebUtil.alertNotNull(processOid,"流程模板主键");
//        return getWorkService().getDeploymentID(processOid);
        return null;
        WebUtil.alertNotNull(processOid,"流程模板主键");
        return getWorkService().getDeploymentID(processOid);
    }
    /**
     * 获取流程模板对应的引擎里的部署主键
     * @param executionId
     * @return
     * @throws VciBaseException
     */
    @Override
    public String getJbpmDeploymentIdByExecutionId(String executionId) throws VciBaseException{
        WebUtil.alertNotNull(executionId,"流程执行主键");
//        try {
//            return getWorkService().getDeploymentIdByExecutionId(executionId);
//        } catch (VCIError e) {
//            throw WebUtil.getVciBaseException(e);
//        }
        return null;
        try {
            return getWorkService().getDeploymentIdByExecutionId(executionId);
        } catch (PLException e) {
            throw WebUtil.getVciBaseException(e);
        }
    }
    /**
     * 获取模板中节点设置的负责人
     * @param deploymentId 引擎中的部署主键
     * @param taskName 任务节点名称
     * @return
     * @throws VciBaseException
     */
    @Override
    public ProcessNodeVO getNodePresideUsersByDeploy(String deploymentId, String taskName) throws VciBaseException{
        WebUtil.alertNotNull(taskName,"流程任务名称",deploymentId,"流程引擎中的部署主键");
        ProcessNodeVO pn = new ProcessNodeVO();
//        pn.setName(taskName);
//        try {
//            String[] nodePresideUsers = getWorkService().getCurCandidates(deploymentId, taskName, "", "");
//            if(nodePresideUsers!=null&& nodePresideUsers.length>0){
//                for(String preUsers : nodePresideUsers){
//                    //平台存储的方式是用户;角色;部门;自定义....
//                    if(StringUtils.isNotEmpty(preUsers)){
//                        String[] preUsersSplit = preUsers.split("\\;");
//                        if(preUsersSplit!=null && preUsersSplit.length>0){
//                            if(StringUtils.isNotEmpty(preUsersSplit[0])){
//                                pn.setUsers(preUsersSplit[0]);
//                            }
//                            if(preUsersSplit.length>1 && StringUtils.isNotEmpty(preUsersSplit[1])){
//                                pn.setRoles(preUsersSplit[1]);
//                            }
//                            if(preUsersSplit.length>2 && StringUtils.isNotEmpty(preUsersSplit[2])){
//                                pn.setDepts(preUsersSplit[2]);
//                            }
//                            if(preUsersSplit.length>3 && StringUtils.isNotEmpty(preUsersSplit[3])){
//                                pn.setCustomClass(preUsersSplit[3]);
//                            }
//                        }
//                    }
//                }
//            }
//        } catch (VCIError e) {
//            throw WebUtil.getVciBaseException(e);
//        }
        pn.setName(taskName);
        try {
            String[] nodePresideUsers = getWorkService().getCurCandidates(deploymentId, taskName, "", "");
            if(nodePresideUsers!=null&& nodePresideUsers.length>0){
                for(String preUsers : nodePresideUsers){
                    //平台存储的方式是用户;角色;部门;自定义....
                    if(StringUtils.isNotEmpty(preUsers)){
                        String[] preUsersSplit = preUsers.split("\\;");
                        if(preUsersSplit!=null && preUsersSplit.length>0){
                            if(StringUtils.isNotEmpty(preUsersSplit[0])){
                                pn.setUsers(preUsersSplit[0]);
                            }
                            if(preUsersSplit.length>1 && StringUtils.isNotEmpty(preUsersSplit[1])){
                                pn.setRoles(preUsersSplit[1]);
                            }
                            if(preUsersSplit.length>2 && StringUtils.isNotEmpty(preUsersSplit[2])){
                                pn.setDepts(preUsersSplit[2]);
                            }
                            if(preUsersSplit.length>3 && StringUtils.isNotEmpty(preUsersSplit[3])){
                                pn.setCustomClass(preUsersSplit[3]);
                            }
                        }
                    }
                }
            }
        } catch (PLException e) {
            throw WebUtil.getVciBaseException(e);
        }
        return pn;
    }
    
@@ -353,29 +385,36 @@
        }
        return getNodePresideUsersByDeploy(deploymentId,taskName);
    }
    /**
     * 获取任务的处理人
     * @param executionid 执行主键
     * @param taskName 任务名称
     * @return
     * @throws VciBaseException
     */
    @Override
    public List<ProcessUserVO> getNodePresideUsersByTask(String executionid, String taskName)
            throws VciBaseException{
        WebUtil.alertNotNull(executionid,"流程执行任务",taskName,"任务名称");
//        if("结束".equalsIgnoreCase(taskName)){
//            return null;
//        }
        if("结束".equalsIgnoreCase(taskName)){
            return null;
        }
        //不能使用workitem去查询,因为可能任务还没到
//        String users = getWorkService().getNextTaskAssigner(executionid, taskName);
        String users = getWorkService().getNextTaskAssigner(executionid, taskName);
        List<ProcessUserVO> allProUser = new ArrayList<ProcessUserVO>();
//        if(StringUtils.isNotEmpty(users)){
//            String userIds = users.replace("user:", "");//现在只支持设置用户
//            List<SmUserVO> allUser = userQueryService.listUserByUserIds(WebUtil.str2List(userIds));
//            if(allUser!=null && allUser.size()>0){
//                for(SmUserVO user : allUser){
//                    ProcessUserVO pu = new ProcessUserVO();
//                    BeanUtils.copyProperties(user, pu);
//                    pu.setType("user");
//                    allProUser.add(pu);
//                }
//            }
//        }
        if(StringUtils.isNotEmpty(users)){
            String userIds = users.replace("user:", "");//现在只支持设置用户
            List<SmUserVO> allUser = userQueryService.listUserByUserIds(WebUtil.str2List(userIds));
            if(allUser!=null && allUser.size()>0){
                for(SmUserVO user : allUser){
                    ProcessUserVO pu = new ProcessUserVO();
                    BeanUtils.copyProperties(user, pu);
                    pu.setType("user");
                    allProUser.add(pu);
                }
            }
        }
        return allProUser;
    }
@@ -554,25 +593,30 @@
        BeanUtil.convert(process,processInstanceVO);
        return processInstanceVO;
    }
    /**
     * 获取流程中的变量,平台只支持字符串.....
     * @param executionId
     * @param key
     * @return
     * @throws VciBaseException
     */
    @Override
    public String getVariablesInProcess(String executionId,String key) throws VciBaseException{
        WebUtil.alertNotNull(executionId,"流程执行主键",key,"参数Key");
        UserEntityInfo ueo = new UserEntityInfo();
        SessionInfo si = WebUtil.getCurrentUserSessionInfo();
//        ueo..ip = si.getIp();
        ueo.modules = "流程";
        ueo.userName = si.getUserId();
//        while(StringUtils.countMatches(executionId,".")>1){
//            //说明是子任务,用父任务获取一下变量
//            executionId = executionId.substring(0,executionId.lastIndexOf("."));
//        }
//        try {
//            return getWorkService().getProcessVariable(executionId, key, ueo);
//        } catch (VCIError e) {
//            throw WebUtil.getVciBaseException(e);
//        }
        return null;
        while(StringUtils.countMatches(executionId,".")>1){
            //说明是子任务,用父任务获取一下变量
            executionId = executionId.substring(0,executionId.lastIndexOf("."));
        }
        try {
            return getWorkService().getProcessVariable(executionId, key, ueo);
        } catch (PLException e) {
            throw WebUtil.getVciBaseException(e);
        }
    }
    /**
@@ -675,41 +719,41 @@
    public List<ProcessHistoryVO> getHistory(String executionId) throws VciBaseException{
        WebUtil.alertNotNull(executionId,"流程执行主键");
        List<ProcessHistoryVO> hisList = new ArrayList<ProcessHistoryVO>();
//        FlowApproveHistoryInfo[] historyActivitys = null;
//        try {
//            historyActivitys = getWorkService().getHistoryActivityByProInsIdbyPLM(executionId);
//        } catch (VCIError e) {
//            throw WebUtil.getVciBaseException(e);
//        }
//        //需要去除未处理的重复项
//        for (int i = 0; i < historyActivitys.length; i++) {
//            FlowApproveHistoryInfo historyActivity = historyActivitys[i];
//            ProcessHistoryVO his = new ProcessHistoryVO();
//            his.setTaskName(historyActivity.taskName);
//            his.setOpinin(historyActivity.opinion);//这个是处理方式,就是同意还是不同意
//            his.setCreateTime(historyActivity.createTime);
//            his.setEndTime(historyActivity.endTime);
//            his.setNode(historyActivity.note);
//            his.setAssignee(historyActivity.assignee);
//            his.setExecutionId(historyActivity.executionId);
//            String userIdString = historyActivity.assignee;
//            if(StringUtils.contains(userIdString,":")) {
//                userIdString = userIdString.substring(userIdString.indexOf(":") + 1);
//            }
//            String userShowInfoString = "";
//            SmUserVO user = userQueryService.getUserByUserId(userIdString);
//            if(user != null){
//                userShowInfoString = user.getName() + "(" + user.getId() + ")";
//            }else{
//                userShowInfoString = historyActivity.assignee;
//            }
//            his.setAssigneeName(userShowInfoString);
//            if(StringUtils.isNotBlank(historyActivity.endTime)) {
//                hisList.add(his);
//            }
//            //如果endTime为空表示是待办的,但是服务端的接口中有个问题是,会把会签或者子流程中已经处理的和未处理的混合在一起
//            //直接从待办任务里去查询
//        }
        FlowApproveHistoryInfo[] historyActivitys = null;
        try {
            historyActivitys = getWorkService().getHistoryActivityByProInsIdbyPLM(executionId);
        } catch (PLException e) {
            throw WebUtil.getVciBaseException(e);
        }
        //需要去除未处理的重复项
        for (int i = 0; i < historyActivitys.length; i++) {
            FlowApproveHistoryInfo historyActivity = historyActivitys[i];
            ProcessHistoryVO his = new ProcessHistoryVO();
            his.setTaskName(historyActivity.taskName);
            his.setOpinin(historyActivity.opinion);//这个是处理方式,就是同意还是不同意
            his.setCreateTime(VciDateUtil.date2Str(VciDateUtil.long2Date(historyActivity.createTime), VciDateUtil.DateTimeFormat));
            his.setEndTime(VciDateUtil.date2Str(VciDateUtil.long2Date(historyActivity.endTime), VciDateUtil.DateTimeFormat));
            his.setNode(historyActivity.note);
            his.setAssignee(historyActivity.assignee);
            his.setExecutionId(historyActivity.executionId);
            String userIdString = historyActivity.assignee;
            if(StringUtils.contains(userIdString,":")) {
                userIdString = userIdString.substring(userIdString.indexOf(":") + 1);
            }
            String userShowInfoString = "";
            SmUserVO user = userQueryService.getUserByUserId(userIdString);
            if(user != null){
                userShowInfoString = user.getName() + "(" + user.getId() + ")";
            }else{
                userShowInfoString = historyActivity.assignee;
            }
            his.setAssigneeName(userShowInfoString);
            if(StringUtils.isNotBlank(his.getEndTime())) {
                hisList.add(his);
            }
            //如果endTime为空表示是待办的,但是服务端的接口中有个问题是,会把会签或者子流程中已经处理的和未处理的混合在一起
            //直接从待办任务里去查询
        }
        Map<String,String> conditionMap = new HashMap<String, String>();
        conditionMap.put("businesstype", "5");//本项目没有实际的意义
@@ -763,52 +807,65 @@
    public byte[] getProcessPicture(String executionId, String taskName)
            throws VciBaseException{
        WebUtil.alertNotNull(executionId,"流程执行主键",taskName,"流程任务名称");
//        try {
//            byte[] processChart =  getWorkService().getExecutionImageByExecutionId(executionId, taskName);
//            return processChart;
//        } catch (Throwable e) {
//            String msg = "有可能这个任务关联的流程已经结束或者被终止,不能再查看其流程图了";
//            logger.error(msg,e);
//            throw new VciBaseException(msg);
//        }
        return null;
        try {
            byte[] processChart =  getWorkService().getExecutionImageByExecutionId(executionId, taskName);
            return processChart;
        } catch (Throwable e) {
            String msg = "有可能这个任务关联的流程已经结束或者被终止,不能再查看其流程图了";
            logger.error(msg,e);
            throw new VciBaseException(msg);
        }
    }
    @Override
    public byte[] getProcessTemplatePicture(String executionId)
            throws VciBaseException{
//        WebUtil.alertNotNull(executionId,"流程实例主键");
//        try {
//            byte[] processChart =  getWorkService().getFlowImageByDeployID(executionId);
//            return processChart;
//        } catch (VCIError e) {
//            throw WebUtil.getVciBaseException(e);
//        }
        return null;
    }
    @Override
    public String[] getAllOutComes(String taskOid) throws VciBaseException{
//        try {
//            return getWorkService().getAllOutComes(taskOid);
//        } catch (VCIError e) {
//            throw WebUtil.getVciBaseException(e);
//        }
        return null;
    }
    @Override
    public String getNextTaskName(String executionid, String taskName, String outCome) throws VciBaseException{
//        WebUtil.alertNotNull(executionid,"流程执行主键",taskName,"任务名称");
//        String deployId = getJbpmDeploymentIdByExecutionId(executionid);
//        try {
//            return getWorkService().getNextTaskNameByJbpmId(deployId, taskName, outCome);
//        } catch (VCIError e) {
//            throw WebUtil.getVciBaseException(e);
//        }
        return null;
        WebUtil.alertNotNull(executionId,"流程实例主键");
        try {
            byte[] processChart =  getWorkService().getFlowImageByDeployID(executionId);
            return processChart;
        } catch (PLException e) {
            throw WebUtil.getVciBaseException(e);
        }
    }
    /**
     * 获取任务的路由
     * @param taskOid jbpm中的任务主键
     * @return
     * @throws VciBaseException
     */
    @Override
    public String[] getAllOutComes(String taskOid) throws VciBaseException{
        try {
            return getWorkService().getAllOutComes(taskOid);
        } catch (PLException e) {
            throw WebUtil.getVciBaseException(e);
        }
    }
    /**
     * 获取下一步的任务
     * @param executionid 流程执行主键
     * @param taskName 当前任务的名称
     * @param outCome 路由名称
     * @return 因为有分支的情况,所以下一步任务会有多个
     */
    @Override
    public String getNextTaskName(String executionid, String taskName, String outCome) throws VciBaseException{
        WebUtil.alertNotNull(executionid,"流程执行主键",taskName,"任务名称");
        String deployId = getJbpmDeploymentIdByExecutionId(executionid);
        try {
            return getWorkService().getNextTaskNameByJbpmId(deployId, taskName, outCome);
        } catch (PLException e) {
            throw WebUtil.getVciBaseException(e);
        }
    }
    /**
     * 获取平台的流程服务
     * @return
     */
    @Override
    public WorkflowServicePrx getWorkService() throws VciBaseException{
        if(workService == null){
@@ -848,18 +905,18 @@
            taskAss.userName = "";
        }
        taskAss.TasksName = userId;
//        taskAss.startTime = VciDateUtil.date2Str(startDate, VciDateUtil.DateFormat);
        taskAss.startTime = VciDateUtil.getTime(startDate);
        if(endDate == null){
            endDate = VciDateUtil.getDateAddDay(startDate, 30);//默认最多代理一个月
        }
//        taskAss.endTime = VciDateUtil.date2Str(endDate, VciDateUtil.DateFormat);
//        taskAss.isTrue = isNowEnable?1:0;
        taskAss.endTime = VciDateUtil.getTime(endDate);
        taskAss.isTrue = isNowEnable?true:false;
        taskAss.fromUser =WebUtil.getCurrentUserSessionInfo().getUserId();
//        try {
//            getWorkService().saveOrUpdateTasksAssigned(taskAss, WebUtil.getUserEntityInfo("流程"));
//        } catch (VCIError e) {
//            throw WebUtil.getVciBaseException(e);
//        }
        try {
            getWorkService().saveOrUpdateTasksAssigned(taskAss, WebUtil.getUserEntityInfo("流程"));
        } catch (PLException e) {
            throw WebUtil.getVciBaseException(e);
        }
    }
    
    
@@ -868,32 +925,22 @@
    public void endProxy()
            throws VciBaseException {
        //平台不支持停用启用代理信息..可以查询出来再重新添加。
//        try {
//            UserEntityInfo  uei = WebUtil.getUserEntityInfo( "流程");
//            getWorkService().deleteTasksAssignedByUserName(new String[]{uei.userName}, uei);
//        } catch (VCIError e) {
//            throw WebUtil.getVciBaseException(e);
//        }
        try {
            UserEntityInfo  uei = WebUtil.getUserEntityInfo( "流程");
            getWorkService().deleteTasksAssignedByUserName(new String[]{uei.userName}, uei);
        } catch (PLException e) {
            throw WebUtil.getVciBaseException(e);
        }
    }
    
    @Override
    public TasksAssignedInfo getProxy() throws VciBaseException{
        TasksAssignedInfo assign = null;
//        try {
//            TasksAssignedInfo taskAss = getWorkService().getTasksAssignedByUserName("", WebUtil.getUserEntityInfo( "流程"));
//            if(taskAss!=null && StringUtils.isNotEmpty(taskAss.id)){
//                assign = new TasksAssigned();
//                assign.setId(taskAss.id);
//                assign.setTasksName(taskAss.TasksName);
//                assign.setStartTime(taskAss.startTime);
//                assign.setEndTime(taskAss.endTime);
//                assign.setFromUser(taskAss.fromUser);
//                assign.setIsTrue(taskAss.isTrue);
//                assign.setUserName(taskAss.userName);
//            }
//        } catch (VCIError e) {
//            throw WebUtil.getVciBaseException(e);
//        }
        try {
            assign = getWorkService().getTasksAssignedByUserName("", WebUtil.getUserEntityInfo( "流程"));
        } catch (PLException e) {
            throw WebUtil.getVciBaseException(e);
        }
        return assign;
    }
@@ -905,24 +952,24 @@
     */
    @Override
    public void endProcess(String executionId) throws VciBaseException {
//        try {
        try {
            DataGrid dataGrid  = getDataByProcess(executionId,null);
            //先获取一下
            UserEntityInfo userEntityInfo = WebUtil.getUserEntityInfo("流程");
            String resetStatus = null;
//            try{
//                resetStatus = getWorkService().getProcessVariable(executionId, WFVariablesKeyConstant.RESET_STATUS, userEntityInfo);
//            }catch (Throwable e){
//                logger.error("获取流程的变量出错",e);
//            }
//            getWorkService().endProcessInstanceByplatform(executionId,userEntityInfo);
            try{
                resetStatus = getWorkService().getProcessVariable(executionId, WFVariablesKeyConstant.RESET_STATUS, userEntityInfo);
            }catch (Throwable e){
                logger.error("获取流程的变量出错",e);
            }
            getWorkService().endProcessInstanceByplatform(executionId,userEntityInfo);
            //平台没有自动将业务数据恢复到之前的状态
            if(StringUtils.isNotBlank(resetStatus)){
                resetLcStatusForBusinessData(dataGrid.getData(),resetStatus);
            }
//        } catch (VCIError vciError) {
//            throw WebUtil.getVciBaseException(vciError);
//        }
        } catch (PLException vciError) {
            throw WebUtil.getVciBaseException(vciError);
        }
    }
    private void  resetLcStatusForBusinessData(List<Map> bussinesDataList,String resetStatus) throws VciBaseException{
@@ -1006,12 +1053,11 @@
    @Override
    public byte[] getProcessXmlContent(String jbpmDeploymentId) throws VciBaseException {
        WebUtil.alertNotNull("流程执行主键信息",jbpmDeploymentId);
//        try {
//            return getWorkService().getProcessResource(jbpmDeploymentId,".xml");
//        } catch (VCIError e) {
//            throw WebUtil.getVciBaseException(e);
//        }
        return null;
        try {
            return getWorkService().getProcessResource(jbpmDeploymentId,".xml");
        } catch (PLException e) {
            throw WebUtil.getVciBaseException(e);
        }
    }
    /**
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/VciFileObjectServiceImpl.java
@@ -1,5 +1,7 @@
package com.vci.web.service.impl;
import com.vci.corba.common.PLException;
import com.vci.corba.volume.VolumeServicePrx;
import com.vci.file.dto.VciFileObjectDTO;
import com.vci.file.lcstatuspck.FileLCStatus;
import com.vci.file.pagemodel.VciFileObjectVO;
@@ -15,7 +17,11 @@
import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
import com.vci.web.dao.VciFileObjectDaoI;
import com.vci.web.model.VciFileObjectDO;
import com.vci.web.model.VciFileVolumeDO;
import com.vci.web.service.VciFileObjectServiceI;
import com.vci.web.service.VciFileVolumeServiceI;
import com.vci.web.util.PlatformClientUtil;
import com.vci.web.util.WebUtil;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -60,8 +66,20 @@
    /**
    * 版本和数据对象工具类
    */
    @Autowired
    @Resource
    private RevisionModelUtil revisionModelUtil;
    /**
     * 文件的卷服务
     */
    @Resource
    private VciFileVolumeServiceI vciFileVolumeServiceI;
    /**
     * 平台的客户端
     */
    @Resource
    private PlatformClientUtil platformClientUtil;
    /**
     * 查询所有的文件对象
@@ -496,10 +514,27 @@
    public BaseResult deleteFiles(Collection<String> fileOids) throws VciBaseException {
        Collection<VciFileObjectVO> fileObjectVOS = listVciFileObjectByOids(fileOids);
        if(!CollectionUtils.isEmpty(fileObjectVOS)){
            //我们暂时不删除文件,防止删除错了
            VciBaseUtil.switchCollectionForOracleIn(fileObjectVOS).stream().forEach(fileObjectVOList->{
                vciFileObjectMapper.batchDeleteByOids(fileObjectVOList.stream().map(VciFileObjectVO::getOid).collect(Collectors.toList()));
            });
            //删除仓库中的文件
            //获取文件仓位置
            VciFileVolumeDO vciFileVolumeDO = vciFileVolumeServiceI.getUploadVolume();
            String volumeName = vciFileVolumeDO.getName();
            VolumeServicePrx volumnCorbaService = platformClientUtil.getVolumeService(volumeName);
            if(volumnCorbaService == null){
                throw new VciBaseException("没有获取到卷服务");
            }
            Set<String> filePathSet = fileObjectVOS.stream().map(VciFileObjectVO::getFilePath).collect(Collectors.toSet());
            String[] filePathArr = new String[filePathSet.size()];
            filePathSet.toArray(filePathArr);
            try {
                volumnCorbaService.deleteAllFiles(filePathArr);
            } catch (PLException e) {
                logger.error("卷服务删除仓库中的文件失败:", e);
                logger.error("卷服务删除失败的文件:"+ WebUtil.getJSONStringWithDateFormat(filePathSet));
            }
        }
        return BaseResult.success();
    }
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/VciFileUploadServiceImpl.java
@@ -1,5 +1,6 @@
package com.vci.web.service.impl;
import com.vci.corba.common.PLException;
import com.vci.corba.volume.VolumeServicePrx;
import com.vci.file.constant.VciFileDefaultValueConstant;
import com.vci.file.constant.VciFileLangCodeConstant;
@@ -265,7 +266,7 @@
                long currentTime = volumnCorbaService.getCurrrentTimeMillions();
                in = multipartFile.getInputStream();
                long fileSize = multipartFile.getSize();
                int blockSize = (int)webProperties.getBlockLength()*1024;
                int blockSize = webProperties.getBlockLength()*1024;
                byte[] buffer = new byte[blockSize];
                long temp =0L;
                for(temp = 0L; temp < fileSize - (long)blockSize; temp += (long)blockSize) {
@@ -306,6 +307,18 @@
            sourceFileObject.setFileSize(vciFileObjectDO.getFileSize());
            vciFileObjectMapper.updateByPrimaryKey(sourceFileObject);
            //没办法删除之前的文件,
            String volumeName = vciFileVolumeDO.getName();
            VolumeServicePrx volumnCorbaService = platformClientUtil.getVolumeService(volumeName);
            if(volumnCorbaService == null){
                throw new VciBaseException("没有获取到卷服务");
            }
            try {
                volumnCorbaService.deleteFile(sourceFileObject.getFilePath());
            } catch (PLException e) {
                e.printStackTrace();
                System.out.println("删除仓库中的文件失败:"+e.getMessage());
            }
        }else {
            vciFileObjectMapper.insert(vciFileObjectDO);
        }
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebProcessDefineServiceImpl.java
@@ -238,7 +238,6 @@
                List<ProcessUserVO> pul = copyUsersToProcessNode(users,maxSecret);
                if(isHasCurrentUser){//当前用户放在前面
                    ProcessUserVO pu = new ProcessUserVO();
                    //SessionInfo si = WebUtil.getSessionInfo(request);
                    SessionInfo si = WebUtil.getCurrentUserSessionInfo();
                    pu.setOid(si.getUserOid());
                    pu.setId(si.getUserId());
@@ -305,12 +304,24 @@
        ProcessNodeVO pn = processDao.getNodePresideUsers(processTemplateOid, nodeName);
        return getProcessUsersByNode(pn,-1);
    }
    /**
     * 获取部署id
     * @param executionId 执行主键
     * @return
     * @throws VciBaseException
     */
    @Override
    public String getDeployIdByExecutionId(String executionId) throws VciBaseException {
        return processDao.getJbpmDeploymentIdByExecutionId(executionId);
    }
    /**
     * 获取任务中设置的当前处理人
     * @param taskOid 任务主键
     * @return
     * @throws VciBaseException
     */
    @Override
    public List<ProcessUserVO> getProcessUserByTask(String taskOid) throws VciBaseException{
        List<ProcessTaskVO> task = processDao.getTaskByOid(taskOid);
@@ -321,6 +332,13 @@
        }
    }
    /**
     * 获取我的待办事项--平台不支持查询数据总条数,不清楚在这种情况下,start和pagesize是用来做什么用的
     * @param conditionMap 条件查询
     * @param ph 分页和排序
     * @return
     * @throws VciBaseException
     */
    @Override
    public DataGrid getMyUndoProcessTask(
            Map<String, String> conditionMap, PageHelper ph) throws VciBaseException {
@@ -330,6 +348,13 @@
        return processDao.getUndoTask(conditionMap,ph,WebUtil.getCurrentUserId());
    }
    /**
     * 获取我处理了的任务
     * @param conditionMap 查询条件
     * @param ph 分页信息
     * @return
     * @throws VciBaseException
     */
    @Override
    public DataGrid getMyDoneProcessTask(Map<String, String> conditionMap,
            PageHelper ph) throws VciBaseException {