# wsitm-clutter
**Repository Path**: wsitm/wsitm-clutter
## Basic Information
- **Project Name**: wsitm-clutter
- **Description**: 杂烩工具,基于 Hutool, 针对业务进一步封装的工具
- **Primary Language**: Java
- **License**: MIT
- **Default Branch**: develop
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-04-27
- **Last Updated**: 2026-05-05
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# wsitm-clutter
## 介绍
`wsitm-clutter` 是一个基于 [Hutool](https://github.com/looly/hutool) 的工具类库,针对业务场景进行了进一步封装,主要提供以下功能:
- **数据导出**:支持大数据量的 Excel(xlsx)和 CSV 文件导出
- **数据导入**:支持从 Excel 和 CSV 文件导入数据,内置校验机制
- **树形结构导出**:将树形结构数据可视化导出为 Excel 文件
该项目适用于需要高效处理数据导入导出、树形结构转换的业务场景。
## 功能概览
| 模块 | 功能 |
|------|------|
| `ExportKit` | 提供多种方式导出数据为 Excel 或 CSV 文件,支持注解配置、条件导出、自定义处理器 |
| `ImportKit` | 从 Excel/CSV 文件导入数据,支持字段映射、数据校验、错误收集 |
| `Tree2ExcelKit` | 将树形结构数据转换为可视化的 Excel 表格,支持多种对齐方式 |
| `@Header` | 注解方式定义导出字段的表头信息、格式化规则、条件标记等 |
| `HandlerAdapter` | 自定义数据处理器接口,支持泛型和非泛型两种实现方式 |
## 快速开始
### Maven 依赖
```xml
io.gitee.wsitm
wsitm-clutter
0.1.3
```
### 基础依赖
本项目基于 [Hutool](https://github.com/looly/hutool),请确保项目中已引入以下依赖:
```xml
cn.hutool
hutool-all
5.8.44
```
## 使用示例
### 1. 数据导出
```java
// 定义数据模型
public class User {
@Header(value = "用户ID", sort = 1)
private String id;
@Header(value = "用户名", sort = 2)
private String name;
@Header(value = "注册时间", dateFormat = "yyyy-MM-dd")
private Date createTime;
@Header(value = "状态", converterExp = "0=禁用,1=启用")
private Integer status;
// getter/setter
}
// 导出 Excel
List users = getUsers();
ExportKit.exportXlsx(response, "users.xlsx", users);
// 导出 CSV
ExportKit.exportCsv("./output", "users.csv", users);
// 条件导出(只导出 conditionMarkers 匹配的字段)
ExportKit.exportXlsx(response, new int[]{1}, users);
```
### 2. 自定义数据处理器
```java
// 实现 BasicHandlerAdapter
public class MyHandler implements BasicHandlerAdapter {
@Override
public Object format(Object value, Object original) {
// value: 当前字段值
// original: 整行数据对象
return "[处理]" + value;
}
}
// 在字段上使用
@Header(value = "金额", handler = MyHandler.class)
private Double amount;
```
### 3. 树形结构导出
```java
// 定义树节点
public class TreeNode {
private String name;
private List children;
// getter/setter
}
// 导出树形结构
List treeData = getTreeData();
Workbook workbook = new XSSFWorkbook();
Tree2ExcelKit.handle(workbook, treeData); // 中对齐(默认)
Tree2ExcelKit.handle(workbook, treeData, Tree2ExcelKit.Type.TOP); // 上对齐
```
### 4. 数据导入
```java
// 定义导入模型
public class ImportUser {
@NotNull(message = "ID不能为空")
@Header("用户ID")
private String id;
@NotEmpty(message = "姓名不能为空")
@Header("姓名")
private String name;
// getter/setter
}
// 从文件导入
File file = new File("users.xlsx");
ImportResult result = ImportKit.importData(file, ImportUser.class);
if (result.isSuccess()) {
List validData = result.getValidData();
// 处理有效数据
} else {
List> errors = result.getErrors();
// 处理错误信息
}
// 带回调的导入
ImportOption option = new ImportOption()
.setOnEach((rowNum, data) -> System.out.println("处理第 " + rowNum + " 行"))
.setOnFinish((result) -> System.out.println("导入完成"));
ImportKit.importData(file, ImportUser.class, option);
```
## 核心特性
### ExportKit 特性
- ✅ 支持 Excel (.xlsx) 和 CSV 格式导出
- ✅ 支持注解配置表头、排序、列宽、日期格式等
- ✅ 支持枚举翻译(converterExp)
- ✅ 支持条件标记导出(conditionMarkers)
- ✅ 支持自定义数据处理器(HandlerAdapter)
- ✅ 支持前缀、后缀、百分比格式化
- ✅ 支持流式导出,适合大数据量场景
- ✅ 支持 Map 数据类型导出
### ImportKit 特性
- ✅ 支持 Excel (.xls/.xlsx) 和 CSV 格式导入
- ✅ 支持 javax.validation 和 jakarta.validation 约束注解校验
- ✅ 支持自定义逐行校验器
- ✅ 支持全量校验和首错即停两种模式
- ✅ 支持生命周期回调(onEach、onFinish)
- ✅ 自动字段映射和类型转换
- ✅ 详细的错误信息收集
### Tree2ExcelKit 特性
- ✅ 支持树形结构可视化导出
- ✅ 支持上对齐、中对齐、下对齐三种布局
- ✅ 自动绘制连接线
- ✅ 支持自定义标签字段和子节点字段
- ✅ 支持指定起始行列和间隔
- ✅ 支持 Map 和 JavaBean 两种数据结构
## 模块说明
### 包结构
```
io.gitee.wsitm
├── ExportKit.java # 数据导出工具类
├── ImportKit.java # 数据导入工具类
├── Tree2ExcelKit.java # 树形结构导出工具类
├── anno/
│ └── Header.java # 导出字段注解
├── export/
│ ├── HandlerAdapter.java # 泛型数据处理器接口
│ ├── BasicHandlerAdapter.java # 非泛型数据处理器接口
│ ├── Column.java # 列信息
│ ├── ExportInfo.java # 导出信息
│ ├── ExportOption.java # 导出配置项
│ ├── Merge.java # 合并单元格信息
│ └── adapter/
│ ├── ResponseHandler.java # 响应处理器接口
│ └── ServletResponseAdapter.java # Servlet响应适配器
└── imports/
├── ImportError.java # 导入错误信息
├── ImportFieldMeta.java # 导入字段元数据
├── ImportMeta.java # 导入元数据
├── ImportOption.java # 导入配置项
├── ImportResult.java # 导入结果
└── validation/
├── ConstraintAnnotationAdapter.java # 约束注解适配器
└── ConstraintValidationSupport.java # 约束校验支持类
```
### @Header 注解属性
| 属性 | 类型 | 说明 | 默认值 |
|------|------|------|--------|
| value | String[] | 表头名称(支持多级表头) | - |
| sort | int | 排序号 | Integer.MAX_VALUE / 2 |
| width | int | 列宽(Excel有效,0表示自动) | 0 |
| prefix | String | 文字前缀 | "" |
| suffix | String | 文字后缀 | "" |
| percent | int | 百分比化(保留位数,-1表示不处理) | -1 |
| converterExp | String | 枚举翻译表达式(key1=value1,key2=value2) | "" |
| dateFormat | String | 日期格式 | "" |
| handler | Class> | 自定义数据处理器 | HandlerAdapter.class |
| conditionMarkers | int[] | 条件标记 | {} |
### ImportOption 配置项
| 方法 | 说明 | 默认值 |
|------|------|--------|
| setAllValidate(boolean) | 全量校验开关 | true |
| setCharset(Charset) | CSV字符集 | UTF-8 |
| setDelimiter(char) | CSV分隔符 | ',' |
| setOnEach(BiConsumer) | 每行回调 | null |
| setOnFinish(Consumer) | 完成回调 | null |
| setValidator(RowValidator) | 自定义校验器 | null |
## 支持的约束注解
ImportKit 支持以下常见的验证注解(兼容 javax 和 jakarta 包名):
- `@NotNull` - 不能为null
- `@Null` - 必须为null
- `@NotEmpty` - 不能为空字符串或空集合
- `@NotBlank` - 不能为空白字符串
- `@Positive` - 必须为正数
- `@Negative` - 必须为负数
- `@Min` - 最小值
- `@Max` - 最大值
- `@DecimalMin` - 最小小数值
- `@DecimalMax` - 最大小数值
- `@Size` - 长度或大小限制
- `@Pattern` - 正则表达式匹配
- `@Email` - 邮箱格式
## 注意事项
1. **大数据量导出**:建议使用流式导出方式,避免内存溢出
2. **泛型处理器**:由于Java泛型擦除,HandlerAdapter 在运行时第二个参数仍为Object类型
3. **约束注解**:只需注解名称和结构与规范一致即可,不强制要求包名
4. **树形导出**:节点类需包含标签字段和子节点列表字段
5. **编码问题**:CSV导出时注意设置正确的字符集,避免中文乱码
## 许可证
本项目遵循 [MIT License](https://opensource.org/licenses/MIT),详情请查看 [LICENSE](LICENSE) 文件。
## 贡献指南
欢迎提交 Issue 和 Pull Request,帮助我们完善项目。请遵循以下贡献流程:
1. Fork 项目
2. 创建新分支 (`git checkout -b feature/your-feature`)
3. 提交代码 (`git commit -am 'Add some feature'`)
4. 推送到分支 (`git push origin feature/your-feature`)
5. 提交 Pull Request
## 联系方式
如有问题或建议,请提交 Issue 或联系项目维护者。
- Gitee: [https://gitee.com/wsitm/wsitm-clutter](https://gitee.com/wsitm/wsitm-clutter)
- Email: 392079454@qq.com
## 版本历史
- **v0.1.3** - 当前版本
- 支持 HandlerAdapter 双模式(泛型/非泛型)
- 完善数据导入功能,支持约束注解校验
- 升级依赖至 hutool-all 5.8.44
- **v0.1.2**
- 优化导出功能
- 增强树形结构导出
- **v0.1.x** - 早期版本
- 基础导出功能
- 树形结构导出
## 致谢
感谢 [Hutool](https://github.com/looly/hutool) 提供的基础工具支持。