fix: 修正设备详情字段映射并增强设备列表展示

- DeviceItem: 修复 lon/lat 注解大小写导致经纬度恒为空的问题
- DeviceItem: 补全视联网(viot_*)与机卡协同上报(up_*)等缺失字段
- index.ftl: 设备详情弹窗补全字段展示,枚举值友好映射
- index.ftl: 设备列表重点标记测试设备(整行高亮+测试徽章)
- index.ftl: 新增"最近"列,按最后在线时间显示今天/昨天/前天/N天前

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-07-17 17:25:40 +08:00
co-authored by Claude
parent 0845c38b72
commit 8bd45a4813
2 changed files with 165 additions and 14 deletions
@@ -3,23 +3,27 @@ package com.yixiong.iot.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
/**
* 设备列表中单个设备的数据结构
* 设备详情 / 设备列表项的数据结构
* 字段对应 OneNET 平台 /device/detail 接口返回的 data 节点,
* 同时兼容 /device/list 列表项(列表仅返回部分字段,缺失字段为 null)。
*/
@Data
public class DeviceItem {
/** 设备 ID */
/** 设备 ID(平台返回 int/string,统一用 String 接收,避免前端 Long 精度丢失) */
private String did;
/** 产品 ID */
private String pid;
/** 接入协议2-MQTT4-LwM2M */
/** 接入协议,取值见 OneNET 接入协议取值说明表(如 51) */
@JsonProperty("access_pt")
private Integer accessPt;
/** 数据协议 */
/** 数据协议,取值见 OneNET 数据协议取值说明表 */
@JsonProperty("data_pt")
private Integer dataPt;
@@ -29,6 +33,10 @@ public class DeviceItem {
/** 设备描述 */
private String desc;
/** 设备鉴权信息 */
@JsonProperty("auth_info")
private String authInfo;
/**
* 设备状态
* 0-离线;1-在线;2-未激活
@@ -79,14 +87,20 @@ public class DeviceItem {
@JsonProperty("enable_status")
private Boolean enableStatus;
/** 经度 */
@JsonProperty("Lon")
/** 设备标签列表 */
private List<String> tags;
/** 经度(注意:平台返回小写 lon,勿用大写注解) */
@JsonProperty("lon")
private String lon;
/** 纬度 */
@JsonProperty("Lat")
/** 纬度(注意:平台返回小写 lat,勿用大写注解) */
@JsonProperty("lat")
private String lat;
/** 设备芯片信息 */
private Integer chip;
/** 设备资源自动订阅是否启用 */
private Boolean obsv;
@@ -100,17 +114,106 @@ public class DeviceItem {
/** 设备 IMSI 历史变更记录 */
@JsonProperty("imsi_old")
private java.util.List<String> imsiOld;
private List<String> imsiOld;
/** 设备 IMSI 最近一次修改时间 */
@JsonProperty("imsi_mt")
private String imsiMt;
/** 移动视联网设备唯一标识 */
// ===== 视联网设备字段 =====
/** 视频设备编码,视联网设备返回 */
@JsonProperty("viot_device_sn")
private String viotDeviceSn;
/** 移动视联网设备接入协议 */
/**
* 视频设备接入协议,视联网设备返回
* 1-GB28181 协议;2-千里眼协议
*/
@JsonProperty("viot_protocol")
private Integer viotProtocol;
/**
* 视频设备类型,视联网设备返回
* 1-IPC2-NVR
*/
@JsonProperty("viot_device_type")
private Integer viotDeviceType;
// ===== 视联网国标协议(GB28181)设备字段 =====
/** SIP 服务器 ID,国标摄像头设备返回 */
@JsonProperty("viot_sip_server_id")
private String viotSipServerId;
/** SIP 服务器域,国标摄像头设备返回 */
@JsonProperty("viot_sip_server_domain")
private String viotSipServerDomain;
/** SIP 服务器 IP,国标摄像头设备返回 */
@JsonProperty("viot_sip_server_ip")
private String viotSipServerIp;
/** SIP 服务器端口,国标摄像头设备返回 */
@JsonProperty("viot_sip_server_port")
private String viotSipServerPort;
/** 登录用户名,国标摄像头设备返回 */
@JsonProperty("viot_login_name")
private String viotLoginName;
/** 登录密码,国标摄像头设备返回 */
@JsonProperty("viot_login_pwd")
private String viotLoginPwd;
// ===== 视联网千里眼协议设备字段 =====
/** 设备 modelId,如:cmiot_E4702_002 */
@JsonProperty("viot_module_id")
private String viotModuleId;
/** 软件版本,如:2.860.20250512 */
@JsonProperty("viot_camera_app_version")
private String viotCameraAppVersion;
/** 固件版本,如:2.860.20250512 */
@JsonProperty("viot_firmware_version")
private String viotFirmwareVersion;
/** 千里眼设备 imeicmei),如:119094672043670 */
@JsonProperty("viot_imei")
private String viotImei;
// ===== 机卡协同设备上报字段(设备上报后返回) =====
/** 设备上报的 iccid,如:898604310000000000 */
@JsonProperty("up_iccid")
private String upIccid;
/** 设备上报的 msisdn,如:+8613800000000 */
@JsonProperty("up_msisdn")
private String upMsisdn;
/** 设备上报的 sn */
@JsonProperty("up_sn")
private String upSn;
/** 设备上报的 imei,如:119094672043670 */
@JsonProperty("up_imei")
private String upImei;
/** 设备上报的 imsi,如:460010000000000 */
@JsonProperty("up_imsi")
private String upImsi;
/** 设备上报的 mac,如:08:00:27:01:02:03 */
@JsonProperty("up_mac")
private String upMac;
/**
* 设备上报的网络类型
* 0-非蜂窝网;1-移动;2-电信;3-联通;4-广电
*/
@JsonProperty("up_network")
private Integer upNetwork;
}