From ab838bccb49b8d148d31180e57d6a7de15857da1 Mon Sep 17 00:00:00 2001 From: tianyongbao Date: Tue, 20 Jan 2026 07:51:32 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=87=AA=E6=B5=8B=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fishery/controller/DeviceController.java | 50 +++++++++++++++++-- .../fishery/controller/PondController.java | 24 ++++++++- 2 files changed, 69 insertions(+), 5 deletions(-) diff --git a/intc-modules/intc-fishery/src/main/java/com/intc/fishery/controller/DeviceController.java b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/controller/DeviceController.java index 276fc0f..da5569e 100644 --- a/intc-modules/intc-fishery/src/main/java/com/intc/fishery/controller/DeviceController.java +++ b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/controller/DeviceController.java @@ -817,11 +817,32 @@ public class DeviceController extends BaseController { String pondName = pond != null ? pond.getPondName() : "未知塘口"; - // 删除设备关联的所有联动控制 - linkedCtrlMapper.delete( + // 删除设备关联的所有联动控制前,先解除开关绑定 + // 1. 查询所有要删除的联动控制ID + List linkedCtrls = linkedCtrlMapper.selectList( new LambdaQueryWrapper() .eq(LinkedCtrl::getDeviceId, device.getId()) + .select(LinkedCtrl::getId) ); + + if (!linkedCtrls.isEmpty()) { + List linkedCtrlIds = linkedCtrls.stream() + .map(LinkedCtrl::getId) + .collect(Collectors.toList()); + + // 2. 解除关联的开关绑定 + deviceSwitchMapper.update(null, + new LambdaUpdateWrapper() + .set(DeviceSwitch::getLinkedCtrlId, null) + .in(DeviceSwitch::getLinkedCtrlId, linkedCtrlIds) + ); + + // 3. 删除联动控制记录 + linkedCtrlMapper.delete( + new LambdaQueryWrapper() + .eq(LinkedCtrl::getDeviceId, device.getId()) + ); + } // 更新设备:移除塘口关联,清除告警状态 boolean updated = deviceMapper.update(null, @@ -957,11 +978,32 @@ public class DeviceController extends BaseController { .set(Device::getIsOxygenUsed, 0) ); - // 删除设备的所有联动控制 - linkedCtrlMapper.delete( + // 删除设备的所有联动控制前,先解除开关绑定 + // 1. 查询所有要删除的联动控制ID + List linkedCtrls = linkedCtrlMapper.selectList( new LambdaQueryWrapper() .eq(LinkedCtrl::getDeviceId, request.getId()) + .select(LinkedCtrl::getId) ); + + if (!linkedCtrls.isEmpty()) { + List linkedCtrlIds = linkedCtrls.stream() + .map(LinkedCtrl::getId) + .collect(Collectors.toList()); + + // 2. 解除关联的开关绑定 + deviceSwitchMapper.update(null, + new LambdaUpdateWrapper() + .set(DeviceSwitch::getLinkedCtrlId, null) + .in(DeviceSwitch::getLinkedCtrlId, linkedCtrlIds) + ); + + // 3. 删除联动控制记录 + linkedCtrlMapper.delete( + new LambdaQueryWrapper() + .eq(LinkedCtrl::getDeviceId, request.getId()) + ); + } } // 查询更新后的设备完整信息 diff --git a/intc-modules/intc-fishery/src/main/java/com/intc/fishery/controller/PondController.java b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/controller/PondController.java index 1033e15..c92eb20 100644 --- a/intc-modules/intc-fishery/src/main/java/com/intc/fishery/controller/PondController.java +++ b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/controller/PondController.java @@ -891,10 +891,32 @@ public class PondController extends BaseController { // 如果设备原来有塘口,删除关联的联动控制 if (oldPondId != null) { - linkedCtrlMapper.delete( + // 删除联动控制前,先解除开关绑定 + // 1. 查询所有要删除的联动控制ID + List linkedCtrls = linkedCtrlMapper.selectList( new LambdaQueryWrapper() .eq(LinkedCtrl::getDeviceId, request.getId()) + .select(LinkedCtrl::getId) ); + + if (!linkedCtrls.isEmpty()) { + List linkedCtrlIds = linkedCtrls.stream() + .map(LinkedCtrl::getId) + .collect(Collectors.toList()); + + // 2. 解除关联的开关绑定 + deviceSwitchMapper.update(null, + new LambdaUpdateWrapper() + .set(DeviceSwitch::getLinkedCtrlId, null) + .in(DeviceSwitch::getLinkedCtrlId, linkedCtrlIds) + ); + + // 3. 删除联动控制记录 + linkedCtrlMapper.delete( + new LambdaQueryWrapper() + .eq(LinkedCtrl::getDeviceId, request.getId()) + ); + } } // 情凵1:分配或转移到新塘口