同步操作将从 hubert-樂xx/GRule 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
DSL(特定领域语言): 开发 和 业务 共识的语言. 方便业务表达需求, 方便开发理解业务
一个业务需求(一般程序或一个接口)可以抽象成为: 按一定业务逻辑规则处理数据,然后返回数据
- 一个人可以用成百上千个属性组成,由这些属性衍生出新的属性(例如,好人/坏人) 返回一个业务结果(0..多个属性值)
- 一般接口: 查询数据库或接口,对数据进行简单逻辑计算,最后返回一些属性
框架提供一种通用流程: 从多种数据源获取数据转换成属性, 并按业务规则 DSL 执行
框架可以执行成千上万的这种通用程序逻辑, 可以动态修改流程中的每个过程(数据源,属性,规则),即时生效
可用于风控规则, 电商价格规则, 财务计算规则, 工资计算规则等其它业务规则
规则 {
规则名 = '芝麻分限制'
拒绝 { 芝麻分 < 620 }
}
例子 http://39.104.28.131:9090/ test:test
规则 {
规则名 = '大小比较'
拒绝 { 年龄 > 40 || 年龄 < 25 }
}
规则 {
规则名 = '通过规则'
通过 { 年龄 == 30 }
}
规则 {
规则名 = '赋值规则'
操作 { 产品代码 = 'xx' }
}
规则 { // 电商价格规则
规则名 = '条件赋值规则'
操作 {
if (当前时间 > '2021-03-02 00:00:00') {
单价 = 10
}
}
}
规则 {
规则名 = '列表判断规则'
风险地 = ["成都", "巴中"]
拒绝 { 工作地 in 风险地 }
}
规则 {
规则名 = '包含规则'
拒绝 { "$姓名".contains("xx") }
}
策略 {
策略名 = '004244'
操作 { jj_代码 = '004244' }
条件 { jj_名 }
规则 {
拒绝 { true }
}
}
模型 : 是由多个评分条目组成
赋值变量 : 把评分结果赋值给的变量
策略 {
策略名 = '测试评分卡'
评分卡 {
评分卡名 = "测试评分卡"
基础分 = 600
模型 = [
['年龄', 18..24, 40],
['年龄', 25..45, 80],
['年龄', 46..60, 50],
['性别', 'F', 50],
['性别', 'M', 60],
[{ -> 100}], // 函数分
['芝麻分'], //变量值分
['逾期次数', {次数 -> -((次数?:0) * 100)}], // 动态分
['工作成市', ['成都', '巴中'], 99]
]
赋值变量 = '评分结果'
}
规则 {
规则名 = "评分判断"
拒绝 { 评分结果 < 60 }
}
}
策略 {
策略名 = '测试子决策'
决策 {
决策id = "cd7049e7e76441fa8315c2e1bd883042"
// 不配置默认为false, 异步为true时, 输出则不生效
// 异步 = true
// 左(子决策) = 右(父决策)
传参 {
p1 = 1
p2 = "aa"
p3 = p3 // p3的值从父决策来
}
// 左(父决策) = 右(子决策)
输出 {
p111 = p1 // p1的值从子决策来
p222 = p3 // p3的值从子决策来
}
}
}
// 返回示例
{
"decideId": "647f297a2e4540dfa93991b5b6e7b44d",
"result": "Accept",
"decisionId": "jj_analyse",
"status": "0000",
"desc": null,
"data": {
"jj_code": "165525"
}
}
决策名 = '测试1'
决策描述 = ''
// 返回的调用决策方的结果属性值
// 返回属性 '身份证号码'
// 预操作执行
操作 {}
策略 {
策略名 = '预处理'
// 条件 { true }
规则 {
规则名 = '年龄限制'
拒绝 { 年龄 > 40 || 年龄 < 25 }
}
}
决策名 = '测试1'
策略 {
策略名 = '测试策略'
规则 {
规则名 = '使用函数'
操作 {
钉钉消息("发个消息")
}
}
}
函数定义("钉钉消息") {String msg ->
Utils.http()
.post("https://oapi.dingtalk.com/robot/send?access_token=7e9d8d97e6b5e76a6a07b0c5d7c31e82f0fbdb8ced1ac23168f9fd5c28c57f1a")
.jsonBody(JSON.toJSONString(
[msgtype: 'text', text: [content: "Fund: " + msg], at: ['isAtAll': false]]
)).debug().execute()
}
拒绝 { 年龄 > 50 }
支持从SQL(数据库),http(接口),script(自定义groovy脚本函数)获取数据
静态权限
- 权限管理, 登陆, 用户-创建, 决策-创建, 字段-添加, 字段-查看, 字段-更新, 字段-删除, 收集器-添加, 收集器-查看, 收集器-更新, 收集器-删除, 操作历史查看
权限管理: 可修改任何用户的任何权限
用户-创建: 创建者默认拥有被创建的用户的所有动态权限
操作历史查看: 目前支持 决策-查看-{某个决策}, 字段-查看, 收集器-查看
动态资源(用户)权限
- 被创建用户默认拥有 用户-查看-{自己} 此动态权限
- 每添加一个用户 就会生成与之对应的以下动态权限
用户-查看-{用户1}: 能搜索到此用户1
用户-删除-{用户1}: 能删除用户1
用户-重置密码-{用户1}: 能为用户1重置密码
用户-继承决策权限-{用户1}: 能自动拥有用户1新创建的决策的所动态有权限
用户-修改权限-{用户1}: 能修改指定用户1权限
- 如果: 修改用户有 权限管理, 则可修改用户1的所有权限
- 否则: 能修改用户1的权限只能是, 当前用户所拥有的权限(除 用户-创建)
动态资源(决策)权限
- 创建者默认自动拥有生成动态权限
- 每添加一个决策 就会生成与之对应的以下动态权限
决策-查看-{决策1}: 拥有查看决策1的权限
决策-删除-{决策1}: 拥有删除决策1的权限
决策-更新-{决策1}: 拥有更新决策1的权限
## 应用名,相同应用的实例自动组成集群
sys.name=grule
## 节点与集群中其它节点的数据交换endpoint, 例: :9001 或者 127.0.0.1:9001
remoter.hp=:9001
## 主节点的endpoint, 例: :8001 或者 127.0.0.1:8001
remoter.masterHps=:8001
## 所有节点配置
remoter.hp=:9001
remoter.masterHps=xxx.com:9001
## ip1: 视ip2为master节点, 那么ip1会把自己上传到ip2或ip3,并拿到ip2或ip3拥有的所有节点信息
remoter.hp=:9001
remoter.masterHps=[ip2/ip3]:9001
## ip2: 视ip3为master节点, 那么ip2会把自己上传到ip1或ip3,并拿到ip1或ip3拥有的所有节点信息
remoter.hp=:9001
remoter.masterHps=[ip1/ip3]:9001
## ip3: 视ip1为master节点, 那么ip3会把自己上传到ip1或ip2,并拿到ip1或ip2拥有的所有节点信息
remoter.hp=:9001
remoter.masterHps=[ip1/ip2]:9001
v2.1.4-pro
v2.1.3-pro
v2.1.2-pro
v2.1.1-pro
v2.1.0-pro
v2.0.2-pro
系统基于java轻量级框架: Tiny
git clone https://gitee.com/xnat/grule.git
./gradlew clean bootJar
java -Xmx512m -Xms512m -jar build/libs/grule-pro-2.1.3.jar
jdk8
数据库要求: mysql5.7+(最好是8.0.4+), MariaDB10.2+
-- 创建数据库
CREATE DATABASE IF NOT EXISTS rule DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
# 替换 conf/app.properties 中的 jpa_rule.url 配置项
jpa_rule.url=jdbc:mysql://localhost:3306/rule?useSSL=false&user=root&password=root&useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true
IntelliJ IDEA 运行 Main.groovy 启动
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。