From 1093c61ca586ba2b7b747576fcb97ac53d3cd645 Mon Sep 17 00:00:00 2001 From: 16337 <1633794139@qq.com> Date: Mon, 2 Mar 2026 16:48:58 +0800 Subject: [PATCH] =?UTF-8?q?feat(aiot):=20=E6=96=B0=E5=A2=9E=E8=BE=B9?= =?UTF-8?q?=E7=BC=98=E8=AE=BE=E5=A4=87=E5=88=86=E9=A1=B5/=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E7=AB=AF=E7=82=B9=EF=BC=8C=E4=BF=AE=E5=A4=8D=20backfi?= =?UTF-8?q?ll=20=E7=B1=BB=E5=9E=8B=E8=BD=AC=E6=8D=A2=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - AiEdgeDeviceController 新增 /page、/get、/statistics 端点供前端直调 - AiEdgeDeviceMapper 新增 queryPage、countByStatus、countAll 方法 - AiEdgeDeviceServiceImpl 使用 PageHelper 实现分页查询和统计 - 修复 backfill-device-id 的 String→Integer ClassCastException: renameDeviceId 改为 renameByDeviceId,用 device_id 定位行 Co-Authored-By: Claude Opus 4.6 --- .../aiot/controller/AiConfigController.java | 2 +- .../controller/AiEdgeDeviceController.java | 26 +++++++++++++++++++ .../iot/vmp/aiot/dao/AiEdgeDeviceMapper.java | 17 ++++++++++++ .../aiot/service/IAiEdgeDeviceService.java | 6 +++++ .../service/impl/AiEdgeDeviceServiceImpl.java | 20 ++++++++++++++ 5 files changed, 70 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/genersoft/iot/vmp/aiot/controller/AiConfigController.java b/src/main/java/com/genersoft/iot/vmp/aiot/controller/AiConfigController.java index a65103dc4..2c865231d 100644 --- a/src/main/java/com/genersoft/iot/vmp/aiot/controller/AiConfigController.java +++ b/src/main/java/com/genersoft/iot/vmp/aiot/controller/AiConfigController.java @@ -142,7 +142,7 @@ public class AiConfigController { // 将第一个设备改名为 "edge" AiEdgeDevice first = devices.get(0); String oldId = first.getDeviceId(); - edgeDeviceMapper.renameDeviceId(first.getId(), targetDeviceId); + edgeDeviceMapper.renameByDeviceId(oldId, targetDeviceId); result.put("device_action", "renamed"); result.put("old_device_id", oldId); log.info("[AiConfig] 已将设备 {} 改名为 {}", oldId, targetDeviceId); diff --git a/src/main/java/com/genersoft/iot/vmp/aiot/controller/AiEdgeDeviceController.java b/src/main/java/com/genersoft/iot/vmp/aiot/controller/AiEdgeDeviceController.java index 57218d9fc..038f7877e 100644 --- a/src/main/java/com/genersoft/iot/vmp/aiot/controller/AiEdgeDeviceController.java +++ b/src/main/java/com/genersoft/iot/vmp/aiot/controller/AiEdgeDeviceController.java @@ -2,6 +2,8 @@ package com.genersoft.iot.vmp.aiot.controller; import com.genersoft.iot.vmp.aiot.bean.AiEdgeDevice; import com.genersoft.iot.vmp.aiot.service.IAiEdgeDeviceService; +import com.genersoft.iot.vmp.vmanager.bean.WVPResult; +import com.github.pagehelper.PageInfo; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; @@ -9,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.Map; @Slf4j @RestController @@ -30,4 +33,27 @@ public class AiEdgeDeviceController { public AiEdgeDevice queryDetail(@PathVariable String deviceId) { return edgeDeviceService.queryByDeviceId(deviceId); } + + @Operation(summary = "边缘设备分页查询") + @GetMapping("/page") + public WVPResult> queryPage( + @RequestParam(defaultValue = "1") int pageNo, + @RequestParam(defaultValue = "20") int pageSize, + @RequestParam(required = false) String status) { + PageInfo pageInfo = edgeDeviceService.queryPage(pageNo, pageSize, status); + return WVPResult.success(pageInfo); + } + + @Operation(summary = "按设备ID查询") + @GetMapping("/get") + public WVPResult queryByParam(@RequestParam String deviceId) { + AiEdgeDevice device = edgeDeviceService.queryByDeviceId(deviceId); + return WVPResult.success(device); + } + + @Operation(summary = "设备统计") + @GetMapping("/statistics") + public WVPResult> statistics() { + return WVPResult.success(edgeDeviceService.getStatistics()); + } } diff --git a/src/main/java/com/genersoft/iot/vmp/aiot/dao/AiEdgeDeviceMapper.java b/src/main/java/com/genersoft/iot/vmp/aiot/dao/AiEdgeDeviceMapper.java index 79f60578f..37856f359 100644 --- a/src/main/java/com/genersoft/iot/vmp/aiot/dao/AiEdgeDeviceMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/aiot/dao/AiEdgeDeviceMapper.java @@ -36,4 +36,21 @@ public interface AiEdgeDeviceMapper { @Update("UPDATE wvp_ai_edge_device SET device_id=#{newDeviceId} WHERE id=#{id}") int renameDeviceId(@Param("id") Integer id, @Param("newDeviceId") String newDeviceId); + + @Update("UPDATE wvp_ai_edge_device SET device_id=#{newDeviceId} WHERE device_id=#{oldDeviceId}") + int renameByDeviceId(@Param("oldDeviceId") String oldDeviceId, @Param("newDeviceId") String newDeviceId); + + @Select({""}) + List queryPage(@Param("status") String status); + + @Select("SELECT COUNT(*) FROM wvp_ai_edge_device WHERE status=#{status}") + int countByStatus(@Param("status") String status); + + @Select("SELECT COUNT(*) FROM wvp_ai_edge_device") + int countAll(); } diff --git a/src/main/java/com/genersoft/iot/vmp/aiot/service/IAiEdgeDeviceService.java b/src/main/java/com/genersoft/iot/vmp/aiot/service/IAiEdgeDeviceService.java index 48aa405e8..228d53fdb 100644 --- a/src/main/java/com/genersoft/iot/vmp/aiot/service/IAiEdgeDeviceService.java +++ b/src/main/java/com/genersoft/iot/vmp/aiot/service/IAiEdgeDeviceService.java @@ -1,8 +1,10 @@ package com.genersoft.iot.vmp.aiot.service; import com.genersoft.iot.vmp.aiot.bean.AiEdgeDevice; +import com.github.pagehelper.PageInfo; import java.util.List; +import java.util.Map; public interface IAiEdgeDeviceService { @@ -13,4 +15,8 @@ public interface IAiEdgeDeviceService { List queryAll(); void checkOffline(); + + PageInfo queryPage(int page, int count, String status); + + Map getStatistics(); } diff --git a/src/main/java/com/genersoft/iot/vmp/aiot/service/impl/AiEdgeDeviceServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/aiot/service/impl/AiEdgeDeviceServiceImpl.java index 474bd117b..4d055f640 100644 --- a/src/main/java/com/genersoft/iot/vmp/aiot/service/impl/AiEdgeDeviceServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/aiot/service/impl/AiEdgeDeviceServiceImpl.java @@ -5,6 +5,8 @@ import com.alibaba.fastjson2.JSONObject; import com.genersoft.iot.vmp.aiot.bean.AiEdgeDevice; import com.genersoft.iot.vmp.aiot.dao.AiEdgeDeviceMapper; import com.genersoft.iot.vmp.aiot.service.IAiEdgeDeviceService; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; @@ -12,7 +14,9 @@ import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.HashMap; import java.util.List; +import java.util.Map; @Slf4j @Service @@ -82,4 +86,20 @@ public class AiEdgeDeviceServiceImpl implements IAiEdgeDeviceService { log.warn("[AiEdgeDevice] 标记{}台设备为离线", count); } } + + @Override + public PageInfo queryPage(int page, int count, String status) { + PageHelper.startPage(page, count); + List list = deviceMapper.queryPage(status); + return new PageInfo<>(list); + } + + @Override + public Map getStatistics() { + Map stats = new HashMap<>(); + stats.put("total", deviceMapper.countAll()); + stats.put("online", deviceMapper.countByStatus("online")); + stats.put("offline", deviceMapper.countByStatus("offline")); + return stats; + } }