項目關(guān)鍵目錄一覽:

一、springboot集成activiti
1 pom.xml jar包環(huán)境
<?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">
? ? <modelVersion>4.0.0</modelVersion>
? ? <parent>
? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? <artifactId>spring-boot-starter-parent</artifactId>
? ? ? ? <version>2.0.3.RELEASE</version>
? ? ? ? <relativePath/> <!-- lookup parent from repository -->
? ? </parent>
? ? <groupId>com.example</groupId>
? ? <artifactId>activiti-test</artifactId>
? ? <version>0.0.1-SNAPSHOT</version>
? ? <name>activiti-test</name>
? ? <description>Demo project for Spring Boot</description>
? ? <properties>
? ? ? ? <java.version>1.8</java.version>
? ? </properties>
? ? <dependencies>
? ? ? ? <!--aop 攔截-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? ? ? <artifactId>spring-boot-starter-aop</artifactId>
? ? ? ? ? ? <version>2.0.3.RELEASE</version>
? ? ? ? ? ? <scope>compile</scope>
? ? ? ? </dependency>
? ? ? ? <!--web模塊-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? ? ? <artifactId>spring-boot-starter-web</artifactId>
? ? ? ? </dependency>
? ? ? ? <!--spring-boot集成mybatis-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>com.ruijc</groupId>
? ? ? ? ? ? <artifactId>spring-boot-starter-mybatis</artifactId>
? ? ? ? ? ? <version>3.2.2</version>
? ? ? ? </dependency>
? ? ? ? <!--lombok -->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.projectlombok</groupId>
? ? ? ? ? ? <artifactId>lombok</artifactId>
? ? ? ? ? ? <optional>true</optional>
? ? ? ? </dependency>
? ? ? ? <!--test 用例-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? ? ? <artifactId>spring-boot-starter-test</artifactId>
? ? ? ? ? ? <scope>test</scope>
? ? ? ? </dependency>
? ? ? ? <!--druid 連接池-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>com.alibaba</groupId>
? ? ? ? ? ? <artifactId>druid-spring-boot-starter</artifactId>
? ? ? ? ? ? <version>1.1.10</version>
? ? ? ? </dependency>
? ? ? ? <!--mysql-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>mysql</groupId>
? ? ? ? ? ? <artifactId>mysql-connector-java</artifactId>
? ? ? ? ? ? <version>5.1.43</version>
? ? ? ? ? ? <!--<version>8.0.15</version>-->
? ? ? ? </dependency>
? ? ? ? <!--activiti基礎(chǔ)包-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.activiti</groupId>
? ? ? ? ? ? <artifactId>activiti-spring-boot-starter-basic</artifactId>
? ? ? ? ? ? <version>6.0.0</version>
? ? ? ? </dependency>
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.activiti</groupId>
? ? ? ? ? ? <artifactId>activiti-json-converter</artifactId>
? ? ? ? ? ? <version>6.0.0</version>
? ? ? ? </dependency>
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.apache.xmlgraphics</groupId>
? ? ? ? ? ? <artifactId>batik-transcoder</artifactId>
? ? ? ? ? ? <version>1.7</version>
? ? ? ? </dependency>
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.apache.xmlgraphics</groupId>
? ? ? ? ? ? <artifactId>batik-codec</artifactId>
? ? ? ? ? ? <version>1.7</version>
? ? ? ? </dependency>
? ? ? ? <!--分頁插件 4.1.5 版本以上修復(fù) selectProvider不兼容問題-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>com.github.pagehelper</groupId>
? ? ? ? ? ? <artifactId>pagehelper</artifactId>
? ? ? ? ? ? <version>4.1.5</version>
? ? ? ? </dependency>
? ? ? ? <!--common-->
? ? ? ? <!--<dependency>-->
? ? ? ? ? ? <!--<groupId>org.apache.commons</groupId>-->
? ? ? ? ? ? <!--<artifactId>commons-lang3</artifactId>-->
? ? ? ? ? ? <!--<version>3.0</version>-->
? ? ? ? <!--</dependency>-->
? ? ? ? <!--熱部署-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? ? ? <artifactId>spring-boot-devtools</artifactId>
? ? ? ? ? ? <optional>true</optional>
? ? ? ? </dependency>
? ? </dependencies>
? ? <build>
? ? ? ? <plugins>
? ? ? ? ? ? <plugin>
? ? ? ? ? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? ? ? ? ? <artifactId>spring-boot-maven-plugin</artifactId>
? ? ? ? ? ? ? ? <!--設(shè)置外部打包-->
? ? ? ? ? ? ? ? <configuration>
? ? ? ? ? ? ? ? ? ? <includeSystemScope>true</includeSystemScope>
? ? ? ? ? ? ? ? </configuration>
? ? ? ? ? ? </plugin>
? ? ? ? ? ? <!--mybatis generator begin-->
? ? ? ? ? ? <plugin>
? ? ? ? ? ? ? ? <!--Mybatis-generator插件,用于自動生成Mapper和POJO-->
? ? ? ? ? ? ? ? <groupId>org.mybatis.generator</groupId>
? ? ? ? ? ? ? ? <artifactId>mybatis-generator-maven-plugin</artifactId>
? ? ? ? ? ? ? ? <version>1.3.5</version>
? ? ? ? ? ? ? ? <configuration>
? ? ? ? ? ? ? ? ? ? <!--配置文件的位置-->
? ? ? ? ? ? ? ? ? ? <configurationFile>src/main/resources/generator/mybatis_generator_config.xml
? ? ? ? ? ? ? ? ? ? </configurationFile>
? ? ? ? ? ? ? ? ? ? <verbose>true</verbose>
? ? ? ? ? ? ? ? ? ? <overwrite>true</overwrite>
? ? ? ? ? ? ? ? </configuration>
? ? ? ? ? ? ? ? <executions>
? ? ? ? ? ? ? ? ? ? <execution>
? ? ? ? ? ? ? ? ? ? ? ? <id>Generate MyBatis Artifacts</id>
? ? ? ? ? ? ? ? ? ? ? ? <phase>deploy</phase>
? ? ? ? ? ? ? ? ? ? ? ? <goals>
? ? ? ? ? ? ? ? ? ? ? ? ? ? <goal>generate</goal>
? ? ? ? ? ? ? ? ? ? ? ? </goals>
? ? ? ? ? ? ? ? ? ? </execution>
? ? ? ? ? ? ? ? </executions>
? ? ? ? ? ? ? ? <dependencies>
? ? ? ? ? ? ? ? ? ? <!--防止找不到驅(qū)動 報出如下異常:Exception getting JDBC Driver: com.mysql.jdbc.Driver-->
? ? ? ? ? ? ? ? ? ? <dependency>
? ? ? ? ? ? ? ? ? ? ? ? <groupId>mysql</groupId>
? ? ? ? ? ? ? ? ? ? ? ? <artifactId>mysql-connector-java</artifactId>
? ? ? ? ? ? ? ? ? ? ? ? <version>5.1.43</version>
? ? ? ? ? ? ? ? ? ? </dependency>
? ? ? ? ? ? ? ? ? ? <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
? ? ? ? ? ? ? ? ? ? <dependency>
? ? ? ? ? ? ? ? ? ? ? ? <groupId>org.mybatis</groupId>
? ? ? ? ? ? ? ? ? ? ? ? <artifactId>mybatis</artifactId>
? ? ? ? ? ? ? ? ? ? ? ? <version>3.4.4</version>
? ? ? ? ? ? ? ? ? ? </dependency>
? ? ? ? ? ? ? ? ? ? <!-- mybatis-generator-core 反向生成java代碼-->
? ? ? ? ? ? ? ? ? ? <dependency>
? ? ? ? ? ? ? ? ? ? ? ? <groupId>org.mybatis.generator</groupId>
? ? ? ? ? ? ? ? ? ? ? ? <artifactId>mybatis-generator-core</artifactId>
? ? ? ? ? ? ? ? ? ? ? ? <version>1.3.5</version>
? ? ? ? ? ? ? ? ? ? </dependency>
? ? ? ? ? ? ? ? </dependencies>
? ? ? ? ? ? </plugin>
? ? ? ? ? ? <!--mybatis generator end-->
? ? ? ? </plugins>
? ? </build>
</project>
2.application.properties 配置數(shù)據(jù)庫連接、 activiti、 靜態(tài)資源路徑等屬性
server.port=8083
#訪問的靜態(tài)資源
spring.mvc.view.prefix=classpath:/static/
#數(shù)據(jù)庫連接
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/act?serverTimezone=Hongkong&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false
spring.datasource.username=root
spring.datasource.password=111111
# 下面為連接池的補充設(shè)置,應(yīng)用到上面所有數(shù)據(jù)源中
# 初始化大小,最小,最大
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=20
# 配置獲取連接等待超時的時間
spring.datasource.druid.max-wait=60000
# 配置間隔多久才進行一次檢測,檢測需要關(guān)閉的空閑連接,單位是毫秒
spring.datasource.druid.time-between-eviction-runs-millis=60000
# 配置一個連接在池中最小生存的時間,單位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.validation-query=SELECT 1 FROM DUAL
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
# 打開PSCache,并且指定每個連接上PSCache的大小
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
# 配置監(jiān)控統(tǒng)計攔截的filters,去掉后監(jiān)控界面sql無法統(tǒng)計,'wall'用于防火墻
spring.datasource.druid.filter.commons-log.connection-logger-name=stat,wall,log4j
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=2000
# 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
spring.datasource.druid.connect-properties.=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多個DruidDataSource的監(jiān)控數(shù)據(jù)
spring.datasource.druid.use-global-data-source-stat=true
#druid 登陸配置
spring.datasource.druid.web-stat-filter.enabled=false
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=admin
#mybatis 配置
mybatis.mapper-locations=classpath:mappers/*Mapper.xml
mybatis.type-aliases-package=com.example.activititest.po
mybatis.check-config-location=true
mybatis.config-location=classpath:mybatis-config.xml
# activiti 自動部署驗證設(shè)置:true-開啟(默認(rèn))、false-關(guān)閉
spring.activiti.check-process-definitions=false
# activiti 當(dāng)自動檢查 并更新數(shù)據(jù)庫接表不存在則進行創(chuàng)建
spring.activiti.database-schema-update=true
#監(jiān)控地址端口
management.server.port=7000
#springboot2.0之后,在Http環(huán)境下將默認(rèn)的endpoint只設(shè)置為info和health,要想開啟其他的監(jiān)控功能,需要手動配置
management.endpoints.web.exposure.include=*
#請求連接前綴 默認(rèn)是/actuator
management.endpoints.web.base-path=/actuator
3.ActivitiTestApplication 啟動類 需要去除org.activiti.spring.boot.SecurityAutoConfiguration
import org.activiti.spring.boot.SecurityAutoConfiguration;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 配置mybatis掃描包 去除exclude = SecurityAutoConfiguration.class ,
* org.activiti.spring.boot.SecurityAutoConfiguration會導(dǎo)致
* Invocation of init method failed; nested exception is java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
*/
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
@MapperScan(basePackages = "com.example.activititest.dao")
public class ActivitiTestApplication {
? ? public static void main(String[] args) {
? ? ? ? SpringApplication.run(ActivitiTestApplication.class, args);
? ? }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
4.將流程在線設(shè)計器放置再static目錄下
此步驟 請從源碼中拷貝。
需要注意的是
1.activiti-test\src\main\resources\static\editor-app\app-cfg.js 配置請求的根路徑
2.activiti-test\src\main\resources\static\editor-app\configuration\url-config.js 配置了 模型json,獲得模具集合,保存模型
其他代碼將不再贅述,如有問題,請再評論區(qū)寫在疑問。
二、接口演示
案例測試:
1.流程圖展示

:
注:此圖是使用Idea中的actiBPM插件
2.示例請假流程說明:員工發(fā)起流程,經(jīng)有人事(group:affair)進行審核: 如審核不通過,則結(jié)束流程,否則審核通過則判斷審核天數(shù) :如天數(shù)小于等于3天交予經(jīng)理(group:manager)審批 而后結(jié)束流程,超過三天 則交予總經(jīng)理(group:president)審核 而后結(jié)束流程。
注:角色后面跟的group是對應(yīng)每個角色的分組標(biāo)識。用于查看待簽任務(wù)時候,查看屬于自己組別的可簽收的任務(wù)
1.部署流程文件

測試ActivitiDefineController下的deploy方法 經(jīng)測試可以看到返回部署成功
2.部署成功了,當(dāng)然可以查看對應(yīng)的部署列表了

測試ActivitiDefineController下的list方法 經(jīng)測試可以看到返回列表數(shù)據(jù)
3.當(dāng)然了這樣可能不夠直觀 ,可以通過列表中的 部署id,查看流程圖
測試ActivitiDefineController下的viewProcessImage方法 經(jīng)測試可以看到返回定義的流程圖

4.查看該這個流程圖覺得沒有問題了,我們就準(zhǔn)備啟動該流程定義,創(chuàng)建流程實例(即員工張三發(fā)起請假)。
測試ActivitiDefineController下的startProcessInstanceById方法 經(jīng)測試可以看到返回成功(這里方便測試將assignee-‘當(dāng)前用戶’,由前臺傳入,后面將不再贅述。 讀者可將用戶id做為assignee,此文為了直觀使用名稱作為assignee)

注:流程圖人事不同意那條線 單詞是錯誤的。供后面在線流程編輯器進行修改使用。
5.人事審核過程:人事角色趙四(group:affair)登陸,可查看待簽任務(wù)
測試ActivitTaskController下的claimList方法 經(jīng)測試可以看到返回列表數(shù)據(jù)

注:這里多說一句可以看到catalog這里是null,可以開始在流程部署文件中直接定義,這樣流程定義等就可以按照catelog進行查找了。
6.人事趙四看到有可簽收的任務(wù),進行簽收
測試ActivitTaskController下的claim方法 經(jīng)測試可以看到返回成功

注:這是簽收列表中就沒有這一條記錄,數(shù)據(jù)往待辦任務(wù)走
7.趙四簽收了任務(wù),現(xiàn)在就可以在待辦任務(wù)中 找到剛才簽收的任務(wù)了
測試ActivitTaskController下的todoList方法 經(jīng)測試可以看到返回列表數(shù)據(jù)

8.趙四找到了待辦任務(wù),進行審批
測試ActivitTaskController下的complete方法 經(jīng)測試可以看到返回成功(需要注意這里人事需要進行審批,審批通過才會有后面的流程即需要傳參agree=‘yes’, agress=‘yes’, days=3)

注:這里是將 不同意那條線的判斷參數(shù)錯將agree寫成</font color=red>agress 此處留下一個伏筆將會用到模型轉(zhuǎn)換并使用流程設(shè)計器進行修改(此處暫不贅述),完成該任務(wù),待辦列表中就沒有了該條記錄,數(shù)據(jù)將往后一個流程經(jīng)理審批進行簽收,讀者也可以將days大于3,數(shù)據(jù)將往總經(jīng)理審批。
9.經(jīng)理審核流程:經(jīng)理角色王五(group:manager)登錄,可查看待簽任務(wù)
測試ActivitTaskController下的claimList方法 經(jīng)測試可以看到返回列表數(shù)據(jù)

10.王五簽收了任務(wù),而后從待辦任務(wù)中 可查看該任務(wù)
測試ActivitTaskController下的claim方法 經(jīng)測試可以看到返回成功

11.王五找到待辦任務(wù)
測試ActivitTaskController下的todoList方法 經(jīng)測試可以看到返回列表數(shù)據(jù)

12.王五完成任務(wù),即結(jié)束了流程
測試ActivitTaskController下的complete方法 經(jīng)測試可以看到返回成功

13.在上訴任務(wù)開始的時候,張三突然想看自己發(fā)起流程的進度情況了
測試ActivitTaskController下的sentList方法 經(jīng)測試可以看到返回列表數(shù)據(jù)

注:可以看到流程開始時間 結(jié)束時間 流程全部時間等信息
14.或者某個人突然想查看自己參與過的辦結(jié)流程記錄
測試ActivitTaskController下的finishList方法 經(jīng)測試可以看到返回列表數(shù)據(jù)(這里以趙四為例)

15.或者查看流程所審批的流程過程
測試ActivitTaskController下的viewProgressPathImage方法 經(jīng)測試可以看到返回流程軌跡圖

16.在發(fā)現(xiàn)部署文件有問題時候,我們可以轉(zhuǎn)換成模型,用在線流程編輯器修改。

測試ActivitiDefineController下的convertToModel方法 經(jīng)測試可以看到返回成功
17.查看模型列表
測試ActivitModelController下的list方法 經(jīng)測試可以看到返回列表數(shù)據(jù)

18.使用線流程編輯器 將id傳入
打開瀏覽器http://localhost:8083/modeler.html?modelId=2503 (這里涉及到ActivitiVisualController的方法,請看源碼此處不再贅述)

注:修改后保存,而后進行部署。
19.流程編輯保存后進行部署生效,迭代版本
測試ActivitModelController下的deploy方法 經(jīng)測試可以看到返回成功

20.這時候再看流程定義,可以看到版本(version:2)迭代
測試ActivitiDefineController下的list方法 經(jīng)測試可以看到返回列表數(shù)據(jù)
