From 2f25bb31eaa01c0d642e1d9d2abf88c88f5e1b58 Mon Sep 17 00:00:00 2001 From: wanglei <3085637232@qq.com> Date: Sat, 27 Dec 2025 21:06:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=A7=A3=E9=99=A4=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=85=B3=E8=81=94=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/web/TerminalController.java | 16 ++++++++++++ .../campus/water/service/DeviceService.java | 25 ++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/campus/water/controller/web/TerminalController.java b/src/main/java/com/campus/water/controller/web/TerminalController.java index c8f9791..120072d 100644 --- a/src/main/java/com/campus/water/controller/web/TerminalController.java +++ b/src/main/java/com/campus/water/controller/web/TerminalController.java @@ -1,8 +1,10 @@ // java/com/campus/water/controller/web/TerminalController.java package com.campus.water.controller.web; +import com.campus.water.service.DeviceService; import com.campus.water.service.TerminalService; import com.campus.water.entity.vo.TerminalManageVO; +import com.campus.water.util.ResultVO; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; @@ -23,6 +25,8 @@ import java.util.Map; public class TerminalController { private final TerminalService terminalService; + // 步骤1:添加DeviceService的final成员变量,由Spring自动注入(依赖@RequiredArgsConstructor) + private final DeviceService deviceService; @PostMapping("/add") @PreAuthorize("hasAnyRole('SUPER_ADMIN', 'AREA_ADMIN')") @@ -101,4 +105,16 @@ public class TerminalController { return new ResponseEntity<>(errorMap, HttpStatus.BAD_REQUEST); } } + + @DeleteMapping("/unbind/{terminalId}") + @PreAuthorize("hasAnyRole('SUPER_ADMIN', 'AREA_ADMIN')") + public ResultVO unbindTerminal(@PathVariable String terminalId) { + try { + deviceService.unbindTerminal(terminalId); + return ResultVO.success(null, "终端与设备解除绑定成功"); + } catch (Exception e) { + return ResultVO.error("解除绑定失败: " + e.getMessage()); + } + } + } \ No newline at end of file diff --git a/src/main/java/com/campus/water/service/DeviceService.java b/src/main/java/com/campus/water/service/DeviceService.java index 0ac9e09..35a51c3 100644 --- a/src/main/java/com/campus/water/service/DeviceService.java +++ b/src/main/java/com/campus/water/service/DeviceService.java @@ -9,6 +9,7 @@ import com.campus.water.mapper.DeviceRepository; import com.campus.water.mapper.DeviceTerminalMappingRepository; import com.campus.water.util.ResultVO; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -26,7 +27,11 @@ import java.util.stream.Collectors; public class DeviceService { private final DeviceRepository deviceRepository; + + @Autowired private final DeviceTerminalMappingRepository terminalMappingRepository; + // 1. 注入 Repository 实例(非静态成员,由 Spring 容器自动赋值) + /** * 根据设备ID查询设备详情 @@ -221,4 +226,22 @@ public class DeviceService { } return deviceRepository.findById(supplier.getParentMakerId()).orElse(null); } -} \ No newline at end of file + + + + // 2. 改为非静态方法(消除静态上下文),这是 Spring 业务方法的标准写法 + @Transactional + public void unbindTerminal(String terminalId) { + // 3. 通过注入的实例调用非静态方法 findByTerminalId,无编译错误,且能正常执行数据库操作 + Optional mapping = terminalMappingRepository.findByTerminalId(terminalId); + + // 后续业务逻辑:存在则删除映射(可直接调用你接口中新增的 deleteByTerminalId 方法,更高效) + if (mapping.isPresent()) { + // 调用你定义的 deleteByTerminalId,批量清理该终端的所有映射 + terminalMappingRepository.deleteByTerminalId(terminalId); + } else { + throw new RuntimeException("终端未绑定设备,无需解除关联"); + } + } +} + -- 2.34.1