package common import ( "context" "strings" "github.com/gogf/gf/v2/errors/gerror" "git.5iot.com/iotlcm-public/iotlcm-openapi/internal/dao" "git.5iot.com/iotlcm-public/iotlcm-openapi/internal/model/entity" ) type cardIdentifier struct { Msisdn string Iccid string Imsi string } func validateCardIdentifier(item cardIdentifier) error { count := 0 if strings.TrimSpace(item.Msisdn) != "" { count++ } if strings.TrimSpace(item.Iccid) != "" { count++ } if strings.TrimSpace(item.Imsi) != "" { count++ } if count == 0 { return gerror.New("msisdn、iccid、imsi至少传一个") } return nil } func cardIdentifierKey(item cardIdentifier) string { switch { case item.Iccid != "": return "iccid:" + item.Iccid case item.Msisdn != "": return "msisdn:" + item.Msisdn default: return "imsi:" + item.Imsi } } func cardMatchesIdentifier(card *entity.TSimCardInfo, identifier cardIdentifier) bool { if card == nil { return false } if identifier.Iccid != "" && strings.TrimSpace(card.Iccid) != identifier.Iccid { return false } if identifier.Msisdn != "" && strings.TrimSpace(card.Msisdn) != identifier.Msisdn { return false } if identifier.Imsi != "" && strings.TrimSpace(card.Imsi) != identifier.Imsi { return false } return true } func (s *sCommon) loadCardsByIdentifiers(ctx context.Context, tenantID string, deptIDs []int64, identifiers []cardIdentifier) (map[string]*entity.TSimCardInfo, error) { columns := dao.TSimCardInfo.Columns() result := make(map[string]*entity.TSimCardInfo, len(identifiers)) iccidValues := make([]string, 0) msisdnValues := make([]string, 0) imsiValues := make([]string, 0) for _, item := range identifiers { switch { case item.Iccid != "": iccidValues = append(iccidValues, item.Iccid) case item.Msisdn != "": msisdnValues = append(msisdnValues, item.Msisdn) case item.Imsi != "": imsiValues = append(imsiValues, item.Imsi) } } lookup := func(field string, values []string) error { if len(values) == 0 { return nil } var rows []*entity.TSimCardInfo query := dao.TSimCardInfo.Ctx(ctx). Where(columns.TenantId, tenantID). WhereIn(columns.DeptId, deptIDs). WhereIn(field, values). Fields(columns.Iccid, columns.Msisdn, columns.Imsi, columns.PackageTotalFlowMb, columns.UsedFlowMb, columns.CurrentPackageCode, columns.OutboundBatchNo, columns.TrafficCutoffStatus, columns.TrafficCutoffThreshold) if err := query.Scan(&rows); err != nil { return err } for _, row := range rows { if row == nil { continue } if row.Iccid != "" { result["iccid:"+strings.TrimSpace(row.Iccid)] = row } if row.Msisdn != "" { result["msisdn:"+strings.TrimSpace(row.Msisdn)] = row } if row.Imsi != "" { result["imsi:"+strings.TrimSpace(row.Imsi)] = row } } return nil } if err := lookup(columns.Iccid, iccidValues); err != nil { return nil, gerror.Wrap(err, "查询卡片失败") } if err := lookup(columns.Msisdn, msisdnValues); err != nil { return nil, gerror.Wrap(err, "查询卡片失败") } if err := lookup(columns.Imsi, imsiValues); err != nil { return nil, gerror.Wrap(err, "查询卡片失败") } return result, nil }