关于规则引擎:JVS导出导入功能让数据迁移效率飙升100

JVS规定引擎的导出与导入在业务决策和自动化流程中,规定的导出与导入性能显得尤为重要。它们不仅为团队提供了在不同环境之间共享、备份或迁徙配置数据的便捷形式,还确保了数据的一致性和可靠性。理解这一性能的外围机制,有助于咱们更好地利用它,进步工作效率。 规定数据的存储与依赖关系在具体介绍规定的导出与导入时,须要先理解所有的配置数据在零碎中存储的形式,对于决策波及到的 数据源、变量、决策配置数据,在零碎中每一条配置数据都有对应的数据ID,而且决策是依赖于变量、变量依赖于数据源的。那么在导入的过程中,很可能存在指标环境上可能有或者没有底层的依赖数据,所以决策在导入的时候就要思考,如下图所示: 在决策导出的时候,零碎会把这个决策对应所应用的变量、数据源等配置一起打包,生成一个以“.risk”结尾的离线文件,在指标环境中导入这个文件是,零碎提醒会让用户抉择是新增导入还是笼罩导入,如果笼罩,那么零碎会去找所有数据对应的历史配置,在原有的数据上做更新,如果抉择是全新导入,那么不论历史数据是否存在,都以新增的形式进行导入。 接下来咱们看看具体的配置1、决策的导出,如下图所示,用户在对应的规定上点击导出时,零碎会主动的把数据进行打包 当然这里的导出是具备权限管制的,须要在规定配置的界面上进行用户导出权限受权 2、规定的导入,如下图所示 点击导入决策后,在弹出的导入界面抉择导入的文件以及对应的导入形式 ①:设置导入的决策的目录地位②:抉择笼罩与新增 的导入模式③:抉择离线的规定文件在线demo:http://rules.bctools.cn/gitee地址:https://gitee.com/software-minister/jvs-rules

February 21, 2024 · 1 min · jiezi

关于规则引擎:JVS规则引擎打造智能自动化决策的利器

在日常的我的项目中,实时数据处理和自动化决策是智能化业务、灵活化配置的要害能力。为了满足这一需要,JVS规定引擎应运而生,它是一种高效的低代码/零代码平台,可能帮忙企业疾速构建各种利用场景,实现自动化、智能化决策的利器。 一、JVS规定引擎简介JVS规定引擎是一种基于规定的自动化决策零碎,它通过图形化界面和逻辑构建块的形式,使开发人员可能疾速构建和部署应用程序,实现自动化决策。JVS规定引擎具备高度的可扩展性和灵活性,可能轻松应答企业的各种业务需要,缩小定制化开发的老本和工夫。 二、JVS规定引擎的劣势疾速开发:通过图形化界面和逻辑构建块的形式,JVS规定引擎能够帮忙企业疾速构建和部署应用程序,缩短开发周期和老本。高度灵便:JVS规定引擎具备高度的可扩展性和灵活性,可能轻松应答企业的各种业务需要,缩小定制化开发的老本和工夫。易学易用:JVS规定引擎界面直观,操作简略,用户无需具备简单的编程技能即可进行利用开发。弱小的集成能力:JVS规定引擎具备弱小的集成能力,能够轻松集成各种软硬件零碎和第三方利用,实现数据共享和业务协同。欠缺的技术支持:JVS提供丰盛的文档、教程和沉闷的社区反对,帮忙用户更好地理解和应用JVS规定引擎,确保用户可能顺利完成我的项目开发。三、如何实现自动化决策应用JVS规定引擎实现自动化决策能够分为以下几个步骤:确定业务需要:首先须要明确业务需要和指标,理解须要实现哪些自动化决策,以及这些决策须要基于哪些数据和条件。设计入参加最初须要后果:确定曾经有的数据、和须要最终的决策模式的数据 数据接入的起源:反对内部的API数据、也反对本地数据库的数据 设计整个决策的数据因子(变量),变量反对繁多变量,也反对复合变量(数组对象),通过公式映射、可视化加工,把数据转为为场景中所须要的决策因子 可视化的决策设计:依据业务需要,拖拽化设计规定,这个也是规定引擎的外围,应用JVS规定引擎的图形化界面和逻辑构建块,构建应用程序。能够依据业务需要增加或批改规定、流程等,以确保应用程序可能精确地实现自动化决策。 在线测试并疾速上线:实现应用程序构建后,将其部署到物联网零碎中。通过实时监测数据的变动,自动化决策能够及时失效。 四、胜利案例案例一:某省财政厅所有领取款项须要 合规性查看,通过1000多组决策变量的多维度校验,实现20多个领取场景的危险管制。案例二:某金融机构通过JVS的规定引擎,实现外部金融信贷业务(创新性批量化业务)的自动化决策,每天决策超过5000笔/天。案例三:某检察院通过JVS规定引擎,对辖区内的执法后果进行合规性验证,大大降低查看的人力老本,进步了监察的精度与效率。 总结JVS规定引擎作为一款弱小的低代码/零代码平台,在物联网我的项目中具备宽泛的利用前景。它可能帮忙企业疾速构建各种应用程序,实现自动化决策和数据处理,进步企业的业务解决效率和准确性。通过应用JVS规定引擎,企业能够更好地应答市场变动和业务挑战,减速数字化转型的过程。 在线demo:http://rules.bctools.cn/gitee地址:https://gitee.com/software-minister/jvs-rules 规定引擎相干回顾低代码开发重要工具:jvs-rules 规定引擎性能介绍(一)低代码开发重要工具:jvs-rules 规定引擎性能介绍(二)低代码开发重要工具:jvs-rules 规定引擎性能介绍(三)低代码开发重要工具:jvs-rules 规定引擎性能介绍(四)

