优化备注与封禁
This commit is contained in:
+53
-2
@@ -43,7 +43,7 @@ func ParseUploadText(text string) (ParsedUpload, error) {
|
||||
if err != nil {
|
||||
return ParsedUpload{}, err
|
||||
}
|
||||
account.SecretKD, err = parseRequiredFloat(values, "绝密KD", "绝密kd")
|
||||
account.SecretKD, err = parseOptionalFloat(values, "绝密KD", "绝密kd")
|
||||
if err != nil {
|
||||
return ParsedUpload{}, err
|
||||
}
|
||||
@@ -51,10 +51,12 @@ func ParseUploadText(text string) (ParsedUpload, error) {
|
||||
if err != nil {
|
||||
return ParsedUpload{}, err
|
||||
}
|
||||
account.BanRecord = optionalDefault(firstValue(values, "封禁记录"), "无")
|
||||
banRaw := firstValue(values, "封禁记录")
|
||||
account.BanRecord = normalizeBanFlag(banRaw)
|
||||
account.CommonRegion = firstValue(values, "常用地区", "常用区域")
|
||||
account.ContactPhone = firstValue(values, "联系电话", "手机号", "电话")
|
||||
account.OwnerOnlineTime = firstValue(values, "号主在线时间", "在线时间")
|
||||
account.Remark = composeRemark(firstValue(values, "备注", "说明"), banRaw)
|
||||
|
||||
account.Currency.HafuCoin, err = parseRequiredFloat(values, "哈夫币纯币", "哈夫币")
|
||||
if err != nil {
|
||||
@@ -134,6 +136,43 @@ func optionalDefault(value, fallback string) string {
|
||||
return strings.TrimSpace(value)
|
||||
}
|
||||
|
||||
// normalizeBanFlag 只输出“有/无”,具体封禁历史放到备注。
|
||||
func normalizeBanFlag(value string) string {
|
||||
value = strings.TrimSpace(value)
|
||||
if value == "" || isNoBanRecord(value) {
|
||||
return "无"
|
||||
}
|
||||
return "有"
|
||||
}
|
||||
|
||||
func isNoBanRecord(value string) bool {
|
||||
value = strings.TrimSpace(value)
|
||||
switch value {
|
||||
case "无", "无封禁", "无封禁记录", "否", "没有", "none", "None", "NONE":
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// composeRemark 合并原文备注与封禁历史详情。
|
||||
func composeRemark(remark, banRaw string) string {
|
||||
remark = strings.TrimSpace(remark)
|
||||
banDetail := strings.TrimSpace(banRaw)
|
||||
if banDetail == "" || isNoBanRecord(banDetail) {
|
||||
return remark
|
||||
}
|
||||
// 如果原文已经是“有/无”,不当作详情追加
|
||||
if banDetail == "有" || banDetail == "是" || banDetail == "有封禁" || banDetail == "有封禁记录" {
|
||||
return remark
|
||||
}
|
||||
banLine := "封禁历史:" + banDetail
|
||||
if remark == "" {
|
||||
return banLine
|
||||
}
|
||||
return remark + "\n" + banLine
|
||||
}
|
||||
|
||||
func parseRequiredInt(values map[string]string, labels ...string) (int, error) {
|
||||
value := firstValue(values, labels...)
|
||||
if value == "" {
|
||||
@@ -170,6 +209,18 @@ func parseRequiredFloat(values map[string]string, labels ...string) (float64, er
|
||||
return number, nil
|
||||
}
|
||||
|
||||
func parseOptionalFloat(values map[string]string, labels ...string) (float64, error) {
|
||||
value := firstValue(values, labels...)
|
||||
if value == "" {
|
||||
return 0, nil
|
||||
}
|
||||
number, err := parseFloatText(value, false)
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf("%s 数字格式不正确:%s", labels[0], value)
|
||||
}
|
||||
return number, nil
|
||||
}
|
||||
|
||||
func parseRequiredRatio(values map[string]string, labels ...string) (float64, error) {
|
||||
value := firstValue(values, labels...)
|
||||
if value == "" {
|
||||
|
||||
@@ -66,3 +66,51 @@ func TestParseUploadTextMissingRequiredField(t *testing.T) {
|
||||
t.Fatal("ParseUploadText() expected error")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseUploadTextBanRecordAndRemark(t *testing.T) {
|
||||
text := `上号方式:QQ扫码
|
||||
哈夫币纯币:156
|
||||
段位:铂金
|
||||
等级:60
|
||||
保险格数:9
|
||||
每日消耗:10
|
||||
体力:7
|
||||
负重:7
|
||||
AWM子弹数量:80
|
||||
6头数量:13
|
||||
6甲数量:12
|
||||
皮肤:暗星
|
||||
绝密KD:0.2
|
||||
押金:350
|
||||
号主在线时间:11:00 至 00:00
|
||||
封禁记录:2026/01/23封禁3天 2026/01/26封禁一天
|
||||
常用地区:海南
|
||||
回收比例:1:47.0
|
||||
回收租金:332
|
||||
联系电话:15203616450
|
||||
备注:有语音封禁`
|
||||
parsed, err := ParseUploadText(text)
|
||||
if err != nil {
|
||||
t.Fatalf("ParseUploadText() error = %v", err)
|
||||
}
|
||||
if parsed.Account.BanRecord != "有" {
|
||||
t.Fatalf("BanRecord = %q, want 有", parsed.Account.BanRecord)
|
||||
}
|
||||
wantRemark := "有语音封禁\n封禁历史:2026/01/23封禁3天 2026/01/26封禁一天"
|
||||
if parsed.Account.Remark != wantRemark {
|
||||
t.Fatalf("Remark = %q, want %q", parsed.Account.Remark, wantRemark)
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseUploadTextNoBanKeepsEmptyRemark(t *testing.T) {
|
||||
parsed, err := ParseUploadText(sampleText)
|
||||
if err != nil {
|
||||
t.Fatalf("ParseUploadText() error = %v", err)
|
||||
}
|
||||
if parsed.Account.BanRecord != "无" {
|
||||
t.Fatalf("BanRecord = %q, want 无", parsed.Account.BanRecord)
|
||||
}
|
||||
if parsed.Account.Remark != "" {
|
||||
t.Fatalf("Remark = %q, want empty", parsed.Account.Remark)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ type ExternalAccountData struct {
|
||||
CommonRegion string `json:"commonRegion"`
|
||||
ContactPhone string `json:"contactPhone"`
|
||||
OwnerOnlineTime string `json:"ownerOnlineTime"`
|
||||
Remark string `json:"remark,omitempty"`
|
||||
Currency ExternalUploadCurrency `json:"currency"`
|
||||
DailyConsumption ExternalDailyConsumption `json:"dailyConsumption"`
|
||||
Inventory ExternalUploadInventory `json:"inventory"`
|
||||
|
||||
Reference in New Issue
Block a user