3
3
import cn .veasion .db .AbstractFilter ;
4
4
import cn .veasion .db .base .Expression ;
5
5
import cn .veasion .db .base .Filter ;
6
- import cn .veasion .db .query .AbstractJoinQuery ;
7
- import cn .veasion .db .query .AbstractQuery ;
8
- import cn .veasion .db .query .JoinQueryParam ;
9
- import cn .veasion .db .query .SubQuery ;
10
- import cn .veasion .db .query .SubQueryParam ;
11
- import cn .veasion .db .query .UnionQueryParam ;
12
6
import cn .veasion .db .update .AbstractUpdate ;
13
7
import cn .veasion .db .update .Delete ;
14
- import cn .veasion .db .update .EntityUpdate ;
15
- import cn .veasion .db .update .JoinUpdateParam ;
16
8
import cn .veasion .db .update .Update ;
17
9
import cn .veasion .db .utils .FilterUtils ;
18
10
19
11
import java .util .Arrays ;
20
12
import java .util .HashSet ;
21
13
import java .util .List ;
14
+ import java .util .Map ;
22
15
import java .util .Objects ;
23
16
import java .util .Set ;
24
17
import java .util .function .Consumer ;
30
23
* @author luozhuowei
31
24
* @date 2021/12/6
32
25
*/
33
- public class LogicDeleteInterceptor implements EntityDaoInterceptor {
26
+ public class LogicDeleteInterceptor extends AbstractInterceptor {
34
27
35
28
private static ThreadLocal <Boolean > skipLogicDeleteFilter = new ThreadLocal <>();
36
29
private static ThreadLocal <Set <Class <?>>> skipClassLogicDeleteFilter = new ThreadLocal <>();
@@ -48,6 +41,7 @@ public class LogicDeleteInterceptor implements EntityDaoInterceptor {
48
41
* 如需要更新特殊为特殊值,如 id 或者 userId 时可以传 Expression 对象,如 Expression.update("${id}")
49
42
*/
50
43
public LogicDeleteInterceptor (String logicDeleteField , Object availableValue , Object deletedValue ) {
44
+ super (true , true , true , true , false );
51
45
this .logicDeleteField = Objects .requireNonNull (logicDeleteField );
52
46
this .availableValue = Objects .requireNonNull (availableValue );
53
47
this .deletedValue = Objects .requireNonNull (deletedValue );
@@ -79,79 +73,25 @@ public static void clearSkip() {
79
73
@ Override
80
74
public <R > R intercept (EntityDaoInvocation <R > invocation ) {
81
75
try {
82
- Object [] args = invocation .getArgs ();
83
- if (args != null && !Boolean .TRUE .equals (skipLogicDeleteFilter .get ())) {
84
- for (Object arg : args ) {
85
- if (arg instanceof AbstractQuery ) {
86
- handleQuery ((AbstractQuery <?>) arg );
87
- } else if (arg instanceof AbstractUpdate ) {
88
- handleUpdate ((AbstractUpdate <?>) arg );
89
- } else if (arg instanceof Delete ) {
90
- handleDelete ((Delete ) arg );
91
- } else if (arg instanceof AbstractFilter ) {
92
- handleFilter ((AbstractFilter <?>) arg );
93
- }
94
- }
95
- }
76
+ return super .intercept (invocation );
96
77
} finally {
97
78
clearSkip ();
98
79
}
99
- return invocation .proceed ();
100
- }
101
-
102
- private boolean containSkipClass (AbstractFilter <?> filter ) {
103
- return skipClassLogicDeleteFilter .get () != null &&
104
- skipClassLogicDeleteFilter .get ().contains (filter .getEntityClass ());
105
80
}
106
81
107
- private void handleQuery (AbstractQuery <?> query ) {
108
- if (query instanceof SubQuery ) {
109
- handleQuery (((SubQuery ) query ).getSubQuery ());
110
- }
111
- handleSelectSubQuery (query .getSelectSubQueryList ());
112
- handleFilter (query );
113
- if (query instanceof AbstractJoinQuery ) {
114
- List <JoinQueryParam > joinList = ((AbstractJoinQuery <?>) query ).getJoinAll ();
115
- if (joinList != null ) {
116
- for (JoinQueryParam joinQueryParam : joinList ) {
117
- AbstractJoinQuery <?> joinQuery = joinQueryParam .getJoinQuery ();
118
- if (joinQuery instanceof SubQuery ) {
119
- handleQuery (((SubQuery ) joinQuery ).getSubQuery ());
120
- } else {
121
- if (!containSkipClass (joinQuery )) {
122
- handleSelectSubQuery (joinQuery .getSelectSubQueryList ());
123
- handleOnFilter (joinQueryParam ::getOnFilters , joinQueryParam ::on , joinQuery .getTableAs ());
124
- }
125
- handleFilterSubQuery (joinQuery .getFilters ());
126
- }
127
- }
128
- }
129
- }
130
- List <UnionQueryParam > unions = query .getUnions ();
131
- if (unions != null ) {
132
- unions .stream ().map (UnionQueryParam ::getUnion ).forEach (this ::handleQuery );
133
- }
82
+ @ Override
83
+ protected boolean skip () {
84
+ return Boolean .TRUE .equals (skipLogicDeleteFilter .get ());
134
85
}
135
86
136
- private void handleUpdate (AbstractUpdate <?> update ) {
137
- handleFilter (update );
138
- if (update instanceof EntityUpdate ) {
139
- List <JoinUpdateParam > joinList = ((EntityUpdate ) update ).getJoinAll ();
140
- if (joinList == null || joinList .isEmpty ()) return ;
141
- for (JoinUpdateParam joinUpdateParam : joinList ) {
142
- EntityUpdate joinUpdate = joinUpdateParam .getJoinUpdate ();
143
- if (!containSkipClass (joinUpdate )) {
144
- handleOnFilter (joinUpdateParam ::getOnFilters , joinUpdateParam ::on , joinUpdate .getTableAs ());
145
- }
146
- handleFilterSubQuery (joinUpdate .getFilters ());
147
- }
148
- }
87
+ @ Override
88
+ protected boolean containSkipClass (Class <?> clazz ) {
89
+ return skipClassLogicDeleteFilter .get () != null &&
90
+ skipClassLogicDeleteFilter .get ().contains (clazz );
149
91
}
150
92
151
- private void handleDelete (Delete delete ) {
152
- if (containSkipClass (delete )) {
153
- return ;
154
- }
93
+ @ Override
94
+ protected void handleDelete (Delete delete ) {
155
95
AbstractUpdate <?> convertUpdate = delete .getConvertUpdate ();
156
96
if (convertUpdate == null ) {
157
97
convertUpdate = new Update ();
@@ -164,7 +104,15 @@ private void handleDelete(Delete delete) {
164
104
delete .convertUpdate (convertUpdate );
165
105
}
166
106
167
- private void handleOnFilter (Supplier <List <Filter >> onFilters , Consumer <Filter > on , String tableAs ) {
107
+ @ Override
108
+ protected void handleFilter (AbstractFilter <?> abstractFilter ) {
109
+ if (!abstractFilter .hasFilter (logicDeleteField )) {
110
+ abstractFilter .eq (logicDeleteField , availableValue );
111
+ }
112
+ }
113
+
114
+ @ Override
115
+ protected void handleOnFilter (Object joinParam , Supplier <List <Filter >> onFilters , Consumer <Filter > onMethod , String tableAs ) {
168
116
List <Filter > filters = onFilters .get ();
169
117
if (filters != null && !filters .isEmpty ()) {
170
118
for (Filter filter : filters ) {
@@ -174,36 +122,17 @@ private void handleOnFilter(Supplier<List<Filter>> onFilters, Consumer<Filter> o
174
122
}
175
123
}
176
124
}
177
- on .accept (Filter .AND );
178
- on .accept (Filter .eq (logicDeleteField , availableValue ).fieldAs (tableAs ));
179
- }
180
-
181
- private void handleFilter (AbstractFilter <?> abstractFilter ) {
182
- if (containSkipClass (abstractFilter )) {
183
- return ;
184
- }
185
- if (abstractFilter != null ) {
186
- if (!abstractFilter .hasFilter (logicDeleteField )) {
187
- abstractFilter .eq (logicDeleteField , availableValue );
188
- }
189
- handleFilterSubQuery (abstractFilter .getFilters ());
190
- }
125
+ onMethod .accept (Filter .AND );
126
+ onMethod .accept (Filter .eq (logicDeleteField , availableValue ).fieldAs (tableAs ));
191
127
}
192
128
193
- private void handleSelectSubQuery (List <SubQueryParam > list ) {
194
- if (list == null || list .isEmpty ()) return ;
195
- for (SubQueryParam sub : list ) {
196
- handleQuery (sub .getQuery ());
197
- }
129
+ @ Override
130
+ protected void handleInsert (Class <?> entityClass , List <?> entityList , List <Map <String , Object >> fieldValueMapList ) {
198
131
}
199
132
200
- private void handleFilterSubQuery (List <Filter > filters ) {
201
- if (filters == null || filters .isEmpty ()) return ;
202
- for (Filter filter : filters ) {
203
- if (filter .isSpecial () && filter .getValue () instanceof SubQueryParam ) {
204
- handleQuery (((SubQueryParam ) filter .getValue ()).getQuery ());
205
- }
206
- }
133
+ @ Override
134
+ public int sortIndex () {
135
+ return -1 ;
207
136
}
208
137
209
138
}
0 commit comments