wang1
2023-06-20 3672a4696bd5299ebad37ed6d5afd4dfa13123b8
主数据流程查询下一步按钮、流程中主数据参数
已修改17个文件
已删除1个文件
已重命名1个文件
15059 ■■■■■ 文件已修改
Source/UBCS-WEB/package-lock.json 14758 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/vue.config.js 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/service/impl/FlowBusinessServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowModelController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowProcessTSController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowTaskUserController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/VCIFlowController.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowTaskDTO.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/FlowEngineService.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/FlowTaskUserService.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/ProcessStageAttrService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/ProcessTemplateService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/VICFlowService.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/FlowEngineServiceImpl.java 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/FlowTaskUserServiceImpl.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/ProcessStageAttrServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/ProcessTemplateServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/VCIFlowserviceImpl.java 75 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/ProcessTemplateTypeEnum.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/package-lock.json
ÎļþÒÑɾ³ý
Source/UBCS-WEB/vue.config.js
@@ -26,18 +26,9 @@
    proxy: {
      '/api': {
        //本地服务接口地址
        // target: 'http://localhost:37000',
        // target: 'http://localhost:37000',
        // target: 'http://192.168.1.51:37000',
        target: 'http://192.168.1.46:37000',
        // target: 'http://dev.vci-tech.com:37000',
        // target: 'http://192.168.1.51:37000/',
        //   target: 'http://192.168.1.104:37000',
        // target: 'http://192.168.1.63:37000',
         target: 'http://localhost:37000',
        //target: 'http://192.168.3.7:37000',
        // target: 'http://dev.vci-tech.com:37000',
        //target: 'http://192.168.1.51:37000/',
        // target:'http://192.168.1.104:37000',
        //target: 'http://dev.vci-tech.com:37000',
        //远程演示服务地址,可用于直接启动项目
        // target: 'https://saber.bladex.vip/api',
        ws: true,
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/service/impl/FlowBusinessServiceImpl.java
@@ -264,7 +264,6 @@
            variables = Kv.create();
        }
        variables.put(ProcessConstant.PASS_KEY, flow.isPass());
        variables.put("yn","y");
        // å®Œæˆä»»åŠ¡
        taskService.complete(taskId, variables);
        return true;
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowModelController.java
@@ -69,7 +69,6 @@
            .select("id,model_key modelKey,name,description,version,created,last_updated lastUpdated")
            .orderByDesc("last_updated"));
        flowEngineService.getNodeByFlowableKey("process_t");
        return R.data(pages);
    }
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowProcessTSController.java
@@ -2,8 +2,7 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.vci.ubcs.flow.engine.entity.FlowTaskUser;
import com.vci.ubcs.flow.engine.entity.FlowTaskUserC;
import com.vci.ubcs.flow.engine.entity.FlowTaskDTO;
import com.vci.ubcs.flow.engine.entity.ProcessStageAttr;
import com.vci.ubcs.flow.engine.entity.ProcessTemplate;
import com.vci.ubcs.flow.engine.service.FlowEngineService;
@@ -81,7 +80,7 @@
     * æµç¨‹é˜¶æ®µï¼Œè¿™ä¸ªæµç¨‹çš„各个节点
     */
    @GetMapping("/sslist")
    public R<List<Map<String,String>>> sslist(@RequestParam String modelKey) {
    public R<List<FlowTaskDTO>> sslist(@RequestParam String modelKey) {
        return R.data(flowEngineService.getNodeByFlowableKey(modelKey));
    }
@@ -105,7 +104,7 @@
     * @return
     */
    @PostMapping("sasou")
    public R<ProcessTemplate> stageAttributeSaveOrUpdate(@RequestBody FlowTaskUserC flowTaskUserC) {
    public R<ProcessTemplate> stageAttributeSaveOrUpdate(@RequestBody FlowTaskDTO flowTaskUserC) {
        processStageAttrService.saveOrUpdateUser(flowTaskUserC);
        return R.success("保存成功");
    }
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowTaskUserController.java
@@ -1,14 +1,11 @@
package com.vci.ubcs.flow.engine.controller;
import com.vci.ubcs.flow.engine.entity.FlowTaskUserC;
import com.vci.ubcs.flow.engine.service.FlowEngineService;
import com.vci.ubcs.flow.engine.entity.FlowTaskDTO;
import com.vci.ubcs.flow.engine.service.FlowTaskUserService;
import lombok.AllArgsConstructor;
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
@@ -40,7 +37,7 @@
     * @return
     */
    @PostMapping("su")
    public R<String> saveUser(@RequestBody FlowTaskUserC flowTaskUserC) {
    public R<String> saveUser(@RequestBody FlowTaskDTO flowTaskUserC) {
        taskUserService.saveOrUpdateUser(flowTaskUserC);
        return R.success("保存成功");
    }
@@ -51,7 +48,7 @@
     * @return
     */
    @PostMapping("du")
    public R<String> deleteUser(@RequestBody FlowTaskUserC flowTaskUserC) {
    public R<String> deleteUser(@RequestBody FlowTaskDTO flowTaskUserC) {
        taskUserService.deleteUser(flowTaskUserC.getName());
        return R.success("删除成功");
    }
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/VCIFlowController.java
@@ -1,8 +1,7 @@
package com.vci.ubcs.flow.engine.controller;
import com.vci.ubcs.flow.core.entity.BladeFlow;
import com.vci.ubcs.flow.engine.entity.FlowTaskUserC;
import com.vci.ubcs.flow.engine.service.FlowTaskUserService;
import com.vci.ubcs.flow.engine.entity.FlowTaskDTO;
import com.vci.ubcs.flow.engine.service.VICFlowService;
import lombok.AllArgsConstructor;
import org.springblade.core.tenant.annotation.NonDS;
@@ -10,6 +9,8 @@
import org.springframework.web.bind.annotation.*;
import java.util.List;
import static com.vci.ubcs.flow.engine.service.impl.VCIFlowserviceImpl.NODE_NEXT;
/**
@@ -30,15 +31,15 @@
     * @return
     */
    @PostMapping("start")
    public R<BladeFlow> list(@RequestBody FlowTaskUserC flowTaskUserC) {
    public R<BladeFlow> list(@RequestBody FlowTaskDTO flowTaskUserC) {
        return vicFlowService.startProcess(flowTaskUserC);
    }
    /**
     * æµç¨‹é¢„测
     * æµç¨‹é¢„测,流程任务按钮
     */
    @PostMapping("a")
    public R<BladeFlow> a(@RequestBody FlowTaskUserC flowTaskUserC) {
        return vicFlowService.startProcess(flowTaskUserC);
    @PostMapping("next")
    public R<FlowTaskDTO> next(@RequestBody FlowTaskDTO flowTaskUserC) {
        return R.data(vicFlowService.nextFlowNode(NODE_NEXT,flowTaskUserC.getProcessInstanceId()));
    }
}
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowTaskDTO.java
ÎļþÃû´Ó Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowTaskUserC.java ÐÞ¸Ä
@@ -20,6 +20,7 @@
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
 * æµç¨‹èŠ‚ç‚¹å®¡æ ¸äººæ”¶è—
@@ -27,12 +28,13 @@
 * @author wang1
 */
@Data
public class FlowTaskUserC implements Serializable {
public class FlowTaskDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    private String createdBy;
    private String name;//保存的这个收藏名称
    private String processInstanceId;//流程实例id
    private String modelKey;
    private String modelName;
    private String processName;
@@ -46,5 +48,18 @@
    private List<ProcessStageAttr> processStageAttr;//流程阶段保存的属性
    private List<String> ids;//流程发起中传递过来的数据id
    //流程驳回路径
    private String toName;//同意、驳回
    private String toTaskName;//同意、驳回到的下一个节点
    private String toTaskId;//同意、驳回到的下一个节点
    private String condition;//同意、驳回到的下一个节点的条件
    private String conditionKey;//同意、驳回到的下一个节点的条件key
    private String conditionValue;//同意、驳回到的下一个节点的条件value
    //流程中参数
    private List<FlowTaskDTO> toTasks;//流程下一步按钮
    private Map<String, Object> vars;//流程参数
}
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/FlowEngineService.java
@@ -22,8 +22,8 @@
import com.vci.ubcs.flow.engine.entity.FlowExecution;
import com.vci.ubcs.flow.engine.entity.FlowModel;
import com.vci.ubcs.flow.engine.entity.FlowProcess;
import com.vci.ubcs.flow.engine.entity.FlowTaskDTO;
import org.springframework.web.multipart.MultipartFile;
import org.w3c.dom.Document;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
@@ -171,8 +171,14 @@
     * @param key
     * @return
     */
    List<Map<String,String>> getNodeByFlowableKey(String key);
    List<FlowTaskDTO> getNodeByFlowableKey(String key);
    String getTaskIdString();
    /**
     * æ ¹æ®æµç¨‹æ¨¡åž‹key获取XML中节点配置的处理人,读取节点名称和配置的值,流程模型key已经限制不重复
     *
     * @param key
     * @return
     */
    FlowTaskDTO getNodeByFlowableKey(String key, String taskId);
}
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/FlowTaskUserService.java
@@ -16,15 +16,10 @@
 */
package com.vci.ubcs.flow.engine.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vci.ubcs.flow.core.entity.BladeFlow;
import com.vci.ubcs.flow.engine.entity.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
 * FlowService
@@ -45,7 +40,7 @@
     * @param flowTaskUserC
     * @return
     */
    void saveOrUpdateUser(FlowTaskUserC flowTaskUserC);
    void saveOrUpdateUser(FlowTaskDTO flowTaskUserC);
    /**
     * åˆ é™¤æµç¨‹å®¡æ ¸äººå‘˜
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/ProcessStageAttrService.java
@@ -17,10 +17,8 @@
package com.vci.ubcs.flow.engine.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vci.ubcs.flow.engine.entity.FlowTaskUserC;
import com.vci.ubcs.flow.engine.entity.FlowTaskDTO;
import com.vci.ubcs.flow.engine.entity.ProcessStageAttr;
import java.util.List;
/**
 * æµç¨‹é˜¶æ®µæœåŠ¡
@@ -34,6 +32,6 @@
     * @param flowTaskUserC
     * @return
     */
    void saveOrUpdateUser(FlowTaskUserC flowTaskUserC);
    void saveOrUpdateUser(FlowTaskDTO flowTaskUserC);
}
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/ProcessTemplateService.java
@@ -17,10 +17,7 @@
package com.vci.ubcs.flow.engine.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vci.ubcs.flow.engine.entity.FlowTaskUser;
import com.vci.ubcs.flow.engine.entity.FlowTaskUserC;
import com.vci.ubcs.flow.engine.entity.ProcessTemplate;
import com.vci.ubcs.starter.web.enumpck.ProcessTemplateTypeEnum;
import java.util.List;
import java.util.Map;
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/VICFlowService.java
@@ -16,10 +16,8 @@
 */
package com.vci.ubcs.flow.engine.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vci.ubcs.flow.core.entity.BladeFlow;
import com.vci.ubcs.flow.engine.entity.FlowTaskUser;
import com.vci.ubcs.flow.engine.entity.FlowTaskUserC;
import com.vci.ubcs.flow.engine.entity.FlowTaskDTO;
import org.springblade.core.tool.api.R;
/**
@@ -33,5 +31,14 @@
     * å¯åŠ¨æµç¨‹
     * @return
     */
    R<BladeFlow> startProcess(FlowTaskUserC flowTaskUserC);
    R<BladeFlow> startProcess(FlowTaskDTO flowTaskUserC);
    /**
     * æµç¨‹å®¡æ‰¹ä¸­ä¸‹ä¸€æ­¥æŒ‰é’®
     * @param node
     * @param processInstanceId
     * @return
     */
    FlowTaskDTO nextFlowNode(String node, String processInstanceId);
}
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/FlowEngineServiceImpl.java
@@ -16,8 +16,6 @@
 */
package com.vci.ubcs.flow.engine.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -29,6 +27,7 @@
import com.vci.ubcs.flow.engine.entity.FlowExecution;
import com.vci.ubcs.flow.engine.entity.FlowModel;
import com.vci.ubcs.flow.engine.entity.FlowProcess;
import com.vci.ubcs.flow.engine.entity.FlowTaskDTO;
import com.vci.ubcs.flow.engine.mapper.FlowMapper;
import com.vci.ubcs.flow.engine.service.FlowEngineService;
import com.vci.ubcs.flow.engine.utils.FlowCache;
@@ -37,7 +36,6 @@
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.flowable.bpmn.converter.BpmnXMLConverter;
import org.flowable.bpmn.model.*;
@@ -51,7 +49,6 @@
import org.flowable.engine.impl.persistence.entity.ExecutionEntityImpl;
import org.flowable.engine.impl.persistence.entity.ProcessDefinitionEntityImpl;
import org.flowable.engine.repository.Deployment;
import org.flowable.engine.repository.DeploymentQuery;
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.engine.repository.ProcessDefinitionQuery;
import org.flowable.engine.runtime.ProcessInstance;
@@ -67,17 +64,12 @@
import org.springblade.core.tool.utils.StringUtil;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import org.w3c.dom.*;
import org.xml.sax.InputSource;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringReader;
import java.util.*;
/**
@@ -93,8 +85,6 @@
    private static final String USR_TASK = "userTask";
    private static final String IMAGE_NAME = "image";
    private static final String XML_NAME = "xml";
    private static final String TASKID = "taskId";
    private static final String TASKNAME = "taskName";
    private static final Integer INT_1024 = 1024;
    private static final BpmnJsonConverter BPMN_JSON_CONVERTER = new BpmnJsonConverter();
    private static final BpmnXMLConverter BPMN_XML_CONVERTER = new BpmnXMLConverter();
@@ -500,29 +490,43 @@
     * @return
     */
    @Override
    public List<Map<String,String>> getNodeByFlowableKey(String key){
    public List<FlowTaskDTO> getNodeByFlowableKey(String key){
        String processDefinitionId = repositoryService.createProcessDefinitionQuery().latestVersion().processDefinitionKey(key).singleResult().getId();
        BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
        Process process = bpmnModel.getProcesses().get(0);//只有一个
        List<Map<String,String>> ll = new ArrayList<>();
        List<FlowTaskDTO> ll = new ArrayList<>();
        if (CollectionUtils.isNotEmpty(process.getFlowElements())) {
            for (FlowElement flowElement : process.getFlowElements()) {
                if (flowElement instanceof UserTask) {
                    Map<String,String> mi = new HashMap<>();
                    mi.put(TASKID,flowElement.getId());
                    mi.put(TASKNAME,flowElement.getName());
                    ll.add(mi);
                    FlowTaskDTO flowTaskUserC = new FlowTaskDTO();
                    flowTaskUserC.setTaskId(flowElement.getId());
                    flowTaskUserC.setTaskName(flowElement.getName());
                    ll.add(flowTaskUserC);
                }
            }
        }
        return ll;
    }
    @Override
    public String getTaskIdString(){
        return TASKID;
    public FlowTaskDTO getNodeByFlowableKey(String key, String taskId){
        String processDefinitionId = repositoryService.createProcessDefinitionQuery().latestVersion().processDefinitionKey(key).singleResult().getId();
        BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
        Process process = bpmnModel.getProcesses().get(0);//只有一个
        FlowTaskDTO flowTaskUserC = new FlowTaskDTO();
        if (CollectionUtils.isNotEmpty(process.getFlowElements())) {
            for (FlowElement flowElement : process.getFlowElements()) {
                if (flowElement instanceof UserTask&&taskId.equals(flowElement.getId())) {
                    flowTaskUserC.setTaskId(flowElement.getId());
                    flowTaskUserC.setTaskName(flowElement.getName());
                    break;
                }
            }
        }
        return flowTaskUserC;
    }
    /**
     * æ˜¯å¦å·²å®Œç»“
     *
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/FlowTaskUserServiceImpl.java
@@ -17,68 +17,19 @@
package com.vci.ubcs.flow.engine.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.vci.ubcs.flow.core.entity.BladeFlow;
import com.vci.ubcs.flow.core.enums.FlowModeEnum;
import com.vci.ubcs.flow.core.utils.TaskUtil;
import com.vci.ubcs.flow.engine.constant.FlowEngineConstant;
import com.vci.ubcs.flow.engine.entity.*;
import com.vci.ubcs.flow.engine.mapper.FlowMapper;
import com.vci.ubcs.flow.engine.mapper.FlowTaskUserMapper;
import com.vci.ubcs.flow.engine.mapper.ProcessTemplateMapper;
import com.vci.ubcs.flow.engine.service.FlowEngineService;
import com.vci.ubcs.flow.engine.service.FlowTaskUserService;
import com.vci.ubcs.flow.engine.utils.FlowCache;
import com.vci.ubcs.system.user.cache.UserCache;
import com.vci.ubcs.system.user.entity.User;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.flowable.bpmn.converter.BpmnXMLConverter;
import org.flowable.bpmn.model.BpmnModel;
import org.flowable.bpmn.model.Process;
import org.flowable.common.engine.impl.util.IoUtil;
import org.flowable.common.engine.impl.util.io.StringStreamSource;
import org.flowable.editor.language.json.converter.BpmnJsonConverter;
import org.flowable.engine.*;
import org.flowable.engine.history.HistoricActivityInstance;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.impl.persistence.entity.ExecutionEntityImpl;
import org.flowable.engine.impl.persistence.entity.ProcessDefinitionEntityImpl;
import org.flowable.engine.repository.Deployment;
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.engine.repository.ProcessDefinitionQuery;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.engine.runtime.ProcessInstanceQuery;
import org.flowable.engine.task.Comment;
import org.flowable.image.ProcessDiagramGenerator;
import org.springblade.core.launch.constant.FlowConstant;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.FileUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.StringUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringReader;
import java.util.*;
/**
@@ -120,7 +71,7 @@
        QueryWrapper<FlowTaskUser> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("CREATED_BY", TaskUtil.getTaskUser());
        List<FlowTaskUser> flowTaskUsers = baseMapper.selectList(queryWrapper);
        List<FlowTaskUserC> cl = new ArrayList<>();
        List<FlowTaskDTO> cl = new ArrayList<>();
        Map<String,List<FlowTaskUser>> nameMap = new HashMap<>();
        for(FlowTaskUser flowTaskUser:flowTaskUsers){
@@ -136,7 +87,7 @@
        }
        for (String name:nameMap.keySet()){
            FlowTaskUserC flowTaskUserCR = new FlowTaskUserC();
            FlowTaskDTO flowTaskUserCR = new FlowTaskDTO();
            flowTaskUserCR.setName(name);//收藏名称
            flowTaskUserCR.setModelKey(nameMap.get(name).get(0).getModelKey());
            flowTaskUserCR.setModelName(nameMap.get(name).get(0).getModelName());
@@ -146,13 +97,13 @@
        kv.put("collect",cl);
        //数据节点数据
        List<Map<String,String>> tl = flowEngineService.getNodeByFlowableKey(processTemplate.getModelKey());
        List<FlowTaskDTO> tl = flowEngineService.getNodeByFlowableKey(processTemplate.getModelKey());
        kv.put("user",tl);
        return kv;
    }
    @Override
    public void saveOrUpdateUser(FlowTaskUserC flowTaskUserC){
    public void saveOrUpdateUser(FlowTaskDTO flowTaskUserC){
        List<FlowTaskUser> flowTaskUsers = flowTaskUserC.getFlowTaskUsers();
        String name = flowTaskUserC.getName();//收藏名称
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/ProcessStageAttrServiceImpl.java
@@ -19,7 +19,7 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vci.ubcs.flow.engine.entity.FlowTaskUser;
import com.vci.ubcs.flow.engine.entity.FlowTaskUserC;
import com.vci.ubcs.flow.engine.entity.FlowTaskDTO;
import com.vci.ubcs.flow.engine.entity.ProcessStageAttr;
import com.vci.ubcs.flow.engine.mapper.ProcessStageAttrMapper;
import com.vci.ubcs.flow.engine.service.ProcessStageAttrService;
@@ -49,7 +49,7 @@
     * @return
     */
    @Transactional
    public void saveOrUpdateUser(FlowTaskUserC flowTaskUserC){
    public void saveOrUpdateUser(FlowTaskDTO flowTaskUserC){
        List<ProcessStageAttr> processStageAttrs = flowTaskUserC.getProcessStageAttr();
        String modelKey = flowTaskUserC.getModelKey();
        String templateId = flowTaskUserC.getTemplateId();
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/ProcessTemplateServiceImpl.java
@@ -19,21 +19,14 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vci.ubcs.flow.core.utils.TaskUtil;
import com.vci.ubcs.flow.engine.entity.FlowTaskUser;
import com.vci.ubcs.flow.engine.entity.FlowTaskUserC;
import com.vci.ubcs.flow.engine.entity.ProcessTemplate;
import com.vci.ubcs.flow.engine.mapper.FlowTaskUserMapper;
import com.vci.ubcs.flow.engine.mapper.ProcessTemplateMapper;
import com.vci.ubcs.flow.engine.service.FlowEngineService;
import com.vci.ubcs.flow.engine.service.FlowTaskUserService;
import com.vci.ubcs.flow.engine.service.ProcessTemplateService;
import com.vci.ubcs.starter.web.enumpck.ProcessTemplateTypeEnum;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.launch.constant.FlowConstant;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.support.Condition;
import org.springframework.stereotype.Service;
import java.util.*;
@@ -58,6 +51,7 @@
        //校验这个模板下,一类按钮只能有一个模板
        QueryWrapper<ProcessTemplate> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("button_type_key", processTemplate.getButtonTypeKey());
        queryWrapper.eq("template_id", processTemplate.getTemplateId());
        if(StringUtils.isNotEmpty(processTemplate.getId())) {//修改的时候,id为空就是新增
            queryWrapper.ne("id", processTemplate.getId());
        }
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/VCIFlowserviceImpl.java
@@ -31,7 +31,6 @@
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.task.api.Task;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.support.Kv;
@@ -57,7 +56,7 @@
    private final HistoryService historyService;
    @Override
    public R<BladeFlow> startProcess(FlowTaskUserC flowTaskUserC){
    public R<BladeFlow> startProcess(FlowTaskDTO flowTaskUserC){
        String modelKey = flowTaskUserC.getModelKey();
        String templateId = flowTaskUserC.getTemplateId();
@@ -81,16 +80,16 @@
        }
        //对比配置的审核人员和流程中节点是否一致,可能存在流程节点变更了,多了或者少了节点,但是配置审核人员的节点没有变
        List<Map<String,String>> processTasks = flowEngineService.getNodeByFlowableKey(modelKey);
        for (Map<String,String> mi:processTasks){
            String taskId = mi.get(flowEngineService.getTaskIdString());
            if(!taskIdSet.contains(taskId)){
                throw new ServiceException("流程已重新部署,节点已改变,请设置审核人员!");
            }
        }
        if(taskIdSet.size()!=processTasks.size()){
            throw new ServiceException("流程已重新部署,节点已改变,请设置审核人员!");
        }
//        List<Map<String,String>> processTasks = flowEngineService.getNodeByFlowableKey(modelKey);
//        for (Map<String,String> mi:processTasks){
//            String taskId = mi.get(flowEngineService.getTaskIdString());
//            if(!taskIdSet.contains(taskId)){
//                throw new ServiceException("流程已重新部署,节点已改变,请设置审核人员!");
//            }
//        }
//        if(taskIdSet.size()!=processTasks.size()){
//            throw new ServiceException("流程已重新部署,节点已改变,请设置审核人员!");
//        }
        //流程中文件、变量等
        //do..
@@ -100,46 +99,78 @@
        BladeFlow flow = new BladeFlow();
        flow.setProcessInstanceId(processInstance.getId());
        nextFlowNode("next","039ac1d8-0c1e-11ee-bebb-5c3a4570456d");
        return R.data(flow);
    }
    public static String NODE_NOW = "now";
    public static String NODE_NEXT = "next";
    /**
     * èŽ·å–ä»»åŠ¡èŠ‚ç‚¹
     *
     * @param node   æŸ¥è¯¢èŠ‚ç‚¹é€‰æ‹©
     * @param processInstanceId æµç¨‹å®žä¾‹id
     */
    public void nextFlowNode(String node, String processInstanceId) {
    public FlowTaskDTO nextFlowNode(String node, String processInstanceId) {
        FlowTaskDTO flowTaskDTO = new FlowTaskDTO();
        List<FlowTaskDTO> taskList = new ArrayList<>();//节点按钮
        flowTaskDTO.setToTasks(taskList);
        Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).active().singleResult();
        ExecutionEntity ee = (ExecutionEntity) runtimeService.createExecutionQuery()
            .executionId(task.getExecutionId()).singleResult();
        // å½“前审批节点
        String crruentActivityId = ee.getActivityId();
        BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
        FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(crruentActivityId);
        //这个实例的所有节点
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
        Map<String, Object> processVariables = processInstance.getProcessVariables();//所有参数
        flowTaskDTO.setVars(processVariables);
        String modelKey = processInstance.getProcessDefinitionKey();
        List<FlowTaskDTO> mis = flowEngineService.getNodeByFlowableKey(modelKey);
        // è¾“出连线
        List<SequenceFlow> outFlows = flowNode.getOutgoingFlows();
        for (SequenceFlow sequenceFlow : outFlows) {
            //当前审批节点
            if ("now".equals(node)) {
            if (NODE_NOW.equals(node)) {
                FlowElement sourceFlowElement = sequenceFlow.getSourceFlowElement();
                System.out.println("当前节点: id=" + sourceFlowElement.getId() + ",name=" + sourceFlowElement.getName());
            } else if ("next".equals(node)) {
            } else if (NODE_NEXT.equals(node)) {
                // ä¸‹ä¸€ä¸ªå®¡æ‰¹èŠ‚ç‚¹
                FlowElement targetFlow = sequenceFlow.getTargetFlowElement();
                if (targetFlow instanceof UserTask) {
                    System.out.println("下一节点: id=" + targetFlow.getId() + ",name=" + targetFlow.getName());
                }
                // å¦‚果下个审批节点为结束节点
                if (targetFlow instanceof EndEvent) {
                    System.out.println("下一节点为结束节点:id=" + targetFlow.getId() + ",name=" + targetFlow.getName());
                // å¦‚果下个审批节点为排他网关
                if (targetFlow instanceof ExclusiveGateway) {
                    ExclusiveGateway exclusiveGateway = (ExclusiveGateway) targetFlow;
                    List<SequenceFlow> exclusiveGatewayOutgoingFlows = exclusiveGateway.getOutgoingFlows();
                    for (SequenceFlow nexti:exclusiveGatewayOutgoingFlows){
                        String conditionExpression = nexti.getConditionExpression();//condition
                        String taskId = nexti.getTargetRef();//taskId
                        String name = nexti.getName();//toName,驳回、同意
                        for (FlowTaskDTO flowTaskUserCi:mis){
                            if(taskId.equals(flowTaskUserCi.getTaskId())){
                                flowTaskUserCi.setCondition(conditionExpression);
                                if(conditionExpression.split("=").length>1) {
                                    flowTaskUserCi.setConditionKey(conditionExpression.split("=")[0]);
                                    flowTaskUserCi.setConditionValue(conditionExpression.split("=")[1]);
                                }
                                flowTaskUserCi.setToName(name);
                                flowTaskUserCi.setToTaskId(taskId);
                                flowTaskUserCi.setToTaskName(flowTaskUserCi.getTaskName());
                                taskList.add(flowTaskUserCi);
                            }
                        }
                    }
                }
            }
        }
        return flowTaskDTO;
    }
}
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/ProcessTemplateTypeEnum.java
@@ -25,7 +25,12 @@
    /**
     * å¯ç”¨
     */
    DISABLE("DISABLE","停用");
    DISABLE("DISABLE","停用"),
    /**
     * å›žæ”¶
     */
    ROLLBACK("ROLLBACK","回收");
    /**
     * æžšä¸¾çš„值