风控决策系统扩展点,自定义函数配置

个人语雀: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...,开源版

相关推荐
回家路上绕了弯41 分钟前
AI Coding 中,人在做什么?
后端
AI全栈学习助手1 小时前
告别“转圈等待”:Spring Boot + SSE 让大模型像 ChatGPT 一样流式输出
java·人工智能·spring boot·后端·aigc
IT_陈寒1 小时前
React实战技巧总结
前端·人工智能·后端
陈随易9 小时前
Postman 被曝自动往 Claude Code 和 Codex 装插件
前端·后端·程序员
云-缩影10 小时前
拆解 AI 图像生成应用的后端架构:ECS、OSS 和大模型 API 怎么配合
java·spring boot·后端
考虑考虑11 小时前
Posrgresql恢复.backup文件
数据库·后端·postgresql
无奈何杨12 小时前
风控决策系统决策流,策略模式,权重、顺序、投票、最坏
后端
Patrick_Wilson13 小时前
Go 为什么需要 defer?从函数怎么收尾说起
后端·go·编程语言
苏三说技术13 小时前
DeepSeek Harness入驻B站,评论区被干成了大型插件集市!
后端