From 46b0d9614ed9aab1dc8d93e3a07403227746ada3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E5=B0=8F=E4=BA=91?= Date: Tue, 27 Jan 2026 11:44:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=BB=98=E8=AE=A4=E5=88=86?= =?UTF-8?q?=E7=BB=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/device/service/impl/SynService.java | 80 +++++++++++++++++-- 1 file changed, 75 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/ruoyi/device/service/impl/SynService.java b/src/main/java/com/ruoyi/device/service/impl/SynService.java index af90592..72536c8 100644 --- a/src/main/java/com/ruoyi/device/service/impl/SynService.java +++ b/src/main/java/com/ruoyi/device/service/impl/SynService.java @@ -60,6 +60,12 @@ public class SynService { @Autowired private IAircraftPayloadDomain aircraftPayloadDomain; + @Autowired + private IGroupDomain groupDomain; + + @Autowired + private IDockGroupDomain dockGroupDomain; + public SynService(IThingsBoardDomain iThingsBoardDomain) { this.iThingsBoardDomain = iThingsBoardDomain; } @@ -346,6 +352,10 @@ public class SynService { /** * 同步机场数据 + * 逻辑: + * 1. 如果是新插入的机场,需要将其插入到默认分组(ID=0) + * 2. 如果默认分组不存在,需要先创建默认分组 + * 3. 如果是已存在的机场,检查机场是否在任何分组中,如果不在,将其插入默认分组 * * @param deviceId 设备主键ID * @param deviceName 设备名称 @@ -355,8 +365,10 @@ public class SynService { // 查询机场是否已存在 Dock existingDock = dockDomain.selectDockByDeviceId(deviceId); + boolean isNewDock = (existingDock == null); + Long dockId; - if (existingDock == null) { + if (isNewDock) { // 机场不存在,插入新机场 Dock newDock = new Dock(); newDock.setDockName(deviceName); @@ -365,12 +377,26 @@ public class SynService { log.info("准备插入新机场: deviceId={}, dockName={}", deviceId, deviceName); dockDomain.insertDock(newDock); + dockId = newDock.getDockId(); log.info("插入新机场成功: deviceId={}, dockName={}, dockId={}", - deviceId, deviceName, newDock.getDockId()); + deviceId, deviceName, dockId); } else { - log.info("机场已存在,跳过插入: deviceId={}, dockName={}", deviceId, deviceName); + dockId = existingDock.getDockId(); + log.info("机场已存在: deviceId={}, dockName={}, dockId={}", deviceId, deviceName, dockId); + } + + // 确保默认分组存在 + ensureDefaultGroupExists(); + + // 检查机场是否在任何分组中 + List dockGroups = dockGroupDomain.selectDockGroupByDockId(dockId); + + if (dockGroups == null || dockGroups.isEmpty()) { + // 机场不在任何分组中,将其插入默认分组 + insertDockToDefaultGroup(dockId, deviceName); + } else { + log.info("机场已在分组中: dockId={}, 分组数量={}", dockId, dockGroups.size()); } - // 机场已存在,无需更新 } /** @@ -570,8 +596,52 @@ public class SynService { existingRelation.setAircraftId(aircraftId); existingRelation.setUpdateBy("system"); dockAircraftDomain.updateDockAircraft(existingRelation); - log.info("更新机场无人机关联: dockId={}, aircraftId={}", dockId, aircraftId); + log.info("更新机场无人机关联: dockId=, aircraftId={}", dockId, aircraftId); } } } + + /** + * 确保默认分组存在 + * 默认分组ID为0,名称为"默认分组" + * 如果不存在则创建 + */ + private void ensureDefaultGroupExists() { + Long defaultGroupId = 0L; + Group defaultGroup = groupDomain.selectGroupByGroupId(defaultGroupId); + + if (defaultGroup == null) { + // 默认分组不存在,创建默认分组 + Group newGroup = new Group(); + newGroup.setGroupId(defaultGroupId); + newGroup.setGroupName("默认分组"); + newGroup.setCreateBy("system"); + newGroup.setRemark("系统自动创建的默认分组,用于存放未分组的机场"); + + groupDomain.insertGroup(newGroup); + log.info("创建默认分组成功: groupId={}, groupName={}", defaultGroupId, "默认分组"); + } else { + log.debug("默认分组已存在: groupId={}, groupName={}", defaultGroupId, defaultGroup.getGroupName()); + } + } + + /** + * 将机场插入到默认分组 + * + * @param dockId 机场主键ID + * @param dockName 机场名称(用于日志) + */ + private void insertDockToDefaultGroup(Long dockId, String dockName) { + Long defaultGroupId = 0L; + + DockGroup newDockGroup = new DockGroup(); + newDockGroup.setDockId(dockId); + newDockGroup.setGroupId(defaultGroupId); + newDockGroup.setCreateBy("system"); + newDockGroup.setRemark("系统自动添加到默认分组"); + + dockGroupDomain.insertDockGroup(newDockGroup); + log.info("将机场添加到默认分组: dockId={}, dockName={}, groupId={}", + dockId, dockName, defaultGroupId); + } }