September 25, 2023 · 1 min · jiezi

关于规则引擎:规则引擎调研及初步使用-京东云技术团队

一、产生的背景生产过程中,线上的业务规定内嵌在零碎的各处代码中,每次策略的调整都须要更新线上零碎,进行从需要->设计->编码->测试->上线这种长周期的流程,满足不了业务规定的疾速变动以及低成本的更新试错迭代。 因而须要有一种解决方案将商业决策逻辑和利用开发者的技术决策分来到,在零碎运行时能去更新治理业务规定。 规定引擎(业务规定管理系统,英文名为BRMS(即Business Rule Management System))正是这样的解决方案。 二、理论业务场景:一个小例子: 如果咱们有个业务场景,当客户的积分位于一个区间A时,咱们给予他一个头衔a,当一个客户的积分位于区间B时,咱们给予他一个头衔b,当客户的积分位于区间C时,咱们给予他一个 头衔c。如果咱们应用if-else-then来写,是能够实现的,然而这里存在一个问题:规定定义和代码耦合在一起了。如果咱们扭转规定,把区间A,B,C 改成D,E,F,又或是将规定减少,从3组变为100组,那么咱们改代码切实是太麻烦了。这时候规定引擎就派上用场了,咱们心愿把规定和代码解耦,造成一个规定引擎,以适应复杂多变的业务场景,或者更加精细化的经营。理论业务场景: BD绩效考核是将各个战区每月针对bd制订的绩效考核计划线上化,反对绩效计划设置、bd绩效达成状况跟踪、绩效薪资计算等性能。 现状: 绩效的考核计划和激励政策呈现出多样化、复杂化的特点,不同的战区绩效考核的指标及考核计划不同,每个战区每个月的指标及考核计划变动十分大,同一个指标每月对应的规定定义不同。 计划: 为了应答战区绩效考核计划多变,本次须要实现指标规定的灵便配置。 以无效团长数为例: 无效团长定义为: 团长每月无效团达标天数>=15天(无效团指的是每天成团的规范:5个下单用户,15件下单商品) 指标类型指标名称指标规定实体工夫维度原子指标团用户数团成交用户数团日原子指标团商品数团成交商品数团日复合指标是否无效团团用户数>=5且团商品数>=15团日复合指标无效团天数是否无效团=1,求和sum团长月复合指标是否无效团长无效团天数>=15天团长月复合指标无效团长数是否无效团长=1,求和sum组织/网格月三、规定引擎价值及实质3.1 规定引擎价值:最大的价值就在于通过以下的三个过程,大大的缓解了频繁的需要变动给整个业务零碎带来的劫难。 逼迫零碎开发人员和业务专家梳理业务,定义对立的BOM(业务对象模型)。业务专家能够疾速的制订批改规定,而后交由规定引擎自动化地来解决剖析。规定引擎代替零碎开发人员,解决由规定条件关联动作变动带来的开发工作。总结一句话:规定引擎就是将须要内部决策的业务规定加载到零碎中,依照不同的输出条件进行不同的规定匹配组合后,执行合乎规定的一个或者多个操作。 3.2 规定引擎的实质实质是“专家决策零碎规定引擎模型”和rete算法,为了解决的是大量反复的condition匹配效率的问题,以及规定抵触标准的问题,和脚本的性能比拟不在同一个层面上。 四、 Rete算法介绍(1)规定内容 IF: 年级是三年级以上, 性别是男的, 年龄小于10岁, 身体健壮, 身高170cm以上,THEN: 这个男孩是一个篮球苗子,须要造就网络构建: []() 匹配过程: (1)匹配过程中事实在网络节点中的流转程序为A-->B-->C-->D-->E-->F-->G-->H-->I--->规定匹配通过(2)从working-Memory中拿出一个待匹配的StudentFact对象,进入根节点而后进行匹配,以下是fact在各个节点中的流动图A节点:拿StudentFact的年级数值进行年级匹配,如果年级符合条件,则把该StudentFact的援用记录到A节点的alpha内存区中,退出年级匹配。B节点:拿StudentFact的性别内容进行性别匹配,如果性别符合条件,则把该StudentFact的援用记录到B节点的alpha内存区中,而后找到B节点左援用的Beta节点,也就是C节点。C节点:C节点找到本人的左援用也就是A节点,看看A节点的alpha内存区中是否寄存了StudentFact的援用,如果寄存,阐明年级和性别两个条件都合乎,则在C节点的Beta内存区中寄存StudentFact的援用,退出性别匹配。D节点:拿StudentFact的年龄数值进行年龄条件匹配,如果年龄符合条件,则把该StudentFact的援用记录到D节点的alpha的内存区中,而后找到D节点的左援用的Beta节点,也就是E节点。E节点:E节点找到本人的左援用也就是C节点,看看C节点的Beta内存区中是否寄存了StudentFact的援用,如果寄存,阐明年级,性别,年龄三个条件合乎,则在E节点的Beta内存区中寄存StudentFact的援用,退出年龄匹配。F节点:拿StudentFact的身材数值进行身材条件匹配,如果身材条件合乎,则把该StudentFact的援用记录到D节点的alpha的内存区中,而后找到F节点的左援用的Beta节点,也就是G节点。G节点:G节点找到本人的左援用也就是E节点,看看E节点的Beta内存区中是否寄存了StudentFact的援用,如果寄存,阐明年级,性别,年龄,身材四个条件合乎,则在G节点的Beta内存区中寄存StudentFact的援用,退出身材匹配H节点:拿StudentFact的身高数值进行身高条件匹配,如果身高条件合乎,则把该StudentFact的援用记录到H节点的alpha的内存区中,而后找到H节点的左援用的Beta节点,也就是I节点。I节点:I节点找到本人的左援用也就是G节点,看看G节点的Beta内存区中是否寄存了StudentFact的援用,如果寄存了,阐明年级,性别,年龄,身材,身高五个条件都合乎,则在I节点的Beta内存区中寄存StudentFact援用。 同时阐明该StudentFact对象匹配了该规定,造成一个议程,退出到抵触区,执行该条件的后果局部:该学生是一个篮球苗子。五、Rete算法优劣势剖析5.1 Rete算法优于传统的模式匹配算法a.状态保留。 Rete 算法是一种启发式算法,不同规定之间往往含有雷同的模式,因而在 beta-network 中能够共享 BetaMemory 和 betanode。如果某个 betanode 被 N 条规定共享,则算法在此节点上效率会进步 N 倍。 b. 节点共享。 Rete 算法因为采纳 AlphaMemory 和 BetaMemory 来存储事实,当事实汇合变动不大时,保留在 alpha 和 beta 节点中的状态不须要太多变动,防止了大量的反复计算,进步了匹配效率。 c. 从 Rete 网络能够看出,Rete 匹配速度与规定数目无间接关系,这是因为事实只有满足本节点才会持续向下沿网络传递。 5.2 Rete算法的毛病Rete算法应用了存储区存储已计算的两头后果,以空间换取工夫,从而放慢零碎的速度。然而存储区依据规定的条件与事实的数目成指数级增长,极其状况下会耗尽系统资源。 ...

