package trafficcutoffconfig 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/excel" "git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/library/batchinput/text" "git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/logic/iot/simcardbatch/common/cardsource" "github.com/gogf/gf/v2/errors/gerror" ) const maxRangeRows = 100000 func ParseExcelFileRows(ctx context.Context, filePath string) ([]batchimport.Row, error) { parsedRows, err := excel.ParseFile(ctx, filePath, excel.ParseOptions{ RequiredHeaders: []string{"ICCID"}, }) if err != nil { return nil, err } rows := make([]batchimport.Row, 0, len(parsedRows)) for _, parsed := range parsedRows { rows = append(rows, &Row{ RowNo: parsed.RowNo, Iccid: excel.Field(parsed, "ICCID"), Msisdn: excel.Field(parsed, "MSISDN"), Imsi: excel.Field(parsed, "IMSI"), }) } return rows, nil } func ParseInputRows(ctx context.Context, input string) ([]batchimport.Row, error) { lines, err := text.ParseWhitespaceFields(ctx, input) if err != nil { if errors.Is(err, text.ErrEmptyInput) { return nil, gerror.New("批量输入达量断网配置数据为空") } return nil, err } rows := make([]batchimport.Row, 0, len(lines)) for _, line := range lines { row := &Row{RowNo: line.RowNo} switch len(line.Fields) { case 1: row.Iccid = line.Fields[0] case 3: row.Iccid = line.Fields[0] row.Msisdn = line.Fields[1] row.Imsi = line.Fields[2] default: row.AddErrorReason("格式错误,应为 ICCID 或 ICCID MSISDN IMSI") } rows = append(rows, row) } return rows, nil } func BuildRangeRows(ctx context.Context, startIccid, endIccid, startMsisdn, endMsisdn, startImsi, endImsi string) ([]batchimport.Row, error) { return cardsource.BuildRangeRows(ctx, cardsource.RangeConfig{ StartIccid: startIccid, EndIccid: endIccid, StartMsisdn: startMsisdn, EndMsisdn: endMsisdn, StartImsi: startImsi, EndImsi: endImsi, MaxRows: maxRangeRows, EmptyMessage: "连号达量断网配置数据为空", OverLimitMessage: "连号达量断网配置数量不能超过%d条", CountMismatchMessage: "ICCID号段数量(%d)、MSISDN号段数量(%d)、IMSI号段数量(%d)必须一致", }, func(rowNo int, iccid, msisdn, imsi string) *Row { return &Row{ RowNo: rowNo, Iccid: iccid, Msisdn: msisdn, Imsi: imsi, } }) }