Prechádzať zdrojové kódy

add 设置网桥初始值

18339543638 4 rokov pred
rodič
commit
de0245a7d3

+ 2 - 0
jetlinks-core/src/main/java/org/jetlinks/core/cluster/ServerNode.java

@@ -1,5 +1,6 @@
 package org.jetlinks.core.cluster;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import io.netty.util.internal.MacAddressUtil;
 import lombok.*;
 import org.hswebframework.web.bean.FastBeanCopier;
@@ -30,6 +31,7 @@ public class ServerNode implements Serializable {
 
     private long uptime;
 
+    @JsonIgnore
     private long lastKeepAlive;
 
     private long keepAliveTime;

+ 14 - 0
jetlinks-manager/bridge-manager/src/main/java/org/jetlinks/community/bridge/server/aliyun/AliBridgeServer.java

@@ -244,6 +244,20 @@ public class AliBridgeServer extends AbstractClusterUniqueTask<AliBridgeServer>
                     .execute()
                     .thenReturn(channel)
             )
+            .flatMap(channel->
+                //更新设备挂载数量
+                bridgeDeviceService
+                    .createQuery()
+                    .where(AliIotBridgeDeviceConfig::getBridgeId,bridgeId)
+                    .count()
+                    .flatMap(count->
+                        bridgeService.createUpdate()
+                            .set(AliIotBridgeEntity::getDeviceCount,count)
+                            .where(AliIotBridgeEntity::getId,bridgeId)
+                            .execute())
+                    .thenReturn(channel)
+
+            )
             .onErrorResume(Exception.class,
                 e->Mono.just(isReplica())
                     .filter(Boolean.FALSE::equals)

+ 16 - 0
jetlinks-manager/bridge-manager/src/main/java/org/jetlinks/community/bridge/service/AliIotService.java

@@ -6,6 +6,7 @@ import com.aliyuncs.DefaultAcsClient;
 import com.aliyuncs.exceptions.ClientException;
 import com.aliyuncs.iot.model.v20180120.*;
 import com.aliyuncs.profile.DefaultProfile;
+import lombok.extern.slf4j.Slf4j;
 import org.jetlinks.community.bridge.web.param.AliApiParam;
 import org.springframework.stereotype.Component;
 import reactor.core.publisher.Mono;
@@ -20,6 +21,7 @@ import java.util.Map;
  * @createTime 2021年11月26日 17:18:00
  */
 @Component
+@Slf4j
 public class AliIotService {
 
     /**
@@ -67,4 +69,18 @@ public class AliIotService {
                 Pair.of("nextToken",response.getNextToken())));
     }
 
+    public Mono<Void> deleteProduct(AliApiParam param){
+        DefaultProfile profile = DefaultProfile.getProfile(param.getRegionId(), param.getAccessKey(), param.getAccessSecret());
+        DefaultAcsClient client = new DefaultAcsClient(profile);
+        DeleteProductRequest request = new DeleteProductRequest();
+        request.setProductKey(param.getProductKey());
+        request.setIotInstanceId(param.getIotInstanceId());
+        return Mono.fromRunnable(()->{
+            try {
+                client.doAction(request);
+            }catch (Exception e){
+                log.warn("delete ali product failed,",e.getMessage());
+            }
+        });
+    }
 }

+ 20 - 5
jetlinks-manager/bridge-manager/src/main/java/org/jetlinks/community/bridge/web/AliBridgeServerController.java

@@ -19,6 +19,8 @@ import org.jetlinks.community.bridge.enums.BridgeStatus;
 import org.jetlinks.community.bridge.server.aliyun.AliBridgeGateway;
 import org.jetlinks.community.bridge.service.AliBridgeDeviceService;
 import org.jetlinks.community.bridge.service.AliBridgeService;
+import org.jetlinks.community.bridge.service.AliIotService;
+import org.jetlinks.community.bridge.web.param.AliApiParam;
 import org.jetlinks.core.cluster.ClusterManager;
 import org.jetlinks.core.cluster.ClusterService;
 import org.springframework.web.bind.annotation.*;
@@ -49,6 +51,7 @@ public class AliBridgeServerController implements
 
     private final AliBridgeDeviceService  bridgeDeviceService;
 
+    private final AliIotService iotService;
     @Override
     public ReactiveCrudService<AliIotBridgeEntity, String> getService() {
         return bridgeService;
@@ -63,11 +66,23 @@ public class AliBridgeServerController implements
     @Operation(summary = "删除网桥")
     @DeleteAction
     public Mono<Void> deleteBridge(@PathVariable("bridgeId")String id){
-        return  Mono.zip(
-            bridgeService.deleteById(id),
-            bridgeDeviceService.createDelete().where(AliIotBridgeDeviceConfig::getBridgeId,id).execute(),
-            bridgeGateway.delBridgeServer(id,true))
-            .then();
+        return bridgeService.findById(id)
+            .concatWith(Mono.zip(
+                bridgeService.deleteById(id),
+                bridgeDeviceService.createDelete().where(AliIotBridgeDeviceConfig::getBridgeId,id).execute(),
+                bridgeGateway.delBridgeServer(id,true)).then(Mono.empty()))
+            .flatMap(bridge->{
+                AliIotBridgeEntity.AccessConfig accessConfig = bridge.getAccessConfig();
+                AliApiParam param = AliApiParam.commonParam(accessConfig.getRegionId(), accessConfig.getAccessKey(), accessConfig.getAccessSecret());
+                param.setProductKey(param.getProductKey());
+                param.setIotInstanceId(param.getIotInstanceId());
+                return iotService.deleteProduct(param);
+            }).then();
+//        return  Mono.zip(
+//            bridgeService.deleteById(id),
+//            bridgeDeviceService.createDelete().where(AliIotBridgeDeviceConfig::getBridgeId,id).execute(),
+//            bridgeGateway.delBridgeServer(id,true))
+//            .then();
     }
 
 

+ 13 - 0
jetlinks-manager/bridge-manager/src/main/java/org/jetlinks/community/bridge/web/param/AliApiParam.java

@@ -1,7 +1,9 @@
 package org.jetlinks.community.bridge.web.param;
 
 import io.swagger.v3.oas.annotations.Parameter;
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import javax.validation.constraints.NotNull;
 
@@ -13,6 +15,8 @@ import javax.validation.constraints.NotNull;
  * @createTime 2021年11月27日 08:26:00
  */
 @Data
+@AllArgsConstructor(staticName = "of")
+@NoArgsConstructor
 public class AliApiParam {
     @Parameter(name = "区域id,如cn-shanghai")
     @NotNull(message = "区域id不能为空")
@@ -46,4 +50,13 @@ public class AliApiParam {
      * 当PageSize×CurrentPage值大于10,000时,必须传入NextToken。否则,无法返回数据。
      */
     private String nextToken;
+
+
+    public static AliApiParam commonParam(String regionId,String accessKey, String accessSecret) {
+        AliApiParam aliApiParam = new AliApiParam();
+        aliApiParam.setRegionId(regionId);
+        aliApiParam.setAccessKey(accessKey);
+        aliApiParam.setAccessSecret(accessSecret);
+        return aliApiParam;
+    }
 }