[完结14章]Flink 从0到1实战实时风控系统

赵颜
• 阅读 118

[完结14章]Flink 从0到1实战实时风控系统

对于程序化交易用户而言,无论是证券还是期货市场,每一个交易指令都需要进行充分的业务检查,通过后才能进入交易所的订单队列进行匹配成交。 在程序化交易中,除了验资、验持仓等基础的风控检查外,符合交易所异常交易管理办法规定的监管标准,杜绝和防范异常交易行为也是程序化交易风控的重中之重,比如是否存在自成交、日内过度交易、频繁报撤单、大额报撤单、报单流速控制等情况。 事前风控是指在交易指令发送到交易所前,对交易指令进行风险检测,通过检测的交易指令则提交到交易模块进行报单,未通过检测的交易指令将直接予以拒绝。对于追求低延时的交易策略,事前风控需要在极短的时间内完成。 风控系统是用来给业务风控定义风控规则的,风控规则经过规则引擎的解析得到结果,表示规则是否命中,如果命中需要触发什么样的处置。 例如,业务风控定义了一个风控规则a+b>5,在规则引擎上执行的时候需要知道a,b的值,这两个值的获取一般需要通过大数据获得,然后在规则引擎上执行,从而得到结果是否命中,以及执行命中后的操作。 下面我们给内容区添加Tab标签。用户点击标签,就可以切换不同的面板内容。

HelloWorld

你好世界

鉴权类是需要我们自己实现的,必须要扩展StpInterface接口才可以。在com.example.his.api.config.sa_token包中,创建StpInterfaceImpl.java类。 package com.example.his.api.config.sa_token;

import cn.dev33.satoken.stp.StpInterface; import com.example.his.api.db.dao.UserDao; import org.springframework.stereotype.Component;

import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; import java.util.Set;

@Component public class StpInterfaceImpl implements StpInterface { @Resource private UserDao userDao;

/**
 * 返回一个用户所拥有的权限集合
 */
@Override
public List<String> getPermissionList(Object loginId, String loginType) {
    List<String> list = new ArrayList<>();
    int userId = Integer.parseInt(loginId.toString());
    Set<String> set = userDao.searchUserPermissions(userId);
    list.addAll(set);
    return list;
}


/**
 * 返回一个用户所拥有的角色标识集合
 */
@Override
public List<String> getRoleList(Object loginId, String loginKey) {
    ArrayList<String> list = new ArrayList();
    return list;

}

}

由于MIS系统中的权限是固定的,而角色是可以动态增减的。如果我们用@SaCheckRole注解,规定访问Web方法的用户必须具备什么角色。如果将来该角色被删除掉,难道我们还要修改大量的Web方法注解吗?就像下面的Web方法,如果角色1被删除,难不成还要让程序员重新修改代码,重新打包程序,重新发布项目吗? @RestController("MisAppointmentController") @RequestMapping("/mis/appointment") public class AppointmentController { @Resource private AppointmentService appointmentService;

@PostMapping("/searchByPage")
@SaCheckRole(value = {"超级管理员", "部门经理", "角色1"}, mode = SaMode.OR)
public R searchByPage(@RequestBody @Valid SearchAppointmentByPageForm form) {
    ……
}

}

仔细观察不难发现,上面的截图中标签盖住了卡片控件。为了解决这个问题,我们可以让

标签引用site-content--tabs样式。但是也不是所有的内容页面都需要有Tab标签,比如说Home页面就不需要Tab标签栏,所以我们要用表达式切换CSS样式。

HelloWorld

你好世界

为了测试路由标签是否可以引用其他内容页面,我们不妨创建三个Vue页面试试。在/src/views/mis目录中创建home.vue、dept.vue和role.vue页面,页面视图层的标签可以随便写,只要能区分开三个页面即可。 //计算网页可见区域的高度 function resetDocumentClientHeight() { //获取网页可见区域的高度 siteContent.documentClientHeight = document.documentElement.clientHeight; }

//计算内容区卡片控件高度 function loadSiteContentViewHeight() { //卡片控件高度 = 网页可见区域高度 - 导航区高度 - 卡片控件上下外填充 - 上下边框 let height = siteContent.documentClientHeight - 50 - 30 - 2; if (route.meta.isTab) { //如果引用的Vue页面需要Tab控件,卡片控件高度还要减去40 height -= 40; } //保存卡片控件高度 siteContent.height = height //声明CSS样式 siteContent.siteContentViewHeight = { minHeight: height + 'px' }; }

//浏览器尺寸发生变化的回调函数 window.onresize = () => { //更新保存的网页可见区域高度 siteContent.documentClientHeight = document.documentElement.clientHeight; //重新计算内容区的高度 loadSiteContentViewHeight(); }; 具体说来风控系统由以下部分组成:

规则:风控规则定义,是由因子和操作符组成的布尔表达式,例如a+b>5 因子:风控规则的最小组成部分,例如规则a+b>5中的a,b为因子 检查点:定义外部系统和风控系统的对接关系,例如用户中心在用户注册的时候需要调用风控系统,检查点定义了外部系统的调用参数,以及需要运行哪些规则。 数据源:提供因子数据,例如规则a>5表示的业务含义为用户连续登录失败次数大于5次,用户连续登录失败次数作为因子a,a的数据来源通过数据源来提供。数据源是对因子来源的抽象。

