feat(03.1-01): 修复静态 DTO 映射缺口

- toDeviceResponse() 补全 5 个 DB 缓存字段(OnlineStatus/LastOnlineTime/SoftwareVersion/SwitchMode/LastGatewaySyncAt)
- ListBindings() 补全 IsCurrent 字段映射
- buildDeviceResolveResponse() 补全 isCurrentMap + BoundCardInfo.IsCurrent + 5 个 DB 缓存字段
- GetRealtimeStatus() device case 补全 isCurrentMap + BoundCardInfo.IsCurrent
This commit is contained in:
2026-03-28 13:19:09 +08:00
parent 00dba42a63
commit 3b54850f1b
3 changed files with 17 additions and 0 deletions

View File

@@ -114,6 +114,11 @@ func (s *Service) buildDeviceResolveResponse(ctx context.Context, device *model.
DeviceType: device.DeviceType,
MaxSimSlots: device.MaxSimSlots,
Manufacturer: device.Manufacturer,
OnlineStatus: device.OnlineStatus,
LastOnlineTime: device.LastOnlineTime,
SoftwareVersion: device.SoftwareVersion,
SwitchMode: device.SwitchMode,
LastGatewaySyncAt: device.LastGatewaySyncAt,
}
// 查绑定卡
@@ -122,9 +127,11 @@ func (s *Service) buildDeviceResolveResponse(ctx context.Context, device *model.
resp.BoundCardCount = len(bindings)
cardIDs := make([]uint, 0, len(bindings))
slotMap := make(map[uint]int, len(bindings))
isCurrentMap := make(map[uint]bool, len(bindings))
for _, b := range bindings {
cardIDs = append(cardIDs, b.IotCardID)
slotMap[b.IotCardID] = b.SlotPosition
isCurrentMap[b.IotCardID] = b.IsCurrent
}
cards, _ := s.iotCardStore.GetByIDs(ctx, cardIDs)
for _, c := range cards {
@@ -135,6 +142,7 @@ func (s *Service) buildDeviceResolveResponse(ctx context.Context, device *model.
NetworkStatus: c.NetworkStatus,
RealNameStatus: c.RealNameStatus,
SlotPosition: slotMap[c.ID],
IsCurrent: isCurrentMap[c.ID],
})
}
}
@@ -271,9 +279,11 @@ func (s *Service) GetRealtimeStatus(ctx context.Context, assetType string, id ui
if err == nil && len(bindings) > 0 {
cardIDs := make([]uint, 0, len(bindings))
slotMap := make(map[uint]int, len(bindings))
isCurrentMap := make(map[uint]bool, len(bindings))
for _, b := range bindings {
cardIDs = append(cardIDs, b.IotCardID)
slotMap[b.IotCardID] = b.SlotPosition
isCurrentMap[b.IotCardID] = b.IsCurrent
}
cards, _ := s.iotCardStore.GetByIDs(ctx, cardIDs)
for _, c := range cards {
@@ -284,6 +294,7 @@ func (s *Service) GetRealtimeStatus(ctx context.Context, assetType string, id ui
NetworkStatus: c.NetworkStatus,
RealNameStatus: c.RealNameStatus,
SlotPosition: slotMap[c.ID],
IsCurrent: isCurrentMap[c.ID],
})
}
}

View File

@@ -57,6 +57,7 @@ func (s *Service) ListBindings(ctx context.Context, deviceID uint) (*dto.ListDev
CarrierName: card.CarrierName, // 直接使用 IotCard 的冗余字段
Status: card.Status,
BindTime: binding.BindTime,
IsCurrent: binding.IsCurrent,
}
responses = append(responses, resp)
}

View File

@@ -556,6 +556,11 @@ func (s *Service) toDeviceResponse(device *model.Device, shopMap map[uint]string
ActivatedAt: device.ActivatedAt,
CreatedAt: device.CreatedAt,
UpdatedAt: device.UpdatedAt,
OnlineStatus: device.OnlineStatus,
LastOnlineTime: device.LastOnlineTime,
SoftwareVersion: device.SoftwareVersion,
SwitchMode: device.SwitchMode,
LastGatewaySyncAt: device.LastGatewaySyncAt,
}
if device.ShopID != nil && *device.ShopID > 0 {