81 lines
2.2 KiB
Go
81 lines
2.2 KiB
Go
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("✅ 去重完成!")
|
|
}
|