fix(P): member视角设备列表改为按id升序, 修复常用设备因状态上报而跳位

- 根因: 设备列表按 update_time DESC 排序, APP控制一次即刷新update_time,
  导致被控设备跳到列表最前(如JD2BTSA跳到JD6BTSA前面)
- member(APP/小程序)按 id 升序(位置固定); admin(后台)保持 update_time DESC
- 已上线验证: member 返回顺序 301网关/JD2BTSA/JD6BTSA/...
This commit is contained in:
2995840376 2026-10-28 11:11:40 +08:00
parent 230b04e691
commit 8a11c78d22

View File

@ -154,8 +154,19 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> 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())) {