diff --git a/README.md b/README.md
index 873ea44..74c5ab0 100644
--- a/README.md
+++ b/README.md
@@ -41,6 +41,7 @@
12、SpringBoot2 整合 Security 框架,实现用户权限管理
[13、SpringBoot2 整合 ClickHouse数据库,实现数据高性能查询分析](https://mp.weixin.qq.com/s?__biz=MzU4Njg0MzYwNw==&mid=2247484121&idx=1&sn=29cc633facbbb2c69afa4e6472fb93e8&chksm=fdf45661ca83df77879cbea0e0e3b445a5972a9fc0f84ae25c6882e60e4bed3dc2a68338fa2a&token=1150397377&lang=zh_CN#rd)
+[14、SpringBoot2 整合 Drools规则引擎,实现高效的业务规则](https://mp.weixin.qq.com/s?__biz=MzU4Njg0MzYwNw==&mid=2247484126&idx=1&sn=480ca951cb6a4da92f7e153ecc6f5161&chksm=fdf45666ca83df70d4cd84be8712e15b192ee0ec4a9aed9c537e13d23bf534afaa7c1712f5b3&token=1150397377&lang=zh_CN#rd)
持续更新中...
diff --git a/pom.xml b/pom.xml
index 31292f7..82593e4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -43,6 +43,8 @@
ware-security-auth
ware-click-house
+
+ ware-drool-rule
diff --git a/ware-drool-rule/pom.xml b/ware-drool-rule/pom.xml
new file mode 100644
index 0000000..4ec9517
--- /dev/null
+++ b/ware-drool-rule/pom.xml
@@ -0,0 +1,146 @@
+
+
+
+ org.springframework.boot
+ spring-boot-starters
+ 2.0.6.RELEASE
+
+ 4.0.0
+ com.drool.rule
+ ware-drool-rule
+ jar
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-aop
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+
+
+ org.mybatis.spring.boot
+ mybatis-spring-boot-starter
+ 1.3.2
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ 3.0.7.1
+
+
+ com.baomidou
+ mybatis-plus-generator
+
+
+
+
+ com.baomidou
+ mybatis-plus
+ 3.0.7.1
+
+
+ mysql
+ mysql-connector-java
+ 5.1.38
+
+
+ com.alibaba
+ druid-spring-boot-starter
+ 1.1.13
+
+
+
+
+
+
+
+ commons-lang
+ commons-lang
+ 2.6
+
+
+ com.github.pagehelper
+ pagehelper-spring-boot-starter
+ 1.2.3
+
+
+
+ org.drools
+ drools-core
+ 7.6.0.Final
+
+
+ org.drools
+ drools-compiler
+ 7.6.0.Final
+
+
+ org.drools
+ drools-templates
+ 7.6.0.Final
+
+
+ org.kie
+ kie-api
+ 7.6.0.Final
+
+
+ org.kie
+ kie-spring
+
+
+ org.springframework
+ spring-tx
+
+
+ org.springframework
+ spring-beans
+
+
+ org.springframework
+ spring-core
+
+
+ org.springframework
+ spring-context
+
+
+ 7.6.0.Final
+
+
+
+
+
+ ${project.artifactId}
+
+
+ src/main/java
+
+ **/*.xml
+
+ false
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 2.3.2
+
+
+ 1.8
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ware-drool-rule/src/main/java/com/drool/engine/Application7015.java b/ware-drool-rule/src/main/java/com/drool/engine/Application7015.java
new file mode 100644
index 0000000..49b3fa3
--- /dev/null
+++ b/ware-drool-rule/src/main/java/com/drool/engine/Application7015.java
@@ -0,0 +1,13 @@
+package com.drool.engine;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+@MapperScan(basePackages = {"com.drool.engine.mapper"})
+public class Application7015 {
+ public static void main(String[] args) {
+ SpringApplication.run(Application7015.class,args) ;
+ }
+}
diff --git a/ware-drool-rule/src/main/java/com/drool/engine/config/DruidConfig.java b/ware-drool-rule/src/main/java/com/drool/engine/config/DruidConfig.java
new file mode 100644
index 0000000..2568ee5
--- /dev/null
+++ b/ware-drool-rule/src/main/java/com/drool/engine/config/DruidConfig.java
@@ -0,0 +1,107 @@
+package com.drool.engine.config;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import com.alibaba.druid.support.http.StatViewServlet;
+import com.alibaba.druid.support.http.WebStatFilter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.boot.web.servlet.ServletRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import javax.sql.DataSource;
+
+@Configuration
+public class DruidConfig {
+ private static final Logger logger = LoggerFactory.getLogger(DruidConfig.class);
+ @Value("${spring.datasource.druid.url}")
+ private String dbUrl;
+ @Value("${spring.datasource.druid.username}")
+ private String username;
+ @Value("${spring.datasource.druid.password}")
+ private String password;
+ @Value("${spring.datasource.druid.driverClassName}")
+ private String driverClassName;
+ @Value("${spring.datasource.druid.initial-size}")
+ private int initialSize;
+ @Value("${spring.datasource.druid.max-active}")
+ private int maxActive;
+ @Value("${spring.datasource.druid.min-idle}")
+ private int minIdle;
+ @Value("${spring.datasource.druid.max-wait}")
+ private int maxWait;
+ @Value("${spring.datasource.druid.pool-prepared-statements}")
+ private boolean poolPreparedStatements;
+ @Value("${spring.datasource.druid.max-pool-prepared-statement-per-connection-size}")
+ private int maxPoolPreparedStatementPerConnectionSize;
+ @Value("${spring.datasource.druid.time-between-eviction-runs-millis}")
+ private int timeBetweenEvictionRunsMillis;
+ @Value("${spring.datasource.druid.min-evictable-idle-time-millis}")
+ private int minEvictableIdleTimeMillis;
+ @Value("${spring.datasource.druid.max-evictable-idle-time-millis}")
+ private int maxEvictableIdleTimeMillis;
+ @Value("${spring.datasource.druid.validation-query}")
+ private String validationQuery;
+ @Value("${spring.datasource.druid.test-while-idle}")
+ private boolean testWhileIdle;
+ @Value("${spring.datasource.druid.test-on-borrow}")
+ private boolean testOnBorrow;
+ @Value("${spring.datasource.druid.test-on-return}")
+ private boolean testOnReturn;
+ @Value("${spring.datasource.druid.filters}")
+ private String filters;
+ @Value("{spring.datasource.druid.connection-properties}")
+ private String connectionProperties;
+ @Bean
+ public DataSource dataSource() {
+ DruidDataSource datasource = new DruidDataSource();
+ datasource.setUrl(dbUrl);
+ datasource.setUsername(username);
+ datasource.setPassword(password);
+ datasource.setDriverClassName(driverClassName);
+ datasource.setInitialSize(initialSize);
+ datasource.setMinIdle(minIdle);
+ datasource.setMaxActive(maxActive);
+ datasource.setMaxWait(maxWait);
+ datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
+ datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
+ datasource.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis);
+ datasource.setValidationQuery(validationQuery);
+ datasource.setTestWhileIdle(testWhileIdle);
+ datasource.setTestOnBorrow(testOnBorrow);
+ datasource.setTestOnReturn(testOnReturn);
+ datasource.setPoolPreparedStatements(poolPreparedStatements);
+ datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
+ try {
+ datasource.setFilters(filters);
+ } catch (Exception e) {
+ logger.error("druid configuration initialization filter", e);
+ }
+ datasource.setConnectionProperties(connectionProperties);
+ return datasource;
+ }
+ @Bean
+ public ServletRegistrationBean statViewServlet(){
+ ServletRegistrationBean srb =
+ new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
+ //设置控制台管理用户
+ srb.addInitParameter("loginUsername","root");
+ srb.addInitParameter("loginPassword","root");
+ //是否可以重置数据
+ srb.addInitParameter("resetEnable","false");
+ return srb;
+ }
+ @Bean
+ public FilterRegistrationBean statFilter(){
+ //创建过滤器
+ FilterRegistrationBean frb =
+ new FilterRegistrationBean(new WebStatFilter());
+ //设置过滤器过滤路径
+ frb.addUrlPatterns("/*");
+ //忽略过滤的形式
+ frb.addInitParameter("exclusions",
+ "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
+ return frb;
+ }
+}
diff --git a/ware-drool-rule/src/main/java/com/drool/engine/config/RuleEngineConfig.java b/ware-drool-rule/src/main/java/com/drool/engine/config/RuleEngineConfig.java
new file mode 100644
index 0000000..2b1f22b
--- /dev/null
+++ b/ware-drool-rule/src/main/java/com/drool/engine/config/RuleEngineConfig.java
@@ -0,0 +1,66 @@
+package com.drool.engine.config;
+
+import org.kie.api.KieBase;
+import org.kie.api.KieServices;
+import org.kie.api.builder.KieBuilder;
+import org.kie.api.builder.KieFileSystem;
+import org.kie.api.builder.KieRepository;
+import org.kie.api.runtime.KieContainer;
+import org.kie.api.runtime.KieSession;
+import org.kie.internal.io.ResourceFactory;
+import org.kie.spring.KModuleBeanFactoryPostProcessor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.core.io.support.ResourcePatternResolver;
+import java.io.IOException;
+
+@Configuration
+public class RuleEngineConfig {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(RuleEngineConfig.class) ;
+ private static final String RULES_PATH = "droolRule/";
+ private final KieServices kieServices = KieServices.Factory.get();
+
+ @Bean
+ public KieFileSystem kieFileSystem() throws IOException {
+ KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
+ ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
+ Resource[] files = resourcePatternResolver.getResources("classpath*:" + RULES_PATH + "*.*");
+ String path = null;
+ for (Resource file : files) {
+ path = RULES_PATH + file.getFilename();
+ LOGGER.info("path="+path);
+ kieFileSystem.write(ResourceFactory.newClassPathResource(path, "UTF-8"));
+ }
+ return kieFileSystem;
+ }
+
+ @Bean
+ public KieContainer kieContainer() throws IOException {
+ KieRepository kieRepository = kieServices.getRepository();
+ kieRepository.addKieModule(kieRepository::getDefaultReleaseId);
+ KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem());
+ kieBuilder.buildAll();
+ return kieServices.newKieContainer(kieRepository.getDefaultReleaseId());
+ }
+
+ @Bean
+ public KieBase kieBase() throws IOException {
+ return kieContainer().getKieBase();
+ }
+
+ @Bean
+ public KieSession kieSession() throws IOException {
+ return kieContainer().newKieSession();
+ }
+
+ @Bean
+ public KModuleBeanFactoryPostProcessor kiePostProcessor() {
+ return new KModuleBeanFactoryPostProcessor();
+ }
+
+}
diff --git a/ware-drool-rule/src/main/java/com/drool/engine/config/SpringContextUtil.java b/ware-drool-rule/src/main/java/com/drool/engine/config/SpringContextUtil.java
new file mode 100644
index 0000000..6f2b773
--- /dev/null
+++ b/ware-drool-rule/src/main/java/com/drool/engine/config/SpringContextUtil.java
@@ -0,0 +1,37 @@
+package com.drool.engine.config;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+@Component
+public class SpringContextUtil implements ApplicationContextAware {
+ public static ApplicationContext applicationContext;
+
+ @Override
+ public void setApplicationContext(ApplicationContext applicationContext)
+ throws BeansException {
+ SpringContextUtil.applicationContext = applicationContext;
+ }
+
+ public static Object getBean(String name) {
+ return applicationContext.getBean(name);
+ }
+
+ public static T getBean(String name, Class requiredType) {
+ return applicationContext.getBean(name, requiredType);
+ }
+
+ public static boolean containsBean(String name) {
+ return applicationContext.containsBean(name);
+ }
+
+ public static boolean isSingleton(String name) {
+ return applicationContext.isSingleton(name);
+ }
+
+ public static Class extends Object> getType(String name) {
+ return applicationContext.getType(name);
+ }
+}
\ No newline at end of file
diff --git a/ware-drool-rule/src/main/java/com/drool/engine/controller/RuleController.java b/ware-drool-rule/src/main/java/com/drool/engine/controller/RuleController.java
new file mode 100644
index 0000000..0a8ab6e
--- /dev/null
+++ b/ware-drool-rule/src/main/java/com/drool/engine/controller/RuleController.java
@@ -0,0 +1,38 @@
+package com.drool.engine.controller;
+
+import com.drool.engine.entity.QueryParam;
+import com.drool.engine.entity.RuleResult;
+import com.drool.engine.service.RuleEngineService;
+import org.kie.api.runtime.KieSession;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import javax.annotation.Resource;
+
+@RestController
+@RequestMapping("/rule")
+public class RuleController {
+
+ @Resource
+ private KieSession kieSession;
+ @Resource
+ private RuleEngineService ruleEngineService ;
+
+ @RequestMapping("/param")
+ public void param (){
+ QueryParam queryParam1 = new QueryParam() ;
+ queryParam1.setParamId("1");
+ queryParam1.setParamSign("+");
+ QueryParam queryParam2 = new QueryParam() ;
+ queryParam2.setParamId("2");
+ queryParam2.setParamSign("-");
+ // 入参
+ kieSession.insert(queryParam1) ;
+ kieSession.insert(queryParam2) ;
+ kieSession.insert(this.ruleEngineService) ;
+
+ // 返参
+ RuleResult resultParam = new RuleResult() ;
+ kieSession.insert(resultParam) ;
+ kieSession.fireAllRules() ;
+ }
+}
diff --git a/ware-drool-rule/src/main/java/com/drool/engine/entity/ParamInfo.java b/ware-drool-rule/src/main/java/com/drool/engine/entity/ParamInfo.java
new file mode 100644
index 0000000..bb164a4
--- /dev/null
+++ b/ware-drool-rule/src/main/java/com/drool/engine/entity/ParamInfo.java
@@ -0,0 +1,47 @@
+package com.drool.engine.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+
+@TableName("re_param_info")
+public class ParamInfo {
+
+ @TableId("id")
+ private String id ;
+ private String paramSign ;
+ private Date createTime ;
+ private Date updateTime ;
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getParamSign() {
+ return paramSign;
+ }
+
+ public void setParamSign(String paramSign) {
+ this.paramSign = paramSign;
+ }
+
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+
+ public Date getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(Date updateTime) {
+ this.updateTime = updateTime;
+ }
+}
diff --git a/ware-drool-rule/src/main/java/com/drool/engine/entity/QueryParam.java b/ware-drool-rule/src/main/java/com/drool/engine/entity/QueryParam.java
new file mode 100644
index 0000000..a8244f3
--- /dev/null
+++ b/ware-drool-rule/src/main/java/com/drool/engine/entity/QueryParam.java
@@ -0,0 +1,23 @@
+package com.drool.engine.entity;
+
+public class QueryParam {
+
+ private String paramId ;
+ private String paramSign ;
+
+ public String getParamId() {
+ return paramId;
+ }
+
+ public void setParamId(String paramId) {
+ this.paramId = paramId;
+ }
+
+ public String getParamSign() {
+ return paramSign;
+ }
+
+ public void setParamSign(String paramSign) {
+ this.paramSign = paramSign;
+ }
+}
diff --git a/ware-drool-rule/src/main/java/com/drool/engine/entity/RuleResult.java b/ware-drool-rule/src/main/java/com/drool/engine/entity/RuleResult.java
new file mode 100644
index 0000000..3d32583
--- /dev/null
+++ b/ware-drool-rule/src/main/java/com/drool/engine/entity/RuleResult.java
@@ -0,0 +1,13 @@
+package com.drool.engine.entity;
+
+public class RuleResult {
+ private boolean postCodeResult = false ;
+
+ public boolean isPostCodeResult() {
+ return postCodeResult;
+ }
+
+ public void setPostCodeResult(boolean postCodeResult) {
+ this.postCodeResult = postCodeResult;
+ }
+}
diff --git a/ware-drool-rule/src/main/java/com/drool/engine/mapper/ParamInfoMapper.java b/ware-drool-rule/src/main/java/com/drool/engine/mapper/ParamInfoMapper.java
new file mode 100644
index 0000000..f5e0126
--- /dev/null
+++ b/ware-drool-rule/src/main/java/com/drool/engine/mapper/ParamInfoMapper.java
@@ -0,0 +1,10 @@
+package com.drool.engine.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.drool.engine.entity.ParamInfo;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ParamInfoMapper extends BaseMapper {
+ void insertParam (ParamInfo paramInfo) ;
+}
diff --git a/ware-drool-rule/src/main/java/com/drool/engine/service/ParamInfoService.java b/ware-drool-rule/src/main/java/com/drool/engine/service/ParamInfoService.java
new file mode 100644
index 0000000..09bae0f
--- /dev/null
+++ b/ware-drool-rule/src/main/java/com/drool/engine/service/ParamInfoService.java
@@ -0,0 +1,9 @@
+package com.drool.engine.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.drool.engine.entity.ParamInfo;
+
+public interface ParamInfoService extends IService {
+ ParamInfo selectById (String paramId) ;
+ void insertParam (ParamInfo paramInfo) ;
+}
diff --git a/ware-drool-rule/src/main/java/com/drool/engine/service/RuleEngineService.java b/ware-drool-rule/src/main/java/com/drool/engine/service/RuleEngineService.java
new file mode 100644
index 0000000..27ccc43
--- /dev/null
+++ b/ware-drool-rule/src/main/java/com/drool/engine/service/RuleEngineService.java
@@ -0,0 +1,8 @@
+package com.drool.engine.service;
+
+import com.drool.engine.entity.QueryParam;
+
+public interface RuleEngineService {
+ void executeAddRule (QueryParam param) ;
+ void executeRemoveRule (QueryParam param) ;
+}
diff --git a/ware-drool-rule/src/main/java/com/drool/engine/service/impl/ParamInfoServiceImpl.java b/ware-drool-rule/src/main/java/com/drool/engine/service/impl/ParamInfoServiceImpl.java
new file mode 100644
index 0000000..a5e247d
--- /dev/null
+++ b/ware-drool-rule/src/main/java/com/drool/engine/service/impl/ParamInfoServiceImpl.java
@@ -0,0 +1,31 @@
+package com.drool.engine.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.drool.engine.entity.ParamInfo;
+import com.drool.engine.mapper.ParamInfoMapper;
+import com.drool.engine.service.ParamInfoService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+
+@Service("paramInfoService")
+public class ParamInfoServiceImpl extends ServiceImpl implements ParamInfoService {
+ private static final Logger LOGGER = LoggerFactory.getLogger(ParamInfoServiceImpl.class) ;
+
+ @Resource
+ private ParamInfoMapper paramInfoMapper ;
+
+ @Override
+ public ParamInfo selectById (String paramId){
+ ParamInfo paramInfo = paramInfoMapper.selectById(paramId) ;
+ LOGGER.info("ParamInfoServiceImpl-Sign:{}",paramInfo.getParamSign());
+ return paramInfo ;
+ }
+
+ @Override
+ public void insertParam(ParamInfo paramInfo) {
+ paramInfoMapper.insertParam(paramInfo) ;
+ }
+
+}
diff --git a/ware-drool-rule/src/main/java/com/drool/engine/service/impl/RuleEngineServiceImpl.java b/ware-drool-rule/src/main/java/com/drool/engine/service/impl/RuleEngineServiceImpl.java
new file mode 100644
index 0000000..9c6ab78
--- /dev/null
+++ b/ware-drool-rule/src/main/java/com/drool/engine/service/impl/RuleEngineServiceImpl.java
@@ -0,0 +1,39 @@
+package com.drool.engine.service.impl;
+
+import com.drool.engine.config.SpringContextUtil;
+import com.drool.engine.entity.ParamInfo;
+import com.drool.engine.entity.QueryParam;
+import com.drool.engine.service.ParamInfoService;
+import com.drool.engine.service.RuleEngineService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import java.util.Date;
+
+@Service
+public class RuleEngineServiceImpl implements RuleEngineService {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(RuleEngineServiceImpl.class) ;
+
+ @Override
+ public void executeAddRule(QueryParam param) {
+ LOGGER.info("参数数据:"+param.getParamId()+";"+param.getParamSign());
+ ParamInfo paramInfo = new ParamInfo() ;
+ paramInfo.setId(param.getParamId());
+ paramInfo.setParamSign(param.getParamSign());
+ paramInfo.setCreateTime(new Date());
+ paramInfo.setUpdateTime(new Date());
+ ParamInfoService paramInfoService = (ParamInfoService)SpringContextUtil.getBean("paramInfoService") ;
+ paramInfoService.insertParam(paramInfo);
+ }
+
+ @Override
+ public void executeRemoveRule(QueryParam param) {
+ LOGGER.info("参数数据:"+param.getParamId()+";"+param.getParamSign());
+ ParamInfoService paramInfoService = (ParamInfoService)SpringContextUtil.getBean("paramInfoService") ;
+ ParamInfo paramInfo = paramInfoService.selectById(param.getParamId());
+ if (paramInfo != null){
+ paramInfoService.removeById(param.getParamId()) ;
+ }
+ }
+}
diff --git a/ware-drool-rule/src/main/resources/META-INF/kmodule.xml b/ware-drool-rule/src/main/resources/META-INF/kmodule.xml
new file mode 100644
index 0000000..e11cf95
--- /dev/null
+++ b/ware-drool-rule/src/main/resources/META-INF/kmodule.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ware-drool-rule/src/main/resources/application-dev.yml b/ware-drool-rule/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..1192c58
--- /dev/null
+++ b/ware-drool-rule/src/main/resources/application-dev.yml
@@ -0,0 +1,29 @@
+spring:
+ # 数据源配置
+ datasource:
+ type: com.alibaba.druid.pool.DruidDataSource
+ druid:
+ driverClassName: com.mysql.jdbc.Driver
+ url: jdbc:mysql://127.0.0.1:3306/rule-engine?useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull&useSSL=false
+ username: root
+ password: 123
+ initial-size: 10
+ max-active: 100
+ min-idle: 10
+ max-wait: 60000
+ pool-prepared-statements: true
+ max-pool-prepared-statement-per-connection-size: 20
+ time-between-eviction-runs-millis: 60000
+ min-evictable-idle-time-millis: 30000
+ max-evictable-idle-time-millis: 60000
+ validation-query: SELECT 1 FROM DUAL
+ # validation-query-timeout: 5000
+ test-on-borrow: false
+ test-on-return: false
+ test-while-idle: true
+ connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
+ #filters: #配置多个英文逗号分隔(统计,sql注入,log4j过滤)
+ filters: stat,wall
+ stat-view-servlet:
+ enabled: true
+ url-pattern: /druid/*
\ No newline at end of file
diff --git a/ware-drool-rule/src/main/resources/application.yml b/ware-drool-rule/src/main/resources/application.yml
new file mode 100644
index 0000000..dc8805a
--- /dev/null
+++ b/ware-drool-rule/src/main/resources/application.yml
@@ -0,0 +1,31 @@
+server:
+ tomcat:
+ uri-encoding: UTF-8
+ port: 7015
+spring:
+ profiles:
+ active: dev
+ application:
+ name: ware-drool-rule
+ http:
+ encoding:
+ charset: UTF-8
+ force: true
+ enabled: true
+
+mybatis-plus:
+ mapper-locations: classpath*:/mapper/*.xml
+ typeAliasesPackage: com.drool.engine.*.entity
+ global-config:
+ db-config:
+ id-type: AUTO
+ field-strategy: NOT_NULL
+ logic-delete-value: -1
+ logic-not-delete-value: 0
+ banner: false
+ configuration:
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+ map-underscore-to-camel-case: true
+ cache-enabled: false
+ call-setters-on-nulls: true
+ jdbc-type-for-null: 'null'
\ No newline at end of file
diff --git a/ware-drool-rule/src/main/resources/droolRule/param-check-one.drl b/ware-drool-rule/src/main/resources/droolRule/param-check-one.drl
new file mode 100644
index 0000000..360d029
--- /dev/null
+++ b/ware-drool-rule/src/main/resources/droolRule/param-check-one.drl
@@ -0,0 +1,19 @@
+package droolRule ;
+import com.drool.engine.entity.QueryParam ;
+import com.drool.engine.entity.RuleResult;
+import com.drool.engine.service.impl.RuleEngineServiceImpl
+import org.slf4j.Logger
+import org.slf4j.LoggerFactory ;
+
+dialect "java"
+rule "paramcheck1"
+ salience 99
+ when queryParam : QueryParam(paramId != null && paramSign.equals("+"))
+ resultParam : RuleResult()
+ then
+ final Logger LOGGER = LoggerFactory.getLogger("param-check-one 规则引擎") ;
+ LOGGER.info("参数:getParamId="+queryParam.getParamId()+";getParamSign="+queryParam.getParamSign());
+ RuleEngineServiceImpl ruleEngineService = new RuleEngineServiceImpl() ;
+ ruleEngineService.executeAddRule(queryParam);
+ resultParam.setPostCodeResult(true);
+end
\ No newline at end of file
diff --git a/ware-drool-rule/src/main/resources/droolRule/param-check-two.drl b/ware-drool-rule/src/main/resources/droolRule/param-check-two.drl
new file mode 100644
index 0000000..c79aabb
--- /dev/null
+++ b/ware-drool-rule/src/main/resources/droolRule/param-check-two.drl
@@ -0,0 +1,19 @@
+package droolRule ;
+import com.drool.engine.entity.QueryParam ;
+import com.drool.engine.entity.RuleResult;
+import com.drool.engine.service.impl.RuleEngineServiceImpl
+import org.slf4j.Logger
+import org.slf4j.LoggerFactory ;
+
+dialect "java"
+rule "paramcheck2"
+ salience 88
+ when queryParam : QueryParam(paramId != null && paramSign.equals("-"))
+ resultParam : RuleResult()
+ then
+ final Logger LOGGER = LoggerFactory.getLogger("param-check-two 规则引擎") ;
+ LOGGER.info("参数:getParamId="+queryParam.getParamId()+";getParamSign="+queryParam.getParamSign());
+ RuleEngineServiceImpl ruleEngineService = new RuleEngineServiceImpl() ;
+ ruleEngineService.executeRemoveRule(queryParam);
+ resultParam.setPostCodeResult(true);
+end
\ No newline at end of file
diff --git a/ware-drool-rule/src/main/resources/mapper/ParamInfoMapper.xml b/ware-drool-rule/src/main/resources/mapper/ParamInfoMapper.xml
new file mode 100644
index 0000000..dea90d9
--- /dev/null
+++ b/ware-drool-rule/src/main/resources/mapper/ParamInfoMapper.xml
@@ -0,0 +1,9 @@
+
+
+
+
+ insert into re_param_info (id, param_sign, create_time, update_time)
+ values (#{id,jdbcType=VARCHAR}, #{paramSign,jdbcType=VARCHAR},
+ #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP})
+
+
\ No newline at end of file