weaver-hrm-salary/src/com/engine/salary/formlua/func/compare/Compareutils.java

311 lines
14 KiB
Java
Raw Normal View History

2023-04-13 09:32:20 +08:00
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("筛选条件[!=]:左边必须是表单控件");
}
}