package com.yanzuoguang.dao.cond; import com.yanzuoguang.dao.impl.SqlDataField; import com.yanzuoguang.dao.impl.TableFieldString; import com.yanzuoguang.util.base.ObjectHelper; import com.yanzuoguang.util.helper.ArrayHelper; import com.yanzuoguang.util.helper.StringHelper; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 包含的值字段 * * @author 颜佐光 */ public class SqlCondEquals extends SqlCondBase<SqlCondEquals> { public Object[] vals; private boolean valIsInteger = false; private final Map<Object, Boolean> mapValue = new HashMap<>(); public SqlCondEquals(String field, Object... vals) { this(Arrays.asList(field), vals); } public SqlCondEquals(String[] fields, Object... vals) { this(Arrays.asList(fields), vals); } public SqlCondEquals(TableFieldString field, Object... vals) { this(field.getFields(), vals); } public SqlCondEquals(List<String> fields, Object... vals) { this(null, fields, vals); } public SqlCondEquals(Runnable debugRunnable, String field, Object... vals) { this(debugRunnable, Arrays.asList(field), vals); } public SqlCondEquals(Runnable debugRunnable, String[] fields, Object... vals) { this(debugRunnable, Arrays.asList(fields), vals); } public SqlCondEquals(Runnable debugRunnable, TableFieldString field, Object... vals) { this(debugRunnable, field.getFields(), vals); } public SqlCondEquals(Runnable debugRunnable, List<String> fields, Object... vals) { super(fields); super.debugRunnable = debugRunnable; this.vals = vals; // 判断值是否为整形 if (vals != null) { for (Object val : this.vals) { if (val != null) { valIsInteger = valIsInteger || StringHelper.isInt(val.getClass()); mapValue.put(val, true); } else { mapValue.put(StringHelper.EMPTY, true); } } } } /** * 当前条件是否相等 * * @return */ @Override protected int getCondType(Object model, SqlDataField sqlField) { // 判断是否包含输入参数 boolean isInputField = !this.fields.isEmpty(); // 判断是否属于条件 boolean isCond = sqlField.getCodes().size() > 0 && sqlField.isAuto(); if (isInputField && isCond) { for (String field : this.fields) { // 获取值 Object val = ObjectHelper.get(model, field); // 转换为整形 if (valIsInteger) { val = StringHelper.toInt(val); } // 判断值是否相等 List list = ArrayHelper.getList(val); for (Object item : list) { // 值处理 Object itemTo = item; if (itemTo == null) { itemTo = StringHelper.EMPTY; } // 判断是否包含该值 if (this.mapValue.containsKey(itemTo)) { // 只要有值不为空,则条件满足 return COND_TYPE_CODE_COND; } } } } return COND_TYPE_NONE; } /** * 将当前条件复制为新的对象 * * @return */ @Override public SqlCondEquals copy() { SqlCondEquals cond = new SqlCondEquals(this.debugRunnable, this.fields, this.vals); return cond; } /** * 判断条件是否相等 * * @param cond * @return */ @Override public boolean equalsExecute(SqlCondEquals cond) { return SqlCondBase.eqaulsField(this.fields, cond.fields) && StringHelper.compare(Arrays.asList(this.vals), Arrays.asList(cond.vals)); } }