mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 12:18:42 +08:00 
			
		
		
		
	1、集成Activiti7版本,yudao-dependencies模块新增activiti依赖包;
2、流程文件上传部署API后端逻辑实现;
This commit is contained in:
		@@ -0,0 +1,18 @@
 | 
			
		||||
package cn.iocoder.yudao.adminserver.modules.activiti.service.process;
 | 
			
		||||
 | 
			
		||||
import org.springframework.web.multipart.MultipartFile;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 流程基础管理
 | 
			
		||||
 *
 | 
			
		||||
 * @author ZJQ
 | 
			
		||||
 * @date 2021/9/5 21:00
 | 
			
		||||
 */
 | 
			
		||||
public interface ProcessService {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 上传流程文件,进行流程部署
 | 
			
		||||
     * @param multipartFile 上传文件
 | 
			
		||||
     */
 | 
			
		||||
    void deployProcess(MultipartFile multipartFile);
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,85 @@
 | 
			
		||||
package cn.iocoder.yudao.adminserver.modules.activiti.service.process.impl;
 | 
			
		||||
 | 
			
		||||
import cn.iocoder.yudao.adminserver.modules.activiti.service.process.ProcessService;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.activiti.engine.RepositoryService;
 | 
			
		||||
import org.activiti.engine.repository.Deployment;
 | 
			
		||||
import org.activiti.engine.repository.ProcessDefinition;
 | 
			
		||||
import org.apache.commons.io.FilenameUtils;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
import org.springframework.web.multipart.MultipartFile;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.io.InputStream;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.zip.ZipInputStream;
 | 
			
		||||
import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.FILE_UPLOAD_FAILED;
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 流程基础管理
 | 
			
		||||
 *
 | 
			
		||||
 * @author ZJQ
 | 
			
		||||
 * @date 2021/9/5 21:04
 | 
			
		||||
 */
 | 
			
		||||
@Service
 | 
			
		||||
@Slf4j
 | 
			
		||||
public class ProcessServiceImpl implements ProcessService {
 | 
			
		||||
 | 
			
		||||
    private static final String BPMN20_XML = "bpmn20.xml";
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private RepositoryService repositoryService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 上传流程文件,进行流程部署
 | 
			
