package cardsource import ( "context" "git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/library/batchimport" "git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/library/batchinput/numrange" "github.com/gogf/gf/v2/errors/gerror" ) type RangeConfig struct { StartIccid string EndIccid string StartMsisdn string EndMsisdn string StartImsi string EndImsi string MaxRows int EmptyMessage string OverLimitMessage string CountMismatchMessage string } func BuildRangeRows[T batchimport.Row](ctx context.Context, cfg RangeConfig, factory func(rowNo int, iccid, msisdn, imsi string) T) ([]batchimport.Row, error) { iccids, err := numrange.Build(ctx, cfg.StartIccid, cfg.EndIccid, "ICCID", cfg.MaxRows) if err != nil { return nil, err } msisdns, err := numrange.Build(ctx, cfg.StartMsisdn, cfg.EndMsisdn, "MSISDN", cfg.MaxRows) if err != nil { return nil, err } imsis, err := numrange.Build(ctx, cfg.StartImsi, cfg.EndImsi, "IMSI", cfg.MaxRows) if err != nil { return nil, err } if len(iccids) != len(msisdns) || len(iccids) != len(imsis) { return nil, gerror.Newf(cfg.CountMismatchMessage, len(iccids), len(msisdns), len(imsis)) } if len(iccids) == 0 { return nil, gerror.New(cfg.EmptyMessage) } if cfg.MaxRows > 0 && len(iccids) > cfg.MaxRows { return nil, gerror.Newf(cfg.OverLimitMessage, cfg.MaxRows) } rows := make([]batchimport.Row, 0, len(iccids)) for i := range iccids { if err = ctx.Err(); err != nil { return nil, err } rows = append(rows, factory(i+1, iccids[i], msisdns[i], imsis[i])) } return rows, nil }