311 lines
14 KiB
Java
311 lines
14 KiB
Java
|
|
package com.engine.salary.formlua.func.compare;
|
||
|
|
|
||
|
|
import com.alibaba.fastjson.JSON;
|
||
|
|
import com.engine.salary.formlua.entity.parameter.DataType;
|
||
|
|
import com.engine.salary.formlua.entity.standard.FormulaFilterData;
|
||
|
|
import com.weaver.common.form.component.base.ComponentConfig;
|
||
|
|
import com.weaver.common.form.component.base.ComponentType;
|
||
|
|
import com.weaver.common.form.excel.validator.Validator;
|
||
|
|
import com.weaver.common.form.metadata.field.FormField;
|
||
|
|
import com.weaver.common.form.stat.FilterFormData;
|
||
|
|
import org.apache.commons.lang3.StringUtils;
|
||
|
|
import org.slf4j.Logger;
|
||
|
|
import org.slf4j.LoggerFactory;
|
||
|
|
|
||
|
|
import java.util.ArrayList;
|
||
|
|
import java.util.List;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 逻辑操作符的条件构建工具类
|
||
|
|
*/
|
||
|
|
public class Compareutils {
|
||
|
|
protected static final Logger logger = LoggerFactory.getLogger(Compareutils.class);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 构建不等于操作符的搜索条件
|
||
|
|
*
|
||
|
|
* @param dataType
|
||
|
|
* @param obj1
|
||
|
|
* @param obj2
|
||
|
|
* @throws Exception
|
||
|
|
*/
|
||
|
|
public static void buildNotEqFilterParam(DataType dataType, Object obj1, Object obj2) throws Exception {
|
||
|
|
List<FormulaFilterData> filterFormDataList = new ArrayList<>();
|
||
|
|
FormulaFilterData filterData = new FormulaFilterData();
|
||
|
|
String content = null;
|
||
|
|
try {
|
||
|
|
if (obj1 instanceof DataType) {
|
||
|
|
DataType dataType1 = (DataType) obj1;
|
||
|
|
if (StringUtils.isEmpty(dataType1.getComponentKey())) {
|
||
|
|
dataType1.setComponentKey(dataType1.getDataType());
|
||
|
|
}
|
||
|
|
if (obj2 instanceof DataType) {
|
||
|
|
// content = ((DataType) obj2).getContent()+"";
|
||
|
|
DataType paramDataType = (DataType) obj2;
|
||
|
|
if (paramDataType == null || paramDataType.getContent() == null) {
|
||
|
|
content = "";
|
||
|
|
} else {
|
||
|
|
content = paramDataType.getContent() + "";
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
content = obj2 + "";
|
||
|
|
}
|
||
|
|
if (content != null) {
|
||
|
|
String componentKey = dataType1.getComponentKey();
|
||
|
|
filterData.setFieldId(dataType1.getFieldId());
|
||
|
|
if (dataType1.getSubFormId() != null) {
|
||
|
|
filterData.setSubFormId(dataType1.getSubFormId() + "");
|
||
|
|
}
|
||
|
|
filterData.setComponentKey(componentKey);
|
||
|
|
if (StringUtils.isEmpty(content)) {
|
||
|
|
// filterData.setTerm(FilterFormData.TERM_NOT_NULL);
|
||
|
|
} else {
|
||
|
|
// //选项控件
|
||
|
|
// if (ComponentConfig.isOptionComponent(componentKey)) {
|
||
|
|
// filterData.setTerm(FilterFormData.TERM_NOT_EQ);
|
||
|
|
// List<String> ids = new ArrayList<>();
|
||
|
|
// String[] idsArray = content.split(",");
|
||
|
|
// for (String idStr : idsArray) {
|
||
|
|
// if (StringUtils.isNotBlank(idStr)) {
|
||
|
|
// ids.add(idStr);
|
||
|
|
// }
|
||
|
|
// }
|
||
|
|
// filterData.setIds(ids);
|
||
|
|
// //其他
|
||
|
|
// } else {
|
||
|
|
// filterData.setTerm(FilterFormData.TERM_NOT_EQ);
|
||
|
|
// filterData.setContent(content);
|
||
|
|
//// if(ComponentConfig.isNumberComponent(dataType1.getComponentKey()) || dataType1.getComponentKey().equalsIgnoreCase(DataType.NUMBER)){
|
||
|
|
//// if(StringUtils.isEmpty(content)){
|
||
|
|
//// filterData.setContent("0");
|
||
|
|
//// }
|
||
|
|
//// }
|
||
|
|
// }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
filterFormDataList.add(filterData);
|
||
|
|
// dataType.setFormulaFilterDataList(filterFormDataList);
|
||
|
|
dataType.setComponentKey(dataType1.getComponentKey());
|
||
|
|
dataType.setSubFormId(dataType1.getSubFormId());
|
||
|
|
}
|
||
|
|
} catch (Exception e) {
|
||
|
|
logger.error("err", e);
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 构建大于、小于、大于等于、小于等于的搜索条件
|
||
|
|
*
|
||
|
|
* @param dataType
|
||
|
|
* @param name
|
||
|
|
* @param obj1
|
||
|
|
* @param obj2
|
||
|
|
*/
|
||
|
|
public static void buildLessMoreFilterParam(DataType dataType, String name, Object obj1, Object obj2) {
|
||
|
|
List<FormulaFilterData> filterFormDataList = new ArrayList<>();
|
||
|
|
FormulaFilterData filterData = new FormulaFilterData();
|
||
|
|
try {
|
||
|
|
logger.info(name + "执行结果:" + JSON.toJSONString(dataType));
|
||
|
|
if (obj1 instanceof DataType) {
|
||
|
|
DataType dataType1 = (DataType) obj1;
|
||
|
|
if (StringUtils.isEmpty(dataType1.getComponentKey())) {
|
||
|
|
dataType1.setComponentKey(dataType1.getDataType());
|
||
|
|
}
|
||
|
|
String content = null;
|
||
|
|
if (obj2 instanceof DataType) {
|
||
|
|
// content = ((DataType) obj2).getContent()+"";
|
||
|
|
DataType paramDataType = (DataType) obj2;
|
||
|
|
if (paramDataType == null || paramDataType.getContent() == null) {
|
||
|
|
content = "";
|
||
|
|
} else {
|
||
|
|
content = paramDataType.getContent() + "";
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
content = obj2 + "";
|
||
|
|
}
|
||
|
|
if (content != null) {
|
||
|
|
String componentKey = dataType1.getComponentKey();
|
||
|
|
if (ComponentConfig.isNumberComponent(componentKey)
|
||
|
|
|| componentKey.equals(ComponentType.DateComponent.toString())
|
||
|
|
|| componentKey.equals(ComponentType.TimeComponent.toString())
|
||
|
|
|| dataType1.getComponentKey().equalsIgnoreCase(DataType.STRING)
|
||
|
|
|| dataType1.getComponentKey().equalsIgnoreCase(DataType.NUMBER)
|
||
|
|
|| dataType1.getComponentKey().equalsIgnoreCase(DataType.STRING)
|
||
|
|
|| dataType1.getComponentKey().equalsIgnoreCase(DataType.BOOL)) {
|
||
|
|
|
||
|
|
filterData.setFieldId(dataType1.getFieldId() + "");
|
||
|
|
if (dataType1.getSubFormId() != null) {
|
||
|
|
filterData.setSubFormId(dataType1.getSubFormId() + "");
|
||
|
|
}
|
||
|
|
filterData.setComponentKey(componentKey);
|
||
|
|
switch (name) {
|
||
|
|
case ">=":
|
||
|
|
filterData.setTerm(FilterFormData.TERM_GE);
|
||
|
|
break;
|
||
|
|
case ">":
|
||
|
|
filterData.setTerm(FilterFormData.TERM_GT);
|
||
|
|
break;
|
||
|
|
case "<=":
|
||
|
|
filterData.setTerm(FilterFormData.TERM_LE);
|
||
|
|
break;
|
||
|
|
case "<":
|
||
|
|
filterData.setTerm(FilterFormData.TERM_LT);
|
||
|
|
break;
|
||
|
|
default:
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
filterData.setContent(content);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
filterFormDataList.add(filterData);
|
||
|
|
dataType.setFormulaFilterDataList(filterFormDataList);
|
||
|
|
dataType.setComponentKey(dataType1.getComponentKey());
|
||
|
|
dataType.setSubFormId(dataType1.getSubFormId());
|
||
|
|
}
|
||
|
|
} catch (Exception e) {
|
||
|
|
logger.error("err", e);
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 校验大于、小于、小于等于、大于等于操作符的入参
|
||
|
|
*
|
||
|
|
* @param name
|
||
|
|
* @param obj1
|
||
|
|
* @param obj2
|
||
|
|
* @return
|
||
|
|
*/
|
||
|
|
public static boolean checkLessMoreParam(String name, Object obj1, Object obj2) {
|
||
|
|
if (obj1 instanceof FormField) {
|
||
|
|
String componentKey = ((FormField) obj1).getComponentKey();
|
||
|
|
if (ComponentConfig.isNumberComponent(componentKey)) {
|
||
|
|
if (obj2 instanceof Number) {
|
||
|
|
return true;
|
||
|
|
} else if (obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.NUMBER)) {
|
||
|
|
return true;
|
||
|
|
} else {
|
||
|
|
throw new RuntimeException("筛选条件[" + name + "]:数字控件右边必须是数字");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (componentKey.equals(ComponentType.DateComponent.toString())) {
|
||
|
|
if (obj2 instanceof String && Validator.isDate((String) obj2)) {
|
||
|
|
return true;
|
||
|
|
} else if (obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) {
|
||
|
|
return true;
|
||
|
|
} else {
|
||
|
|
throw new RuntimeException("筛选条件[" + name + "]:日期控件右边必须是日期字符串");
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
if (componentKey.equals(ComponentType.TimeComponent.toString())) {
|
||
|
|
if (obj2 instanceof String && Validator.isTime((String) obj2)) {
|
||
|
|
return true;
|
||
|
|
} else if (obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) {
|
||
|
|
return true;
|
||
|
|
} else {
|
||
|
|
throw new RuntimeException("筛选条件[" + name + "]:时间控件右边必须是时间字符串");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
throw new RuntimeException("筛选条件[" + name + "]:左边必须是数字控件或时间控件");
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 校验等于号的入参
|
||
|
|
*
|
||
|
|
* @param obj1
|
||
|
|
* @param obj2
|
||
|
|
* @return
|
||
|
|
*/
|
||
|
|
public static boolean checkEqParam(Object obj1, Object obj2) {
|
||
|
|
if (obj1 instanceof DataType) {
|
||
|
|
String componentKey = ((FormField) obj1).getComponentKey();
|
||
|
|
if (ComponentConfig.isNumberComponent(componentKey)) {
|
||
|
|
if (obj2 instanceof DataType) {
|
||
|
|
if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.NUMBER)) {
|
||
|
|
return true;
|
||
|
|
} else {
|
||
|
|
throw new RuntimeException("筛选条件[=]:数字控件右边必须是数字");
|
||
|
|
}
|
||
|
|
} else if (StringUtils.isEmpty(obj2 + "") || Validator.isFloat(obj2 + "")) {
|
||
|
|
return true;
|
||
|
|
} else {
|
||
|
|
throw new RuntimeException("筛选条件[=]:数字控件右边必须是数字");
|
||
|
|
}
|
||
|
|
} else if (ComponentConfig.isOptionComponent(componentKey)) {
|
||
|
|
if (StringUtils.isEmpty(obj2 + "") || (obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.OPTION))) {
|
||
|
|
return true;
|
||
|
|
} else {
|
||
|
|
throw new RuntimeException("筛选条件[=]:选项控件右边必须是选项");
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
if (StringUtils.isEmpty(obj2 + "") || obj2 instanceof String || obj2 instanceof Character) {
|
||
|
|
return true;
|
||
|
|
} else if (obj2 instanceof DataType) {
|
||
|
|
if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) {
|
||
|
|
return true;
|
||
|
|
} else if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) {
|
||
|
|
return true;
|
||
|
|
} else {
|
||
|
|
throw new RuntimeException("筛选条件[=]:文本控件右边必须是字符");
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
throw new RuntimeException("筛选条件[=]:文本控件右边必须是字符");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
throw new RuntimeException("筛选条件[=]:左边必须是表单控件");
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 校验不等于号的入参
|
||
|
|
*
|
||
|
|
* @param obj1
|
||
|
|
* @param obj2
|
||
|
|
* @return
|
||
|
|
*/
|
||
|
|
public static boolean checkNotEqParam(Object obj1, Object obj2) {
|
||
|
|
if (obj1 instanceof FormField) {
|
||
|
|
String componentKey = ((FormField) obj1).getComponentKey();
|
||
|
|
if (ComponentConfig.isNumberComponent(componentKey)) {
|
||
|
|
if (obj2 instanceof DataType) {
|
||
|
|
if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.NUMBER)) {
|
||
|
|
return true;
|
||
|
|
} else {
|
||
|
|
throw new RuntimeException("筛选条件[!=]:数字控件右边必须是数字");
|
||
|
|
}
|
||
|
|
} else if (StringUtils.isEmpty(obj2 + "") || Validator.isFloat(obj2 + "")) {
|
||
|
|
return true;
|
||
|
|
} else {
|
||
|
|
throw new RuntimeException("筛选条件[!=]:数字控件右边必须是数字");
|
||
|
|
}
|
||
|
|
} else if (ComponentConfig.isOptionComponent(componentKey)) {
|
||
|
|
if (StringUtils.isEmpty(obj2 + "") || (obj2 instanceof DataType && ((DataType) obj2).getDataType().equalsIgnoreCase(DataType.OPTION))) {
|
||
|
|
return true;
|
||
|
|
} else {
|
||
|
|
throw new RuntimeException("筛选条件[!=]:选项控件右边必须是选项");
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
if (StringUtils.isEmpty(obj2 + "") || obj2 instanceof String || obj2 instanceof Character) {
|
||
|
|
return true;
|
||
|
|
} else if (obj2 instanceof DataType) {
|
||
|
|
if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) {
|
||
|
|
return true;
|
||
|
|
} else if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) {
|
||
|
|
return true;
|
||
|
|
} else if (((DataType) obj2).getDataType().equalsIgnoreCase(DataType.STRING)) {
|
||
|
|
return true;
|
||
|
|
} else {
|
||
|
|
throw new RuntimeException("筛选条件[!=]:文本控件右边必须是字符");
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
throw new RuntimeException("筛选条件[!=]:文本控件右边必须是字符");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
throw new RuntimeException("筛选条件[!=]:左边必须是表单控件");
|
||
|
|
}
|
||
|
|
}
|