1. 前言
钉钉宜搭中也有公式组件,发现在钉钉宜搭中逻辑函数有EQ、NE、LT、GT、LE、GE.虽然在QLExpress中也有对应的实现,但为了考虑系列文章的完整性,笔者在这篇文章加餐EQ、NE、LT、GT、LE、GE六个函数的实现
2. 函数说明
函数名 | 表达式 | 入参 | 返回值 |
EQ判断相等 | EQ(value1,value2) | 2个值作比较 | boolean |
NE判断不等 | NE(value1,value2) | 2个值作比较 | boolean |
LT小于 | LT(value1,value2) | 2个值作比较 | boolean |
GT大于 | GT(value1,value2) | 2个值作比较 | boolean |
LE小于等于 | LE(value1,value2) | 2个值作比较 | boolean |
GE大于等于 | GE(value1,value2) | 2个值作比较 | boolean |
3. 代码实战
3.1 EQ判断相等
表达式:EQ(value1,value2)
入参:
-
2个值作比较
返回值:
-
类型:布尔值
-
返回值规则:两个值相等返回 true,支持数字,日期
package com.ql.util.express.self.combat.function.logic;import com.ql.util.express.Operator;/*** 类描述:EQ函数** @author admin* @version 1.0.0* @date 2023/11/27 14:04*/
public class EqFunction extends Operator {public EqFunction(String name) {this.name = name;}@Overridepublic Object executeInner(Object[] list) throws Exception {return executeInner(list[0], list[1]);}public Object executeInner(Object obj1, Object obj2) throws Exception {return Operator.objectEquals(obj1, obj2);}
}
3.2 NE判断不等
表达式:NE(value1,value2)
入参:
-
2个值做比较
返回值:
-
类型:布尔值
-
返回值规则:两个值不相等返回 true,支持数字,日期
package com.ql.util.express.self.combat.function.logic;import com.ql.util.express.Operator;/*** 类描述: NE函数 判断不等** @author admin* @version 1.0.0* @date 2023/11/27 14:07*/
public class NeFunction extends Operator {public NeFunction(String name) {this.name = name;}@Overridepublic Object executeInner(Object[] list) throws Exception {return executeInner(list[0], list[1]);}public Object executeInner(Object obj1, Object obj2) throws Exception {return !Operator.objectEquals(obj1, obj2);}
}
3.3 LT小于
表达式:LT(value1,value2)
入参:
-
2个值做比较
返回值:
-
类型:布尔值
-
返回值规则:value1 小于 value2 返回 true,支持数字,日期
package com.ql.util.express.self.combat.function.logic;import com.ql.util.express.Operator;
import com.ql.util.express.self.combat.exception.FormulaException;import static com.ql.util.express.config.QLExpressRunStrategy.isCompareNullLessMoreAsFalse;/*** 类描述: LT函数** @author admin* @version 1.0.0* @date 2023/11/27 13:45*/
public class LtFunction extends Operator {public LtFunction(String name) {this.name = name;}@Overridepublic Object executeInner(Object[] list) throws Exception {return executeInner(list[0], list[1]);}public Object executeInner(Object obj1, Object obj2) throws Exception {// 进行其他大小比较操作if (obj1 == null || obj2 == null) {if (isCompareNullLessMoreAsFalse()) {return false;}throw new FormulaException("空操作数无法进行数字比较操作:left = " + obj1 + ",right = " + obj2);}int i = Operator.compareData(obj1, obj2);boolean result = false;if (i < 0) {result = true;}return result;}
}