个人语雀:wnhyang
Github:wnhyang - Overview
项目:github.com/wnhyang/coo...,开源版
前文已经简单介绍风控决策系统中的三方请求、扩展函数。

本篇文章主要介绍一下字段解析这块的扩展点
首先说明一下,字段解析大致有如下步骤:普通字段解析前置-普通字段解析-普通字段解析后置-动态字段解析前置-动态字段解析-动态字段解析后置,简单来看其实就是在普通字段和动态字段分别做前后切面。

这里设计了一个字段扩展接口,推荐系统自行扩展实现。
java
public interface FieldExService {
default void preNormalField(FieldContext fieldContext) {
}
default void postNormalField(FieldContext fieldContext) {
}
default void preDynamicField(FieldContext fieldContext) {
}
default void postDynamicField(FieldContext fieldContext) {
}
}
内置了如下实现,目前做如下实现,补充了IP和经纬度的解析(后面都会删掉,继续看就知道了)。
java
@Slf4j
@Component(index = 199)
public class FieldExServiceImpl implements FieldExService {
@Inject
private IpAnalysis ipAnalysis;
@Inject
private GeoAnalysis geoAnalysis;
@Override
public void postNormalField(FieldContext fieldContext) {
// 非必要并行,收益小于
// 反而带来 线程上下文切换开销、线程池竞争、复杂度
LocalDateTime eventTime = fieldContext.getData(FieldCode.EVENT_TIME, LocalDateTime.class);
// 内置扩展字段
fieldContext.setDataByType(FieldCode.EVENT_TIME_STAMP, String.valueOf(LocalDateTimeUtil.toEpochMilli(eventTime)), FieldType.STRING);
// 身份证解析
// 手机号解析
// ip解析
ipAnalysis.parseIp(fieldContext);
// 经纬度解析
geoAnalysis.parseGeo(fieldContext);
}
}
自行实现后使用框架的bean顺序设置并注入,然后执行。
java
fieldExServiceList.forEach(s -> s.preNormalField(fieldContext));
// 普通字段解析
fieldExServiceList.forEach(s -> s.postNormalField(fieldContext));
fieldExServiceList.forEach(s -> s.preDynamicField(fieldContext));
// 动态字段解析
fieldExServiceList.forEach(s -> s.postDynamicField(fieldContext));
为什么前面说内置的那个IP、经纬度要删掉呢?
这就要说一下现在面对实际业务场景存在的问题吧。
在目前的设计中,可以配置多个接口,配置不同的入参和出参,来应对不同的应用对接。那么不同的应用字段总会有差异,那么就可能存在这样的问题:
a应用,事件e01,有字段idCard,需要有idCard对应的国家、省份、城市
b应用,事件e02,有字段payerIdCard,payeeIdCard,需要分别对应到其国家、省份、城市
那么对应这样的问题,肯定不能在代码里写死,判断a走解析1,判断b走解析2,这样扩展性太差啦。

为此,系统设计了一套自定义函数与函数配置功能。
如下,展示了内置函数的详细配置,主要是入参和出参配置。


如下为"公共接口"接入的"普通字段后"步骤配置了如下函数配置,当然可以看到映射可选字段类型是对应的,年龄是整数,映射字段也只能选整数字段。

测试一下,这里入参的证件号是随机生成的,年龄写了33。

看实际数据,由证件号解析出来国家、省份城市等赋值到前面配置的字段了。


当然这是独立配置的菜单,实际上应该放在配置接入服务配置里更好一些。
个人语雀:wnhyang
Github:wnhyang - Overview
项目:github.com/wnhyang/coo...,开源版