# urule **Repository Path**: xieyuanchang/urule ## Basic Information - **Project Name**: urule - **Description**: 基于urule开源版,进行二次开发构建的框架 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 144 - **Created**: 2024-11-13 - **Last Updated**: 2024-11-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # springboot-urule 基于URule-2.1.5开源版本集成SpringBoot-2.0,基于内置源码的集成,方便直接二次开发。 因为开源版本的springboot模块只是进行了最基本的集成,文件仓库默认还是存储在磁盘,现在希望基于最新版的SpringBoot-2.0和URule-2.1.5进行集成,并支持数据库存储资源库等,和权限控制等。 同时加之在使用SpringBoot 2.0的时候踩过一些坑,最终顺利完成和各种不同数据源的集成,希望对刚解除或者正好也有集成URule项目做二次开发的朋友少走一些弯路,后续有空会逐步去完善一些东西。 # 后端 ## edas-rule-server Urule服务配置端 ## edas-rule-client 开放Urule调用接口服务 ## 运行 1.修改edas-rule-server里面application.properties数据库配置,在数据库创建空的库。urule会自动创建表 2.运行edas-rule-server的EdasRuleServerApplication启动类 3.打开浏览器访问 http://localhost:8090/urule/ 试试吧 4.如果需要测试调用服务,运行edas-rule-client的EdasRuleClientApplication启动类 5.edas-rule-server页面创建知识包等,edas/user_package 6.使用Http请求的工具类,如Postman 调用http://localhost:8787/rule/ageRule + 传参 # 前端 urule-console-js模块为Urule前端源码部分!温馨提醒:urule采用react技术开发,如果要改造 找懂react的人弄吧 哈哈! ## 前端构建 1.执行npm install 2.打包 npm run start 3.将打包后的website/js目录下的js脚本 替换 edas-rule-server/src/main/resources/urule-asserts/js 目录下的即可完成前端更新 # 后端代码组成分析 ## 后端模型(com.bstek.urule.model) 在URule规则引擎中,以下是各种模型的解释: 1. **Decision Tree(决策树)**: - 决策树,也称为规则树,是一种以树形结构表现规则的方式。它通过树状图来展示业务规则,使得规则的逻辑更加直观和易于理解。在URule中,决策树是“躺倒”的,以节省页面空间并展示更多内容。决策树由变量节点、条件节点和动作节点组成,通过这些节点定义规则和业务逻辑。 2. **Flow(规则流/决策流)**: - 规则流,又称决策流,类似于工作流,用于编排已有的决策集、决策表、决策树、评分卡等的执行顺序,以实现复杂的业务规则。它可以串行、并行或根据条件选择分支执行。URule提供了基于网页的流程设计器,通过拖曳操作快速编排规则执行顺序。 3. **Function(函数)**: - 虽然搜索结果中没有直接提到“function”模型,但在规则引擎中,函数通常指可以在规则中调用的自定义或预定义的操作,用于执行特定的业务逻辑或计算。 4. **Library(库)**: - 在URule中,库文件用于存储和管理变量、常量、参数等,以便在规则定义中复用。库文件可以是变量库、常量库或参数库,它们在规则设计中起到支持和简化配置的作用。 5. **Rete(RETE算法)**: - URule是一款基于RETE算法的纯Java规则引擎。RETE算法是一种用于实现规则引擎的高效算法,它通过构建一个 RETE网络来匹配规则,提高规则匹配的性能。 6. **Rule(规则)**: - 规则是规则引擎中的基本组成单元,定义了当特定条件满足时触发的动作。在URule中,规则可以通过多种方式定义,包括向导式规则集、脚本式规则集等。 7. **Scorecard(评分卡)**: - 评分卡是URule中用于计算评分的工具,它以二维表的形式展示目标对象的属性,并为不同属性设置不同区段的条件,每个区段条件对应不同的分值。运行时,引擎会根据定义的区段条件自动计算目标对象的评分。 8. **Table(决策表)**: - 决策表通过二维表的方式定义一批规则,分为条件部分和动作部分。条件部分定义了规则触发的条件,而动作部分定义了条件满足后执行的动作。 这些模型共同构成了URule规则引擎的核心功能,使其能够灵活地定义和执行复杂的业务规则。 ### Rule(规则) 在URule规则引擎中,规则(Rule)是构成业务逻辑的基本单元,以下是您提到的各种模型组件的解释: 1. **LHS(Left-Hand Side,左手边)**: - 在规则引擎中,LHS通常指的是规则的“如果”部分,即规则的条件表达式。当这些条件被满足时,规则引擎将执行规则的RHS(Right-Hand Side,右手边)部分,即“那么”部分的动作。 2. **Loop(循环)**: - 循环规则允许您对集合中的每个元素执行相同的规则集。这在处理列表或数组时非常有用,可以对集合中的每个元素应用相同的业务逻辑。 3. **AbstractValue(抽象值)**: - 抽象值是URule中用于表示值的基类,它可以是字面量、变量值、方法调用结果等。它是值类型的一个通用表示。 4. **Arithmetic(算术)**: - 算术是URule中用于执行数学运算的类,包括加、减、乘、除等基本运算。 5. **ArithmeticType(算术类型)**: - 算术类型定义了算术操作的种类,如加法、减法等。 6. **CommonFunctionValue(公共函数值)**: - 公共函数值是指在规则中可以调用的公共函数,这些函数可以是自定义的,也可以是URule提供的内置函数。 7. **ComplexArithmetic(复杂算术)**: - 复杂算术处理更复杂的数学运算,可能包括多个操作符和操作数的组合。 8. **ConstantValue(常量值)**: - 常量值在规则中表示一个不变的值,如数字、字符串等。 9. **Library(库)**: - 库文件用于存储和管理变量、常量、参数等,以便在规则定义中复用。 10. **LibraryType(库类型)**: - 库类型定义了库文件的种类,如变量库、常量库、参数库等。 11. **MethodValue(方法值)**: - 方法值表示一个方法调用的结果,可以在规则中调用Java方法,并使用其返回值。 12. **NamedReferenceValue(命名引用值)**: - 命名引用值用于引用规则中定义的变量或参数,通过名称来引用特定的值。 13. **Op(操作符)**: - 操作符用于表示算术或逻辑运算符,如+、-、*、/、&&、||等。 14. **Other(其他)**: - 其他可能指的是不属于上述类别的值或操作,或者是一些辅助性的功能或属性。 15. **Parameter(参数)**: - 参数是在规则中传递给动作或条件的值,可以是输入参数或从变量库中引用的参数。 16. **ParameterValue(参数值)**: - 参数值是参数的具体值,可以在规则执行时传递给动作或条件。 17. **ParenValue(括号值)**: - 括号值用于表示括号内的表达式,用于改变运算的优先级。 18. **Rhs(Right-Hand Side,右手边)**: - RHS通常指的是规则的“那么”部分,即当LHS条件满足时执行的动作。 19. **Rule(规则)**: - 规则是规则引擎中的基本单元,由条件(LHS)和动作(RHS)组成,定义了当条件满足时执行的业务逻辑。 20. **RuleInfo(规则信息)**: - 规则信息提供了规则的元数据,如规则名称、描述、属性等。 21. **RuleSet(规则集)**: - 规则集是一系列规则的集合,可以包含多个普通规则和循环规则。 22. **SimpleArithmetic(简单算术)**: - 简单算术处理基本的数学运算,如加减乘除。 23. **SimpleArithmeticValue(简单算术值)**: - 简单算术值表示简单算术运算的结果。 24. **SimpleValue(简单值)**: - 简单值是值的一个基本类型,如字符串、数字等。 25. **ValueType(值类型)**: - 值类型定义了值的种类,如字符串、数字、布尔值等。 26. **VariableCategoryValue(变量类别值)**: - 变量类别值用于表示变量的类别或类型,如变量是输入参数、输出参数还是局部变量。 27. **VariableValue(变量值)**: - 变量值表示变量的具体值,可以在规则中被引用和操作。 这些组件共同构成了URule规则引擎中规则的定义和执行逻辑,使得用户可以灵活地定义和执行复杂的业务规则。 ### Flow(规则流/决策流) 在URule规则引擎中,Flow(规则流/决策流)是一种用于编排和执行一系列决策元素(如决策集、决策表等)的工具,以实现复杂的业务规则。以下是您提到的各种模型组件的解释: 1. **INS(FlowInstance)**: - `FlowInstance` 是规则流的实例,代表一个规则流的运行实例。它包含了规则流执行过程中的状态信息和上下文数据。 2. **ActionNode(动作节点)**: - 动作节点可以与实现了 `com.bstek.urule.model.flow.FlowAction` 接口的Spring Bean绑定。当规则流执行到这个节点时,就会执行与之绑定的 `FlowAction` 实现类。动作节点可以执行具体的Java类中的方法,从而进行复杂的业务操作。 3. **BindingNode(绑定节点)**: - 这个术语在搜索结果中没有明确提及,但通常在规则流中,绑定节点可能指的是与特定规则或决策逻辑绑定的节点。 4. **Connection(连接)**: - 连接是指在规则流中不同节点之间的连接线,它们定义了节点之间的执行顺序和条件。 5. **DecisionItem(决策项)**: - 决策项是决策节点中用于定义特定流向的条件和流向的配置项。每个决策项包含条件脚本和流向,用于控制规则流的分支逻辑。 6. **DecisionNode(决策节点)**: - 决策节点根据为其下流出连接配置的条件来决定究竟应该走哪条连接的节点。决策节点至少需要两条流出连接,以实现分支逻辑。 7. **DecisionType(决策类型)**: - 决策类型是指决策节点的决策模式,可以是“条件”或“百分比”。条件类型基于条件脚本决定流向,而百分比类型则根据设置的百分比分流。 8. **EndNode(结束节点)**: - URule的决策流没有专门的结束节点,可以在任何节点结束。这与一些工作流引擎要求所有分支都必须以结束节点结束不同。 9. **FlowAction(规则流动作)**: - `FlowAction` 是一个接口,定义了规则流中动作节点要执行的操作。实现这个接口的类可以配置到Spring中,并在规则流执行到动作节点时被调用。 10. **FlowDefinition(规则流定义)**: - 规则流定义是指整个规则流的结构和配置,包括节点类型、连接、条件等,用于定义规则流的逻辑和行为。 11. **FlowNode.java**: - `FlowNode` 是规则流中的节点的基类,定义了节点共有的属性和行为,如名称、事件处理等。 12. **FlowNodeJsonDeserializer**: - 这个类可能用于将JSON格式的数据反序列化为 `FlowNode` 对象,用于在Web界面中编辑和保存规则流定义时的数据交换。 13. **FlowNodeType(规则流节点类型)**: - 规则流节点类型定义了规则流中可用的不同节点种类,如开始节点、规则节点、决策节点等。 14. **ForkNode(分支节点)**: - 分支节点用于在规则流中创建多个并行执行路径,类似于工作流中的分支操作。 15. **JoinNode(聚合节点)**: - 聚合节点用于合并多个并行路径,类似于工作流中的聚合操作,用于控制并行执行路径的汇合点。 16. **NodeEvent(节点事件)**: - `NodeEvent` 接口定义了规则流中节点的事件处理逻辑,如节点进入和离开时的事件。 17. **PercentItem(百分比项)**: - 百分比项是在决策节点中用于定义每个流向的流量百分比,用于实现基于概率的分支逻辑。 18. **ProcessDefinition(流程定义)**: - 流程定义可能是指整个规则流的高层次定义,包括所有节点和连接的集合,定义了整个规则流的结构。 19. **RuleNode(规则节点)**: - 规则节点用于绑定URule中的决策集、决策表等规则文件,执行时会执行与节点绑定的规则文件。 20. **RulePackageNode(规则包节点)**: - 规则包节点与具体的知识包绑定,运行时会执行与之绑定的知识包中的规则。 21. **ScriptNode(脚本节点)**: - 脚本节点允许在规则流中执行自定义的脚本,用于实现更灵活的业务逻辑。 22. **StartNode(开始节点)**: - 开始节点是规则流的入口点,规则流的执行从开始节点启动。 这些组件共同构成了URule规则流的基本结构,使得用户可以灵活地定义和执行复杂的业务规则。