zxl
2025-04-01 293d4315ce81fc556d90eae06e3d87ebea754878
flowable/src/main/java/com/ycl/service/impl/FlowDefinitionServiceImpl.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ycl.cmd.RemoveDeploymentCacheCMD;
import com.ycl.common.constant.ProcessConstants;
import com.ycl.common.core.domain.AjaxResult;
import com.ycl.common.core.domain.entity.SysUser;
@@ -20,6 +21,7 @@
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.flowable.bpmn.model.BpmnModel;
import org.flowable.engine.ManagementService;
import org.flowable.engine.repository.Deployment;
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.engine.repository.ProcessDefinitionQuery;
@@ -27,6 +29,8 @@
import org.flowable.image.impl.DefaultProcessDiagramGenerator;
import org.flowable.task.api.Task;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.io.IOException;
@@ -49,12 +53,10 @@
public class FlowDefinitionServiceImpl extends FlowServiceFactory implements IFlowDefinitionService {
    private final ISysDeployFormService sysDeployFormService;
    private final ISysUserService sysUserService;
    private final ISysDeptService sysDeptService;
    private final FlowDeployMapper flowDeployMapper;
    private final ManagementService managementService;
    private static final String BPMN_FILE_SUFFIX = ".bpmn";
@@ -118,7 +120,7 @@
    /**
     * 导入流程文件
     * 导入流程文件,自动部署
     *
     * 当每个key的流程第一次部署时,指定版本为1。对其后所有使用相同key的流程定义,
     * 部署时版本会在该key当前已部署的最高版本号基础上加1。key参数用于区分流程定义
@@ -132,6 +134,21 @@
        ProcessDefinition definition = repositoryService.createProcessDefinitionQuery().deploymentId(deploy.getId()).singleResult();
        repositoryService.setProcessDefinitionCategory(definition.getId(), category);
    }
    @Override
    public void updateProcess(String deploymentId, String name, String category, InputStream in) {
        if (! StringUtils.hasText(deploymentId)) {
            throw new RuntimeException("该流程第一次部署,请直接选择保存按钮");
        }
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deploymentId).singleResult();
        if (Objects.isNull(processDefinition)) {
            throw new RuntimeException("流程定义不存在");
        }
        // 1.更新流程图数据
        flowDeployMapper.updateProcess(in, deploymentId);
        // 2.清除该流程的缓存,使其重新加载新的流程图
        managementService.executeCommand(new RemoveDeploymentCacheCMD(processDefinition.getId()));
    }
    /**
@@ -237,9 +254,11 @@
     * @param deployId 流程部署ID act_ge_bytearray 表中 deployment_id值
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void delete(String deployId) {
        // true 允许级联删除 ,不设置会导致数据库外键关联异常
        repositoryService.deleteDeployment(deployId, true);
        // TODO 删除项目绑定的
    }