		||||
     * @param multipartFile 上传文件
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public void deployProcess(MultipartFile multipartFile) {
 | 
			
		||||
        String fileName = multipartFile.getOriginalFilename();
 | 
			
		||||
        try (InputStream inputStream = multipartFile.getInputStream()){
 | 
			
		||||
            Deployment deployment = getDeplymentByType(inputStream,fileName);
 | 
			
		||||
            //获取部署成功的流程模型
 | 
			
		||||
            List<ProcessDefinition> processDefinitions = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).list();
 | 
			
		||||
            processDefinitions.forEach((processDefinition)->{
 | 
			
		||||
                //设置线上部署流程模型名字
 | 
			
		||||
                String proDefId= processDefinition.getId();
 | 
			
		||||
                repositoryService.setProcessDefinitionCategory(proDefId,fileName);
 | 
			
		||||
                log.info("流程文件部署成功,流程ID="+proDefId);
 | 
			
		||||
            });
 | 
			
		||||
        } catch (IOException e) {
 | 
			
		||||
           log.error("流程部署出现异常"+e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据上传文件类型对应实现不同方式的流程部署
 | 
			
		||||
     * @param inputStream 文件输入流
 | 
			
		||||
     * @param fileName 文件名
 | 
			
		||||
     * @return 文件部署流程
 | 
			
		||||
     */
 | 
			
		||||
    public Deployment getDeplymentByType(InputStream inputStream,String fileName){
 | 
			
		||||
        Deployment deployment;
 | 
			
		||||
        String type = FilenameUtils.getExtension(fileName);
 | 
			
		||||
        switch (type){
 | 
			
		||||
            case "bpmn":
 | 
			
		||||
                String baseName = FilenameUtils.getBaseName(fileName);
 | 
			
		||||
                deployment = repositoryService.createDeployment().addInputStream(baseName+"."+BPMN20_XML,inputStream).deploy();
 | 
			
		||||
                break;
 | 
			
		||||
            case "png":
 | 
			
		||||
                deployment = repositoryService.createDeployment().addInputStream(fileName,inputStream).deploy();
 | 
			
		||||
                break;
 | 
			
		||||
            case "zip":
 | 
			
		||||
            case "bar":
 | 
			
		||||
                ZipInputStream zipInputStream = new ZipInputStream(inputStream);
 | 
			
		||||
                deployment = repositoryService.createDeployment().addZipInputStream(zipInputStream).deploy();
 | 
			
		||||
                break;
 | 
			
		||||
            default:
 | 
			
		||||
                throw exception(FILE_UPLOAD_FAILED);
 | 
			
		||||
        }
 | 
			
		||||
        return deployment;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -43,17 +43,30 @@ spring:
 | 
			
		||||
      primary: master
 | 
			
		||||
      datasource:
 | 
			
		||||
        master:
 | 
			
		||||
          name: ruoyi-vue-pro
 | 
			
		||||
          name: ruoyi_vue_pro
 | 
			
		||||
          url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT
 | 
			
		||||
          driver-class-name: com.mysql.jdbc.Driver
 | 
			
		||||
          username: root
 | 
			
		||||
          password: 123456
 | 
			
		||||
          password: root
 | 
			
		||||
        slave: # 模拟从库,可根据自己需要修改
 | 
			
		||||
          name: ruoyi-vue-pro
 | 
			
		||||
          name: ruoyi_vue_pro
 | 
			
		||||
          url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT
 | 
			
		||||
          driver-class-name: com.mysql.jdbc.Driver
 | 
			
		||||
          username: root
 | 
			
		||||
          password: 123456
 | 
			
		||||
          password: root
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  activiti:
 | 
			
		||||
    #1.false:默认值,activiti启动时,对比数据库表中保存的版本,如果不匹配。将抛出异常
 | 
			
		||||
    #2.true:启动时会对数据库中所有表进行更新操作,如果表存在,不做处理,反之,自动创建表
 | 
			
		||||
    #3.create_drop:启动时自动创建表,关闭时自动删除表
 | 
			
		||||
    #4.drop_create:启动时,删除旧表,再创建新表
 | 
			
		||||
    database-schema-update: true
 | 
			
		||||
    #activiti7默认不生成历史信息表,需手动设置开启
 | 
			
		||||
    db-history-used: true
 | 
			
		||||
    check-process-definitions: true
 | 
			
		||||
    history-level: full
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
 | 
			
		||||
  redis:
 | 
			
		||||
 
 | 
			
		||||
@@ -396,6 +396,15 @@
 | 
			
		||||
                <version>${aliyun-java-sdk-dysmsapi.version}</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
            <!-- SMS SDK end -->
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            <!-- activiti begin -->
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>cn.iocoder.boot</groupId>
 | 
			
		||||
                <artifactId>yudao-spring-boot-starter-activiti</artifactId>
 | 
			
		||||
                <version>${revision}</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
            <!-- activiti end -->
 | 
			
		||||
        </dependencies>
 | 
			
		||||
    </dependencyManagement>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,6 +28,7 @@
 | 
			
		||||
        <module>yudao-spring-boot-starter-biz-operatelog</module>
 | 
			
		||||
        <module>yudao-spring-boot-starter-biz-dict</module>
 | 
			
		||||
        <module>yudao-spring-boot-starter-biz-sms</module>
 | 
			
		||||
        <module>yudao-spring-boot-starter-activiti</module>
 | 
			
		||||
    </modules>
 | 
			
		||||
 | 
			
		||||
    <artifactId>yudao-framework</artifactId>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										58
									
								
								yudao-framework/yudao-spring-boot-starter-activiti/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								yudao-framework/yudao-spring-boot-starter-activiti/pom.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
 | 
			
		||||
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
			
		||||
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>cn.iocoder.boot</groupId>
 | 
			
		||||
        <artifactId>yudao-framework</artifactId>
 | 
			
		||||
        <version>${revision}</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
    <modelVersion>4.0.0</modelVersion>
 | 
			
		||||
    <artifactId>yudao-spring-boot-starter-activiti</artifactId>
 | 
			
		||||
    <packaging>jar</packaging>
 | 
			
		||||
 | 
			
		||||
    <name>${artifactId}</name>
 | 
			
		||||
    <description>Activiti 拓展</description>
 | 
			
		||||
    <url>https://github.com/YunaiV/ruoyi-vue-pro</url>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    <properties>
 | 
			
		||||
        <activiti.version>7.1.0.M6</activiti.version>
 | 
			
		||||
    </properties>
 | 
			
		||||
 | 
			
		||||
    <dependencies>
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>cn.iocoder.boot</groupId>
 | 
			
		||||
            <artifactId>yudao-common</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.activiti.dependencies</groupId>
 | 
			
		||||
            <artifactId>activiti-dependencies</artifactId>
 | 
			
		||||
            <version>${activiti.version}</version>
 | 
			
		||||
            <type>pom</type>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.activiti</groupId>
 | 
			
		||||
            <artifactId>activiti-spring-boot-starter</artifactId>
 | 
			
		||||
            <version>${activiti.version}</version>
 | 
			
		||||
            <exclusions>
 | 
			
		||||
                <exclusion>
 | 
			
		||||
                    <groupId>de.odysseus.juel</groupId>
 | 
			
		||||
                    <artifactId>juel-api</artifactId>
 | 
			
		||||
                </exclusion>
 | 
			
		||||
                <exclusion>
 | 
			
		||||
                    <groupId>de.odysseus.juel</groupId>
 | 
			
		||||
                    <artifactId>juel-spi</artifactId>
 | 
			
		||||
                </exclusion>
 | 
			
		||||
                <exclusion>
 | 
			
		||||
                    <groupId>org.mybatis</groupId>
 | 
			
		||||
                    <artifactId>mybatis</artifactId>
 | 
			
		||||
                </exclusion>
 | 
			
		||||
            </exclusions>
 | 
			
		||||
        </dependency>
 | 
			
		||||
    </dependencies>
 | 
			
		||||
 | 
			
		||||
</project>
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
package cn.iocoder.yudao.framework.activiti;
 | 
			
		||||
		Reference in New Issue
	
	Block a user