AI流程对接积木报表数据集
jeecg ai流程,实现积木报表数据集的转换器,读取Excel、API、数据库或者其他文件,转换成积木报表的数据集格式
1. 需求背景
在积木报表中,数据集是报表数据来源的核心。通常情况下,我们可以直接通过文件数据集来读取Excel等文件作为数据来源,但是积木报表中使用文件数据集需要额外依赖第三方类库。
本文将介绍一种新的思路:不额外依赖第三方类库,借助 JeecgBoot
的 AI
工作流,通过 AI
节点读取 Excel
文件并格式化数据,作为积木报表的数据集使用。
此方法不仅适用于报表数据集,也可用于构建如 ECharts
图表等其他场景的数据来源。
2. 总体思路介绍
JeecgBoot
的 AI
工作流支持通过 API
方式调用并获取运行结果,而积木报表又支持 API
数据集功能。基于这一点,我们可以通过如下方式实现数据集:
- 使用
AI
工作流读取Excel
文件并格式化; - 返回标准结构数据;
- 积木报表通过
API
调用AI
工作流,直接作为数据源使用。
3. 效果演示
excel如下:

Api数据集:

预览:

4. 具体实现
4.1 创建工作流
进入JeecgBoot
的AI
流程设计模块,添加流程:数据库查询引擎。

4.2 设置输入参数
点击开始节点,设置输入参数:

- pageNo: 页码
- pageSize: 每页条数
- bizData: 文件路径
4.2 使用Java增强节点读取excel
在代码中新增java
类: JimuDataReader
- 继承接口
IAiRagEnhanceJava
,实现process
方法 - 添加
@component("jimuDataReader")
注解 - 使用
ExcelImportUtil
读取excel文件 - 输出
{"fields":["字段1","字段2"],"datas":[{"字段1":"值1","字段2":"值2"}]}
格式的数据
代码示例:
import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.airag.flow.component.enhance.IAiRagEnhanceJava;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.springframework.stereotype.Component;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Description:
* @Author: chenrui
* @Date: 2025/4/29 16:51
*/
@Component("jimuDataReader")
@Slf4j
public class JimuDataReader implements IAiRagEnhanceJava {
@Override
public Map<String, Object> process(Map<String, Object> inputParams) {
// inputParams: {"bizData":"/xxxx/xxxx/xxxx/xxxx.xls"}
try {
String filePath = (String) inputParams.get("bizData");
if (filePath == null || filePath.isEmpty()) {
throw new IllegalArgumentException("File path is empty");
}
File excelFile = new File(filePath);
if (!excelFile.exists() || !excelFile.isFile()) {
throw new IllegalArgumentException("File not found: " + filePath);
}
// Since we don't know the target entity class, we'll read the Excel generically
return readExcelData(excelFile);
} catch (Exception e) {
log.error("Error processing Excel file", e);
return Map.of("error", e.getMessage());
}
}
/**
* Excel导入工具方法,基于ExcelImportUtil
*
* @param file Excel文件
* @return Excel读取结果,包含字段和数据
* @throws Exception 导入过程中的异常
*/
public static Map<String, Object> readExcelData(File file) throws Exception {
Map<String, Object> result = new HashMap<>();
// 设置导入参数
ImportParams params = new ImportParams();
params.setTitleRows(0); // 没有标题
params.setHeadRows(1); // 第一行是表头
// 读取Excel数据
List<Map<String, Object>> dataList = ExcelImportUtil.importExcel(file, Map.class, params);
// 如果没有数据,返回空结果
if (dataList == null || dataList.isEmpty()) {
result.put("fields", new ArrayList<>());
result.put("datas", new ArrayList<>());
return result;
}
// 从第一行数据中获取字段名
List<String> fieldNames = new ArrayList<>(dataList.get(0).keySet());
result.put("fields", fieldNames);
result.put("datas", dataList);
return result;
}
}
添加节点:Java增强
- 输入变量选择:
bizData
:开始/文件路径 - 配置springBean:
jimuDataReader
- 输出变量:
datas
、fields

4.3 添加大模型节点,格式化输出
添加大模型节点:
- 接收变量:
datas
、fields
- 选择大模型: 选自己已经配置好的语言模型
- 设置系统提示词:
将以下数据整理成目标格式输出
## 工作流程:
1. 读取用户的数据
3. 组装最终输出的json
⸻
## 数据示例:data
{{data}}
## 数据示例:fields
{{fields}}
⸻
## 输出json格式
{
"data": [
{
"amount": "100",
"month": "1",
"areaname": "华北",
"year": "2020",
"price": "5",
"dept": "河北",
"settleamount": "100"
},
{
"amount": "200",
"month": "2",
"areaname": "华北",
"year": "2020",
"price": "5",
"dept": "河北",
"settleamount": "200"
},
],
"total": 100,
"count": 100
}
* total: 分页数,对应数据的总分页数
* count: 数据总数,对应数据的总数
## 输出格式
* 直接返回JSON数据,不要解释,不要md语法,不要换行符,不要有注释。
* 统一将key转换成英文,下划线分隔
* 确保输出的json格式正确完整。
- 设置用户提示:
将数据转换为目标格式


4.4 返回数据
添加结束节点:
- 输出变量选择
res
:LLM/回复内容
- 返回文本:
{{res}}

4.5 积木报表中添加类转换器
因为返回的格式不是API数据集标准格式,所以需要转换一下
在积木报表中添加类转换器,实现将Result转换成数据集所需要的数据
package com.jeecg.modules.jmreport;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.jeecg.modules.jmreport.desreport.render.handler.convert.ApiDataConvertAdapter;
import org.springframework.stereotype.Component;
/**
* 接口数据格式转换
*/
@Component("customParser")
public class MyApiDataConvertAdapter implements ApiDataConvertAdapter {
/**
* 返回list数据集,转换成积木报表需要格式
* @param jsonObject 接口数据原始对象
* @return
*/
@Override
public String getData(JSONObject jsonObject) {
if(jsonObject.containsKey("result") && jsonObject.getBoolean("success")) {
JSONObject result = jsonObject.getJSONObject("result");
JSONArray array = result.getJSONArray("data");
return array.toJSONString();
} else {
return "";
}
}
/**
* 返回总页数(没有分页可以删掉)
* @param jsonObject 接口数据原始对象
* @return
*/
@Override
public String getTotal(JSONObject jsonObject) {
return jsonObject.containsKey("total") ? jsonObject.get("total").toString() : "0";
}
/**
* 返回总条数(没有分页可以删掉)
* @param jsonObject 接口数据原始对象
* @return
*/
@Override
public String getCount(JSONObject jsonObject) {
return jsonObject.containsKey("count") ? jsonObject.get("count").toString() : "0";
}
}
4.6 添加Api数据集
新建报表,并添加API数据集
- 类转换器填写
customParser
(上一步定义的bean名称) - api地址填写:
http://<domainURL>/jeecgboot/airag/flow/run/<flowId>?bizData=<excel路径>
<domainURL>
: 当前系统域名<flowId>
: 工作流id(从工作流列表中获取)<excel路径>
: excel文件的绝对路径

点击Api解析,Excel的数据结构被正常解析出来

保存数据集
4.7 测试
将数据集拖拽到报表中,保存并预览


总结
通过本文的实践,我们可以看到 JeecgBoot 的 AI 工作流为报表数据来源提供了极大的扩展性,不再局限于传统的数据库或固定文件结构,而是可以灵活接入各种处理逻辑与格式化需求,为报表构建带来了更高的智能化和灵活性。