83 lines
2.5 KiB
Go
83 lines
2.5 KiB
Go
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,
|
|
}
|
|
})
|
|
}
|