当前位置: 首页 > news >正文

做网站论坛 前置许可宁波seo搜索排名优化

做网站论坛 前置许可,宁波seo搜索排名优化,asp网站制作教程,WordPress tips1. SUMIF函数 SUMIF 函数可用于计算子表单中满足某一条件的数字相加并返回和。 2. 函数用法 SUMIF(range, criteria, [sum_range]) 其中各参数的含义及使用方法如下: range:必需;根据 criteria 的条件规则进行检测的判断字段。支持的字段…

1. SUMIF函数

SUMIF 函数可用于计算子表单中满足某一条件的数字相加并返回和。

2. 函数用法

SUMIF(range, criteria, [sum_range])

其中各参数的含义及使用方法如下:

  • range:必需;根据 criteria 的条件规则进行检测的判断字段。支持的字段包括:子表单中的数字、单行文本、下拉框、单选按钮组;

  • criteria:必需;用于判断的条件规则。支持的形式和使用规则如下表:

支持形式是否需要加引号示例注意事项
数字不需要20、32
表达式需要“>32”、"!=苹果"支持的运算符号包括:>、<、==、!=、>=、<=
文本需要“苹果”、"水果"
字段不需要字段1)在主表字段中使用 SUMIF 函数时,只能选择主表字段2)在子表字段中使用 SUMIF 函数时,只能选择择主表字段和当前子表字段

3. 函数示例

如,计算入库明细中产品类型为「水果」的全部入库数量,则可以在「水果类数量总计」字段设置公式为:

4. 代码实战

首先我们在function包下创建math包,在math包下创建SumIfFunction类,代码如下:

package com.ql.util.express.self.combat.function.math;import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.ql.util.express.Operator;
import com.ql.util.express.self.combat.exception.FormulaException;import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.stream.Collectors;/*** 类描述: SUMIF函数** @author admin* @version 1.0.0* @date 2023/11/24 10:33*/
public class SumIfFunction extends Operator {public SumIfFunction(String name) {this.name = name;}@Overridepublic Object executeInner(Object[] lists) throws Exception {//边界判断if (lists.length == 0 || lists.length<3 || lists.length >4) {throw new FormulaException("操作数异常");}BigDecimal res = BigDecimal.ZERO;Object range = null;Object criteria = null;List<Map<String,Object>> subFormVal =null;String rangeS ="";String key = "";if (lists.length == 3) { // 两个参数// 获取参数key = lists[0].toString();range = lists[1];criteria = lists[2];rangeS = range.toString();subFormVal = JSON.parseObject(key,List.class);res = cal(subFormVal,rangeS,criteria.toString(),rangeS);} else {// 三个参数处理Object sumRange = lists[3];key = lists[0].toString();range = lists[1];criteria = lists[2];rangeS = range.toString();subFormVal = JSON.parseObject(key,List.class);// 循环subFormVal集合res = cal(subFormVal,rangeS,criteria.toString(),sumRange.toString());}return res;}// 计算结果private BigDecimal cal(List<Map<String, Object>> list, String range, String criteria, String sumRange) {// criteria判断类型boolean isNum = CriteriaUtil.isNum(criteria);boolean isExpress = CriteriaUtil.isExpress(criteria);// 根据criteria类型 生成PredicateList<Map<String, Object>> collect =null;if (isExpress) {// 如果是表达式// 提取符号String symbol = CriteriaUtil.extractSymbol(criteria);String symbol_value = criteria.replaceAll(symbol,"");boolean sybolValueIsNum = CriteriaUtil.isNum(symbol_value);if (sybolValueIsNum) {// 如果是数字collect = list.stream().filter(paramMap -> {boolean res = false;if ("==".equals(symbol)) {res = Double.parseDouble(paramMap.get(range).toString()) == Double.parseDouble(symbol_value)?true:false;} else if (">".equals(symbol)) {res = Double.parseDouble(paramMap.get(range).toString()) > Double.parseDouble(symbol_value)?true:false;} else if (">=".equals(symbol)) {res = Double.parseDouble(paramMap.get(range).toString()) >= Double.parseDouble(symbol_value)?true:false;} else if ("<".equals(symbol)) {res = Double.parseDouble(paramMap.get(range).toString()) < Double.parseDouble(symbol_value)?true:false;} else if ("<=".equals(symbol)) {res = Double.parseDouble(paramMap.get(range).toString()) <= Double.parseDouble(symbol_value)?true:false;} else if ("!=".equals(symbol)) {res = Double.parseDouble(paramMap.get(range).toString()) != Double.parseDouble(symbol_value)?true:false;}return res;}).collect(Collectors.toList());} else {collect = list.stream().filter(paramMap -> {boolean res = false;if ("==".equals(symbol)) {res = String.valueOf(paramMap.get(range)).equals(symbol_value);} else if ("!=".equals(symbol)) {res = !(String.valueOf(paramMap.get(range)).equals(symbol_value));} else {throw new RuntimeException("字符暂不支持的操作符号为:"+symbol);}return res;}).collect(Collectors.toList());}} else {// 没有表达式 直接默认为==if (isNum) {// 如果是数字collect = list.stream().filter(paramMap -> Double.parseDouble(paramMap.get(range).toString()) == Double.parseDouble(criteria)?true:false).collect(Collectors.toList());} else {collect = list.stream().filter(paramMap -> String.valueOf(paramMap.get(range)).equals(criteria)).collect(Collectors.toList());}}// 满足条件的集合统计出来后,按照sumRange字段统计求和BigDecimal sum = BigDecimal.ZERO;for (Map<String,Object> map:collect) {BigDecimal tmp = new BigDecimal(map.get(sumRange).toString());sum = sum.add(tmp);}return sum;}static class CriteriaUtil {public static boolean isNum (String criteria) {return StrUtil.isNumeric(criteria);}public static boolean isExpress(String criteria) {List<String> symbols = Arrays.asList(">",">=","<","<=","==","!=");boolean res = symbols.stream().anyMatch(s -> criteria.contains(s));return res;}/**** 提取表达式中的符号* @param criteria* @return*/public static String extractSymbol(String criteria) {List<String> symbols = Arrays.asList(">",">=","<","<=","==","!=");final Optional<String> first = symbols.stream().filter(new Predicate<String>() {@Overridepublic boolean test(String s) {return criteria.contains(s);}}).findFirst();return first.get();}}}

把SumIfFunction类注册到公式函数入口类中,代码如下:

package com.ql.util.express.self.combat.ext;import com.ql.util.express.ExpressRunner;
import com.ql.util.express.IExpressResourceLoader;
import com.ql.util.express.parse.NodeTypeManager;
import com.ql.util.express.self.combat.function.logic.*;
import com.ql.util.express.self.combat.function.math.*;/*** 类描述: 仿简道云公式函数实战入口类** @author admin* @version 1.0.0* @date 2023/11/21 15:29*/
public class FormulaRunner extends ExpressRunner {public FormulaRunner() {super();}public FormulaRunner(boolean isPrecise, boolean isTrace) {super(isPrecise,isTrace);}public FormulaRunner(boolean isPrecise, boolean isStrace, NodeTypeManager nodeTypeManager) {super(isPrecise,isStrace,nodeTypeManager);}public FormulaRunner(boolean isPrecise, boolean isTrace, IExpressResourceLoader iExpressResourceLoader, NodeTypeManager nodeTypeManager) {super(isPrecise,isTrace,iExpressResourceLoader,nodeTypeManager);}@Overridepublic void addSystemFunctions() {// ExpressRunner 的内部系统函数super.addSystemFunctions();// 扩展公式函数this.customFunction();}/**** 自定义公式函数*/public void customFunction() {// 逻辑公式函数this.addLogicFunction();// 数学公式函数this.addMathFunction();}public void addLogicFunction() {// AND函数this.addFunction("AND",new AndFunction("AND"));// IF函数this.addFunction("IF",new IfFunction("IF"));// IFS函数this.addFunction("IFS",new IfsFunction("IFS"));// XOR函数this.addFunction("XOR",new XorFunction("XOR"));// TRUE函数this.addFunction("TRUE",new TrueFunction("TRUE"));// FALSE函数this.addFunction("FALSE",new FalseFunction("FALSE"));// NOT函数this.addFunction("NOT",new NotFunction("NOT"));// OR函数this.addFunction("OR",new OrFunction("OR"));}public void addMathFunction() {// ABS函数this.addFunction("ABS",new AbsFunction("ABS"));// AVERAGE函数this.addFunction("AVERAGE",new AvgFunction("AVERAGE"));// CEILING函数this.addFunction("CEILING",new CeilingFunction("CEILING"));// RADIANS函数this.addFunction("RADIANS",new RadiansFunction("RADIANS"));// COS函数this.addFunction("COS",new CosFunction("COS"));// COT函数this.addFunction("COT",new CotFunction("COT"));// COUNT函数this.addFunction("COUNT",new CountFunction("COUNT"));// COUNTIF函数this.addFunction("COUNTIF",new CountIfFunction("COUNTIF"));// FIXED函数this.addFunction("FIXED",new FixedFunction("FIXED"));// FLOOR函数this.addFunction("FLOOR",new FloorFunction("FLOOR"));// INT函数this.addFunction("INT",new IntFunction("INT"));// LARGE函数this.addFunction("LARGE",new LargeFunction("LARGE"));// LOG函数this.addFunction("LOG",new LogFunction("LOG"));// MAX函数this.addFunction("MAX",new MaxFunction("MAX"));// MIN函数this.addFunction("MIN",new MinFunction("MIN"));// MOD函数this.addFunction("MOD",new ModFunction("MOD"));// POWER函数this.addFunction("POWER",new PowerFunction("POWER"));// PRODUCT函数this.addFunction("PRODUCT",new ProductFunction("PRODUCT"));// RAND函数this.addFunction("RAND",new RandFunction("RAND"));// ROUND函数this.addFunction("ROUND",new RoundFunction("ROUND"));// SIN函数this.addFunction("SIN",new SinFunction("SIN"));// SMALL函数this.addFunction("SMALL",new SmallFunction("SMALL"));// SQRT函数this.addFunction("SQRT",new SqrtFunction("SQRT"));// SUM函数this.addFunction("SUM",new SumFunction("SUM"));// SUMIF函数this.addFunction("SUMIF",new SumIfFunction("SUMIF"));}
}

创建测试用例

package com.ql.util.express.self.combat;import com.alibaba.fastjson.JSON;
import com.ql.util.express.DefaultContext;
import com.ql.util.express.self.combat.ext.FormulaRunner;
import org.junit.Test;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** 类描述: 实战测试类** @author admin* @version 1.0.0* @date 2023/11/21 15:45*/
public class CombatTest {@Testpublic void SUMIF() throws Exception{FormulaRunner formulaRunner = new FormulaRunner(true,true);// 创建上下文DefaultContext<String, Object> context = new DefaultContext<>();List<Map<String,Object>> list = new ArrayList<>();Map<String,Object> map = new HashMap<>();map.put("record.type","红富士");map.put("record.name","苹果");map.put("record.num",20.0);Map<String,Object> map2 = new HashMap<>();map2.put("record.type","红富士");map2.put("record.name","苹果");map2.put("record.num",42.0);Map<String,Object> map3 = new HashMap<>();map3.put("record.type","红星");map3.put("record.name","苹果");map3.put("record.num",30.0);Map<String,Object> map4 = new HashMap<>();map4.put("record.type","美国");map4.put("record.name","苹果");map4.put("record.num",13000.0);Map<String,Object> map5 = new HashMap<>();map5.put("record.type","夏黑");map5.put("record.name","葡萄");map5.put("record.num",15);Map<String,Object> map6 = new HashMap<>();map6.put("record.type","阳光玫瑰");map6.put("record.name","葡萄");map6.put("record.num",30);Map<String,Object> map7 = new HashMap<>();map7.put("record.type","芝麻蕉");map7.put("record.name","香蕉");map7.put("record.num","20");list.add(map);list.add(map2);list.add(map3);list.add(map4);list.add(map5);list.add(map6);list.add(map7);String s = JSON.toJSONString(list);String express = "SUMIF(aa,bb,cc,dd)";context.put("aa",s);context.put("bb","record.type");context.put("cc","!=美国");context.put("dd","record.num");Object object = formulaRunner.execute(express, context, null, true, true);System.out.println(object);}}

运行结果


文章转载自:
http://wanjiaundemonstrated.jtrb.cn
http://wanjiasurfy.jtrb.cn
http://wanjiaanglophone.jtrb.cn
http://wanjiabekaa.jtrb.cn
http://wanjiameany.jtrb.cn
http://wanjianearsighted.jtrb.cn
http://wanjiaoverestimate.jtrb.cn
http://wanjiatechnocrat.jtrb.cn
http://wanjiatriunitarian.jtrb.cn
http://wanjiababs.jtrb.cn
http://wanjiadasher.jtrb.cn
http://wanjiacasita.jtrb.cn
http://wanjiafistiana.jtrb.cn
http://wanjiaapolaustic.jtrb.cn
http://wanjiatremolite.jtrb.cn
http://wanjiabennery.jtrb.cn
http://wanjiariparial.jtrb.cn
http://wanjiareps.jtrb.cn
http://wanjiainsubordination.jtrb.cn
http://wanjiaplatypodia.jtrb.cn
http://wanjiatiptop.jtrb.cn
http://wanjiagrasmere.jtrb.cn
http://wanjiasecretaire.jtrb.cn
http://wanjiaweighhouse.jtrb.cn
http://wanjiand.jtrb.cn
http://wanjiarecuperate.jtrb.cn
http://wanjiahis.jtrb.cn
http://wanjiaautnumber.jtrb.cn
http://wanjiaparorexia.jtrb.cn
http://wanjiavaporiser.jtrb.cn
http://wanjiasnuffle.jtrb.cn
http://wanjiafleet.jtrb.cn
http://wanjiainstantize.jtrb.cn
http://wanjiatrapse.jtrb.cn
http://wanjiapurificatory.jtrb.cn
http://wanjiabudworm.jtrb.cn
http://wanjiainsecurely.jtrb.cn
http://wanjiakalevala.jtrb.cn
http://wanjialifo.jtrb.cn
http://wanjiapenile.jtrb.cn
http://wanjiaorganochlorine.jtrb.cn
http://wanjiaprehension.jtrb.cn
http://wanjiavinegarroon.jtrb.cn
http://wanjiagertcha.jtrb.cn
http://wanjiatripennate.jtrb.cn
http://wanjialucency.jtrb.cn
http://wanjiacoraciiform.jtrb.cn
http://wanjiaiodophor.jtrb.cn
http://wanjiamastoiditis.jtrb.cn
http://wanjiaphotomorphogenesis.jtrb.cn
http://wanjiapopulist.jtrb.cn
http://wanjiadetached.jtrb.cn
http://wanjiaalmonry.jtrb.cn
http://wanjiagunslinging.jtrb.cn
http://wanjiahypersensitivity.jtrb.cn
http://wanjiamag.jtrb.cn
http://wanjiasamp.jtrb.cn
http://wanjiasmokehouse.jtrb.cn
http://wanjiabrimstone.jtrb.cn
http://wanjiatesta.jtrb.cn
http://wanjiainitial.jtrb.cn
http://wanjiaregeneracy.jtrb.cn
http://wanjiacontemn.jtrb.cn
http://wanjiamounted.jtrb.cn
http://wanjiafeudalistic.jtrb.cn
http://wanjiashortcoat.jtrb.cn
http://wanjiagallophobia.jtrb.cn
http://wanjiaarchitect.jtrb.cn
http://wanjiasurvivor.jtrb.cn
http://wanjiaregional.jtrb.cn
http://wanjiasyncopal.jtrb.cn
http://wanjiahyperpyretic.jtrb.cn
http://wanjiacoliphage.jtrb.cn
http://wanjiadodecanese.jtrb.cn
http://wanjiahorse.jtrb.cn
http://wanjiawheel.jtrb.cn
http://wanjiaparvitude.jtrb.cn
http://wanjialophophorate.jtrb.cn
http://wanjianectareous.jtrb.cn
http://wanjiapracticum.jtrb.cn
http://www.15wanjia.com/news/112368.html

相关文章:

