From 8a11c78d22f3cb6191acff87b0fbf54c95938806 Mon Sep 17 00:00:00 2001 From: 2995840376 <2995840376@xiaomi.com> Date: Wed, 28 Oct 2026 11:11:40 +0800 Subject: [PATCH] =?UTF-8?q?fix(P):=20member=E8=A7=86=E8=A7=92=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=88=97=E8=A1=A8=E6=94=B9=E4=B8=BA=E6=8C=89id?= =?UTF-8?q?=E5=8D=87=E5=BA=8F,=20=E4=BF=AE=E5=A4=8D=E5=B8=B8=E7=94=A8?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=9B=A0=E7=8A=B6=E6=80=81=E4=B8=8A=E6=8A=A5?= =?UTF-8?q?=E8=80=8C=E8=B7=B3=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 根因: 设备列表按 update_time DESC 排序, APP控制一次即刷新update_time, 导致被控设备跳到列表最前(如JD2BTSA跳到JD6BTSA前面) - member(APP/小程序)按 id 升序(位置固定); admin(后台)保持 update_time DESC - 已上线验证: member 返回顺序 301网关/JD2BTSA/JD6BTSA/... --- .../device/service/impl/DeviceServiceImpl.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/backend/iot-device/src/main/java/com/iot/device/service/impl/DeviceServiceImpl.java b/backend/iot-device/src/main/java/com/iot/device/service/impl/DeviceServiceImpl.java index fe7a17d..0d2cb11 100644 --- a/backend/iot-device/src/main/java/com/iot/device/service/impl/DeviceServiceImpl.java +++ b/backend/iot-device/src/main/java/com/iot/device/service/impl/DeviceServiceImpl.java @@ -154,8 +154,19 @@ public class DeviceServiceImpl extends ServiceImpl impleme .eq(StringUtils.hasText(query.getParentDeviceId()), Device::getParentDeviceId, query.getParentDeviceId()) .eq(query.getIsGateway() != null, Device::getIsGateway, query.getIsGateway()) // 产品维度过滤:支持按 productId 精确查,或按产品名/编码模糊查 - .eq(query.getProductId() != null && query.getProductId() > 0, Device::getProductId, query.getProductId()) - .orderByDesc(Device::getUpdateTime); + .eq(query.getProductId() != null && query.getProductId() > 0, Device::getProductId, query.getProductId()); + + // 排序策略按视角区分: + // - member(APP / 小程序):按 id 升序,设备位置固定。 + // 原先按 update_time desc,而设备每次上报状态/DP 都会刷新 update_time, + // 于是「点了 JD2BTSA 的开关 → 它立刻跳到 JD6BTSA 前面」,用户心智里 + // 常用设备的位置是固定的,不能因为一次操作就重排。 + // - admin(后台管理):按 update_time desc,最近更新的排前面,便于管理员排查。 + if (query.getOwnerId() != null && query.getOwnerId() > 0) { + wrapper.orderByAsc(Device::getId); + } else { + wrapper.orderByDesc(Device::getUpdateTime); + } // 按产品关键字过滤:先解析出匹配的 product_id 集合,再约束 device if (StringUtils.hasText(query.getProductKeyword())) {