package com.yanzuoguang.dao.cond; import com.yanzuoguang.dao.impl.SqlCodeParameter; import com.yanzuoguang.dao.impl.SqlDataField; 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.List; /** * 包含的值字段 * * @author 颜佐光 */ public class SqlCondDefault extends SqlCondBase<SqlCondDefault> { public SqlCondDefault(String... field) { this(Arrays.asList(field)); } public SqlCondDefault(List<String> fields) { this(null, fields); } public SqlCondDefault(Runnable debugRunnable, String... field) { this(debugRunnable, Arrays.asList(field)); } public SqlCondDefault(Runnable debugRunnable, List<String> fields) { super(fields); super.debugRunnable = debugRunnable; } /** * 当前条件是否相等 * * @return */ @Override protected int getCondType(Object model, SqlDataField sqlField) { return getCondType(fields, model, sqlField); } /** * 获取sql类型该 * * @param fields * @param model * @param sqlField * @return */ public static int getCondType(List<String> fields, Object model, SqlDataField sqlField) { // 判断是否包含输入参数 boolean isInputField = !fields.isEmpty(); // 判断是否属于条件 boolean isCond = sqlField.getCodes().size() > 0 && sqlField.isAuto(); boolean isConst = sqlField.getCodes().size() > 0 && !sqlField.isAuto(); if (isInputField && isCond) { for (String field : fields) { // 获取值 Object val = ObjectHelper.get(model, field); if (StringHelper.isEmpty(val) || StringHelper.isEmptyArray(val)) { continue; } // 代码片段 if (val instanceof SqlCodeParameter && ArrayHelper.isEmpty(((SqlCodeParameter) val).getLatitude())) { continue; } // 只要有值不为空,则条件满足 return COND_TYPE_CODE_COND; } } else if (isConst) { // 常量SQL语句 return COND_TYPE_CODE_COND; } else if (isInputField && !isConst && !isCond) { // 前台输入参数,直接参数对接到SQL语句中 return COND_TYPE_CONST_ONLY_PARA; } return COND_TYPE_NONE; } /** * 将当前条件复制为新的对象 * * @return */ @Override public SqlCondDefault copy() { SqlCondDefault cond = new SqlCondDefault(this.debugRunnable, this.fields); return cond; } }