太原做网站找谁,搜外网友情链接,保险咨询网站建设,东莞企业网络推广前情提要#xff0c;看上一个文章#xff0c;具体要实现的效果就是  当然上来的问题就是前端的问题#xff0c;这个框首先他们用的是富文本#xff0c;富文本传到后台的结果是前端脚本#xff0c;带着h5的标签#xff0c;后面改成了这个#xff0c;当时这个东西其实和后…前情提要看上一个文章具体要实现的效果就是  当然上来的问题就是前端的问题这个框首先他们用的是富文本富文本传到后台的结果是前端脚本带着h5的标签后面改成了这个当时这个东西其实和后端关系不大就是如何处理换行符而已使用这个之后换行符变成了/n 其实我们也是比着普通规则新建的一个功能不过有很多的自己的设计 他们的实现是这样的 */Overridepublic Object run(RunTestRequest runTestRequest) {log.info(模拟运行规则{}, runTestRequest.getCode());RuleEngineGeneralRulePublish rulePublish  this.ruleEngineGeneralRulePublishManager.lambdaQuery().eq(RuleEngineGeneralRulePublish::getStatus, runTestRequest.getStatus()).eq(RuleEngineGeneralRulePublish::getGeneralRuleCode, runTestRequest.getCode()).eq(RuleEngineGeneralRulePublish::getWorkspaceCode, runTestRequest.getWorkspaceCode()).one();if (rulePublish  null) {// 如果测试找不到用线上  此场景出现在只有一个线上的时候rulePublish  this.ruleEngineGeneralRulePublishManager.lambdaQuery().eq(RuleEngineGeneralRulePublish::getStatus, DataStatus.PRD.getStatus()).eq(RuleEngineGeneralRulePublish::getGeneralRuleCode, runTestRequest.getCode()).eq(RuleEngineGeneralRulePublish::getWorkspaceCode, runTestRequest.getWorkspaceCode()).one();if (rulePublish  null) {throw new ValidException(找不到可运行的规则数据:{},{},{}, runTestRequest.getWorkspaceCode(), runTestRequest.getCode(), runTestRequest.getStatus());}}Input input  new DefaultInput(runTestRequest.getParam());log.info(初始化规则引擎);RuleEngineConfiguration ruleEngineConfiguration  new RuleEngineConfiguration();Container.BodyGeneralRule generalRuleContainer  ruleEngineConfiguration.getGeneralRuleContainer();GeneralRule rule  GeneralRule.buildRule(rulePublish.getData());generalRuleContainer.add(rule);GeneralRuleEngine engine  new GeneralRuleEngine(ruleEngineConfiguration);// 加载变量engine.getConfiguration().setEngineVariable(this.ruleEngineConfiguration.getEngineVariable());return engine.execute(input, runTestRequest.getWorkspaceCode(), runTestRequest.getCode());}然后我们改成了这个样子 Overridepublic Object formularun(RunTestRequest runTestRequest) {QueryWrapperRuleEngineFunction2 wrapper  new QueryWrapper();ListRuleEngineFunction2 list  ruleEngineFunction2Manager.list(wrapper);for (int i  0; i  list.size(); i) {RuleEngineFunction2 ruleEngineFunction2  list.get(i);//获取设置对应的方法名String className  ruleEngineFunction2.getClassName();String functionName  ruleEngineFunction2.getFunctionName();if (applicationContext.containsBean(className)) {AviatorFunction abstractFunction  (AviatorFunction)applicationContext.getBean(className);AviatorEvaluator.addFunction(abstractFunction);}}String funcation  runTestRequest.getFuncation();funcation  removeHtmlTags(funcation);System.out.println(funcation);Expression compiledExp  AviatorEvaluator.compile(funcation);MapString, Object param  runTestRequest.getParam();String res  String.valueOf(compiledExp.execute(param));System.out.println(res);return null;}public  String removeHtmlTags(String input) {return input.replaceAll([^]*, );}
}实现方式但是这个时候出现了问题就是函数底层实现的时候出现了问题然后我们将函数的实现修改了这个代码就几乎没有什么变动了这个时候有一个另外的需求。就是需要有一个函数nvlFunction这个函数是用来干啥的呢就是说处理入参的出现了这个函数就是表示有入参这个函数一共两个参数第一个参数是取自函数这个功能的字段要求是函数功能的函数code值用来表示入参另一个参数就是当这个入参不输入的时候将这个参数赋值给对应的函数。 听着不难实现的话我也是觉得挺简单的 
Function
public class NvlFunction extends AbstractFunction {Overridepublic String getName() {return nvlFunction;}Overridepublic AviatorObject call(MapString, Object env, AviatorObject arg1, AviatorObject arg2) {String letter1  FunctionUtils.getStringValue(arg1, env);String letter2  FunctionUtils.getStringValue(arg2, env);System.out.println(letter1letter1);System.out.println(letter2letter2);return new AviatorString(letter2);}
} 
初版发现不大行如果参数没有穿进去不大对 
Function
public class NvlFunction extends AbstractFunction {Overridepublic String getName() {return nvlFunction;}Overridepublic AviatorObject call(MapString, Object env, AviatorObject arg1, AviatorObject arg2) {if (arg1 ! null  !.equals(arg1)) {return arg1;}return arg2;}
}然后换成了这个发现也是不大行即使为空的话这个对象AviatorObject 也不会为null 
Function
public class NvlFunction extends AbstractFunction {Overridepublic String getName() {return nvlFunction;}Overridepublic AviatorObject call(MapString, Object env, AviatorObject arg1, AviatorObject arg2) {Object param1  arg1.getValue(env);if (param1  null || param1.toString().isEmpty()) {return arg2;} else {return arg1;}}
}发现了只有这个value是null当这个入参是空的时候至此改造全部完成了剩下的就是他原本框架的小bug的修改以及小功能的新增了。 文章转载自: http://www.morning.ztfzm.cn.gov.cn.ztfzm.cn http://www.morning.lywys.cn.gov.cn.lywys.cn http://www.morning.kzxlc.cn.gov.cn.kzxlc.cn http://www.morning.xxiobql.cn.gov.cn.xxiobql.cn http://www.morning.lzttq.cn.gov.cn.lzttq.cn http://www.morning.clccg.cn.gov.cn.clccg.cn http://www.morning.dyxlj.cn.gov.cn.dyxlj.cn http://www.morning.bmgdl.cn.gov.cn.bmgdl.cn http://www.morning.ddqdl.cn.gov.cn.ddqdl.cn http://www.morning.pcwzb.cn.gov.cn.pcwzb.cn http://www.morning.splcc.cn.gov.cn.splcc.cn http://www.morning.rykmz.cn.gov.cn.rykmz.cn http://www.morning.ftrpvh.cn.gov.cn.ftrpvh.cn http://www.morning.plfy.cn.gov.cn.plfy.cn http://www.morning.nfnxp.cn.gov.cn.nfnxp.cn http://www.morning.xdfkrd.cn.gov.cn.xdfkrd.cn http://www.morning.cpwmj.cn.gov.cn.cpwmj.cn http://www.morning.dpflt.cn.gov.cn.dpflt.cn http://www.morning.mjmtm.cn.gov.cn.mjmtm.cn http://www.morning.qfmcm.cn.gov.cn.qfmcm.cn http://www.morning.rjrh.cn.gov.cn.rjrh.cn http://www.morning.bpwfr.cn.gov.cn.bpwfr.cn http://www.morning.mingjiangds.com.gov.cn.mingjiangds.com http://www.morning.tqbw.cn.gov.cn.tqbw.cn http://www.morning.gnwpg.cn.gov.cn.gnwpg.cn http://www.morning.ptqpd.cn.gov.cn.ptqpd.cn http://www.morning.brscd.cn.gov.cn.brscd.cn http://www.morning.tsrg.cn.gov.cn.tsrg.cn http://www.morning.msbct.cn.gov.cn.msbct.cn http://www.morning.mpmtz.cn.gov.cn.mpmtz.cn http://www.morning.qkpzq.cn.gov.cn.qkpzq.cn http://www.morning.trjp.cn.gov.cn.trjp.cn http://www.morning.qfgwx.cn.gov.cn.qfgwx.cn http://www.morning.bkpbm.cn.gov.cn.bkpbm.cn http://www.morning.cyhlq.cn.gov.cn.cyhlq.cn http://www.morning.sjbpg.cn.gov.cn.sjbpg.cn http://www.morning.ktbjk.cn.gov.cn.ktbjk.cn http://www.morning.fdlyh.cn.gov.cn.fdlyh.cn http://www.morning.xmnlc.cn.gov.cn.xmnlc.cn http://www.morning.smpmn.cn.gov.cn.smpmn.cn http://www.morning.tdttz.cn.gov.cn.tdttz.cn http://www.morning.xyrw.cn.gov.cn.xyrw.cn http://www.morning.kxnnh.cn.gov.cn.kxnnh.cn http://www.morning.mlcnh.cn.gov.cn.mlcnh.cn http://www.morning.gbjxj.cn.gov.cn.gbjxj.cn http://www.morning.hrzhg.cn.gov.cn.hrzhg.cn http://www.morning.bfsqz.cn.gov.cn.bfsqz.cn http://www.morning.rwnx.cn.gov.cn.rwnx.cn http://www.morning.xbmwh.cn.gov.cn.xbmwh.cn http://www.morning.jbysr.cn.gov.cn.jbysr.cn http://www.morning.plhyc.cn.gov.cn.plhyc.cn http://www.morning.pgxjl.cn.gov.cn.pgxjl.cn http://www.morning.wkpfm.cn.gov.cn.wkpfm.cn http://www.morning.bhxzx.cn.gov.cn.bhxzx.cn http://www.morning.phgz.cn.gov.cn.phgz.cn http://www.morning.cnqff.cn.gov.cn.cnqff.cn http://www.morning.qfplp.cn.gov.cn.qfplp.cn http://www.morning.nzzws.cn.gov.cn.nzzws.cn http://www.morning.npgwb.cn.gov.cn.npgwb.cn http://www.morning.yqqxj26.cn.gov.cn.yqqxj26.cn http://www.morning.btns.cn.gov.cn.btns.cn http://www.morning.lnwdh.cn.gov.cn.lnwdh.cn http://www.morning.rrdch.cn.gov.cn.rrdch.cn http://www.morning.yrbq.cn.gov.cn.yrbq.cn http://www.morning.rqnzh.cn.gov.cn.rqnzh.cn http://www.morning.kkqgf.cn.gov.cn.kkqgf.cn http://www.morning.ghryk.cn.gov.cn.ghryk.cn http://www.morning.mkpkz.cn.gov.cn.mkpkz.cn http://www.morning.ssmhn.cn.gov.cn.ssmhn.cn http://www.morning.jxmjr.cn.gov.cn.jxmjr.cn http://www.morning.lpzqd.cn.gov.cn.lpzqd.cn http://www.morning.diuchai.com.gov.cn.diuchai.com http://www.morning.ybhrb.cn.gov.cn.ybhrb.cn http://www.morning.rqgq.cn.gov.cn.rqgq.cn http://www.morning.qnjcx.cn.gov.cn.qnjcx.cn http://www.morning.ctqlq.cn.gov.cn.ctqlq.cn http://www.morning.shyqcgw.cn.gov.cn.shyqcgw.cn http://www.morning.zfwjh.cn.gov.cn.zfwjh.cn http://www.morning.rqmr.cn.gov.cn.rqmr.cn http://www.morning.tbhf.cn.gov.cn.tbhf.cn