diff --git a/deduplicate_customers.go b/deduplicate_customers.go new file mode 100644 index 0000000..e04d98c --- /dev/null +++ b/deduplicate_customers.go @@ -0,0 +1,80 @@ +package main + +import ( + "encoding/json" + "fmt" + "os" + "time" +) + +type Customer struct { + ID string `json:"id"` + CreatedAt time.Time `json:"createdAt"` + CustomerName string `json:"customerName"` + IntendedProduct string `json:"intendedProduct"` + Version string `json:"version"` + Description string `json:"description"` + Solution string `json:"solution"` + Type string `json:"type"` + Module string `json:"module"` + StatusProgress string `json:"statusProgress"` + Reporter string `json:"reporter"` +} + +func main() { + // 读取客户数据 + data, err := os.ReadFile("data/customers.json") + if err != nil { + fmt.Printf("读取文件失败: %v\n", err) + return + } + + var customers []Customer + if err := json.Unmarshal(data, &customers); err != nil { + fmt.Printf("解析JSON失败: %v\n", err) + return + } + + fmt.Printf("原始记录数: %d\n", len(customers)) + + // 使用map来去重,保留每个客户名称最新的记录 + customerMap := make(map[string]Customer) + + for _, customer := range customers { + existing, exists := customerMap[customer.CustomerName] + if !exists || customer.CreatedAt.After(existing.CreatedAt) { + customerMap[customer.CustomerName] = customer + } + } + + // 转换回切片 + deduplicatedCustomers := make([]Customer, 0, len(customerMap)) + for _, customer := range customerMap { + deduplicatedCustomers = append(deduplicatedCustomers, customer) + } + + fmt.Printf("去重后记录数: %d\n", len(deduplicatedCustomers)) + fmt.Printf("删除了 %d 条重复记录\n", len(customers)-len(deduplicatedCustomers)) + + // 备份原文件 + backupFile := "data/customers.json.backup" + if err := os.WriteFile(backupFile, data, 0644); err != nil { + fmt.Printf("备份文件失败: %v\n", err) + return + } + fmt.Printf("原文件已备份到: %s\n", backupFile) + + // 写入去重后的数据 + outputData, err := json.MarshalIndent(deduplicatedCustomers, "", " ") + if err != nil { + fmt.Printf("生成JSON失败: %v\n", err) + return + } + + if err := os.WriteFile("data/customers.json", outputData, 0644); err != nil { + fmt.Printf("写入文件失败: %v\n", err) + return + } + + fmt.Println("✅ 去重完成!") +}