1 Star 0 Fork 9

SchuckBate / veryrule

forked from lexinda / veryrule 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 3.70 KB
一键复制 编辑 原始数据 按行查看 历史

veryrule image

特性

  • 可设置单个规则或配置规则包路径

  • 可单行代码调用

  • 可自定义监听器

  • 可测试规则是否触达

  • 可注解调用(结合spring开启切面)

  • 可自定义注解配置和取值

  • 可使用线程池处理带返回值的条件(异步)规则

  • 可使用内置规则流工具创建场景及规则流

  • 可使用内置规则流工具编辑条件规则执行顺序(无返回值规则、带返回值(同步)规则)

规则管理工具(veryrule-platform)

  • 规则流管理:新增、编辑、删除、禁用、复制、 查看规则模板、编辑规则模板、删除规则模板、 测试、场景、接口文档

  • 规则场景:新增、编辑、删除。

  • 规则管理:新增、编辑、删除。

  • 规则工具:检测创建未使用的规则

使用

	//定义不带返回值条件
	@Rule(code = RuleCode.NOTNULL,name = "指定key不可为空", desc = "指定key不可为空", type = RuleType.CONDATION)
	public class NotNullRuleCondation implements IRuleCondation {
	
		@Override
		public <R extends RuleBo> void contation(Map<String, Object> param, R rule) throws Exception {
			String ruleKey = rule.getRuleKey();
			String[] keys = null;
			if(ruleKey.indexOf(",")>0) {
				keys = ruleKey.split(",");
			}else {
				keys = new String[] {ruleKey};
			}
			for(String key :keys) {
				Object data = param.get(key);
				if(data==null) {
					throw new Exception(key+rule.getRuleErrMsg());
				}else {
					if("".equals(data.toString().trim())) {
						throw new Exception(key+rule.getRuleErrMsg());
					}
				}
			}
		}
	
		//可覆盖,自定义
		//@Override
		//public <R extends RuleBo> Map<String, Object> ruleTest(R rule) {
		//	Map<String,Object> result = new HashMap<String,Object>();
		//	Rule ruleAnnotation = this.getClass().getAnnotation(Rule.class);
		//	if(rule!=null&&rule.getRuleCode().equals(ruleAnnotation.code())) {
		//		result.put(rule.getRuleCode(), ruleAnnotation.name());
		//	}
		//	return result;
		//}
	
	}
	//初始化
	//可指定规则类
	VeryRule veryRule = VeryRule.builder().condation(NotNullRuleAction.class).resultCondation(...).action(...).listener(...);
	//可指定规则包路径
	VeryRule veryRule = VeryRule.builder().rulePackage("com.lexinda.veryrule.base").listener(TestRuleListener.class)
	//单独使用
	Map<String, Object> param = new HashMap<>();
	param.put("a", "123a");
	RuleBo nn = new RuleBo("notNull", "a,c", "", "不可为空",RuleType.CONDATION);
	veryRule.fire(param, nn);
	
	//匹配spring
	<bean class="com.lexinda.veryrule.spring.VeryRuleScanConfigurer">
		<property name="rulePackage"
			value="com.lexinda.veryrule.base" />
		<property name="loadDefaultRule"
			value="true" />
		<property name="useAspect"
           	value="true" />
		<property name="aspectBean"
           	value="com.lexinda.veryrule.aspect.VeryRuleAspect" />
           <property name="listenerBean"
           	value="com.lexinda.veryrule.platform.listener.VeryRuleListener" />
			
	</bean>
	//匹配spring-boot
	//veryrule包路径
	veryrule.rulePackage=com.lexinda.veryrule.base
	//读取集成规则
	veryrule.loadDefaultRule=true
	//开启注解
	veryrule.useAspect=true
	//自定义切面(取值,校验...)
	veryrule.aspectBean=com.lexinda.veryrule.aspect.VeryRuleAspect
	//自定义监听器
	veryrule.listenerBean=com.lexinda.veryrule.platform.listener.VeryRuleListener
	
	//springAOP-单个规则,规则类型缺省为不带返回值的条件
	@VeryRuleSingle(ruleCode = RuleCode.NOTNULL, ruleKey = "currentPage,ruleType", ruleErrMsg = "不能为空")
	//springAOP-编排规则流
	@VeryRuleFlow(ruleFlowCode = "test")
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/skBate/veryrule.git
git@gitee.com:skBate/veryrule.git
skBate
veryrule
veryrule
main

搜索帮助

344bd9b3 5694891 D2dac590 5694891