SqlCondEquals.java 3.92 KB
Newer Older
yanzg's avatar
yanzg committed
1 2 3
package com.yanzuoguang.dao.cond;

import com.yanzuoguang.dao.impl.SqlDataField;
yanzg's avatar
yanzg committed
4
import com.yanzuoguang.dao.impl.TableFieldString;
yanzg's avatar
yanzg committed
5
import com.yanzuoguang.util.base.ObjectHelper;
yanzg's avatar
yanzg committed
6
import com.yanzuoguang.util.helper.ArrayHelper;
yanzg's avatar
yanzg committed
7 8 9
import com.yanzuoguang.util.helper.StringHelper;

import java.util.Arrays;
yanzg's avatar
yanzg committed
10
import java.util.HashMap;
yanzg's avatar
yanzg committed
11
import java.util.List;
yanzg's avatar
yanzg committed
12
import java.util.Map;
yanzg's avatar
yanzg committed
13 14 15 16 17 18

/**
 * 包含的值字段
 *
 * @author 颜佐光
 */
yanzg's avatar
yanzg committed
19
public class SqlCondEquals extends SqlCondBase<SqlCondEquals> {
yanzg's avatar
yanzg committed
20

yanzg's avatar
yanzg committed
21
    public Object[] vals;
yanzg's avatar
yanzg committed
22

yanzg's avatar
yanzg committed
23 24
    private boolean valIsInteger = false;

yanzg's avatar
yanzg committed
25
    private final Map<Object, Boolean> mapValue = new HashMap<>();
yanzg's avatar
yanzg committed
26 27 28

    public SqlCondEquals(String field, Object... vals) {
        this(Arrays.asList(field), vals);
yanzg's avatar
yanzg committed
29 30
    }

yanzg's avatar
yanzg committed
31 32 33 34
    public SqlCondEquals(String[] fields, Object... vals) {
        this(Arrays.asList(fields), vals);
    }

yanzg's avatar
yanzg committed
35 36 37 38
    public SqlCondEquals(TableFieldString field, Object... vals) {
        this(field.getFields(), vals);
    }

yanzg's avatar
yanzg committed
39
    public SqlCondEquals(List<String> fields, Object... vals) {
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
        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) {
yanzg's avatar
yanzg committed
56
        super(fields);
57
        super.debugRunnable = debugRunnable;
yanzg's avatar
yanzg committed
58 59 60 61 62 63 64 65 66 67 68 69 70
        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);
                }

            }
        }
yanzg's avatar
yanzg committed
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
    }

    /**
     * 当前条件是否相等
     *
     * @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);
yanzg's avatar
yanzg committed
88 89 90
                // 转换为整形
                if (valIsInteger) {
                    val = StringHelper.toInt(val);
yanzg's avatar
yanzg committed
91
                }
yanzg's avatar
yanzg committed
92
                // 判断值是否相等
yanzg's avatar
yanzg committed
93 94
                List list = ArrayHelper.getList(val);
                for (Object item : list) {
yanzg's avatar
yanzg committed
95 96 97 98 99 100 101
                    // 值处理
                    Object itemTo = item;
                    if (itemTo == null) {
                        itemTo = StringHelper.EMPTY;
                    }
                    // 判断是否包含该值
                    if (this.mapValue.containsKey(itemTo)) {
yanzg's avatar
yanzg committed
102 103 104
                        // 只要有值不为空,则条件满足
                        return COND_TYPE_CODE_COND;
                    }
yanzg's avatar
yanzg committed
105 106 107 108 109 110 111 112 113 114 115 116
                }
            }
        }
        return COND_TYPE_NONE;
    }

    /**
     * 将当前条件复制为新的对象
     *
     * @return
     */
    @Override
yanzg's avatar
yanzg committed
117
    public SqlCondEquals copy() {
118
        SqlCondEquals cond = new SqlCondEquals(this.debugRunnable, this.fields, this.vals);
yanzg's avatar
yanzg committed
119 120
        return cond;
    }
yanzg's avatar
yanzg committed
121 122 123 124 125 126 127 128

    /**
     * 判断条件是否相等
     *
     * @param cond
     * @return
     */
    @Override
yanzg's avatar
yanzg committed
129
    public boolean equalsExecute(SqlCondEquals cond) {
yanzg's avatar
yanzg committed
130 131
        return SqlCondBase.eqaulsField(this.fields, cond.fields)
                && StringHelper.compare(Arrays.asList(this.vals), Arrays.asList(cond.vals));
yanzg's avatar
yanzg committed
132
    }
yanzg's avatar
yanzg committed
133
}