Skip to content

Commit 3c168ff

Browse files
committed
优化树结构
1 parent 285e290 commit 3c168ff

File tree

3 files changed

+42
-16
lines changed

3 files changed

+42
-16
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.hswebframework.web.crud.service;
2+
3+
import org.hswebframework.ezorm.rdb.mapping.ReactiveRepository;
4+
import org.hswebframework.web.api.crud.entity.TreeSortSupportEntity;
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
7+
public abstract class GenericReactiveTreeSupportCrudService<E extends TreeSortSupportEntity<K>, K> implements ReactiveTreeSortEntityService<E, K> {
8+
9+
@Autowired
10+
private ReactiveRepository<E, K> repository;
11+
12+
@Override
13+
public ReactiveRepository<E, K> getRepository() {
14+
return repository;
15+
}
16+
17+
}

hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/service/ReactiveTreeSortEntityService.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@
1414
import java.util.*;
1515
import java.util.stream.Collectors;
1616

17+
/**
18+
* @param <E> TreeSortSupportEntity
19+
* @param <K> ID
20+
* @see GenericReactiveTreeSupportCrudService
21+
*/
1722
public interface ReactiveTreeSortEntityService<E extends TreeSortSupportEntity<K>, K>
1823
extends ReactiveCrudService<E, K> {
1924

@@ -59,8 +64,8 @@ default Mono<Integer> insertBatch(Publisher<? extends Collection<E>> entityPubli
5964
return this.getRepository()
6065
.insertBatch(Flux.from(entityPublisher)
6166
.flatMap(Flux::fromIterable)
62-
.flatMap(e -> Flux.fromIterable(TreeSupportEntity.expandTree2List(e, getIDGenerator())))
6367
.flatMap(this::applyTreeProperty)
68+
.flatMap(e -> Flux.fromIterable(TreeSupportEntity.expandTree2List(e, getIDGenerator())))
6469
.collectList());
6570
}
6671

@@ -78,9 +83,9 @@ default Mono<E> applyTreeProperty(E ele) {
7883
default Mono<SaveResult> save(Publisher<E> entityPublisher) {
7984
return this.getRepository()
8085
.save(Flux.from(entityPublisher)
86+
.flatMap(this::applyTreeProperty)
8187
//把树结构平铺
8288
.flatMap(e -> Flux.fromIterable(TreeSupportEntity.expandTree2List(e, getIDGenerator())))
83-
.flatMap(this::applyTreeProperty)
8489
);
8590
}
8691

hsweb-system/hsweb-system-authorization/hsweb-system-authorization-default/src/main/java/org/hswebframework/web/system/authorization/defaults/service/DefaultDimensionService.java

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import org.hswebframework.web.authorization.DimensionProvider;
99
import org.hswebframework.web.authorization.DimensionType;
1010
import org.hswebframework.web.crud.service.GenericReactiveCrudService;
11+
import org.hswebframework.web.crud.service.GenericReactiveTreeSupportCrudService;
12+
import org.hswebframework.web.crud.service.ReactiveCrudService;
1113
import org.hswebframework.web.crud.service.ReactiveTreeSortEntityService;
1214
import org.hswebframework.web.id.IDGenerator;
1315
import org.hswebframework.web.system.authorization.api.entity.AuthorizationSettingEntity;
@@ -26,8 +28,8 @@
2628
import java.util.stream.Collectors;
2729

2830
public class DefaultDimensionService
29-
extends GenericReactiveCrudService<DimensionEntity, String>
30-
implements ReactiveTreeSortEntityService<DimensionEntity, String>,
31+
extends GenericReactiveTreeSupportCrudService<DimensionEntity, String>
32+
implements
3133
DimensionProvider {
3234

3335
@Autowired
@@ -121,22 +123,24 @@ public ReactiveDelete createDelete() {
121123

122124
@Override
123125
public Mono<Integer> deleteById(Publisher<String> idPublisher) {
126+
124127
return Flux.from(idPublisher)
125128
.collectList()
126-
.flatMap(list -> super.deleteById(Flux.fromIterable(list))
127-
.then(dimensionUserRepository.createDelete() //删除维度用户关联
129+
.flatMap(list -> super.queryIncludeChildren(list)
130+
.flatMap(dimension -> dimensionUserRepository.createDelete() //删除维度用户关联
128131
.where()
129-
.in(DimensionUserEntity::getDimensionId, list)
130-
.execute())
131-
.then(findById(Flux.fromIterable(list))
132-
.groupBy(DimensionEntity::getTypeId, DimensionEntity::getId)//按维度类型分组
133-
.flatMap(grouping -> grouping.collectList()
134-
.flatMap(dimensionId -> settingRepository //删除权限设置
135-
.createDelete()
136-
.where(AuthorizationSettingEntity::getDimensionType, grouping.key())
137-
.in(AuthorizationSettingEntity::getDimensionTarget, dimensionId).execute()))
138-
.collect(Collectors.summarizingInt(Integer::intValue))
132+
.is(DimensionUserEntity::getDimensionId, dimension.getId())
133+
.execute()
134+
.then(getRepository().deleteById(Mono.just(dimension.getId())))
135+
.thenReturn(dimension)
139136
)
137+
.groupBy(DimensionEntity::getTypeId, DimensionEntity::getId)//按维度类型分组
138+
.flatMap(grouping -> grouping.collectList()
139+
.flatMap(dimensionId -> settingRepository //删除权限设置
140+
.createDelete()
141+
.where(AuthorizationSettingEntity::getDimensionType, grouping.key())
142+
.in(AuthorizationSettingEntity::getDimensionTarget, dimensionId).execute()))
143+
.collect(Collectors.summarizingInt(Integer::intValue))
140144
.doOnSuccess((r) -> eventPublisher.publishEvent(ClearUserAuthorizationCacheEvent.all()))
141145
.thenReturn(list.size()));
142146
}

0 commit comments

Comments
 (0)