package warningconfig import ( "context" "errors" "strings" "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" ) func ParseInputRows(ctx context.Context, input string, itemType, warnUnit int) ([]batchimport.Row, error) { lines, err := text.ParseNonEmptyLines(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, ItemType: itemType} fields := parseInputFields(line.Text) if isCompleteInputRow(itemType, fields) { row.ConfigSet = true row.Config, err = parseInputConfig(itemType, warnUnit, fields[inputConfigOffset(itemType):]) if err != nil { row.AddErrorReason(err.Error()) } if itemType == warnItemTypeFlowPool { row.FlowPoolCode = strings.TrimSpace(fields[0]) } else { row.Iccid = strings.TrimSpace(fields[0]) row.Msisdn = strings.TrimSpace(fields[1]) row.Imsi = strings.TrimSpace(fields[2]) } rows = append(rows, row) continue } if itemType == warnItemTypeFlowPool { fields = strings.Fields(line.Text) if len(fields) == 1 { row.FlowPoolCode = fields[0] } else { row.AddErrorReason("格式错误,应为流量池编号") } rows = append(rows, row) continue } fields = strings.Fields(line.Text) switch len(fields) { case 1: row.Iccid = fields[0] case 3: row.Iccid = fields[0] row.Msisdn = fields[1] row.Imsi = fields[2] default: row.AddErrorReason("格式错误,应为 ICCID 或 ICCID MSISDN IMSI") } rows = append(rows, row) } return rows, nil } func parseInputFields(value string) []string { value = strings.TrimSpace(value) if strings.Contains(value, "|") { parts := strings.Split(value, "|") for i := range parts { parts[i] = strings.TrimSpace(parts[i]) } return parts } if strings.Contains(value, "\t") { parts := strings.Split(value, "\t") for i := range parts { parts[i] = strings.TrimSpace(parts[i]) } return parts } return nil } func inputConfigOffset(itemType int) int { if itemType == warnItemTypeFlowPool { return 1 } return 3 } func isCompleteInputRow(itemType int, fields []string) bool { if itemType == warnItemTypeFlowPool { return len(fields) == 9 } return len(fields) == 12 }