June 20, 2023 · 1 min · jiezi

关于规则引擎:URule规则引擎

没有规定,不成方圆;一、背景前段时间,在做我的项目重构的时候,遇到很多中央须要做很多的条件判断。当然能够用很多的if-else判断去解决,然而过后也不分明怎么回事,就想玩点别的。于是乎,就去调研了规定引擎。 当然,市面上有很多成熟的规定引擎,性能很多,性能很好。然而,就是想玩点不一样的(大家做技术选型别这样,这个是反面教材)。最终一款URule的规定引擎吸引了我,次要还是采纳浏览器可间接配置,不须要过多装置,可视化规定也做的不错。通过一系列调研,前面就把它接入了我的项目中,顺便记录下调研的后果。 二、介绍规定引擎其实是一种组件,它能够嵌入到程序当中。将程序简单的判断规定从业务代码中剥离进去,使得程序只须要关怀本人的业务,而不须要去进行简单的逻辑判断;简略的了解是规定承受一组输出的数据,通过预约好的规定配置,再输入一组后果。 当然,市面上有很多成熟的规定引擎,如:Drools、Aviator、EasyRules等等。然而URule,它能够运行在Windows、Linux、Unix等各种类型的操作系统之上,采纳纯浏览器的编辑模式,不须要装置工具,间接在浏览器上编辑规定和测试规定。 当然这款规定引擎有开源和pro版本的区别,至于pro版是啥,懂的都懂,上面放个表格,理解下具体的区别 个性PRO版开源版向导式决策集有有脚本式决策集有有决策树有有决策流有有决策表有有穿插决策表有无简单评分卡有无文件名、我的项目名重构有无参数名、变量常量名重构有无Excel决策表导入有无规定集模版保留与加载有无中文我的项目名和文件名反对有无服务器推送常识包到客户端性能的反对有无常识包优化与压缩的反对有无客户端服务器模式下大常识包的推拉反对有无规定集中执行组的反对有无规定流中所有节点向导式条件与动作配置的反对有无循环规定多循环单元反对有无循环规定中无条件执行的反对有无导入我的项目主动重命名性能有无规定树构建优化有无对象查找索引反对有无规定树中短路计算的反对有无规定条件冗余计算缓存反对有无基于计划的批量场景测试性能有无常识包调用监控有无更为欠缺的文件读写权限管制有无常识包版本控制有无SpringBean及Java类的热部署有无技术支持有无三、装置应用理论应用时,有四种应用URule Pro的形式,别离是嵌入式模式、本地模式、分布式计算模式以及独立服务模式。 然而咱们这里不思考URule Pro,咱本人整个开源版,在开源版集成springboot的根底上做一个二次开发,搜了一圈,其实就有解决方案。大抵的我的项目模块如下:本人创立个空数据库,只须要在edas-rule-server服务中批改下数据库的配置,而后启动服务即可。第一次启动实现,数据库中会创立表。 spring.datasource.type=com.alibaba.druid.pool.DruidDataSourcespring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/urule-data?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=falsespring.datasource.username=rootspring.datasource.password=mysql下面说过,它是纯用浏览器进行编辑,配置规定的,只须要关上浏览器,输出地址:http://localhost:8090/urule/frame,看到这个界面,就阐明启动胜利了。 四、根底概念3.1整体介绍先说下URule它的形成局部,次要是两局部:1、设计器局部 2、规定执行引擎。设计器局部次要是库文件和规定文件形成。上面看下整体的结构图 3.2库文件如上图介绍的,库文件有4种,包含变量库,参数库,常量库和动作库。其实相似于Java开发的零碎中的实体对象,枚举,常量以及办法。 下面说过,规定都是可视化配置的。在配置规定的过程中,就须要引入各种曾经定义好的库文件,再联合业务需要,从而配置出合乎业务场景的业务规定,所以哪里都有库文件的身影。 3.2.1变量库文件在业务开发中,咱们会创立很多Getter和Setter的Java类,比方PO、VO、BO、DTO、POJO等等,其实这些类new对象后次要起到的作用就是数据的载体,用来传输数据。 在URule中,变量库就是用来映射这些对象,而后能够在规定中应用,最终实现业务和规定的互动。最初上一张图,用来创立变量库对了,下面废话了这么多可视化配置,这才是第一次展现配置界面,羞愧羞愧。 上图高深莫测,在“库”这个菜单底下右键,而后点击增加变量库即可,最初定义本人喜爱的变量库名,当然名字只反对中文或者英文,其余字符不可用。创立完变量库后,就能够对变量库进行编辑,能够认为就是给POJO增加属性也不弯弯绕绕讲什么术语,就集体了解。图右边是创立类,其中名称是它的别名,配置规定用它代替这个类。图左边是类的属性,我这里轻易写了几个,预计看了懂得都懂。 最初在业务零碎中创立对应的类,留神全限定名和配置变量库的类门路统一。 package com.cicada;import com.bstek.urule.model.Label;import lombok.Data;/** * @author 往事如风 * @version 1.0 * @date 2023/3/3 15:38 * @description */@Datapublic class Stu { @Label("姓名") private String name; @Label("年龄") private int age; @Label("班级") private String classes;}最初说下这个@Label注解,这个是由URule提供的注解,次要是形容字段的属性,跟变量库的题目一栏统一就行。听官网介绍能够通过这个注解,实现POJO属性和变量库属性映射。就是POJO写好,而后对应规定的变量库就不须要从新写,能够间接生成。反正就有这个性能,这里就间接一笔带过了。 3.2.2常量库文件说到常量库,这个就能够认为是咱们Java零碎中的常量,枚举。比方性别,要定义枚举吧;比方对接的机构,也能够定义一个枚举吧。 当然,相似于变量库,常量库也能够实现和零碎中的枚举互相映射,这样做的益处能够防止咱们手动输出,避免输出谬误。创立常量库也比较简单,间接在“库”这个菜单下右键,“增加常量库”。 创立好常量库文件后,也会呈现如下页面: 3.2.3参数库文件参数库,就是URule规定中的长期变量,变量的类型和数量不固定。能够认为相似于Map,实际上存储参数库的也就是个Map。 同样的套路,间接在“库”这个菜单下右键,“增加参数库”。能够看到,参数库曾经少了右边分类这一项,间接增加参数,抉择类型就是干,绝对简略了很多。“名称”这列我这里用了英文,就是Map中的key,而“题目”这列就是在配置规定时候显示用的,中文看着比拟直观。 当然还须要留神的点是,定义的名称要保障惟一,因为Map中的key是惟一的,不然就会存在笼罩的状况。3.2.4动作库文件动作库能够对配置在spring中的bean办法进行映射,而后能够在规定中间接调用这批办法。习用套路,还是在“库”菜单下右键,点击“增加动作库”。而后我在零碎中增加了一个类Action,而后在类上标记@Component注解,将该类交给spring的bean容器治理。该类中增加一些办法,在办法上标记@ExposeAction注解,该注解是URule定义的,阐明被标记的办法都会被动作库读取到。 package com.bstek.urule.cicada;import com.bstek.urule.action.ActionId;import com.bstek.urule.model.ExposeAction;import org.springframework.stereotype.Component;import java.text.SimpleDateFormat;import java.util.Date;/** * @author 往事如风 * @version 1.0 * @date 2023/3/10 13:59 * @description */@Component("action")public class Action { @ActionId("Hello") public String hello(){ return "hello"; } @ExposeAction(value="办法1") public boolean evalTest(String username){ if(username==null){ return false; }else if(username.equals("张三")){ return true; } return false; } @ExposeAction(value="测试Int") public int testInt(int a,int b){ return a+b; } @ExposeAction(value="打印内容") public void printContent(String username, Date birthday){ SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); if(birthday!=null){ System.out.println(username+"往年曾经"+sd.format(birthday)+"岁了!"); }else{ System.out.println("Hello "+username+""); } } @ExposeAction(value="打印Stu") public void printUser(Stu m){ System.out.println("Hello "+m.getName()+", is age:"+m.getAge()); }}最初在动作库页面上增加bean,“Bean Id”一列输出对应的spring bean的名称,这里输出action。而后点击操作列中的小手按钮,就会弹出刚在Action类中标记了ExposeAction注解的办法。抉择一个指定的办法增加进来,最初看到办法对应的参数也会被主动加载进去。 ...

