فهرست منبع

add 删除地理区域目录

18339543638 4 سال پیش
والد
کامیت
9012a7a128

+ 21 - 8
jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/LocalGeoRegionService.java

@@ -10,6 +10,7 @@ import org.reactivestreams.Publisher;
 import org.springframework.stereotype.Service;
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
+import reactor.util.function.Tuple2;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -62,12 +63,24 @@ public class LocalGeoRegionService extends GenericReactiveTreeSupportCrudService
 
 
 
-//    default Mono<Integer> deleteById(Publisher<K> idPublisher) {
-//        return findById(Flux.from(idPublisher))
-//            .flatMap(e -> createDelete()
-//                .where()
-//                .like$(e::getPath)
-//                .execute())
-//            .collect(Collectors.summingInt(Integer::intValue));
-//    }
+    @Override
+    public Mono<Integer> deleteById(Publisher<String> idPublisher) {
+        return findById(Flux.from(idPublisher))
+            .flatMap(e -> createDelete()
+                .where()
+                .like$(e::getPath)
+                .execute()
+                .zipWith(Mono.defer(()->
+                    this.createQuery()
+                        .where(GeoRegionEntity::getParentId,e.getParentId())
+                        .count()
+                        .flatMap(count->
+                            this.createUpdate()
+                                .where(GeoRegionEntity::getId,e.getParentId())
+                                .set(GeoRegionEntity::getChildrenNum,count)
+                                .execute())
+                )))
+            .map(Tuple2::getT1)
+            .collect(Collectors.summingInt(Integer::intValue));
+    }
 }

+ 3 - 7
jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/GeoController.java

@@ -61,12 +61,8 @@ public class GeoController  implements ReactiveTreeServiceQueryController<GeoReg
 
 
 
-    public Mono<GeoRegionEntity> delete(String id) {
-        return getService()
-            .findById(Mono.just(id))
-            .switchIfEmpty(Mono.error(NotFoundException::new))
-            .flatMap(e -> getService()
-                .deleteById(Mono.just(id))
-                .thenReturn(e));
+    @DeleteMapping("/{id:.+}")
+    public Mono<Integer> delete(@PathVariable String id) {
+        return geoService.deleteById(Mono.just(id));
     }
 }