From 2dd74d6fc92b6ecee9b3b519c20c3d5012b28e57 Mon Sep 17 00:00:00 2001 From: wanglei <3085637232@qq.com> Date: Tue, 9 Dec 2025 23:21:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=88=B6=E6=B0=B4=E6=9C=BA?= =?UTF-8?q?=E3=80=81=E4=BE=9B=E6=B0=B4=E6=9C=BA=E5=85=B3=E8=81=94=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/web/DeviceController.java | 29 ++++++++++ .../java/com/campus/water/entity/Device.java | 4 ++ .../campus/water/mapper/DeviceRepository.java | 3 ++ .../campus/water/service/DeviceService.java | 54 +++++++++++++++++++ 4 files changed, 90 insertions(+) diff --git a/src/main/java/com/campus/water/controller/web/DeviceController.java b/src/main/java/com/campus/water/controller/web/DeviceController.java index 861971d..660f043 100644 --- a/src/main/java/com/campus/water/controller/web/DeviceController.java +++ b/src/main/java/com/campus/water/controller/web/DeviceController.java @@ -9,6 +9,7 @@ import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.util.List; // 新增List的导入语句 @RestController @RequestMapping("/api/web/device") @@ -45,4 +46,32 @@ public class DeviceController { return ResponseEntity.ok(ResultVO.error(500, "设备删除失败: " + e.getMessage())); } } + + @PostMapping("/relate") + public ResponseEntity> relateSupplier(@RequestParam String supplierId, @RequestParam String makerId) { + try { + deviceService.relateSupplierToMaker(supplierId, makerId); + return ResponseEntity.ok(ResultVO.success(null, "关联成功")); + } catch (Exception e) { + return ResponseEntity.ok(ResultVO.error(500, e.getMessage())); + } + } + + // 解除关联 + @PostMapping("/unrelate") + public ResponseEntity> unrelateSupplier(@RequestParam String supplierId) { + try { + deviceService.unrelateSupplierFromMaker(supplierId); + return ResponseEntity.ok(ResultVO.success(null, "解除关联成功")); + } catch (Exception e) { + return ResponseEntity.ok(ResultVO.error(500, e.getMessage())); + } + } + + // 查询制水机关联的供水机 + @GetMapping("/maker/{makerId}/suppliers") + public ResponseEntity>> getSuppliers(@PathVariable String makerId) { + List suppliers = deviceService.getSuppliersByMaker(makerId); + return ResponseEntity.ok(ResultVO.success(suppliers)); + } } \ No newline at end of file diff --git a/src/main/java/com/campus/water/entity/Device.java b/src/main/java/com/campus/water/entity/Device.java index 5b6596c..4c38c3e 100644 --- a/src/main/java/com/campus/water/entity/Device.java +++ b/src/main/java/com/campus/water/entity/Device.java @@ -40,6 +40,10 @@ public class Device { @Column(name = "create_time") private LocalDateTime createTime = LocalDateTime.now(); + // 新增:关联的制水机ID(仅供水机有值) + @Column(name = "parent_maker_id", length = 20) + private String parentMakerId; + // 保留原有的remark方法(若表中有该字段可直接映射,无则忽略) private String remark; public void setRemark(String remark) { diff --git a/src/main/java/com/campus/water/mapper/DeviceRepository.java b/src/main/java/com/campus/water/mapper/DeviceRepository.java index 31cd7c1..93840bf 100644 --- a/src/main/java/com/campus/water/mapper/DeviceRepository.java +++ b/src/main/java/com/campus/water/mapper/DeviceRepository.java @@ -38,4 +38,7 @@ public interface DeviceRepository extends JpaRepository { ); List findByAreaIdAndStatus(String areaId, Device.DeviceStatus deviceStatus); + + // 根据制水机ID查询关联的供水机 + List findByParentMakerIdAndDeviceType(String parentMakerId, Device.DeviceType deviceType); } \ 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 e823af1..7bb7d77 100644 --- a/src/main/java/com/campus/water/service/DeviceService.java +++ b/src/main/java/com/campus/water/service/DeviceService.java @@ -165,4 +165,58 @@ public class DeviceService { // 3. 执行删除操作 deviceRepository.delete(device); } + + // 新增:关联供水机到制水机 + @Transactional + public void relateSupplierToMaker(String supplierId, String makerId) { + // 校验制水机是否存在且类型正确 + Device maker = deviceRepository.findById(makerId) + .orElseThrow(() -> new RuntimeException("制水机不存在:" + makerId)); + if (maker.getDeviceType() != DeviceType.water_maker) { + throw new RuntimeException("目标设备不是制水机:" + makerId); + } + + // 校验供水机是否存在且类型正确 + Device supplier = deviceRepository.findById(supplierId) + .orElseThrow(() -> new RuntimeException("供水机不存在:" + supplierId)); + if (supplier.getDeviceType() != DeviceType.water_supply) { + throw new RuntimeException("目标设备不是供水机:" + supplierId); + } + + // 检查供水机是否已关联其他制水机 + if (supplier.getParentMakerId() != null) { + throw new RuntimeException("供水机已关联制水机:" + supplier.getParentMakerId()); + } + + // 建立关联 + supplier.setParentMakerId(makerId); + deviceRepository.save(supplier); + } + + // 新增:解除供水机与制水机的关联 + @Transactional + public void unrelateSupplierFromMaker(String supplierId) { + Device supplier = deviceRepository.findById(supplierId) + .orElseThrow(() -> new RuntimeException("供水机不存在:" + supplierId)); + if (supplier.getDeviceType() != DeviceType.water_supply) { + throw new RuntimeException("目标设备不是供水机:" + supplierId); + } + supplier.setParentMakerId(null); + deviceRepository.save(supplier); + } + + // 新增:查询制水机关联的所有供水机 + public List getSuppliersByMaker(String makerId) { + return deviceRepository.findByParentMakerIdAndDeviceType(makerId, DeviceType.water_supply); + } + + // 新增:查询供水机所属的制水机 + public Device getMakerBySupplier(String supplierId) { + Device supplier = deviceRepository.findById(supplierId) + .orElseThrow(() -> new RuntimeException("供水机不存在:" + supplierId)); + if (supplier.getParentMakerId() == null) { + return null; + } + return deviceRepository.findById(supplier.getParentMakerId()).orElse(null); + } } \ No newline at end of file -- 2.34.1