值集客户端
一、简介
1.1 概述
本客户端依赖于HPFM平台服务的值集功能
1.2 组件坐标
<dependency>
<groupId>org.hzero.boot</groupId>
<artifactId>hzero-boot-platform</artifactId>
<version>${hzero.boot.version}</version>
</dependency>
1.3 功能特性
- 发布Lov Sql Data API,从HPFM中获取Mybatis Sql语句,动态执行,并返回结果。(SQL值集的支撑组件)
- 提供固定值集的访问类
- 提供基于注解的固定值集翻译功能
二、使用说明
2.1 Lov Sql Data API
若需开启此功能,在application.yaml
中添加如下配置即可
hzero:
lov:
sql:
enabled: true
然后启动服务,可以在swagger-ui中找到以下API则说明启用成功
2.2 固定值集的访问类
org.hzero.boot.platform.lov.adapter.LovValueAdapter
若需开启此功能,在application.yaml
中添加如下配置即可
hzero:
lov:
value:
enabled: true
方法 List<LovValueDTO> queryLovValue(String lovCode, Long tenantId)
描述 根据值集代码查询值集值
Parameters
lovCode 值集代码
tenantId 租户ID(全局值集可不传此参数)
Returns 查询到的值集值列表,无权访问时返回null
例
==> queryLovValue("HPFM.LOV.LOV_TYPE", null)
<== [{"value":"IDP","meaning":"独立值集"},{"value":"SQL","meaning":"自定义SQL","tag":"tag1"},{"value":"URL","meaning":"URL","tag":"tag2"}]
2.3 固定值集翻译
此功能依赖于固定值集的访问类,使用前需确认依赖功能可以使用
此功能基于Spring AOP,拦截所有被@ProcessLovValue
注解标注的,被spring代理的方法。自动根据给定配置将返回值中的快码value翻译成meaning。
@ProcessLovValue [Target = METHOD]
用以标注一个方法的返回值会进行固定值集翻译
属性 | 说明 |
---|---|
String[] targetField() default "" |
说明待处理的对象在返回值的哪个字段中,不指定的话默认处理返回值本身 * 指定字段为Page、List等Collection接口时,将会循环处理Collection中的每一个对象 * 方法返回值为头行结构的Object,使用 @ProcessLovValue(targetField = {"", "children", "children.subChildren"}) ,扫描自身和children字段所包含对象(或Collection)以及children对象中的subChildren字段(嵌套深度无限制)* 方法返回值为ResponseEntity,实际对象是在其body字段中,使用 @ProcessLovValue(targetField = {"body"}) |
@LovValue [Target = FIELD]
用以标注类中某字段的值需要进行固定值集翻译
属性 | 说明 |
---|---|
String lovCode() default '' |
值集值所在的值集代码 |
String meaningField() default '' |
处理后的含义值放在哪个字段中 不设置则进行默认映射,将注解所在字段名末尾的Code(如果有)替换为Meaning 例: * statusCode -> statusMeaning * processStatus -> processStatusMeaning * codeTypeCode -> codeTypeMeaning |
String defaultMeaning() default '' |
如果处理失败,含义字段默认设置的值,默认为原value |
使用示例:
目标方法:
...
@ProcessLovValue(targetField = BaseConstants.FIELD_BODY)
public ResponseEntity<?> queryCompanyActionHistory(@PathVariable Long companyId) {
List<CompanyActionDTO> list = this.companyActionRepository.queryCompanyActionHistory(companyId);
return Results.success(list);
}
```
目标对象:
...
@NotEmpty
@LovValue(lovCode = "SPFM.COMPANY_PROCESS_STATUS")
private ProcessStatus processStatus;
private String processStatusMeaning;
...
使用前:
[
...
{
"companyActionId": 65,
"processUser": 3,
"processDate": "2018-07-18 00:00:00",
"processStatus": "SUBMIT",
"processUserName": "汉得租户管理员"
}
...
]
使用后:
[
...
{
"companyActionId": 65,
"processUser": 3,
"processDate": "2018-07-18 00:00:00",
"processStatus": "SUBMIT",
"processUserName": "汉得租户管理员",
"processStatusMeaning": "已提交"
}
...
]
三、定制化开发
组件可定制化开发并通过重写org.hzero.boot.platform.lov.autoconfigure.LovAutoConfiguration
实现个性化配置
组件清单如下:
org.hzero.boot.platform.lov.handler.SqlFilter
:SQL过滤器,检测到关键字会抛出异常,默认检测{ "insert", "delete", "update", "drop table", "truncate", "xp_cmdshell", "exec master", "netlocalgroup administrators", "net user",";" }
org.hzero.boot.platform.lov.handler.LovSqlGetter
:SQL获取器,从HPFM服务中获取待执行的SQL,默认使用基于Feign的实现。org.hzero.boot.platform.lov.handler.LovSqlHandler
:SQL查询执行器,执行SQL并以Map形式返回结果,默认使用基于Mybatis的实现。org.hzero.boot.platform.lov.adapter.LovValueAdapter
:值集值获取器,通过值集代码和租户ID(非必输)查询值集值,默认使用基于Redis和Feign的混合实现。org.hzero.boot.platform.lov.handler.LovValueHandle
:值集值翻译处理器
四、 版本更新日志
版本 0.3.0-SNAPSHOT [2018-10-12]
- 修复了被拦截方法返回值为Collection类型时无法正确翻译固定值集的BUG
- 值集翻译功能添加多层嵌套支持
版本 0.1.0-SNAPSHOT [2018-07-18]
- 支持Lov Sql Data API
- 支持固定值集访问
- 支持固定值集翻译
展望
- Lov Sql Data API 返回的数据兼容下拉框
- 值集翻译功能添加基于正则表达式的多层嵌套支持
- 值集翻译功能添加自动生成目标字段支持