前言: **系统变量**是预置的一些和当前登录人相关的变量,如:用户账号、用户部门编码,在解析sql/api地址的时候,自动替换成真实的变量值,并且支持用户自定义变量名,但是仅限于jeecgboot中集成报表。 ### 一、默认系统变量 | 属性名 | 描述 | 用法 | | --- | ------- |------- | | sysUserCode| 当前登录人账号 `V1.0.10+` | #{sysUserCode} | | sysDate| 当前日期的字符串 格式为 yyyy-MM-dd `V1.3.3-beta+` | #{sysDate} | | sysDateTime| 当前时间的字符串 格式为yyyy-MM-dd HH:mm:ss `V1.3.3-beta+` |#{sysDateTime} | 说明:目前默认系统变量均使用`#{}`方式取值。 #### 测试示例:只看当前登录人的数据,使用admin登录。 - 1-1 表数据: ![](https://img.kancloud.cn/3c/2f/3c2f4dd772a3dde4f27fa36bf77b440d_454x133.png) - 1-2 录入sql解析:`select * from test_sys_param where name = '#{sysUserCode}'` ![](https://img.kancloud.cn/19/af/19af24cf7cbfb3c31aedf05749fbd934_1869x516.png) - 1-3 创建报表: ![](https://img.kancloud.cn/0b/93/0b93e4adb1f9b3f3d6b50822740f1234_560x188.png) - 1-4 预览数据: ![](https://img.kancloud.cn/d8/99/d899742cc3116d56924db71e7d6b7408_807x249.png) ### 二、 API请求 BasePath 变量 系统变量 `{{ domainURL }}` 对于api请求,需要填写api请求地址,如果请求的是本地项目自带的接口,通常还是需要带上域名/ip: `http://localhost:8080/jeecg-boot/test/api/one` ![](https://img.kancloud.cn/f2/06/f206c4c39805226f52ae8893d1ac64b0_1898x521.png) 可以使用简写`{{ domainURL }}`替换之,如: `{{ domainURL }}/test/api/one` #### 三、如何自定义系统变量 如果重写了`getUserInfo`方法,则下系统默认变量会失效,以重写的方法内设置的map为准。 步骤: 1.在jeecg-boot中添加依赖集成报表(此步骤可参考快速集成文档) 2.添加权限实现类,主要看方法`getUserInfo` ~~~ package org.jeecg.config.jimureport; import org.jeecg.common.constant.DataBaseConstant; import org.jeecg.common.system.api.ISysBaseAPI; import org.jeecg.common.system.util.JwtUtil; import org.jeecg.common.system.vo.SysUserCacheInfo; import org.jeecg.common.util.RedisUtil; import org.jeecg.common.util.TokenUtils; import org.jeecg.modules.jmreport.api.JmReportTokenServiceI; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; @Component class JimuReportTokenService implements JmReportTokenServiceI { @Autowired private ISysBaseAPI sysBaseAPI; @Autowired @Lazy private RedisUtil redisUtil; @Override public String getToken(HttpServletRequest request) { return TokenUtils.getTokenByRequest(request); } @Override public String getUsername(String token) { return JwtUtil.getUsername(token); } @Override public Boolean verifyToken(String token) { return TokenUtils.verifyToken(token, sysBaseAPI, redisUtil); } @Override public Map<String, Object> getUserInfo(String token) { String username = JwtUtil.getUsername(token); //此处通过token只能拿到一个信息 用户账号 后面的就是根据账号获取其他信息 查询数据或是走redis 用户根据自身业务可自定义 SysUserCacheInfo userInfo = sysBaseAPI.getCacheUser(username); Map<String, Object> map = new HashMap<String, Object>(); //设置账号名 map.put("sysUserCode", userInfo.getSysUserCode()); //设置部门编码 map.put("sysOrgCode", userInfo.getSysOrgCode()); // 将所有信息存放至map 解析sql会根据map的键值解析,可自定义其他值 return map; } } ~~~