我们先给框架页面标签添加事件处理。其中@tab-click捕获的是切换Tab标签事件;@tab-remove捕获的是关闭Tab标签事件。

在框架页面的模型层中,定义removeTabHandle()封装函数。 function removeTabHandle(tabName) { //让mainTabs数组剔除要关闭的Tab siteContent.mainTabs = siteContent.mainTabs.filter(item => item.name !== tabName); //如果还存在剩余的Tab,就切换到最后的Tab上面 if (siteContent.mainTabs.length >= 1) { //获取mainTabs数组最后一个元素 let tab = siteContent.mainTabs[siteContent.mainTabs.length - 1]; //选中这个Tab控件 siteContent.mainTabsActiveName = tab.name; //内容区切换引用的页面 router.push({ name: tab.name }); } else { siteContent.mainTabsActiveName = ''; router.push({ name: 'MisHome' }); } } 其实也不是所有的Web方法或者HTML页面都需要用户登陆之后才能访问,比如登陆页面和对应的后端Web方法。但是有些Web方法必须用户登陆之后才能访问,我们可以给Web方法添加@SaCheckLogin注解。这个注解会拦截Web方法的请求,让SaToken验证客户端提交的Token令牌。如果令牌合法就允许调用Web方法,反之就拒绝HTTP请求,返回401状态码。 @RestController @RequestMapping("/mis/user") public class UserController { ……

@GetMapping("/searchUserSummary")
@SaCheckLogin
public R searchUserSummary() {
    ……
}

}

点赞
收藏
评论区
推荐文章
不是海碗 不是海碗
1年前
反欺诈(羊毛盾)API 实现用户行为分析的思路分析
反欺诈(羊毛盾)API是一种用于识别和防范各种欺诈行为的技术解决方案。它可集成到各种应用程序和平台中,通过手机号码、手机IP进行异常检测,达到防范恶意注册、虚假评论、虚假交易等欺诈行为的目的。
【提升团队运营效率】交易履约之订单中心实践
交易履约订单中心为履约行为提供必要的系统能力支撑,交易履约订单中心记录了交易流通的过程和状态,包括交易主体、产品信息、成交金额、计费、支付、业务信息等全流程信息,为上下游提供数据标准化、全集数据查询和串联流程的功能。
Wesley13 Wesley13
2年前
NEO从源码分析看UTXO交易
_0x00前言_社区大佬:“交易是操作区块链的唯一方式。”_0x01交易类型_在NEO中,几乎除了共识之外的所有的对区块链的操作都是一种“交易”,甚至在“交易”面前,合约都只是一个小弟。交易类型的定义在Core中的TransactionType中:源码位置:neo/Core/TransactionType
程昱 程昱
2个月前
Flink 从0到1实战实时风控系统|同步追更
Flink从0到1实战实时风控系统|同步追更download》quangneng.com/2323/一、Flink从0到1实战实时风控系统的项目介绍"从0到1"构建一个实时风控系统是一个复杂而又具有挑战性的项目。这样的项目需要从搭建基础架构到开发算法模型以
乐和 乐和
1个月前
Flink 从0到1实战实时风控系统|同步追更
Flink从0到1实战实时风控系统|同步追更download》shanxueit.com/2323/Flink从0到1实战实时风控系统的相关内容Flink核心技能实操当谈到实操Flink核心技能时,这通常涉及使用ApacheFlink构建实时流处理应用程序
linbojue linbojue
1个月前
数字货币交易所开发(数字货币交易所开发价格)
数字货币交易所开发是当前数字货币行业中备受关注的一个话题。随着区块链技术的不断发展和数字货币市场的蓬勃发展,数字货币交易所作为数字货币买卖的主要场所,其开发和运营也显得尤为重要。数字货币交易所开发(数字货币交易所开发价格)(https://www.ming
臧霸 臧霸
3星期前
Flink 从0到1实战实时风控系统|同步追更
Flink从0到1实战实时风控系统|同步追更download:itzx666.com/9095/《Flink从0到1实战实时风控系统》是一个旨在帮助开发者从零开始构建实时风控系统的项目。以下是该项目的概览:项目概述:技术栈:ApacheFlink:作为实时
光之守卫 光之守卫
3星期前
Flink 从0到1实战实时风控系统|同步追更
Flink从0到1实战实时风控系统|同步追更download》itzcw.com/9095/从0到1:构建实时风控系统的Flink实战在当今数字化的金融环境中,实时风控系统对于保障金融机构的资产安全至关重要。ApacheFlink作为一种流式处理引擎,提供
荀勗 荀勗
5个月前
Flink 从0到1实战实时风控系统-完结14章
什么是风控系统?风控系统是指一系列的完整的风险控制,以保证事情向好的方向发展,而免受不可预估的经济和财产损失而措手不及。风控类型风控类型一般分为事前、事中、事后三种。事前风控是指在交易指令发送到交易所前,对交易指令进行风险检测,通过检测的交易指令则提交到交
何婆子 何婆子
3个月前
Flink 从0到1实战实时风控系统|同步追更
Flink从0到1实战实时风控系统|同步追更download》chaoxingit.com/2323/Flink从0到1实战实时风控系统的介绍建立一个实时风控系统是一个复杂而关键的任务,需要综合使用流式计算、机器学习和实时数据处理技术。ApacheFlin