From eb0d86df4f58b9a9256763bdf07efb3cecd5b1ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E8=BF=9B?= Date: Sat, 7 Nov 2026 17:33:28 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=AE=B0=E5=BD=95=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=89=AB=E6=8F=8F=E7=BB=93=E6=9E=84=E6=98=BE=E5=BC=8F=E6=8C=87?= =?UTF-8?q?=E5=AE=9A=E5=88=97=E5=90=8D=EF=BC=8C=E4=BF=AE=E5=A4=8D=20ICCID?= =?UTF-8?q?=20=E4=B8=80=E7=9B=B4=E4=B8=BA=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GORM 默认把字段 ICCID 映射成 icc_id,卡日流量的 c.iccid 和展示字段批量查询都读不到值; 扫描用的匿名结构统一写 gorm column tag。 --- internal/query/recorddisplay/lookup.go | 23 ++++++++++++----------- internal/service/asset/record_query.go | 13 +++++++------ 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/internal/query/recorddisplay/lookup.go b/internal/query/recorddisplay/lookup.go index a224d7e1..3e1fab3c 100644 --- a/internal/query/recorddisplay/lookup.go +++ b/internal/query/recorddisplay/lookup.go @@ -47,9 +47,10 @@ func Load(ctx context.Context, db *gorm.DB, req Request) (*Lookup, error) { session := db.WithContext(ctx).Unscoped() if ids := distinct(req.CardIDs); len(ids) > 0 { + // 显式列名:GORM 默认把字段 ICCID 映射成 icc_id,不写 tag 会读不到值。 var rows []struct { - ID uint - ICCID string + ID uint `gorm:"column:id"` + ICCID string `gorm:"column:iccid"` } if err := session.Model(&model.IotCard{}).Select("id, iccid").Where("id IN ?", ids).Scan(&rows).Error; err != nil { return nil, errors.Wrap(errors.CodeDatabaseError, err, "查询卡展示信息失败") @@ -60,9 +61,9 @@ func Load(ctx context.Context, db *gorm.DB, req Request) (*Lookup, error) { } if ids := distinct(req.DeviceIDs); len(ids) > 0 { var rows []struct { - ID uint - VirtualNo string - IMEI string + ID uint `gorm:"column:id"` + VirtualNo string `gorm:"column:virtual_no"` + IMEI string `gorm:"column:imei"` } if err := session.Model(&model.Device{}).Select("id, virtual_no, imei").Where("id IN ?", ids).Scan(&rows).Error; err != nil { return nil, errors.Wrap(errors.CodeDatabaseError, err, "查询设备展示信息失败") @@ -73,8 +74,8 @@ func Load(ctx context.Context, db *gorm.DB, req Request) (*Lookup, error) { } if ids := distinct(req.CarrierIDs); len(ids) > 0 { var rows []struct { - ID uint - CarrierName string + ID uint `gorm:"column:id"` + CarrierName string `gorm:"column:carrier_name"` } if err := session.Model(&model.Carrier{}).Select("id, carrier_name").Where("id IN ?", ids).Scan(&rows).Error; err != nil { return nil, errors.Wrap(errors.CodeDatabaseError, err, "查询运营商账户展示信息失败") @@ -85,8 +86,8 @@ func Load(ctx context.Context, db *gorm.DB, req Request) (*Lookup, error) { } if ids := distinct(req.OperatorIDs); len(ids) > 0 { var rows []struct { - ID uint - Username string + ID uint `gorm:"column:id"` + Username string `gorm:"column:username"` } if err := session.Model(&model.Account{}).Select("id, username").Where("id IN ?", ids).Scan(&rows).Error; err != nil { return nil, errors.Wrap(errors.CodeDatabaseError, err, "查询操作人展示信息失败") @@ -97,8 +98,8 @@ func Load(ctx context.Context, db *gorm.DB, req Request) (*Lookup, error) { } if ids := distinct(req.PackageUsageIDs); len(ids) > 0 { var rows []struct { - ID uint - PackageName string + ID uint `gorm:"column:id"` + PackageName string `gorm:"column:package_name"` } if err := session.Model(&model.PackageUsage{}).Select("id, package_name").Where("id IN ?", ids).Scan(&rows).Error; err != nil { return nil, errors.Wrap(errors.CodeDatabaseError, err, "查询套餐名称失败") diff --git a/internal/service/asset/record_query.go b/internal/service/asset/record_query.go index 1d37e68a..935b8bbe 100644 --- a/internal/service/asset/record_query.go +++ b/internal/service/asset/record_query.go @@ -257,10 +257,11 @@ func (s *Service) ListCardDailyUsages(ctx context.Context, req *dto.CardDailyUsa if err != nil || scope.empty() { return resp, err } + // 显式列名:GORM 默认把字段 ICCID 映射成 icc_id,不写 tag 时 ICCID 一直为空。 type row struct { model.CardFlowDay - ICCID string - CarrierID uint + ICCID string `gorm:"column:iccid"` + CarrierID uint `gorm:"column:carrier_id"` } query := s.db.WithContext(ctx).Table("tb_card_flow_day AS u"). Select("u.*, c.iccid, c.carrier_id").Joins("LEFT JOIN tb_iot_card c ON c.id = u.iot_card_id"). @@ -312,10 +313,10 @@ func (s *Service) ListPackageUsageDailyRecords(ctx context.Context, req *dto.Pac } type row struct { model.PackageUsageDailyRecord - PackageID uint - PackageName string - IotCardID uint - DeviceID uint + PackageID uint `gorm:"column:package_id"` + PackageName string `gorm:"column:package_name"` + IotCardID uint `gorm:"column:iot_card_id"` + DeviceID uint `gorm:"column:device_id"` } query := s.db.WithContext(ctx).Table("tb_package_usage_daily_record AS r"). Select("r.*, pu.package_id, pu.package_name, COALESCE(pu.iot_card_id, 0) AS iot_card_id, COALESCE(pu.device_id, 0) AS device_id").