Przeglądaj źródła

c端用户管理修改

xiwa 3 lat temu
rodzic
commit
99fd09a105

+ 2 - 0
dao/src/main/java/cc/iotkit/dao/AligenieDeviceRepository.java

@@ -13,4 +13,6 @@ public interface AligenieDeviceRepository extends MongoRepository<AligenieDevice
 
     List<AligenieDevice> findByUid(String uid);
 
+    AligenieDevice findByUidAndDeviceId(String uid, String deviceId);
+
 }

+ 1 - 0
manager/src/main/java/cc/iotkit/manager/config/KeycloakSecurityConfig.java

@@ -55,6 +55,7 @@ public class KeycloakSecurityConfig extends KeycloakWebSecurityConfigurerAdapter
                 .authorizeRequests()
                 .antMatchers("/*.html", "/favicon.ico","/v2/api-docs", "/webjars/**", "/swagger-resources/**", "/*.js").permitAll()
                 .antMatchers("/api/**").hasAnyRole("iot_client_user")
+                .antMatchers("/aligenieDevice/invoke/**").hasAnyRole("iot_client_user")
                 .antMatchers("/**/save*").hasRole("iot_write")
                 .antMatchers("/**/del*").hasRole("iot_write")
                 .antMatchers("/**/add*").hasRole("iot_write")

+ 4 - 2
manager/src/main/java/cc/iotkit/manager/controller/UserInfoController.java

@@ -3,8 +3,8 @@ package cc.iotkit.manager.controller;
 import cc.iotkit.common.Constants;
 import cc.iotkit.common.exception.BizException;
 import cc.iotkit.common.utils.ReflectUtil;
+import cc.iotkit.dao.AligenieDeviceRepository;
 import cc.iotkit.dao.UserInfoRepository;
-import cc.iotkit.manager.service.AligenieService;
 import cc.iotkit.manager.service.DataOwnerService;
 import cc.iotkit.manager.service.KeycloakAdminService;
 import cc.iotkit.manager.utils.AuthUtil;
@@ -29,7 +29,7 @@ public class UserInfoController {
     @Autowired
     private UserInfoRepository userInfoRepository;
     @Autowired
-    private AligenieService aligenieService;
+    private AligenieDeviceRepository aligenieDeviceRepository;
     @Autowired
     private DataOwnerService ownerService;
 
@@ -91,7 +91,9 @@ public class UserInfoController {
         }
         UserInfo user = optUser.get();
         ownerService.checkOwner(user);
+        keycloakAdminService.deleteUser(id);
         userInfoRepository.deleteById(id);
+        aligenieDeviceRepository.deleteByUid(user.getId());
     }
 
     @PostMapping("/client/user/save")

+ 54 - 1
manager/src/main/java/cc/iotkit/manager/controller/aligenie/AligenieDeviceController.java

@@ -1,19 +1,32 @@
 package cc.iotkit.manager.controller.aligenie;
 
 import cc.iotkit.common.exception.BizException;
-import cc.iotkit.dao.*;
+import cc.iotkit.common.exception.OfflineException;
+import cc.iotkit.common.utils.JsonUtil;
+import cc.iotkit.dao.AligenieDeviceRepository;
+import cc.iotkit.dao.AligenieProductRepository;
+import cc.iotkit.dao.DeviceRepository;
+import cc.iotkit.dao.UserInfoRepository;
+import cc.iotkit.deviceapi.IDeviceManager;
 import cc.iotkit.manager.service.DataOwnerService;
+import cc.iotkit.manager.utils.AuthUtil;
+import cc.iotkit.model.InvokeResult;
 import cc.iotkit.model.UserInfo;
 import cc.iotkit.model.aligenie.AligenieDevice;
 import cc.iotkit.model.aligenie.AligenieProduct;
 import cc.iotkit.model.device.DeviceInfo;
+import io.swagger.annotations.ApiOperation;
 import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 
+@Slf4j
 @RestController
 @RequestMapping("/aligenieDevice")
 public class AligenieDeviceController {
@@ -28,6 +41,8 @@ public class AligenieDeviceController {
     private DeviceRepository deviceRepository;
     @Autowired
     private AligenieProductRepository aligenieProductRepository;
+    @Autowired
+    private IDeviceManager deviceManager;
 
     @GetMapping("/list/{uid}")
     public List<AligenieDevice> getDevices(@PathVariable("uid") String uid) {
@@ -61,6 +76,44 @@ public class AligenieDeviceController {
 
     }
 
+    @ApiOperation("设备服务调用")
+    @PostMapping("/invoke/{deviceId}/{service}")
+    public InvokeResult invokeService(@PathVariable("deviceId") String deviceId,
+                                      @PathVariable("service") String service,
+                                      String args) {
+        InvokeResult result = new InvokeResult("", InvokeResult.FAILED_UNKNOWN);
+        AligenieDevice device = aligenieDeviceRepository.findByUidAndDeviceId(AuthUtil.getUserId(), deviceId);
+
+        if (device == null) {
+            result.setCode(InvokeResult.FAILED_NO_AUTH);
+            return result;
+        }
+
+        if (StringUtils.isBlank(deviceId) || StringUtils.isBlank(service)) {
+            log.error("deviceId/service is blank");
+            result.setCode(InvokeResult.FAILED_PARAM_ERROR);
+            return result;
+        }
+
+        try {
+            String requestId;
+            if ("set".equals(service)) {
+                requestId = deviceManager.setProperty(deviceId,
+                        JsonUtil.parse(args, Map.class));
+            } else {
+                requestId = deviceManager.invokeService(deviceId, service,
+                        JsonUtil.parse(args, Map.class));
+            }
+            result.setRequestId(requestId);
+            result.setCode(InvokeResult.SUCCESS);
+        } catch (OfflineException e) {
+            log.error("sendMsg failed", e);
+            result.setCode(InvokeResult.FAILED_OFFLINE);
+            return result;
+        }
+        return result;
+    }
+
     @Data
     public static class Device {
         private String deviceId;

+ 11 - 0
manager/src/main/java/cc/iotkit/manager/service/KeycloakAdminService.java

@@ -116,6 +116,17 @@ public class KeycloakAdminService {
         userResource.update(userRepresentation);
     }
 
+    public void deleteUser(String id) {
+        Keycloak keycloak = getKeycloak();
+        UserResource userResource = keycloak.realm(realm)
+                .users().get(id);
+        try {
+            userResource.remove();
+        } catch (javax.ws.rs.NotFoundException e) {
+            log.warn("user does not exist");
+        }
+    }
+
     private String getGroup(Integer type) {
         if (type == null) {
             return "";