package cardsource import ( "context" "errors" "git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/library/batchimport" "git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/library/batchinput/text" "github.com/gogf/gf/v2/errors/gerror" ) type IccidLine struct { RowNo int Iccid string } type CardIdentityLine struct { RowNo int Iccid string Msisdn string Imsi string Imei string Reason string } func ParseIccidLines(ctx context.Context, input string) ([]IccidLine, error) { lines, err := text.ParseNonEmptyLines(ctx, input) if err != nil { return nil, err } result := make([]IccidLine, 0, len(lines)) for _, line := range lines { result = append(result, IccidLine{ RowNo: line.RowNo, Iccid: line.Text, }) } return result, nil } func ParseCardIdentityLines(ctx context.Context, input string) ([]CardIdentityLine, error) { lines, err := text.ParseWhitespaceFields(ctx, input) if err != nil { return nil, err } result := make([]CardIdentityLine, 0, len(lines)) for _, line := range lines { item := CardIdentityLine{RowNo: line.RowNo} switch len(line.Fields) { case 3: item.Iccid = line.Fields[0] item.Msisdn = line.Fields[1] item.Imsi = line.Fields[2] case 4: item.Iccid = line.Fields[0] item.Msisdn = line.Fields[1] item.Imsi = line.Fields[2] item.Imei = line.Fields[3] default: item.Reason = "格式错误,需为 ICCID MSISDN IMSI [IMEI]" } result = append(result, item) } return result, nil } func BuildIccidRows[T batchimport.Row](ctx context.Context, input, emptyMessage string, factory func(IccidLine) T) ([]batchimport.Row, error) { lines, err := ParseIccidLines(ctx, input) if err != nil { if errors.Is(err, text.ErrEmptyInput) { return nil, gerror.New(emptyMessage) } return nil, err } rows := make([]batchimport.Row, 0, len(lines)) for _, line := range lines { rows = append(rows, factory(line)) } return rows, nil } func BuildCardIdentityRows[T batchimport.Row](ctx context.Context, input, emptyMessage string, factory func(CardIdentityLine) T) ([]batchimport.Row, error) { lines, err := ParseCardIdentityLines(ctx, input) if err != nil { if errors.Is(err, text.ErrEmptyInput) { return nil, gerror.New(emptyMessage) } return nil, err } rows := make([]batchimport.Row, 0, len(lines)) for _, line := range lines { row := factory(line) row.AddErrorReason(line.Reason) rows = append(rows, row) } return rows, nil }