Commit 00e15a5c2c312335463760cbd03423e1ed81efd7

Authored by zhujiqian
1 parent 1a17e5ec

1、集成Activiti7版本,yudao-dependencies模块新增activiti依赖包;

2、流程文件上传部署API后端逻辑实现;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/service/process/ProcessService.java 0 → 100644
  1 +package cn.iocoder.yudao.adminserver.modules.activiti.service.process;
  2 +
  3 +import org.springframework.web.multipart.MultipartFile;
  4 +
  5 +/**
  6 + * 流程基础管理
  7 + *
  8 + * @author ZJQ
  9 + * @date 2021/9/5 21:00
  10 + */
  11 +public interface ProcessService {
  12 +
  13 + /**
  14 + * 上传流程文件,进行流程部署
  15 + * @param multipartFile 上传文件
  16 + */
  17 + void deployProcess(MultipartFile multipartFile);
  18 +}
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/service/process/impl/ProcessServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.adminserver.modules.activiti.service.process.impl;
  2 +
  3 +import cn.iocoder.yudao.adminserver.modules.activiti.service.process.ProcessService;
  4 +import lombok.extern.slf4j.Slf4j;
  5 +import org.activiti.engine.RepositoryService;
  6 +import org.activiti.engine.repository.Deployment;
  7 +import org.activiti.engine.repository.ProcessDefinition;
  8 +import org.apache.commons.io.FilenameUtils;
  9 +import org.springframework.stereotype.Service;
  10 +import org.springframework.web.multipart.MultipartFile;
  11 +
  12 +import javax.annotation.Resource;
  13 +import java.io.IOException;
  14 +import java.io.InputStream;
  15 +import java.util.List;
  16 +import java.util.zip.ZipInputStream;
  17 +import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.FILE_UPLOAD_FAILED;
  18 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  19 +
  20 +/**
  21 + * 流程基础管理
  22 + *
  23 + * @author ZJQ
  24 + * @date 2021/9/5 21:04
  25 + */
  26 +@Service
  27 +@Slf4j
  28 +public class ProcessServiceImpl implements ProcessService {
  29 +
  30 + private static final String BPMN20_XML = "bpmn20.xml";
  31 +
  32 + @Resource
  33 + private RepositoryService repositoryService;
  34 +
  35 + /**
  36 + * 上传流程文件,进行流程部署
  37 + * @param multipartFile 上传文件
  38 + */
  39 + @Override
  40 + public void deployProcess(MultipartFile multipartFile) {
  41 + String fileName = multipartFile.getOriginalFilename();
  42 + try (InputStream inputStream = multipartFile.getInputStream()){
  43 + Deployment deployment = getDeplymentByType(inputStream,fileName);
  44 + //获取部署成功的流程模型
  45 + List<ProcessDefinition> processDefinitions = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).list();
  46 + processDefinitions.forEach((processDefinition)->{
  47 + //设置线上部署流程模型名字
  48 + String proDefId= processDefinition.getId();
  49 + repositoryService.setProcessDefinitionCategory(proDefId,fileName);
  50 + log.info("流程文件部署成功,流程ID="+proDefId);
  51 + });
  52 + } catch (IOException e) {
  53 + log.error("流程部署出现异常"+e);
  54 + }
  55 + }
  56 +
  57 +
  58 + /**
  59 + * 根据上传文件类型对应实现不同方式的流程部署
  60 + * @param inputStream 文件输入流
  61 + * @param fileName 文件名
  62 + * @return 文件部署流程
  63 + */
  64 + public Deployment getDeplymentByType(InputStream inputStream,String fileName){
  65 + Deployment deployment;
  66 + String type = FilenameUtils.getExtension(fileName);
  67 + switch (type){
  68 + case "bpmn":
  69 + String baseName = FilenameUtils.getBaseName(fileName);
  70 + deployment = repositoryService.createDeployment().addInputStream(baseName+"."+BPMN20_XML,inputStream).deploy();
  71 + break;
  72 + case "png":
  73 + deployment = repositoryService.createDeployment().addInputStream(fileName,inputStream).deploy();
  74 + break;
  75 + case "zip":
  76 + case "bar":
  77 + ZipInputStream zipInputStream = new ZipInputStream(inputStream);
  78 + deployment = repositoryService.createDeployment().addZipInputStream(zipInputStream).deploy();
  79 + break;
  80 + default:
  81 + throw exception(FILE_UPLOAD_FAILED);
  82 + }
  83 + return deployment;
  84 + }
  85 +}
... ...
yudao-admin-server/src/main/resources/application-local.yaml
... ... @@ -43,17 +43,30 @@ spring:
43 43 primary: master
44 44 datasource:
45 45 master:
46   - name: ruoyi-vue-pro
  46 + name: ruoyi_vue_pro
