package app import ( "context" "strings" "github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/frame/g" ) type legacyDiagnosisCard struct { ICCID string `orm:"iccid"` IMSI string `orm:"imsi"` MSISDN string `orm:"msisdn"` ChannelKey string `orm:"channel_id"` } // Legacy channel_id references yz_card_route.cd_id, which maps to chan_key. // The legacy route ID is not the new platform t_sim_channels.id. func queryLegacyDiagnosisCard(ctx context.Context, code string) (*legacyDiagnosisCard, error) { code = strings.TrimSpace(code) if code == "" { return nil, nil } if strings.TrimSpace(g.Cfg().MustGet(ctx, "database.legacyCard.link").String()) == "" { return nil, gerror.New("旧平台只读数据库未配置") } var cards []*legacyDiagnosisCard err := g.DB("legacyCard").Model("yz_card_info c").Ctx(ctx). InnerJoin("yz_card_route r", "r.cd_id = c.channel_id"). Fields("c.iccid,c.imsi,c.msisdn,r.cd_id AS channel_id"). Where("c.iccid = ? OR c.msisdn = ? OR c.imsi = ?", code, code, code). Limit(2).Scan(&cards) if err != nil { return nil, gerror.New("旧平台卡信息查询失败,请稍后重试") } if len(cards) > 1 { return nil, gerror.New("卡号对应多张卡,无法确定通道") } if len(cards) == 0 || strings.TrimSpace(cards[0].ChannelKey) == "" { return nil, nil } return cards[0], nil }