1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
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 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 SqlCond 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));
}
}