47 47 url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT
48 48 driver-class-name: com.mysql.jdbc.Driver
49 49 username: root
50   - password: 123456
  50 + password: root
51 51 slave: # 模拟从库,可根据自己需要修改
52   - name: ruoyi-vue-pro
  52 + name: ruoyi_vue_pro
53 53 url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT
54 54 driver-class-name: com.mysql.jdbc.Driver
55 55 username: root
56   - password: 123456
  56 + password: root
  57 +
  58 +
  59 + activiti:
  60 + #1.false:默认值,activiti启动时,对比数据库表中保存的版本,如果不匹配。将抛出异常
  61 + #2.true:启动时会对数据库中所有表进行更新操作,如果表存在,不做处理,反之,自动创建表
  62 + #3.create_drop:启动时自动创建表,关闭时自动删除表
  63 + #4.drop_create:启动时,删除旧表,再创建新表
  64 + database-schema-update: true
  65 + #activiti7默认不生成历史信息表,需手动设置开启
  66 + db-history-used: true
  67 + check-process-definitions: true
  68 + history-level: full
  69 +
57 70  
58 71 # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
59 72 redis:
... ...
yudao-dependencies/pom.xml
... ... @@ -396,6 +396,15 @@
396 396 <version>${aliyun-java-sdk-dysmsapi.version}</version>
397 397 </dependency>
398 398 <!-- SMS SDK end -->
  399 +
  400 +
  401 + <!-- activiti begin -->
  402 + <dependency>
  403 + <groupId>cn.iocoder.boot</groupId>
  404 + <artifactId>yudao-spring-boot-starter-activiti</artifactId>
  405 + <version>${revision}</version>
  406 + </dependency>
  407 + <!-- activiti end -->
399 408 </dependencies>
400 409 </dependencyManagement>
401 410  
... ...
yudao-framework/pom.xml
... ... @@ -28,6 +28,7 @@
28 28 <module>yudao-spring-boot-starter-biz-operatelog</module>
29 29 <module>yudao-spring-boot-starter-biz-dict</module>
30 30 <module>yudao-spring-boot-starter-biz-sms</module>
  31 + <module>yudao-spring-boot-starter-activiti</module>
31 32 </modules>
32 33  
33 34 <artifactId>yudao-framework</artifactId>
... ...
yudao-framework/yudao-spring-boot-starter-activiti/pom.xml 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project xmlns="http://maven.apache.org/POM/4.0.0"
  3 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5 + <parent>
  6 + <groupId>cn.iocoder.boot</groupId>
  7 + <artifactId>yudao-framework</artifactId>
  8 + <version>${revision}</version>
  9 + </parent>
  10 + <modelVersion>4.0.0</modelVersion>
  11 + <artifactId>yudao-spring-boot-starter-activiti</artifactId>
  12 + <packaging>jar</packaging>
  13 +
  14 + <name>${artifactId}</name>
  15 + <description>Activiti 拓展</description>
  16 + <url>https://github.com/YunaiV/ruoyi-vue-pro</url>
  17 +
  18 +
  19 + <properties>
  20 + <activiti.version>7.1.0.M6</activiti.version>
  21 + </properties>
  22 +
  23 + <dependencies>
  24 + <dependency>
  25 + <groupId>cn.iocoder.boot</groupId>
  26 + <artifactId>yudao-common</artifactId>
  27 + </dependency>
  28 +
  29 +
  30 + <dependency>
  31 + <groupId>org.activiti.dependencies</groupId>
  32 + <artifactId>activiti-dependencies</artifactId>
  33 + <version>${activiti.version}</version>
  34 + <type>pom</type>
  35 + </dependency>
  36 +
  37 + <dependency>
  38 + <groupId>org.activiti</groupId>
  39 + <artifactId>activiti-spring-boot-starter</artifactId>
  40 + <version>${activiti.version}</version>
  41 + <exclusions>
  42 + <exclusion>
  43 + <groupId>de.odysseus.juel</groupId>
  44 + <artifactId>juel-api</artifactId>
  45 + </exclusion>
  46 + <exclusion>
  47 + <groupId>de.odysseus.juel</groupId>
  48 + <artifactId>juel-spi</artifactId>
  49 + </exclusion>
  50 + <exclusion>
  51 + <groupId>org.mybatis</groupId>
  52 + <artifactId>mybatis</artifactId>
  53 + </exclusion>
  54 + </exclusions>
  55 + </dependency>
  56 + </dependencies>
  57 +
  58 +</project>
... ...
yudao-framework/yudao-spring-boot-starter-activiti/src/main/java/cn/iocoder/yudao/framework/activiti/package-info.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.activiti;
... ...