@@ -107,6 +107,11 @@ public abstract class AbstractSQLConfig implements SQLConfig {
107107 * 可取值 new RequestMethod[]{ RequestMethod.GET, RequestMethod.POST ... }
108108 */
109109 public static List <RequestMethod > IGNORE_BLANK_STRING_METHOD_LIST = null ;
110+
111+ public static String KEY_DELETED_KEY = "deletedKey" ;
112+ public static String KEY_DELETED_VALUE = "deletedValue" ;
113+ public static String KEY_NOT_DELETED_VALUE = "notDeletedValue" ;
114+
110115 public static int MAX_HAVING_COUNT = 5 ;
111116 public static int MAX_WHERE_COUNT = 10 ;
112117 public static int MAX_COMBINE_DEPTH = 2 ;
@@ -4295,6 +4300,15 @@ public String getRemoveString(String key, String column, Object value) throws Il
42954300 }
42964301 //SET >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
42974302
4303+ @ Override
4304+ public boolean isFakeDelete () {
4305+ return false ;
4306+ }
4307+
4308+ @ Override
4309+ public Map <String , Object > onFakeDelete (Map <String , Object > map ) {
4310+ return map ;
4311+ }
42984312
42994313 /**
43004314 * @return
@@ -5159,33 +5173,49 @@ else if (userId instanceof Subquery) {}
51595173 whereList .add (userIdInKey );
51605174 }
51615175
5162- if (config .isFakeDelete ()) {
5163- // 查询Access假删除
5164- Map <String , Object > accessFakeDeleteMap = AbstractVerifier .ACCESS_FAKE_DELETE_MAP .get (config .getTable ());
5165- if (accessFakeDeleteMap != null && StringUtil .isNotEmpty (accessFakeDeleteMap .get ("deletedKey" ), true )) {
5166- Map <String , Object > fakeDeleteMap = new HashMap <>();
5176+ if (enableFakeDelete ) {
5177+ // 查询 Access 假删除
5178+ Map <String , Object > accessFakeDeleteMap = method == DELETE
5179+ ? null : AbstractVerifier .ACCESS_FAKE_DELETE_MAP .get (config .getTable ());
5180+ Object deletedKey = accessFakeDeleteMap == null ? null : accessFakeDeleteMap .get (KEY_DELETED_KEY );
5181+ boolean hasKey = deletedKey instanceof String && StringUtil .isNotEmpty (deletedKey , true );
5182+ Object deletedValue = hasKey ? accessFakeDeleteMap .get (KEY_DELETED_VALUE ) : null ;
5183+ boolean containNotDeletedValue = hasKey ? accessFakeDeleteMap .containsKey (KEY_NOT_DELETED_VALUE ) : null ;
5184+ Object notDeletedValue = containNotDeletedValue ? accessFakeDeleteMap .get (KEY_NOT_DELETED_VALUE ) : null ;
5185+
5186+ if (deletedValue != null || containNotDeletedValue ) {
51675187 boolean isFakeDelete = true ;
5168- if ( method != DELETE ) {
5169- if ( from != null ) {
5170- // 兼容 join 外层select 重复生成deletedKey
5171- if ( StringUtil .equals (table , from . getConfig () .getTable ())) {
5172- isFakeDelete = false ;
5173- }
5188+ if ( from != null ) {
5189+ // 兼容 JOIN 外层 SELECT 重复生成 deletedKey
5190+ SQLConfig <?> cfg = from . getConfig ();
5191+ if ( cfg != null && StringUtil .equals (table , cfg .getTable ())) {
5192+ isFakeDelete = false ;
5193+ }
51745194
5175- if ( from . getConfig (). getJoinList () != null ) {
5176- for ( Join join : from . getConfig (). getJoinList () ) {
5177- if ( StringUtil . equals ( table , join . getTable ()) ) {
5178- isFakeDelete = false ;
5179- break ;
5180- }
5195+ List < Join > jl = isFakeDelete && cfg != null ? cfg . getJoinList () : null ;
5196+ if ( jl != null ) {
5197+ for ( Join join : jl ) {
5198+ if ( join != null && StringUtil . equals ( table , join . getTable ())) {
5199+ isFakeDelete = false ;
5200+ break ;
51815201 }
51825202 }
51835203 }
5184- if (isFakeDelete ) {
5185- fakeDeleteMap .put (accessFakeDeleteMap .get ("deletedKey" ).toString ()+"!" , accessFakeDeleteMap .get ("deletedValue" ));
5186- tableWhere .putAll (fakeDeleteMap );
5187- andList .addAll (fakeDeleteMap .keySet ());
5188- whereList .addAll (fakeDeleteMap .keySet ());
5204+ }
5205+
5206+ if (isFakeDelete ) { // 支持 deleted != 1 / deleted is null 等表达式
5207+ if (deletedValue != null ) { // deletedKey != deletedValue
5208+ String key = deletedKey + "!" ;
5209+ tableWhere .put (key , deletedValue );
5210+ andList .add (key );
5211+ whereList .add (key );
5212+ }
5213+
5214+ if (containNotDeletedValue ) { // deletedKey = notDeletedValue
5215+ String key = deletedKey .toString ();
5216+ tableWhere .put (key , notDeletedValue );
5217+ andList .add (key );
5218+ whereList .add (key );
51895219 }
51905220 }
51915221 }
@@ -5289,18 +5319,26 @@ else if (w.startsWith("!")) {
52895319 config .setContent (tableContent );
52905320 }
52915321
5292- if (method == DELETE ) {
5293- if (config .isFakeDelete ()) {
5294- //查询Access假删除
5295- Map <String , Object > accessFakeDeleteMap = AbstractVerifier .ACCESS_FAKE_DELETE_MAP .get (config .getTable ());
5296- if (StringUtil .isNotEmpty (accessFakeDeleteMap .get ("deletedKey" ), true )) {
5297- //假删除需要更新的其他字段,比如:删除时间 deletedTime 之类的
5298- Map <String , Object > fakeDeleteMap = new HashMap <>();
5299- config .onFakeDelete (fakeDeleteMap );
5300- fakeDeleteMap .put (accessFakeDeleteMap .get ("deletedKey" ).toString (), accessFakeDeleteMap .get ("deletedValue" ));
5301- config .setMethod (PUT );
5302- config .setContent (fakeDeleteMap );
5322+ if (enableFakeDelete && method == DELETE ) {
5323+ // 查询 Access 假删除
5324+ Map <String , Object > accessFakeDeleteMap = AbstractVerifier .ACCESS_FAKE_DELETE_MAP .get (config .getTable ());
5325+
5326+ Object deletedKey = accessFakeDeleteMap .get (KEY_DELETED_KEY );
5327+ if (StringUtil .isNotEmpty (deletedKey , true )) {
5328+ // 假删除需要更新的其他字段,比如:删除时间 deletedTime 之类的
5329+ Map <String , Object > fakeDeleteMap = new HashMap <>();
5330+ fakeDeleteMap .put (deletedKey .toString (), accessFakeDeleteMap .get (KEY_DELETED_VALUE ));
5331+ fakeDeleteMap = config .onFakeDelete (fakeDeleteMap );
5332+
5333+ Map <String , Object > content = config .getContent ();
5334+ if (content == null || content .isEmpty ()) {
5335+ content = fakeDeleteMap ;
5336+ } else {
5337+ content .putAll (fakeDeleteMap );
53035338 }
5339+
5340+ config .setMethod (PUT );
5341+ config .setContent (content );
53045342 }
53055343 }
53065344
0 commit comments