Files
qhmes/.trae/skills/jimureport/references/dataset-skills.md

11 KiB
Raw Permalink Blame History

数据集的用法

所有接口均需要提供token

数据源管理

数据集默认使用应用本身的数据库。如需连接外部数据库,需要先添加数据源,再在数据集中通过 dbSource 关联。

查询已有数据源

  • 地址GET /jmreport/getDataSourceByPage
  • 返回:所有数据源列表,每个包含 idname
ds_resp = api_request('/jmreport/getDataSourceByPage')
ds_list = ds_resp.get('result', [])
# 按名称查找数据源 ID
ds_map = {ds['name']: ds['id'] for ds in ds_list}
# 示例: ds_map['ws_mysql'] -> '1010703895600087040'

添加/编辑数据源

  • 地址POST /jmreport/addDataSource
  • 新增不传 id编辑传 id
  • 请求参数
{
    "id": "",
    "reportId": "报表ID",
    "code": "",
    "name": "mysql",
    "dbType": "MYSQL5.7",
    "dbDriver": "com.mysql.cj.jdbc.Driver",
    "dbUrl": "jdbc:mysql://127.0.0.1:3306/jimureport?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&tinyInt1isBit=false",
    "dbUsername": "root",
    "dbPassword": "123456"
}
字段 说明
id 数据源ID新增不传编辑传已有ID
reportId 关联的报表ID
name 数据源名称
dbType 数据库类型(如 MYSQL5.7ORACLEPOSTGRESQL 等)
dbDriver JDBC驱动类名
dbUrl JDBC连接URL
dbUsername 数据库用户名
dbPassword 数据库密码

数据源与数据集的关联

数据集通过 dbSource 字段关联数据源,值为数据源的 id

{
    "dbCode": "aa",
    "dbType": "0",
    "dbDynSql": "select name from demo",
    "dbSource": "1010703895600087040",
    "dbSourceType": "mysql"
}
字段 说明
dbSource 数据源IDaddDataSource 返回或编辑时传入的 id)。空字符串 "" = 使用默认数据源
dbSourceType 数据库类型(mysqloracle 等),后端会自动识别,也可手动指定

