日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

drools规则引擎通过数据库存储规则

發(fā)布時間:2023/12/10 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 drools规则引擎通过数据库存储规则 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

springboot 整合drools,drools規(guī)則讀取數(shù)據(jù)庫配置

maven:

<dependency><groupId>org.kie</groupId><artifactId>kie-api</artifactId><version>6.5.0.Final</version></dependency><dependency><groupId>org.drools</groupId><artifactId>drools-compiler</artifactId><version>6.5.0.Final</version><scope>runtime</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency>

sql:

SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0;-- ---------------------------- -- Table structure for qms_rule -- ---------------------------- DROP TABLE IF EXISTS `qms_rule`; CREATE TABLE `qms_rule` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',`rule_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '規(guī)則標(biāo)識',`rule_condition` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '規(guī)則數(shù)據(jù)',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `uni_code`(`rule_code`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;-- ---------------------------- -- Records of qms_rule -- ---------------------------- INSERT INTO `qms_rule` VALUES (1, 'report_type_test', '[\"scheduling_cycle>12\",\"report_term_of_validity>12\",\"early_warning_period memberOf [5,10,30]\",\"code==\\\"report_type_test\\\"\"]'); INSERT INTO `qms_rule` VALUES (2, 'report_3c_test', '[\"scheduling_cycle>12\",\"report_term_of_validity>12\",\"early_warning_period memberOf [5,10,30]\",\"code==\\\"report_3c_test\\\"\"]'); INSERT INTO `qms_rule` VALUES (3, 'report_hazardous_substance_test', '[\"scheduling_cycle>12\",\"report_term_of_validity>12\",\"early_warning_period memberOf [5,10,30]\",\"code==\\\"report_hazardous_substance_test\\\"\"]');SET FOREIGN_KEY_CHECKS = 1;

代碼:

實(shí)體類

import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; import lombok.Data;/*** @author zhangkx1.ziroom.com* @create 2022/3/4 11:21*/ @ApiModel(value = "qms_rule") @Data @TableName(value = "qms_rule") public class QmsRule implements Serializable {/*** id*/@TableId(value = "id", type = IdType.INPUT)@ApiModelProperty(value = "id")private Integer id;/*** 規(guī)則標(biāo)識*/@TableField(value = "rule_code")@ApiModelProperty(value = "規(guī)則標(biāo)識")private String ruleCode;/*** 規(guī)則數(shù)據(jù)*/@TableField(value = "rule_condition")@ApiModelProperty(value = "規(guī)則數(shù)據(jù)")private String ruleCondition;private static final long serialVersionUID = 1L; }

實(shí)體類?

import lombok.Data;/*** @author zhangkx1.ziroom.com* @create 2022/3/3 18:40*/ @Data public class RoleDict {private Integer scheduling_cycle;private Integer report_term_of_validity;private Integer early_warning_period;private String code; }

單元測試?

import com.alibaba.fastjson.JSONObject; import com.ziroom.qms.report.model.po.QmsRule; import com.ziroom.qms.report.model.po.RoleDict; import com.ziroom.qms.report.service.QmsRuleService; import com.ziroom.qms.web.WebApplication; import org.apache.commons.lang3.StringUtils; import org.drools.compiler.lang.DrlDumper; import org.drools.compiler.lang.api.*; import org.drools.compiler.lang.descr.AndDescr; import org.drools.compiler.lang.descr.PackageDescr; import org.drools.core.impl.InternalKnowledgeBase; import org.junit.jupiter.api.Test; import org.kie.api.io.ResourceType; import org.kie.api.runtime.KieSession; import org.kie.internal.KnowledgeBaseFactory; import org.kie.internal.builder.KnowledgeBuilder; import org.kie.internal.builder.KnowledgeBuilderError; import org.kie.internal.builder.KnowledgeBuilderErrors; import org.kie.internal.builder.KnowledgeBuilderFactory; import org.kie.internal.io.ResourceFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.annotation.Profile;import javax.smartcardio.Card; import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.List;@SpringBootTest(classes = WebApplication.class) class WebApplicationTests {String param = "param";String drools = "drools";@Autowiredprivate QmsRuleService qmsRuleService;@Test@Profile("dev")void contextLoads() throws UnsupportedEncodingException {int int1 = 1;int int2 = 1;int int3 = 5;String drlString = getDrlRules();KnowledgeBuilder kb = KnowledgeBuilderFactory.newKnowledgeBuilder();kb.add(ResourceFactory.newByteArrayResource(drlString.getBytes(StandardCharsets.UTF_8)), ResourceType.DRL);KnowledgeBuilderErrors errors = kb.getErrors();for (KnowledgeBuilderError error : errors) {System.out.println("規(guī)則文件正確性有誤:" + error);}InternalKnowledgeBase kBase = (InternalKnowledgeBase) KnowledgeBaseFactory.newKnowledgeBase();kBase.addKnowledgePackages(kb.getKnowledgePackages());KieSession kieSession1 = kBase.newKieSession();RoleDict roleDict = new RoleDict();roleDict.setScheduling_cycle(int1);roleDict.setReport_term_of_validity(int2);roleDict.setEarly_warning_period(int3);roleDict.setCode("report_type_test");HashMap<String, Boolean> paramValue = new HashMap<>();paramValue.put("result", false);kieSession1.setGlobal(param, paramValue);kieSession1.insert(roleDict);kieSession1.fireAllRules();kieSession1.dispose();System.out.println(paramValue.get("result"));}String getDrlRules() {PackageDescrBuilder pkgDescBuilder = DescrFactory.newPackage().name(drools).newImport().target(RoleDict.class.getName()).end().name(drools).newGlobal().identifier(param).type(HashMap.class.getName()).end();List<QmsRule> rules = qmsRuleService.list();for (QmsRule rule : rules) {RuleDescrBuilder ruleDescrBuilder = pkgDescBuilder.newRule().name(rule.getRuleCode());//attributeruleDescrBuilder.attribute("salience", "0");//lhsPatternDescrBuilder<CEDescrBuilder<RuleDescrBuilder, AndDescr>> pattern = ruleDescrBuilder.lhs().pattern(Card.class.getSimpleName());List<String> ruleCondition = JSONObject.parseArray(rule.getRuleCondition()).toJavaList(String.class);for (String constraint : ruleCondition) {if (!StringUtils.isEmpty(constraint)) {pattern.constraint(constraint);}}pattern.type(RoleDict.class.getName());pattern.end();//rhsruleDescrBuilder.rhs(param + ".put(\"result\",true);");ruleDescrBuilder.end();}pkgDescBuilder.end();//dump to String;PackageDescr packageDescr = pkgDescBuilder.getDescr();DrlDumper dumper = new DrlDumper();String drl = dumper.dump(packageDescr);System.out.println(drl);return drl;}}

總結(jié)

以上是生活随笔為你收集整理的drools规则引擎通过数据库存储规则的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。