ソースを参照

Merge branch 'master' of https://github.com/qq517634644/jetlinks-community

Tensai 4 年 前
コミット
f991c63403

+ 2 - 2
jetlinks-components/network-component/tcp-component/src/main/java/org/jetlinks/community/network/tcp/server/VertxTcpServer.java

@@ -62,11 +62,11 @@ public class VertxTcpServer implements TcpServer {
         this.parserSupplier = parserSupplier;
     }
 
-    public void setServer(Collection<NetServer> mqttServer) {
+    public void setServer(Collection<NetServer> servers) {
         if (this.tcpServers != null && !this.tcpServers.isEmpty()) {
             shutdown();
         }
-        this.tcpServers = mqttServer;
+        this.tcpServers = servers;
 
         for (NetServer tcpServer : this.tcpServers) {
             tcpServer.connectHandler(this::acceptTcpConnection);

+ 47 - 0
jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/web/OrganizationController.java

@@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import org.apache.commons.collections4.CollectionUtils;
+import org.hswebframework.ezorm.rdb.mapping.defaults.SaveResult;
 import org.hswebframework.web.api.crud.entity.PagerResult;
 import org.hswebframework.web.api.crud.entity.QueryOperation;
 import org.hswebframework.web.api.crud.entity.QueryParamEntity;
@@ -12,13 +13,17 @@ import org.hswebframework.web.authorization.Authentication;
 import org.hswebframework.web.authorization.Dimension;
 import org.hswebframework.web.authorization.annotation.*;
 import org.hswebframework.web.system.authorization.api.entity.DimensionEntity;
+import org.hswebframework.web.system.authorization.api.entity.DimensionUserEntity;
 import org.hswebframework.web.system.authorization.defaults.service.DefaultDimensionService;
+import org.hswebframework.web.system.authorization.defaults.service.DefaultDimensionUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 
+import java.util.Collections;
 import java.util.List;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @RequestMapping("/organization")
@@ -30,6 +35,10 @@ public class OrganizationController {
     @Autowired
     private DefaultDimensionService dimensionService;
 
+    @Autowired
+    private DefaultDimensionUserService dimensionUserService;
+
+
     public OrganizationController(DefaultDimensionService dimensionService) {
         this.dimensionService = dimensionService;
     }
@@ -134,5 +143,43 @@ public class OrganizationController {
             .then();
     }
 
+    @PostMapping("/{id}/users/_bind")
+    @ResourceAction(id = "bind-user", name = "绑定用户")
+    @Operation(summary = "绑定用户到机构")
+    public Mono<Integer> bindUser(@Parameter(description = "机构ID") @PathVariable String id,
+                                  @Parameter(description = "用户ID")
+                                  @RequestBody Mono<List<String>> userId) {
+
+        return userId
+            .flatMapIterable(Function.identity())
+            .map(uId -> {
+                DimensionUserEntity userEntity = new DimensionUserEntity();
+                userEntity.setUserId(uId);
+                userEntity.setUserName(uId);
+                userEntity.setDimensionId(id);
+                userEntity.setDimensionTypeId(orgDimensionTypeId);
+                userEntity.setDimensionName(orgDimensionTypeId);
+                return userEntity;
+            })
+            .as(dimensionUserService::save)
+            .map(SaveResult::getTotal);
+
+    }
+
+    @PostMapping("/{id}/users/_unbind")
+    @ResourceAction(id = "unbind-user", name = "解绑用户")
+    @Operation(summary = "从机构解绑用户")
+    public Mono<Integer> unbindUser(@Parameter(description = "机构ID") @PathVariable String id,
+                                    @Parameter(description = "用户ID")
+                                    @RequestBody Mono<List<String>> userId) {
+        return userId
+            .flatMap(newUserIdList -> dimensionUserService
+                .createDelete()
+                .where(DimensionUserEntity::getDimensionTypeId, orgDimensionTypeId)
+                .in(DimensionUserEntity::getUserId, newUserIdList)
+                .and(DimensionUserEntity::getDimensionId, id)
+                .execute());
+    }
+
 
 }

+ 16 - 2
jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/DeviceMessageBusinessHandler.java

@@ -4,6 +4,7 @@ import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
 import org.hswebframework.ezorm.rdb.mapping.ReactiveRepository;
+import org.jetlinks.community.device.enums.DeviceFeature;
 import org.jetlinks.core.device.DeviceConfigKey;
 import org.jetlinks.core.device.DeviceOperator;
 import org.jetlinks.core.device.DeviceRegistry;
@@ -16,6 +17,7 @@ import org.jetlinks.community.device.entity.DeviceInstanceEntity;
 import org.jetlinks.community.device.entity.DeviceTagEntity;
 import org.jetlinks.community.device.enums.DeviceState;
 import org.jetlinks.community.gateway.annotation.Subscribe;
+import org.jetlinks.reactor.ql.utils.CastUtils;
 import org.jetlinks.supports.official.JetLinksDeviceMetadataCodec;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Propagation;
@@ -73,12 +75,24 @@ public class DeviceMessageBusinessHandler {
                 instance.setCreateTimeNow();
                 instance.setCreatorId(tps.getT4().getCreatorId());
                 instance.setOrgId(tps.getT4().getOrgId());
-                instance.setState(DeviceState.online);
+                @SuppressWarnings("all")
+                boolean selfManageState = CastUtils
+                    .castBoolean(tps.getT5().getOrDefault(DeviceConfigKey.selfManageState.getKey(), false));
+
+                if (selfManageState) {
+                    instance.addFeature(DeviceFeature.selfManageState);
+                }
+
+                instance.setState(selfManageState ? DeviceState.offline : DeviceState.online);
+
                 return deviceService
                     .save(Mono.just(instance))
                     .thenReturn(instance)
                     .flatMap(device -> registry
-                        .register(device.toDeviceInfo().addConfig("state", DeviceState.online)));
+                        .register(device.toDeviceInfo()
+                                        .addConfig("state", selfManageState
+                                            ? org.jetlinks.core.device.DeviceState.offline
+                                            : org.jetlinks.core.device.DeviceState.online)));
             });
     }