注意: 如果开启了数据源安全模式(firewall.dataSourceSafe: trueSQL 数据集必须指定 dbSource,不允许使用默认数据源。

SQL数据集

SQL语句用法

  • 如果id字段为字符串类型则需要加单引号select * from table where id='${id}'
  • 您可以编写${id}做为一个参数这里id是参数的名称。例如select * from table where id='${id}'
  • 您可以编写#{sysUserCode}做为一个系统变量这里sysUserCode是当前登录人。例如select * from table where create_by='#{sysUserCode}'
  • 您可以编写存储过程CALL proc_sys_role(${pageNo}, ${pageSize})CALL为开启存储过程
  • MongoDB和Elasticsearch支持sql语句表名需要增加数据库标识MongoDBmongoElasticsearches。例如select * from mongo.table

SQL解析接口

  • 地址POST /jmreport/queryFieldBySql
  • 请求参数
{
    "sql": "select * from test_order_product where order_fk_id = ${order_fk_id}",
    "type": "0",
    "paramArray": "[{\"id\":\"1047395275108601856\",\"jimuReportHeadId\":\"1047395274039054336\",\"paramName\":\"order_fk_id\",\"paramTxt\":\"order_fk_id\",\"paramValue\":\"1\",\"orderNum\":1,\"createBy\":\"admin\",\"createTime\":\"2025-02-06 16:21:43\",\"updateBy\":null,\"updateTime\":null,\"searchFlag\":0,\"widgetType\":null,\"searchMode\":null,\"dictCode\":null,\"searchFormat\":null,\"extJson\":\"\",\"tableIndex\":1,\"_index\":0,\"_rowKey\":105}]"
}
  • 返回结果
{
    "success": true,
    "message": "解析成功",
    "code": 200,
    "result": {
        "paramList": [],
        "fieldList": [
            {
                "fieldName": "id",
                "fieldText": "id",
                "widgetType": "String",
                "orderNum": 1
            }
        ]
    }
}

API数据集

API数据集用法

  • 如果id字段为字符串类型则需要加单引号http://127.0.0.1:8080/jeecg-boot/jimureport/test?id=${id}
  • 您可以编写#{sysDateTime}做为一个系统变量这里sysDateTime是当前系统时间。例如http://127.0.0.1:8080/jeecg-boot/jimureport/test?riqi=#{sysDateTime}
  • 您可以简写访问路径,如:#{domainURL}/jimureport/test/getList

API解析接口

  • 地址POST /jmreport/executeSelectApi
  • 请求参数
{
    "api": "http://localhost:8085/jimureport/test/getList?pid=&name=",
    "method": "0",
    "paramArray": "[{\"id\":\"1066517440772788224\",\"jimuReportHeadId\":\"1066517440441438208\",\"paramName\":\"pid\",\"paramTxt\":null,\"paramValue\":\"\",\"orderNum\":1,\"createBy\":\"admin\",\"createTime\":\"2025-03-31 10:46:23\",\"updateBy\":null,\"updateTime\":null,\"searchFlag\":0,\"widgetType\":null,\"searchMode\":null,\"dictCode\":\"\",\"searchFormat\":null,\"extJson\":\"\",\"tableIndex\":1,\"_index\":0,\"_rowKey\":231}]"
}
  • 返回结果
{
    "success": true,
    "message": "",
    "code": 200,
    "result": [
        {
            "fieldName": "ctotal",
            "fieldText": "ctotal",
            "widgetType": "String",
            "isShow": true,
            "orderNum": 1
        }
    ]
}

JSON数据集

自动将data中的字段解析成fieldName/fieldText/widgetType格式。

  • 输入格式
{
    "data": [
        {
            "ctotal": "125箱",
            "cname": "牛奶0",
            "cprice": "56",
            "riqi": "2022年10月21日",
            "id": "1",
            "dtotal": "1256箱",
            "tp": "7000",
            "ztotal": "589箱",
            "cnum": "每箱12瓶"
        }
    ]
}

JavaBean数据集

  • 地址POST /jmreport/queryFieldByBean
  • 请求参数
{
    "javaType": "spring-key",
    "javaValue": "testRpSpringBean",
    "isPage": false,
    "param": {}
}
  • 返回结果
{
    "success": true,
    "message": "解析成功",
    "code": 200,
    "result": [
        {
            "fieldName": "name",
            "fieldText": "name",
            "widgetType": "String",
            "orderNum": 1
        }
    ]
}

查询已有数据集

更新数据集前必须先查到已有数据集的 dbId,流程如下:

Step 1: 获取数据集列表(含 dbId

  • 地址GET /jmreport/field/tree/{reportId}
  • 返回结构
{
    "result": [
        [
            {
                "code": "userlist",
                "dbId": "1194900477760331776",
                "title": "用户列表",
                "type": "0",
                "isList": "1",
                "izSharedSource": 0,
                "children": [
                    {"title": "username", "fieldText": "username"},
                    {"title": "realname", "fieldText": "realname"}
                ]
            }
        ]
    ]
}

提取 dbCode → dbId 映射:

tree = api_request(f'/jmreport/field/tree/{report_id}')
db_map = {}  # dbCode -> dbId
for group in tree.get('result', []):
    if group and len(group) > 0:
        info = group[0]
        db_map[info['code']] = info['dbId']

Step 2: 获取单个数据集详情

  • 地址GET /jmreport/loadDbData/{dbId}?reportId={reportId}
  • 返回结构result 包含三个顶层字段:
{
    "result": {
        "dbId": "数据集ID",
        "reportDb": {
            "id": "数据集ID",
            "dbCode": "userlist",
            "dbDynSql": "SELECT ... FROM ...",
            "dbSource": "1010703895600087040",
            "dbSourceType": "mysql",
            "isPage": "1",
            "isList": "1"
        },
        "fieldList": [...],
        "paramList": [...]
    }
}

注意:dbDynSqldbSourceresult.reportDb 中,不在 result 顶层。

detail = api_request(f'/jmreport/loadDbData/{db_id}?reportId={report_id}').get('result', {})
report_db = detail.get('reportDb', {})
existing_sql = report_db.get('dbDynSql', '')
existing_db_source = report_db.get('dbSource', '')
existing_fields = detail.get('fieldList', [])
existing_params = detail.get('paramList', [])

Step 3: 查询参数列表

  • 地址GET /jmreport/getListReportDb?reportId={reportId}
  • 返回:每个 dbCode 对应的参数列表
{"result": {"reportDbParam": {"userlist": [{"paramName": "username", ...}], "userpie": []}}}

保存或修改数据集

新增不传 id更新必须传 id。 后端 saveOrUpdate 逻辑:有 id 则更新,无 id 则新增。

  • 地址POST /jmreport/saveDb
  • 请求参数
{
    "id": "1193767090018410496",
    "izSharedSource": 0,
    "jimuReportId": "1193766682428530688",
    "dbCode": "aa",
    "dbChName": "aa",
    "dbType": "0",
    "dbSource": "",
    "jsonData": "",
    "apiConvert": "",
    "jimuSharedSourceId": null,
    "isList": "1",
    "isPage": "1",
    "dbDynSql": "select * from demo",
    "fieldList": [
        {
            "id": "1193767090198765568",
            "jimuReportDbId": "1193767090018410496",
            "fieldName": "id",
            "fieldText": "id",
            "widgetType": "String",
            "widgetWidth": null,
            "orderNum": 0,
            "searchFlag": null,
            "searchMode": null,
            "searchValue": null,
            "dictCode": "",
            "createBy": "admin",
            "createTime": "2026-03-17 14:11:04",
            "updateBy": null,
            "updateTime": null,
            "searchFormat": null,
            "extJson": "",
            "fieldNamePhysics": null,
            "tableIndex": 1,
            "_index": 0,
            "_rowKey": 44
        }
    ],
    "paramList": []
}
  • 返回结果
{
    "success": true,
    "message": "",
    "code": 200,
    "result": {
        "id": "1193767090018410496",
        "jimuReportId": "1193766682428530688",
        "dbCode": "aa",
        "dbChName": "aa",
        "dbType": "0",
        "dbDynSql": "select * from demo",
        "fieldList": [],
        "paramList": [],
        "isPage": "1",
        "isList": "1",
        "dbSource": "",
        "dbSourceType": "mysql",
        "createBy": "admin",
        "updateBy": "admin",
        "createTime": "2026-03-19 17:12:34",
        "updateTime": "2026-03-19 17:12:34",
        "apiConvert": "",
        "izSharedSource": 0,
        "jimuSharedSourceId": null
    }
}

dbType 值说明

dbType 类型 关键字段
"0" SQL数据集 dbDynSql
"1" API数据集 apiUrl + apiMethod
"2" JavaBean数据集 javaType + javaValue
"3" JSON数据集 jsonData
"4" 共享数据集
"5" 多文件数据集
"6" 单文件数据集