当前位置:网站首页 > Java教程 > 正文

java动态计算教程



/ * Created by Teddy on 2017/10/23. */ public class ExpressionUtil { / * 计算List<Bean>配置了公式的值 * @param beanList * @return */ public static List<Map> workOutListBean(List<? extends BaseEntity> beanList){ if(CollectionUtils.isEmpty(beanList)){ return Collections.EMPTY_LIST; }else { Class<? extends BaseEntity> beanClass = beanList.get(0).getClass(); Table table = beanClass.getAnnotation(Table.class);//在实体中通过JPA注解获取表名 String tableCode = table.name(); if(StringUtil.isEmpty(tableCode)){ System.out.println("无法计算,该bean没有表名信息"); } List<Map> mapList = BeanUtil.convertBeansToMaps(beanList); FormulaService formulaService = SpringContext.getBean(FormulaService.class); List<Formula> formulas = formulaService.queryByTableCode(tableCode); for (Map map : mapList) { JEP jep = getJEP(map); for (Formula formula : formulas) { String conditionExpr = formula.getConditionExpr(); String formulaExpr = formula.getFormulaExpr(); String evaluate = formula.getEvaluate(); workOutKey(jep,map,conditionExpr,formulaExpr,evaluate); } } return mapList; } } / * 非动态配置公式方式 * @param mapList * @param conditionExpr * @param formulaExpr * @param evaluate */ public static void workOutListMap(List<Map> mapList,String conditionExpr,String formulaExpr, String evaluate){ for (Map map : mapList) { JEP jep = getJEP(map); workOutKey(jep,map,conditionExpr,formulaExpr,evaluate); } } / * 计算出表达式并填充 * @param jep * @param map * @param conditionExpr * @param formulaExpr * @param evaluate */ private static void workOutKey(JEP jep,Map map,String conditionExpr, String formulaExpr, String evaluate){ //如果没有条件 if(StringUtil.isEmpty(conditionExpr)){ map.put(evaluate,workOutSingle(jep,formulaExpr)); //如果有条件 且条件为true }else if(workOutBool(jep,conditionExpr)){ map.put(evaluate,workOutSingle(jep,formulaExpr)); } } / * 判断条件表达式 * @param jep * @param expression * @return */ private static boolean workOutBool(JEP jep,String expression){ return (Double)workOutSingle(jep,expression) > 0; } / * 计算表达式的值 * @param jep * @param expression * @return */ private static Object workOutSingle(JEP jep,String expression){ Object result = null; try { //执行 Node parse = jep.parse(expression); result = jep.evaluate(parse); } catch (ParseException e) { throw new BaseRunTimeException("公式表达式解析失败",e); } if(result == null){ throw new BaseRunTimeException("公式表达式解析失败"); } return result; } / * 获取填充好变量的JEP对象 * @param param * @return */ private static JEP getJEP(Map param){ JEP jep = new JEP(); Set<Map.Entry> set = param.entrySet(); for (Map.Entry entry : set) { Object entryValue = entry.getValue(); String entryKey = (String) entry.getKey(); jep.addVariable(entryKey, entryValue); } return jep; } }

版权声明


相关文章:

  • java萝卜影视源码搭建教程2024-12-04 14:02:05
  • java代码跳舞教程2024-12-04 14:02:05
  • 自学java4教程2024-12-04 14:02:05
  • java画布教程2024-12-04 14:02:05
  • 张龙java教程2024-12-04 14:02:05
  • java定义教程2024-12-04 14:02:05
  • java 教程菜鸟2024-12-04 14:02:05
  • java免费教程4332024-12-04 14:02:05
  • java教程1442024-12-04 14:02:05
  • java实战视频教程2024-12-04 14:02:05