diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/controller/DeviceController.java b/main/manager-api/src/main/java/xiaozhi/modules/device/controller/DeviceController.java index cc4eb5a3..e476dc32 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/device/controller/DeviceController.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/controller/DeviceController.java @@ -5,6 +5,10 @@ import java.util.List; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.BeanUtils; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; @@ -12,30 +16,26 @@ import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.RestTemplate; + +import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; -import lombok.AllArgsConstructor; import xiaozhi.common.exception.ErrorCode; import xiaozhi.common.redis.RedisKeys; import xiaozhi.common.redis.RedisUtils; import xiaozhi.common.user.UserDetail; import xiaozhi.common.utils.Result; +import xiaozhi.modules.device.dto.DeviceManualAddDTO; import xiaozhi.modules.device.dto.DeviceRegisterDTO; import xiaozhi.modules.device.dto.DeviceUnBindDTO; import xiaozhi.modules.device.dto.DeviceUpdateDTO; -import xiaozhi.modules.device.dto.DeviceManualAddDTO; import xiaozhi.modules.device.entity.DeviceEntity; import xiaozhi.modules.device.service.DeviceService; import xiaozhi.modules.security.user.SecurityUser; import xiaozhi.modules.sys.service.SysParamsService; -import org.springframework.web.client.RestTemplate; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.ResponseEntity; -import com.fasterxml.jackson.databind.ObjectMapper; @Tag(name = "设备管理") @RestController @@ -47,7 +47,8 @@ public class DeviceController { private final RestTemplate restTemplate; private final ObjectMapper objectMapper; - public DeviceController(DeviceService deviceService, RedisUtils redisUtils, SysParamsService sysParamsService, RestTemplate restTemplate, ObjectMapper objectMapper) { + public DeviceController(DeviceService deviceService, RedisUtils redisUtils, SysParamsService sysParamsService, + RestTemplate restTemplate, ObjectMapper objectMapper) { this.deviceService = deviceService; this.redisUtils = redisUtils; this.sysParamsService = sysParamsService; @@ -98,8 +99,8 @@ public class DeviceController { try { // 从系统参数中获取MQTT网关地址 String mqttGatewayUrl = sysParamsService.getValue("server.mqtt_manager_api", true); - if (StringUtils.isBlank(mqttGatewayUrl)) { - return new Result().error("MQTT网关地址未配置"); + if (StringUtils.isBlank(mqttGatewayUrl) || "null".equals(mqttGatewayUrl)) { + return new Result<>(); } // 获取当前用户的设备列表 @@ -152,7 +153,8 @@ public class DeviceController { private String generateBearerToken() { try { // 获取当前日期,格式为yyyy-MM-dd - String dateStr = java.time.LocalDate.now().format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd")); + String dateStr = java.time.LocalDate.now() + .format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd")); // 获取MQTT签名密钥 String signatureKey = sysParamsService.getValue("server.mqtt_signature_key", false); @@ -214,13 +216,17 @@ public class DeviceController { try { // 从系统参数中获取MQTT网关地址 String mqttGatewayUrl = sysParamsService.getValue("server.mqtt_manager_api", true); - if (StringUtils.isBlank(mqttGatewayUrl)) { + if (StringUtils.isBlank(mqttGatewayUrl) || "null".equals(mqttGatewayUrl)) { return new Result().error("MQTT网关地址未配置"); } // 构建完整的URL // 获取设备信息以构建mqttClientId DeviceEntity deviceById = deviceService.selectById(deviceId); + + if (!deviceById.getUserId().equals(SecurityUser.getUser().getId())) { + return new Result().error("设备不存在"); + } String macAddress = deviceById != null ? deviceById.getMacAddress() : "unknown"; String groupId = deviceById != null ? deviceById.getBoard() : null; if (groupId == null) { @@ -228,10 +234,10 @@ public class DeviceController { } groupId = groupId.replace(":", "_"); macAddress = macAddress.replace(":", "_"); - + // 拼接为groupId@@@macAddress@@@deviceId格式 String mqttClientId = groupId + "@@@" + macAddress + "@@@" + macAddress; - + String url = "http://" + mqttGatewayUrl + "/api/commands/" + mqttClientId; // 设置请求头 @@ -239,7 +245,8 @@ public class DeviceController { headers.set("Content-Type", "application/json"); // 生成Bearer令牌 - String dateStr = java.time.LocalDate.now().format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd")); + String dateStr = java.time.LocalDate.now() + .format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd")); String signatureKey = sysParamsService.getValue("server.mqtt_signature_key", false); if (StringUtils.isBlank(signatureKey)) { return new Result().error("MQTT签名密钥未配置"); diff --git a/main/manager-api/src/main/resources/db/changelog/202509161609.sql b/main/manager-api/src/main/resources/db/changelog/202509161610.sql similarity index 62% rename from main/manager-api/src/main/resources/db/changelog/202509161609.sql rename to main/manager-api/src/main/resources/db/changelog/202509161610.sql index 61270e26..df4b1fcb 100644 --- a/main/manager-api/src/main/resources/db/changelog/202509161609.sql +++ b/main/manager-api/src/main/resources/db/changelog/202509161610.sql @@ -1,3 +1,3 @@ delete from `sys_params` where param_code = 'server.mqtt_manager_api'; INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) -VALUES (119, 'server.mqtt_manager_api', null, 'string', 1, 'MQTT网关管理API的地址'); +VALUES (119, 'server.mqtt_manager_api', 'null', 'string', 1, 'MQTT网关管理API的地址'); diff --git a/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml b/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml index 7ecb2f03..934f7314 100755 --- a/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml @@ -346,12 +346,12 @@ databaseChangeLog: encoding: utf8 path: classpath:db/changelog/202509080922.sql - changeSet: - id: 202509161609 + id: 202509161610 author: fyb changes: - sqlFile: encoding: utf8 - path: classpath:db/changelog/202509161609.sql + path: classpath:db/changelog/202509161610.sql - changeSet: id: 202509161701 author: RanChen