feat(03.1-01): 补全 Gateway SyncDeviceInfoResp 缺失字段及 B 端 DeviceGatewayInfo DTO
- SyncDeviceInfoResp 新增 Rsrp/Rsrq/Sinr/WifiPassword/IPAddress/WANIP/LANIP/MaxClients/ConnectTime/Status/IMSI/ULStats/DLStats/LimitSpeed/SyncInterval 共 15 个字段 - asset_dto.go 新增 DeviceGatewayInfo B 端实时状态结构体(49 字段,全部含 description tag) - AssetRealtimeStatusResponse 新增 DeviceRealtime *DeviceGatewayInfo 字段 - AssetResolveResponse 新增 5 个设备 DB 缓存字段(online_status/last_online_time/software_version/switch_mode/last_gateway_sync_at)
This commit is contained in:
@@ -158,4 +158,29 @@ type SyncDeviceInfoResp struct {
|
|||||||
LastOnlineTime string `json:"last_online_time" description:"设备最后在线时间(ISO 8601)"`
|
LastOnlineTime string `json:"last_online_time" description:"设备最后在线时间(ISO 8601)"`
|
||||||
RunTime string `json:"run_time" description:"本次开机运行时间(秒)"`
|
RunTime string `json:"run_time" description:"本次开机运行时间(秒)"`
|
||||||
DailyUsage string `json:"daily_usage" description:"日使用流量(字节)"`
|
DailyUsage string `json:"daily_usage" description:"日使用流量(字节)"`
|
||||||
|
|
||||||
|
// 信号相关(D-10 补全)
|
||||||
|
Rsrp int `json:"rsrp" description:"参考信号接收功率(dBm)"`
|
||||||
|
Rsrq int `json:"rsrq" description:"参考信号接收质量(dB)"`
|
||||||
|
Sinr int `json:"sinr" description:"信噪比(dB)"`
|
||||||
|
|
||||||
|
// WiFi 相关(D-10 补全)
|
||||||
|
WifiPassword string `json:"wifi_password" description:"WiFi密码"`
|
||||||
|
|
||||||
|
// 网络相关(D-10 补全)
|
||||||
|
IPAddress string `json:"ip_address" description:"IP地址"`
|
||||||
|
WANIP string `json:"wan_ip" description:"基站分配IPv4地址"`
|
||||||
|
LANIP string `json:"lan_ip" description:"局域网网关IP地址"`
|
||||||
|
|
||||||
|
// 连接相关(D-10 补全)
|
||||||
|
MaxClients int `json:"max_clients" description:"最大连接客户端数"`
|
||||||
|
ConnectTime string `json:"connect_time" description:"设备本次联网时间(秒)"`
|
||||||
|
|
||||||
|
// 设备属性(D-10 补全)
|
||||||
|
Status int `json:"status" description:"设备状态:1=正常,0=禁用"`
|
||||||
|
IMSI string `json:"imsi" description:"IMSI用户标识码"`
|
||||||
|
ULStats string `json:"ul_stats" description:"本次开机上传流量(字节)"`
|
||||||
|
DLStats string `json:"dl_stats" description:"本次开机下载流量(字节)"`
|
||||||
|
LimitSpeed int `json:"limit_speed" description:"限速速率(KB/s)"`
|
||||||
|
SyncInterval int `json:"sync_interval" description:"信息上报周期(秒)"`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,6 +40,12 @@ type AssetResolveResponse struct {
|
|||||||
DeviceType string `json:"device_type,omitempty" description:"设备类型"`
|
DeviceType string `json:"device_type,omitempty" description:"设备类型"`
|
||||||
MaxSimSlots int `json:"max_sim_slots,omitempty" description:"最大插槽数"`
|
MaxSimSlots int `json:"max_sim_slots,omitempty" description:"最大插槽数"`
|
||||||
Manufacturer string `json:"manufacturer,omitempty" description:"制造商"`
|
Manufacturer string `json:"manufacturer,omitempty" description:"制造商"`
|
||||||
|
// 设备 DB 缓存字段(Phase 3 sync-info 写入,展示上次同步快照)
|
||||||
|
OnlineStatus int `json:"online_status,omitempty" description:"在线状态:0未知 1在线 2离线(设备类型时有效)"`
|
||||||
|
LastOnlineTime *time.Time `json:"last_online_time,omitempty" description:"最后在线时间(设备类型时有效)"`
|
||||||
|
SoftwareVersion string `json:"software_version,omitempty" description:"固件版本号(设备类型时有效)"`
|
||||||
|
SwitchMode string `json:"switch_mode,omitempty" description:"切卡模式:0=自动,1=手动(设备类型时有效)"`
|
||||||
|
LastGatewaySyncAt *time.Time `json:"last_gateway_sync_at,omitempty" description:"最后 sync-info 同步时间(设备类型时有效)"`
|
||||||
// 卡专属字段(device类型时为零值)
|
// 卡专属字段(device类型时为零值)
|
||||||
CarrierID uint `json:"carrier_id,omitempty" description:"运营商ID"`
|
CarrierID uint `json:"carrier_id,omitempty" description:"运营商ID"`
|
||||||
CarrierType string `json:"carrier_type,omitempty" description:"运营商类型"`
|
CarrierType string `json:"carrier_type,omitempty" description:"运营商类型"`
|
||||||
@@ -66,14 +72,15 @@ type BoundCardInfo struct {
|
|||||||
|
|
||||||
// AssetRealtimeStatusResponse 资产实时状态(只读DB/Redis)
|
// AssetRealtimeStatusResponse 资产实时状态(只读DB/Redis)
|
||||||
type AssetRealtimeStatusResponse struct {
|
type AssetRealtimeStatusResponse struct {
|
||||||
AssetType string `json:"asset_type" description:"资产类型:card 或 device"`
|
AssetType string `json:"asset_type" description:"资产类型:card 或 device"`
|
||||||
AssetID uint `json:"asset_id" description:"资产ID"`
|
AssetID uint `json:"asset_id" description:"资产ID"`
|
||||||
NetworkStatus int `json:"network_status,omitempty" description:"网络状态(asset_type=card时有效):0停机 1开机"`
|
NetworkStatus int `json:"network_status,omitempty" description:"网络状态(asset_type=card时有效):0停机 1开机"`
|
||||||
RealNameStatus int `json:"real_name_status,omitempty" description:"实名状态(asset_type=card时有效):0未实名 1已实名"`
|
RealNameStatus int `json:"real_name_status,omitempty" description:"实名状态(asset_type=card时有效):0未实名 1已实名"`
|
||||||
CurrentMonthUsageMB float64 `json:"current_month_usage_mb,omitempty" description:"本月已用流量MB(asset_type=card时有效)"`
|
CurrentMonthUsageMB float64 `json:"current_month_usage_mb,omitempty" description:"本月已用流量MB(asset_type=card时有效)"`
|
||||||
LastSyncTime *time.Time `json:"last_sync_time,omitempty" description:"最后同步时间(asset_type=card时有效)"`
|
LastSyncTime *time.Time `json:"last_sync_time,omitempty" description:"最后同步时间(asset_type=card时有效)"`
|
||||||
DeviceProtectStatus string `json:"device_protect_status,omitempty" description:"保护期状态(asset_type=device时有效):none/stop/start"`
|
DeviceProtectStatus string `json:"device_protect_status,omitempty" description:"保护期状态(asset_type=device时有效):none/stop/start"`
|
||||||
Cards []BoundCardInfo `json:"cards,omitempty" description:"绑定卡状态列表(asset_type=device时有效)"`
|
Cards []BoundCardInfo `json:"cards,omitempty" description:"绑定卡状态列表(asset_type=device时有效)"`
|
||||||
|
DeviceRealtime *DeviceGatewayInfo `json:"device_realtime,omitempty" description:"设备实时状态(来自 Gateway sync-info,Gateway 失败时为 null)"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// AssetPackageResponse 资产套餐信息
|
// AssetPackageResponse 资产套餐信息
|
||||||
@@ -134,3 +141,54 @@ type DeviceIDRequest struct {
|
|||||||
type CardICCIDRequest struct {
|
type CardICCIDRequest struct {
|
||||||
ICCID string `path:"iccid" description:"卡ICCID" required:"true"`
|
ICCID string `path:"iccid" description:"卡ICCID" required:"true"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeviceGatewayInfo B端设备实时状态信息(来自 Gateway sync-info)
|
||||||
|
// 与 C 端 DeviceRealtimeInfo 独立,未来可展示更多技术字段
|
||||||
|
// 所有字段均为可选,Gateway 调用失败时整体为 null
|
||||||
|
type DeviceGatewayInfo struct {
|
||||||
|
// 设备状态
|
||||||
|
OnlineStatus *int `json:"online_status,omitempty" description:"在线状态:1=在线,2=离线"`
|
||||||
|
BatteryLevel *int `json:"battery_level,omitempty" description:"电池电量百分比(无电池时为null)"`
|
||||||
|
Status *int `json:"status,omitempty" description:"设备状态:1=正常,0=禁用"`
|
||||||
|
RunTime *string `json:"run_time,omitempty" description:"本次开机运行时间(秒)"`
|
||||||
|
ConnectTime *string `json:"connect_time,omitempty" description:"本次联网时间(秒)"`
|
||||||
|
LastOnlineTime *string `json:"last_online_time,omitempty" description:"设备最后在线时间"`
|
||||||
|
LastUpdateTime *string `json:"last_update_time,omitempty" description:"设备信息最后更新时间"`
|
||||||
|
|
||||||
|
// 信号相关
|
||||||
|
Rsrp *int `json:"rsrp,omitempty" description:"参考信号接收功率(dBm)"`
|
||||||
|
Rsrq *int `json:"rsrq,omitempty" description:"参考信号接收质量(dB)"`
|
||||||
|
Rssi *string `json:"rssi,omitempty" description:"接收信号强度"`
|
||||||
|
Sinr *int `json:"sinr,omitempty" description:"信噪比(dB)"`
|
||||||
|
|
||||||
|
// WiFi 相关
|
||||||
|
SSID *string `json:"ssid,omitempty" description:"WiFi热点名称"`
|
||||||
|
WifiEnabled *bool `json:"wifi_enabled,omitempty" description:"WiFi开关状态"`
|
||||||
|
WifiPassword *string `json:"wifi_password,omitempty" description:"WiFi密码"`
|
||||||
|
|
||||||
|
// 网络相关
|
||||||
|
IPAddress *string `json:"ip_address,omitempty" description:"IP地址"`
|
||||||
|
WANIP *string `json:"wan_ip,omitempty" description:"基站分配IPv4地址"`
|
||||||
|
LANIP *string `json:"lan_ip,omitempty" description:"局域网网关IP地址"`
|
||||||
|
MACAddress *string `json:"mac_address,omitempty" description:"MAC地址"`
|
||||||
|
|
||||||
|
// 流量与速率
|
||||||
|
DailyUsage *string `json:"daily_usage,omitempty" description:"日使用流量(字节)"`
|
||||||
|
DLStats *string `json:"dl_stats,omitempty" description:"本次开机下载流量(字节)"`
|
||||||
|
ULStats *string `json:"ul_stats,omitempty" description:"本次开机上传流量(字节)"`
|
||||||
|
LimitSpeed *int `json:"limit_speed,omitempty" description:"限速速率(KB/s)"`
|
||||||
|
|
||||||
|
// 设备属性
|
||||||
|
CurrentIccid *string `json:"current_iccid,omitempty" description:"当前使用的ICCID"`
|
||||||
|
MaxClients *int `json:"max_clients,omitempty" description:"最大连接客户端数"`
|
||||||
|
SoftwareVersion *string `json:"software_version,omitempty" description:"软件版本号"`
|
||||||
|
SwitchMode *string `json:"switch_mode,omitempty" description:"切卡模式:0=自动,1=手动"`
|
||||||
|
SyncInterval *int `json:"sync_interval,omitempty" description:"信息上报周期(秒)"`
|
||||||
|
|
||||||
|
// Gateway 标识字段
|
||||||
|
DeviceID *string `json:"device_id,omitempty" description:"Gateway设备ID(IMEI/SN)"`
|
||||||
|
DeviceName *string `json:"device_name,omitempty" description:"Gateway返回的设备名称"`
|
||||||
|
DeviceType *string `json:"device_type,omitempty" description:"Gateway返回的设备类型"`
|
||||||
|
IMEI *string `json:"imei,omitempty" description:"IMEI号"`
|
||||||
|
IMSI *string `json:"imsi,omitempty" description:"IMSI用户标识码"`
|
||||||
|
}
|
||||||
|
|||||||
@@ -35,7 +35,8 @@ func (s *Service) GetWallet(ctx context.Context, assetType string, assetID uint)
|
|||||||
wallet, err := s.assetWalletStore.GetByResourceTypeAndID(ctx, resourceType, assetID)
|
wallet, err := s.assetWalletStore.GetByResourceTypeAndID(ctx, resourceType, assetID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err == gorm.ErrRecordNotFound {
|
if err == gorm.ErrRecordNotFound {
|
||||||
return nil, errors.New(errors.CodeNotFound, "该资产暂无钱包记录")
|
// 暂无钱包记录属于正常业务状态(企业卡/未充值资产),返回 nil 而非错误
|
||||||
|
return nil, nil
|
||||||
}
|
}
|
||||||
return nil, errors.Wrap(errors.CodeDatabaseError, err, "查询钱包失败")
|
return nil, errors.Wrap(errors.CodeDatabaseError, err, "查询钱包失败")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user