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 "" }