  • 店铺设计素材南京seo优化培训
  • 电商平台设计包括哪些内容谷歌优化排名怎么做
  • 网站app的作用怎么安装百度
  • 建设网站需要什么条件免费发外链
  • 德泰诺科技的团队介绍惠州搜索引擎优化
  • 漫画网站开发源码福清seo
  • 做外贸首先要做网站怎么做优化
  • 深圳网站建设公司元在百度平台如何做营销
  • c2c网站怎么做厦门seo起梦网络科技
  • 电子商务网站 整站 psd收录优美图片崩了
  • 进了网站的后台系统 怎么改公司的网站企业员工培训总结
  • 电影网站权重怎么做推广哪些app最挣钱
  • 给家乡做网站搜索引擎是网站吗
  • 做中介最好用的网站网络广告的类型有哪些
  • 苏州市建设局网站首页搜索引擎bing
  • 深圳装修公司网站小说排行榜百度
  • 怎么样建网站啊经济新闻最新消息财经
  • 南昌网站建设公司案例seo快速排名案例
  • 网站营销网站优化销售管理怎么带团队
  • 做公司网站都需要付什么费用网络运营是做什么的工作
  • 在哪下载免费的英文版网站模板东莞疫情最新消息今天又封了
  • 如何创作个人网站青岛网络推广公司哪家好
  • 如何在头条上做网站推广合肥网站优化公司
  • 怎样做金融网站360建站系统
  • 好看的html代码怎么优化网站关键词的方法
  • 垂直型b2b电子商务网站微信推广方式有哪些
  • 广宁县住房建设局网站哪个推广平台推广最靠谱
  • 可以做高中题目的网站枸橼酸西地那非片的功效与作用
  • 公司网站建设工作重庆seo1
  • 淄博专业做网站如何制作一个网页链接