zoukankan      html  css  js  c++  java
  • Devs开源规则引擎介绍

    Devs

    Devs是一款轻量级的规则引擎。

    开源地址:https://github.com/CrankZ/devs

    基础概念

    此规则引擎的基础概念有字段、条件、规则等。

    其中字段组成条件,条件组成规则,并且支持多个条件通过与或组成一个规则。下面用常见的代码说明各个概念

    代码举例

    规则分类

    多个规则可组成一个模板,调用接口执行的时候是以模板为维度执行的。

    模板

    模板名称
    模板1

    规则模板映射表

    模板id 规则id
    1 1
    1 2
    1 3

    规则相关

    字段

    字段名称 字段编码 字段类型 取数类型 取数路径
    name 姓名 STRING REFLECT engineServiceImpl#testReflect
    age 年龄 NUMBER REFLECT engineServiceImpl#testReflect

    条件

    条件名称 条件编码 字段编码 逻辑比较符 期望值
    姓名是否等于张三 C_NAME_IS_ZS name StringMethod.equals($EXPECT,$FACT) 张三
    年龄是否大于18岁 C_AGE_GT18 age NumberMethod.gt($EXPECT,$FACT) 18

    规则

    规则名称 条件组
    姓名是否等于张三 C_STRING_EQUALS1
    年龄是否大于18岁 C_NUMBER_GE1
    用户是否符合条件 C_STRING_EQUALS1 && C_NUMBER_GE1

    规则结果

    调用接口执行时,结果会直接通过接口返回。

    TODO: 保存规则执行结果

    TODO: 添加规则触发器

    ER图

    模板-规则关系

    规则相关

    规则执行结果

    执行接口

    URL:/engine/execute

    METHOD:POST

    入参

    字段名 字段类型 是否必填 解释
    templateId Long TRUE 模板ID
    params Map<String,Object> FALSE 参数

    例子

    {
      "templateId": 1,
      "params": {
        "userId": 123
      }
    }
    

    出参

    验收结果只有是、否、NULL。

    执行结果为NULL,则只输出内容,需要手动判断

    规则名称 执行结果 条件组 实际取值
    姓名是否等于张三 TRUE 姓名是否等于张三 "姓名": "张三"
    年龄是否大于18岁 FALSE 年龄是否大于18岁 "年龄": 10
    用户是否符合条件 FALSE 姓名是否等于张三 && 年龄是否大于18岁 "姓名": "张三", "年龄": 10

    例子

    {
      "code": "0000",
      "msg": "success",
      "requestId": "",
      "timestamp": 1637996239325,
      "data": {
        "templateId": 1,
        "params": {},
        "ruleResult": [
          {
            "ruleName": "姓名是否等于张三",
            "trigger": true,
            "conditions": "姓名是否等于张三",
            "facts": {
              "姓名": "张三"
            }
          },
          {
            "ruleName": "年龄是否大于18岁",
            "trigger": false,
            "conditions": "年龄是否大于18岁",
            "facts": {
              "年龄": 10
            }
          },
          {
            "ruleName": "用户是否符合条件",
            "trigger": false,
            "conditions": "姓名是否等于张三 && 年龄是否大于18岁",
            "facts": {
              "姓名": "张三",
              "年龄": 10
            }
          }
        ]
      }
    }
    
  • 相关阅读:
    Ambari源代码分析之总览
    最简单的修改HashMap value值的方法
    机器学习 Hidden Markov Models 1
    OpenCV坐标系与操作像素的四种方法
    OpenCV2.4.13+VS2012开发环境配置
    OpenCV——PS滤镜算法之 Ellipsoid (凹陷)
    OpenCV——PS滤镜算法之 Ellipsoid (凸出)
    如何快糙好猛的使用Shiqi.Yu老师的公开人脸检测库(附源码)
    伊斯坦布尔的流浪 (三)
    伊斯坦布尔的流浪 (一)
  • 原文地址:https://www.cnblogs.com/CrankZ/p/15615958.html
Copyright © 2011-2022 走看看