From 0ecb3a397787dbed020f1d66b263f385fe623942 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 18 Oct 2023 16:01:37 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9F=AD=E8=B7=AF=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/formlua/core/QlExpress.java | 1 + .../formlua/func/compare/EqOperator.java | 2 +- .../func/compare/GreaterEqOperator.java | 2 +- .../formlua/func/compare/GreaterOperator.java | 2 +- .../formlua/func/compare/LessEqOperator.java | 2 +- .../formlua/func/compare/LessOperator.java | 2 +- .../formlua/func/compare/NotEqueOperator.java | 2 +- .../salary/formlua/func/logic/IfOperator.java | 129 +++++++++--------- .../formlua/func/logic/LogicService.java | 8 +- .../formlua/func/logic/LogicServiceImpl.java | 24 ++-- 10 files changed, 88 insertions(+), 86 deletions(-) diff --git a/src/com/engine/salary/formlua/core/QlExpress.java b/src/com/engine/salary/formlua/core/QlExpress.java index cefcd5bdc..68cd238d9 100644 --- a/src/com/engine/salary/formlua/core/QlExpress.java +++ b/src/com/engine/salary/formlua/core/QlExpress.java @@ -36,6 +36,7 @@ public class QlExpress { static { runner = new ExpressRunner(true, false); + runner.setShortCircuit(true); } private static boolean isInitialRunner = false; diff --git a/src/com/engine/salary/formlua/func/compare/EqOperator.java b/src/com/engine/salary/formlua/func/compare/EqOperator.java index 81aeef54a..24ee31946 100644 --- a/src/com/engine/salary/formlua/func/compare/EqOperator.java +++ b/src/com/engine/salary/formlua/func/compare/EqOperator.java @@ -154,7 +154,7 @@ public class EqOperator extends OperatorEqualsLessMore { } } // buildFilterParam(result,op1,op2); - return result; + return result.getContent(); } /** diff --git a/src/com/engine/salary/formlua/func/compare/GreaterEqOperator.java b/src/com/engine/salary/formlua/func/compare/GreaterEqOperator.java index 7e9a27055..1b5146cd6 100644 --- a/src/com/engine/salary/formlua/func/compare/GreaterEqOperator.java +++ b/src/com/engine/salary/formlua/func/compare/GreaterEqOperator.java @@ -89,7 +89,7 @@ public class GreaterEqOperator extends OperatorEqualsLessMore { result.setContent(false); } // Compareutils.buildLessMoreFilterParam(result,this.name,op1,op2); - return result; + return result.getContent(); } public GreaterEqOperator(String aAliasName, String aName, String aErrorInfo) { diff --git a/src/com/engine/salary/formlua/func/compare/GreaterOperator.java b/src/com/engine/salary/formlua/func/compare/GreaterOperator.java index 21df856fc..f33b7dd5a 100644 --- a/src/com/engine/salary/formlua/func/compare/GreaterOperator.java +++ b/src/com/engine/salary/formlua/func/compare/GreaterOperator.java @@ -92,7 +92,7 @@ public class GreaterOperator extends OperatorEqualsLessMore { result.setContent(false); } // Compareutils.buildLessMoreFilterParam(result, this.name, op1, op2); - return result; + return result.getContent(); } public GreaterOperator(String aName) { diff --git a/src/com/engine/salary/formlua/func/compare/LessEqOperator.java b/src/com/engine/salary/formlua/func/compare/LessEqOperator.java index 46ddcc38c..b8fa19942 100644 --- a/src/com/engine/salary/formlua/func/compare/LessEqOperator.java +++ b/src/com/engine/salary/formlua/func/compare/LessEqOperator.java @@ -90,7 +90,7 @@ public class LessEqOperator extends OperatorEqualsLessMore { result.setContent(false); } // Compareutils.buildLessMoreFilterParam(result,this.name,op1,op2); - return result; + return result.getContent(); } public LessEqOperator(String aName) { diff --git a/src/com/engine/salary/formlua/func/compare/LessOperator.java b/src/com/engine/salary/formlua/func/compare/LessOperator.java index ffe6b6b0c..862042c6f 100644 --- a/src/com/engine/salary/formlua/func/compare/LessOperator.java +++ b/src/com/engine/salary/formlua/func/compare/LessOperator.java @@ -90,7 +90,7 @@ public class LessOperator extends OperatorEqualsLessMore { result.setContent(false); } // Compareutils.buildLessMoreFilterParam(result,this.name,op1,op2); - return result; + return result.getContent(); } public LessOperator(String aName) { diff --git a/src/com/engine/salary/formlua/func/compare/NotEqueOperator.java b/src/com/engine/salary/formlua/func/compare/NotEqueOperator.java index 188e4812e..80589c977 100644 --- a/src/com/engine/salary/formlua/func/compare/NotEqueOperator.java +++ b/src/com/engine/salary/formlua/func/compare/NotEqueOperator.java @@ -89,7 +89,7 @@ public class NotEqueOperator extends OperatorEqualsLessMore { result.setContent(false); } // Compareutils.buildNotEqFilterParam(result, op1, op2); - return result; + return result.getContent(); } public NotEqueOperator(String aName) { diff --git a/src/com/engine/salary/formlua/func/logic/IfOperator.java b/src/com/engine/salary/formlua/func/logic/IfOperator.java index 8c1791b54..44430d341 100644 --- a/src/com/engine/salary/formlua/func/logic/IfOperator.java +++ b/src/com/engine/salary/formlua/func/logic/IfOperator.java @@ -16,82 +16,83 @@ import org.slf4j.LoggerFactory; public class IfOperator extends OperatorIf { - protected final Logger logger = LoggerFactory.getLogger(this.getClass()); - @Override - public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { - Integer number= IgnoreParamFilter.getSetFuncNumber("IF"); - if(list==null ||list.length !=3){ - JSONObject errorJson= ErrorUtil.buildError("IF",number,number,"IF函数只允许三个参数"); - throw new ExcelRunTimeException("IF函数只允许三个参数"); - } - Object obj = list.get(0).getObject(parent); - logger.info("IF参数:"+ JSON.toJSONString(obj)); - boolean isDataTypeBool=false; - DataType boolDtaType=null; - if(obj!=null && obj instanceof DataType){ - boolDtaType=(DataType)obj; - if(boolDtaType.getContent() !=null && ( boolDtaType.getContent() instanceof Boolean )){ - isDataTypeBool=true; - obj=boolDtaType.getContent(); - }else{ - switch (obj+""){ - case "true": - obj=true; - isDataTypeBool=true; - break; - case "false": - obj=false; - isDataTypeBool=true; - break; - default: - isDataTypeBool=false; - break; - } - } - }else if(obj instanceof Boolean){ - isDataTypeBool=true; - } - if (obj == null) { - JSONObject errorJson=ErrorUtil.buildError("IF",number,number,"IF函数参数不能为空"); - throw new RuntimeException(errorJson.getString("msg")); - } else if (!(obj instanceof Boolean) && (! (obj instanceof DataType) )) { - JSONObject errorJson=ErrorUtil.buildError("IF",number,number,"IF函数判断条件必须是真假值"); - throw new RuntimeException(errorJson.getString("msg")); - }else if(!isDataTypeBool){ - JSONObject errorJson=ErrorUtil.buildError("IF",number,number,"IF函数判断条件必须是真假值"); - throw new RuntimeException(errorJson.getString("msg")); - }else { - if (((Boolean)obj).booleanValue() == true){ - OperateData operateData=list.get(1); - Object object=operateData.getObject(parent); + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { + Integer number = IgnoreParamFilter.getSetFuncNumber("IF"); + if (list == null || list.length != 3) { + JSONObject errorJson = ErrorUtil.buildError("IF", number, number, "IF函数只允许三个参数"); + throw new ExcelRunTimeException("IF函数只允许三个参数"); + } + Object obj = list.get(0).getObject(parent); + logger.info("IF参数:" + JSON.toJSONString(obj)); + boolean isDataTypeBool = false; + DataType boolDtaType = null; + if (obj != null && obj instanceof DataType) { + boolDtaType = (DataType) obj; + if (boolDtaType.getContent() != null && (boolDtaType.getContent() instanceof Boolean)) { + isDataTypeBool = true; + obj = boolDtaType.getContent(); + } else { + switch (obj + "") { + case "true": + obj = true; + isDataTypeBool = true; + break; + case "false": + obj = false; + isDataTypeBool = true; + break; + default: + isDataTypeBool = false; + break; + } + } + } else if (obj instanceof Boolean) { + isDataTypeBool = true; + } + if (obj == null) { + JSONObject errorJson = ErrorUtil.buildError("IF", number, number, "IF函数参数不能为空"); + throw new RuntimeException(errorJson.getString("msg")); + } else if (!(obj instanceof Boolean) && (!(obj instanceof DataType))) { + JSONObject errorJson = ErrorUtil.buildError("IF", number, number, "IF函数判断条件必须是真假值"); + throw new RuntimeException(errorJson.getString("msg")); + } else if (!isDataTypeBool) { + JSONObject errorJson = ErrorUtil.buildError("IF", number, number, "IF函数判断条件必须是真假值"); + throw new RuntimeException(errorJson.getString("msg")); + } else { + if (((Boolean) obj).booleanValue() == true) { + OperateData operateData = list.get(1); + Object object = operateData.getObject(parent); // if(object instanceof DataType){ // String type= ExcelParamUtil.getParamType(object); // if(type.equalsIgnoreCase("date")){ // object=ExcelParamUtil.getParamContent(object,"string"); // } // } - OperateData operateData1=new OperateData(ExcelParamUtil.getParamContent(object,""),operateData.getType(parent)); - return operateData1; - }else{ - OperateData operateData=list.get(2); - Object object=operateData.getObject(parent); + OperateData operateData1 = new OperateData(ExcelParamUtil.getParamContent(object, ""), operateData.getType(parent)); + return operateData1; + } else { + OperateData operateData = list.get(2); + Object object = operateData.getObject(parent); // if(object instanceof DataType){ // String type=ExcelParamUtil.getParamType(object); // if(type.equalsIgnoreCase("date")){ // object=ExcelParamUtil.getParamContent(object,"string"); // } // } - OperateData operateData1=new OperateData(ExcelParamUtil.getParamContent(object,""),operateData.getType(parent)); - return operateData1; - } - } - } + OperateData operateData1 = new OperateData(ExcelParamUtil.getParamContent(object, ""), operateData.getType(parent)); + return operateData1; + } + } + } - public IfOperator(String aName) { - super(aName); - } + public IfOperator(String aName) { + super(aName); + } - public IfOperator(String aAliasName, String aName, String aErrorInfo) { - super(aAliasName, aName, aErrorInfo); - } + public IfOperator(String aAliasName, String aName, String aErrorInfo) { + super(aAliasName, aName, aErrorInfo); + } } diff --git a/src/com/engine/salary/formlua/func/logic/LogicService.java b/src/com/engine/salary/formlua/func/logic/LogicService.java index d3811bfdb..94d0ea106 100644 --- a/src/com/engine/salary/formlua/func/logic/LogicService.java +++ b/src/com/engine/salary/formlua/func/logic/LogicService.java @@ -4,13 +4,13 @@ import com.engine.salary.formlua.entity.parameter.DataType; public interface LogicService { - public DataType not(Object... object); + public Boolean not(Object... object); - public DataType isEmpty(Object... objs); + public Boolean isEmpty(Object... objs); - public DataType isTrue(Object... objs); + public Boolean isTrue(Object... objs); - public DataType isFalse(Object... objs); + public Boolean isFalse(Object... objs); public DataType and(Object... objs); diff --git a/src/com/engine/salary/formlua/func/logic/LogicServiceImpl.java b/src/com/engine/salary/formlua/func/logic/LogicServiceImpl.java index 3cd94f8de..395b9acdf 100644 --- a/src/com/engine/salary/formlua/func/logic/LogicServiceImpl.java +++ b/src/com/engine/salary/formlua/func/logic/LogicServiceImpl.java @@ -24,7 +24,7 @@ public class LogicServiceImpl implements LogicService { protected final Logger logger = LoggerFactory.getLogger(this.getClass()); @Override - public DataType not(Object... objects) { + public Boolean not(Object... objects) { DataType resultdataType = new DataType(); resultdataType.setDataType(DataType.BOOL); Class[] typeObjects = new Class[]{boolean.class}; @@ -32,7 +32,7 @@ public class LogicServiceImpl implements LogicService { Object object = objects[0]; if (object == null) { resultdataType.setContent(false); - return resultdataType; + return false; } Boolean cnd; if (object instanceof DataType) { @@ -43,11 +43,11 @@ public class LogicServiceImpl implements LogicService { } resultdataType.setContent(!cnd); - return resultdataType; + return (Boolean) resultdataType.getContent(); } @Override - public DataType isEmpty(Object... objs) { + public Boolean isEmpty(Object... objs) { int number = IgnoreParamFilter.getSetFuncNumber(FuncNames.ISEMPTY.toString()); if (objs.length != 1) { throw new RuntimeException("ISEMPTY函数只允许一个参数"); @@ -57,7 +57,7 @@ public class LogicServiceImpl implements LogicService { DataType dataType = new DataType(); dataType.setDataType(DataType.BOOL); dataType.setContent(true); - return dataType; + return true; } for (int i = 0; i < objs.length; i++) { Object obj = objs[i]; @@ -65,7 +65,7 @@ public class LogicServiceImpl implements LogicService { DataType dataType = new DataType(); dataType.setDataType(DataType.BOOL); dataType.setContent(true); - return dataType; + return true; } if (obj instanceof DataType) { DataType objDataType = (DataType) obj; @@ -86,11 +86,11 @@ public class LogicServiceImpl implements LogicService { DataType dataType = new DataType(); dataType.setDataType(DataType.BOOL); dataType.setContent(result); - return dataType; + return result; } @Override - public DataType isTrue(Object... objects) { + public Boolean isTrue(Object... objects) { int number = IgnoreParamFilter.getSetFuncNumber(FuncNames.TRUE.toString()); if (objects.length > 0) { throw new RuntimeException("TRUE函数不能有参数"); @@ -98,11 +98,11 @@ public class LogicServiceImpl implements LogicService { DataType dataType = new DataType(); dataType.setDataType(DataType.BOOL); dataType.setContent(true); - return dataType; + return (Boolean) dataType.getContent(); } @Override - public DataType isFalse(Object... objects) { + public Boolean isFalse(Object... objects) { int number = IgnoreParamFilter.getSetFuncNumber(FuncNames.FALSE.toString()); if (objects.length > 0) { JSONObject errorJson = ErrorUtil.buildError(FuncNames.FALSE.toString(), number, number, "FALSE函数不能有参数"); @@ -111,7 +111,7 @@ public class LogicServiceImpl implements LogicService { DataType dataType = new DataType(); dataType.setDataType(DataType.BOOL); dataType.setContent(false); - return dataType; + return (Boolean) dataType.getContent(); } @@ -335,7 +335,7 @@ public class LogicServiceImpl implements LogicService { } else { value = param; } - if (Objects.equals(source.toString(),value.toString())) { + if (Objects.equals(source.toString(), value.toString())) { result = objects[i + 1]; break; }