82 lines
2.5 KiB
Go
82 lines
2.5 KiB
Go
package allocate
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"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"
|
|
|
|
"github.com/gogf/gf/v2/errors/gerror"
|
|
)
|
|
|
|
func ParseExcelFileRows(ctx context.Context, filePath string) ([]batchimport.Row, error) {
|
|
parsedRows, err := excel.ParseFile(ctx, filePath, excel.ParseOptions{
|
|
RequiredHeaders: []string{"ICCID"},
|
|
SingleSheet: true,
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
rows := make([]batchimport.Row, 0, len(parsedRows))
|
|
for _, parsed := range parsedRows {
|
|
row := &Row{
|
|
RowNo: parsed.RowNo,
|
|
Iccid: excel.Field(parsed, "ICCID"),
|
|
Msisdn: excel.Field(parsed, "MSISDN"),
|
|
Imsi: excel.Field(parsed, "IMSI"),
|
|
TargetDeptKey: firstExcelField(parsed, "目标客户编码", "客户编码", "TARGETDEPTKEY", "TARGET_CUSTOMER_CODE"),
|
|
TargetDeptName: firstExcelField(parsed, "目标客户名称", "客户名称", "TARGETDEPTNAME", "TARGET_CUSTOMER_NAME"),
|
|
Remark: firstExcelField(parsed, "划拨备注", "备注", "REMARK"),
|
|
}
|
|
if value := firstExcelField(parsed, "目标客户ID", "目标部门ID", "TARGETDEPTID", "TARGET_CUSTOMER_ID"); value != "" {
|
|
targetDeptID, parseErr := strconv.ParseInt(strings.TrimSpace(value), 10, 64)
|
|
if parseErr != nil || targetDeptID <= 0 {
|
|
row.AddErrorReason("目标客户ID格式错误")
|
|
} else {
|
|
row.TargetDeptId = targetDeptID
|
|
}
|
|
}
|
|
rows = append(rows, row)
|
|
}
|
|
return rows, nil
|
|
}
|
|
|
|
func ParseInputRows(ctx context.Context, input string, targetDeptID int64) ([]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, TargetDeptId: targetDeptID}
|
|
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 firstExcelField(row excel.ParsedRow, names ...string) string {
|
|
for _, name := range names {
|
|
if value := excel.Field(row, name); value != "" {
|
|
return value
|
|
}
|
|
}
|
|
return ""
|
|
}
|