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 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 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 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("筛选条件[!=]:左边必须是表单控件"); } }