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