# flyqiu
**Repository Path**: mnisummer/flyqiu
## Basic Information
- **Project Name**: flyqiu
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2026-09-21
- **Last Updated**: 2026-09-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# FlyQiu



FlyQiu 是一个综合性的企业级开发框架,包含通用工具包、流程引擎和表单引擎三大核心模块,旨在为开发者提供高效、灵活且易于扩展的解决方案。
## 项目结构
FlyQiu 由以下三个主要模块组成:
### 1. flyqiu-common - 通用工具包
flyqiu-common 是一个功能丰富的通用工具包,为项目提供基础支撑,包含:
- 常用工具类
- 统计运算功能
- 网络请求工具
- MyBatis-Plus 条件构造器
- SM 加解密工具
- 集合处理工具
- 字符串锁工具包
### 2. flyqiu-flow - 流程引擎
flyqiu-flow 是一个具有较强扩展性的轻量级流程引擎,支持基于 Flowable 或 Activiti 流程引擎导出的 BPMN 配置。
#### 支持的 BPMN 节点元素
| 节点元素 | 支持 | 备注 |
|------------------|------|-------------|
| startEvent | ✔ | 开始事件 |
| endEvent | ✔ | 结束事件 |
| userTask | ✔ | 用户任务,支持多实例 |
| parallelGateway | ✔ | 并行网关 |
| inclusiveGateway | ✔ | 包容网关 |
| exclusiveGateway | ✔ | 排他网关 |
| subProcess | ✔ | 子流程 |
#### 扩展性特点
1. 支持流程 XML 元素自定义
2. 脚本执行引擎扩展框架,默认使用 JUEL,可扩展其他脚本引擎
3. 完整的流程事件机制,包括流程引擎启动事件、活动事件、任务事件等
#### 优势
- 支持高度自由的流程信息查询
- 支持常用关系型数据库(MySQL、PostgreSQL、SQLite 等)
- 优秀的事件机制、办理人加载器、缓存管理以及更灵活的数据查询机制
#### 事件机制
事件机制主要由创建前、创建后、完成前、完成后、删除前、删除后组成:
| 事件类型 | 类名 | 创建前 | 创建后 | 完成前 | 完成后 | 删除前 | 删除后 |
|----------|--------------------------|--------|--------|--------|--------|--------|--------|
| 活动事件 | FlowElementActivityEvent | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| 任务事件 | UserTaskEvent | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| 流程事件 | ProcInstEvent | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| 引擎事件 | FlowEngineEvent | ✔ | ✔ | ✔ | ✔ | | |
### 3. flyqiu-form - 表单引擎
flyqiu-form 是一个功能强大的云表单引擎,支持:
- 主表与子表设计
- 分组功能
- 统计运算功能
- 灵活的数据模型定义
- 可扩展的表单组件
## 快速开始
### 环境要求
- Java 17 或更高版本
- Maven 3.6 或更高版本
- Spring Boot 3.x(如需使用 Spring Boot 集成)
### 安装
将以下依赖添加到您的 Maven 项目中:
```xml
com.flyqiu
flyqiu
0.1.3.0-SNAPSHOT
```
### 示例代码
#### 非 Spring Boot 环境下初始化流程引擎
```java
public class BaseTest {
/**
* 流程引擎实例
*/
protected StartFlowEngine flowEngine;
/**
* 流程模型服务
*/
protected ModelService modelService;
/**
* 流程运行服务
*/
protected RunningServices flowRunningService;
/**
* 历史记录服务
*/
protected HistoryService flowHistoryService;
/**
* 运行时任务服务
*/
protected TaskService taskService;
public BaseTest() {
init();
}
/**
* 初始化流程引擎
*/
private void init() {
// 创建流程配置
DefaultFlowConfigImpl defaultFlowConfig = new DefaultFlowConfigImpl();
// 配置bpmn格式转换器
defaultFlowConfig.addBpmnFormat(new FlowableBpmnFormat());
// 初始化默认缓存
defaultFlowConfig.addCache(new FlowLocalCache());
// 初始化默认引擎事件
defaultFlowConfig.addEngineEvent(new TestFlowEngineEvent());
// 初始化任务事件
defaultFlowConfig.addTaskEvents(new TestUserTaskEvent());
// 初始化活动事件
defaultFlowConfig.addActivityEvent(new TestFlowActivityEvent());
// 初始化流程实例事件
defaultFlowConfig.addInstEvents(new TestProcInstEvent());
// 初始化数据源
DataSource dataSource = initSqliteDataSource();
// 创建流程实例
DefaultStartFlowEngineImpl flowEngine = new DefaultStartFlowEngineImpl(dataSource);
// 初始化流程引擎
flowEngine.initEngine(defaultFlowConfig);
this.flowEngine = flowEngine;
modelService = flowEngine.getModelService();
flowRunningService = flowEngine.getProcInstService();
flowHistoryService = flowEngine.getHistoryService();
taskService = flowEngine.getTaskService();
}
/**
* 初始化sqlite数据源
* @return
*/
private DataSource initSqliteDataSource() {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl("jdbc:sqlite:../db/sqlite/start_proc_engine.db3?date_string_format=yyyy-MM-dd HH:mm:ss");
dataSource.setDriverClassName("org.sqlite.JDBC");
dataSource.setIdleTimeout(60000);
dataSource.setAutoCommit(false);
dataSource.setMaximumPoolSize(2);
dataSource.setMinimumIdle(1);
dataSource.setMaxLifetime(60000 * 10);
dataSource.setConnectionTestQuery("SELECT 1");
return dataSource;
}
}
```
#### 流程任务-办理人加载器(Spring Boot||Spring MVC)
```java
@Component
public class DefUserLoad implements IFlowCandidateLoad {
@Override
public String categoryKey() {
return "default";
}
@Override
public String candidateKey() {
return "fix";
}
@Override
public Collection load(UserTask taskElement, ProcRuUserTask userTaskInst, Set value) {
System.out.printf("process:候选人加载:userTask:%s,加载候选用户信息%n", userTaskInst.getTaskDefKey());
List result = new ArrayList<>();
DefaultStartFlowUser defaultCandidateUser = new DefaultStartFlowUser();
defaultCandidateUser.setUserId("test");
defaultCandidateUser.setUserName("测试用户");
defaultCandidateUser.setUserKey("test");
result.add(defaultCandidateUser);
DefaultStartFlowUser defaultCandidateUser2 = new DefaultStartFlowUser();
defaultCandidateUser2.setUserId("test2");
defaultCandidateUser2.setUserName("测试用户2");
defaultCandidateUser2.setUserKey("test2");
result.add(defaultCandidateUser2);
return result;
}
}
```
## 文档
更多详细文档请参考各模块的 README 文件:
- [flyqiu-common](flyqiu-common/readme.md)
- [flyqiu-flow](flyqiu-flow/readme.md)
- [flyqiu-form](flyqiu-form/README.md)
## 贡献
欢迎贡献代码!请遵循以下步骤:
1. Fork 本项目
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 提交 Pull Request
## 许可证
本项目采用 Apache License 2.0 许可证。详情请参见 [LICENSE](LICENSE) 文件。
## 联系方式
- 项目地址:https://gitee.com/clwx/flyqiu
- 作者:玄狼侵袭
- 邮箱:1125302022@qq.com
## 致谢
感谢所有为 FlyQiu 项目做出贡献的开发者和用户!