From 20a148a04ea5d875ae2626d81b09cd3fc2ad5218 Mon Sep 17 00:00:00 2001 From: zhugongping Date: Wed, 16 Sep 2026 19:28:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=93=E9=A1=B9=E4=BC=98=E5=8C=96=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E7=BB=91=E5=AE=9A=E9=A1=B5=E9=9D=A2=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PlatformDeviceMappingController.java | 7 +++++ .../PlatformDeviceSubMappingMapper.java | 3 +++ .../IPlatformDeviceSubMappingService.java | 4 +++ .../PlatformDeviceMappingServiceImpl.java | 25 +++++++++++++++++- .../PlatformDeviceSubMappingServiceImpl.java | 23 ++++++++++++++++ .../PlatformDeviceSubMappingMapper.xml | 10 +++++++ yack-web/src/api/platform/deviceMapping.js | 5 ++++ .../views/platform/device-mapping/index.vue | 26 ++++++------------- 8 files changed, 84 insertions(+), 19 deletions(-) diff --git a/fastbee-open-api/src/main/java/com/fastbee/controller/platform/PlatformDeviceMappingController.java b/fastbee-open-api/src/main/java/com/fastbee/controller/platform/PlatformDeviceMappingController.java index ed857816..306bae39 100644 --- a/fastbee-open-api/src/main/java/com/fastbee/controller/platform/PlatformDeviceMappingController.java +++ b/fastbee-open-api/src/main/java/com/fastbee/controller/platform/PlatformDeviceMappingController.java @@ -75,6 +75,13 @@ public class PlatformDeviceMappingController extends BaseController { // ==================== 子映射管理 ==================== + @PreAuthorize("@ss.hasAnyPermi('platform:deviceMapping:query,platform:deviceMapping:list')") + @GetMapping("/sub-mappings/batch") + @ApiOperation("批量查询多个设备绑定的子设备映射(列表页展开行一次拉取,避免 N 次请求)") + public AjaxResult listSubMappingsBatch(@RequestParam List parentIds) { + return success(subMappingService.selectByParentIds(parentIds)); + } + @PreAuthorize("@ss.hasAnyPermi('platform:deviceMapping:query,platform:deviceMapping:list')") @GetMapping("/{id}/sub-mappings") @ApiOperation("查询子设备映射列表") diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/platform/mapper/PlatformDeviceSubMappingMapper.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/platform/mapper/PlatformDeviceSubMappingMapper.java index 588134cb..0ef9ba03 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/platform/mapper/PlatformDeviceSubMappingMapper.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/platform/mapper/PlatformDeviceSubMappingMapper.java @@ -10,6 +10,9 @@ public interface PlatformDeviceSubMappingMapper extends BaseMapperX selectByParentId(@Param("parentMappingId") Long parentMappingId); + /** 批量查询多个父映射下的所有子映射(IN 查询,列表页展开行使用) */ + List selectByParentIds(@Param("parentIds") List parentIds); + PlatformDeviceSubMapping selectByParentAndSerial(@Param("parentMappingId") Long parentMappingId, @Param("subSerialNumber") String subSerialNumber); diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/platform/service/IPlatformDeviceSubMappingService.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/platform/service/IPlatformDeviceSubMappingService.java index 9eeacffe..23c48331 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/platform/service/IPlatformDeviceSubMappingService.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/platform/service/IPlatformDeviceSubMappingService.java @@ -4,12 +4,16 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.fastbee.iot.platform.domain.PlatformDeviceSubMapping; import java.util.List; +import java.util.Map; public interface IPlatformDeviceSubMappingService extends IService { /** 查询父映射下的所有子映射 */ List selectByParentId(Long parentMappingId); + /** 批量查询多个父映射下的子映射,按 parentMappingId 分组返回(列表页展开行一次拉取,避免 N 次请求) */ + Map> selectByParentIds(List parentIds); + /** 根据子设备序列号查找子映射(推送时使用) */ List selectBySubSerialNumber(String subSerialNumber); diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/platform/service/impl/PlatformDeviceMappingServiceImpl.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/platform/service/impl/PlatformDeviceMappingServiceImpl.java index d4bb4c03..895a1e54 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/platform/service/impl/PlatformDeviceMappingServiceImpl.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/platform/service/impl/PlatformDeviceMappingServiceImpl.java @@ -3,6 +3,8 @@ package com.fastbee.iot.platform.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.fastbee.iot.domain.Device; +import com.fastbee.iot.mapper.DeviceMapper; import com.fastbee.iot.platform.domain.*; import com.fastbee.iot.platform.flow.FlowContext; import com.fastbee.iot.platform.flow.PlatformFlowExecutor; @@ -21,6 +23,7 @@ import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; @@ -41,6 +44,8 @@ public class PlatformDeviceMappingServiceImpl extends ServiceImpl selectList(PlatformDeviceMapping query) { @@ -58,7 +63,25 @@ public class PlatformDeviceMappingServiceImpl extends ServiceImpl rows = this.list(wrapper); + // 批量补全设备名称:device_name 为冗余字段,旧数据可能为空,按 deviceId 一次 IN 查询回填,避免前端逐个查询 + List deviceIds = rows.stream() + .filter(m -> m.getDeviceId() != null && !StringUtils.hasText(m.getDeviceName())) + .map(PlatformDeviceMapping::getDeviceId) + .distinct() + .collect(Collectors.toList()); + if (!deviceIds.isEmpty()) { + List devices = deviceMapper.selectList(Wrappers.lambdaQuery() + .in(Device::getDeviceId, deviceIds)); + Map nameMap = devices.stream() + .collect(Collectors.toMap(Device::getDeviceId, Device::getDeviceName, (a, b) -> a)); + rows.forEach(m -> { + if (m.getDeviceId() != null && !StringUtils.hasText(m.getDeviceName())) { + m.setDeviceName(nameMap.get(m.getDeviceId())); + } + }); + } + return rows; } @Override diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/platform/service/impl/PlatformDeviceSubMappingServiceImpl.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/platform/service/impl/PlatformDeviceSubMappingServiceImpl.java index 8e331fbe..873b6e0d 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/platform/service/impl/PlatformDeviceSubMappingServiceImpl.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/platform/service/impl/PlatformDeviceSubMappingServiceImpl.java @@ -8,7 +8,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.stream.Collectors; @@ -24,6 +28,25 @@ public class PlatformDeviceSubMappingServiceImpl extends ServiceImpl> selectByParentIds(List parentIds) { + if (parentIds == null || parentIds.isEmpty()) { + return Collections.emptyMap(); + } + List all = subMappingMapper.selectByParentIds(parentIds); + Map> grouped = new HashMap<>(); + for (PlatformDeviceSubMapping sub : all) { + Long pid = sub.getParentMappingId(); + if (pid == null) continue; + grouped.computeIfAbsent(pid, k -> new ArrayList<>()).add(sub); + } + // 保证请求的每个 parentId 都有 key,即便没有子映射也返回空列表,避免前端取到 undefined + for (Long pid : parentIds) { + grouped.putIfAbsent(pid, new ArrayList<>()); + } + return grouped; + } + @Override public List selectBySubSerialNumber(String subSerialNumber) { return subMappingMapper.selectBySubSerialNumber(subSerialNumber); diff --git a/fastbee-service/fastbee-iot-service/src/main/resources/mapper/iot/platform/PlatformDeviceSubMappingMapper.xml b/fastbee-service/fastbee-iot-service/src/main/resources/mapper/iot/platform/PlatformDeviceSubMappingMapper.xml index 783cc576..12a7d254 100644 --- a/fastbee-service/fastbee-iot-service/src/main/resources/mapper/iot/platform/PlatformDeviceSubMappingMapper.xml +++ b/fastbee-service/fastbee-iot-service/src/main/resources/mapper/iot/platform/PlatformDeviceSubMappingMapper.xml @@ -20,4 +20,14 @@ WHERE sub_serial_number = #{subSerialNumber} + + + diff --git a/yack-web/src/api/platform/deviceMapping.js b/yack-web/src/api/platform/deviceMapping.js index 380ee19f..920f19e4 100644 --- a/yack-web/src/api/platform/deviceMapping.js +++ b/yack-web/src/api/platform/deviceMapping.js @@ -28,6 +28,11 @@ export function listSubMappings(parentId) { return request({ url: `/platform/device-mapping/${parentId}/sub-mappings`, method: 'get' }) } +// 批量查询多个设备绑定的子设备映射,列表页展开行一次拉取,避免 N 次请求 +export function listSubMappingsBatch(parentIds) { + return request({ url: '/platform/device-mapping/sub-mappings/batch', method: 'get', params: { parentIds: parentIds.join(',') } }) +} + export function syncSubMappings(parentId, data) { return request({ url: `/platform/device-mapping/${parentId}/sub-mappings`, method: 'post', data }) } diff --git a/yack-web/src/views/platform/device-mapping/index.vue b/yack-web/src/views/platform/device-mapping/index.vue index 0b5f70e8..2a4aaa49 100644 --- a/yack-web/src/views/platform/device-mapping/index.vue +++ b/yack-web/src/views/platform/device-mapping/index.vue @@ -335,7 +335,7 @@