March 14, 2023 · 2 min · jiezi

关于规则引擎:规则引擎Drools在贷后催收业务中的应用

作者:vivo 互联网服务器团队- Feng Xiang在日常业务开发工作中咱们常常会遇到一些依据业务规定做决策的场景。为了让开发人员从大量的规定代码的开发保护中释放出来,把规定的保护和生成交由业务人员,为了达到这种目标通常咱们会应用规定引擎来帮忙咱们实现。 本篇文章次要介绍了规定引擎的概念以及Kie和Drools的关系,重点解说了Drools中规定文件编写以及匹配算法Rete原理。文章的最初为大家展现了规定引擎在催收零碎中是如何应用的,次要解决的问题等。 一、业务背景1.1 催收业务介绍生产贷作为vivo钱包中的重要业务板块当呈现逾期的案件须要解决时,咱们会将案件统计收集后导入到催收零碎中,在催收零碎中定义了一系列的规定来帮忙业务方依据客户的逾期水平、危险合规评估、操作老本及收益回报最大准则制订催收策略。例如“分案规定” 会依据规定将不同类型的案件调配到不同的队列,再通过队列调配给各个催收岗位和催收员,最终由催收员去进行催收。上面我会联合具体场景进行具体介绍。 1.2 规定引擎介绍1.2.1 问题的引入案例:根据上述分案规定咱们列举了如下的规定集: 代码实现:将以上规定集用代码实现 if(overdueDays>a && overdueDays<b && overdueAmt <W){ taskQuene = "A队列";}else if(overdueDays>c && overdueDays<d && overdueAmt <W){ taskQuene = "B队列";}else if(overdueDays>e && overdueDays<f && overdueAmt <W){ taskQuene = "C队列";}else if(overdueDays>h && overdueDays<g && overdueAmt <W){ taskQuene = "D队列";}……业务变动: 条件字段和后果字段可能会增长而且变动频繁。下面列举的规定集只是一类规定,实际上在咱们零碎中还有很多其余品种的规定集。规定最好由业务人员保护,能够随时批改,不须要开发人员染指,更不心愿重启利用。问题产生: 能够看出如果规定很多或者比较复杂的场景须要在代码中写很多这样if else的代码,而且不容易保护一旦新增条件或者规定有变更则须要改变很多代码。 此时咱们须要引入规定引擎来帮忙咱们将规定从代码中拆散进来,让开发人员从规定的代码逻辑中解放出来,把规定的保护和设置交由业务人员去治理。 1.2.2 什么是规定引擎规定引擎由推理引擎倒退而来,是一种嵌入在应用程序中的组件, 实现了将业务决策从利用程序代码中分离出来,并应用预约义的语义模块编写业务决策。 通过接收数据输出解释业务规定,最终依据业务规定做出业务决策。罕用的规定引擎有:Drools,easyRules等等。本篇咱们次要来介绍Drools。 二、Drools2.1 整体介绍2.1.1 KIE介绍在介绍Drools之前咱们不得不提到一个概念KIE,KIE(Knowledge Is Everything)是一个综合性我的项目,将一些相干技术整合到一起,同时也是各个技术的外围,这外面就蕴含了明天要讲到的Drools。 技术组成: Drools是一个业务规定管理系统,具备基于前向链和后向链推理的规定引擎,容许疾速牢靠地评估业务规定和简单的事件处理。jBPM是一个灵便的业务流程治理套件,容许通过形容实现这些指标所需执行的步骤来为您的业务指标建模。OptaPlanner是一个束缚求解器,可优化员工排班、车辆路线、任务分配和云优化等用例。UberFire是一个基于 Eclipse 的富客户端平台web框架。 2.1.2 Drools介绍Drools 的基本功能是将传入的数据或事实与规定的条件进行匹配,并确定是否以及如何执行规定。 ...

November 29, 2022 · 5 min · jiezi