56 lines
1.4 KiB
Go
56 lines
1.4 KiB
Go
// compare-shop-specs 生成指定蝦皮店铺与关联 PDD 商品的只读规格对比报告。
|
|
// 它只执行 SELECT,没有写库或 --apply 功能。
|
|
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"flag"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"strings"
|
|
"time"
|
|
|
|
"cmautobuy/admin/config"
|
|
"cmautobuy/admin/repository"
|
|
"cmautobuy/admin/service"
|
|
)
|
|
|
|
func main() {
|
|
shop := flag.String("shop", "", "要对比的蝦皮店铺名(精确匹配,必填)")
|
|
output := flag.String("output", "", "可选:把 JSON 报告写入本机文件;不填则输出到终端")
|
|
flag.Parse()
|
|
if strings.TrimSpace(*shop) == "" {
|
|
log.Fatal("必须通过 --shop 指定店铺名")
|
|
}
|
|
|
|
cfg, err := config.LoadDatabase()
|
|
if err != nil {
|
|
log.Fatalf("读取 MySQL 配置失败: %v", err)
|
|
}
|
|
db, err := repository.OpenMySQL(cfg)
|
|
if err != nil {
|
|
log.Fatalf("连接 MySQL 失败: %v", err)
|
|
}
|
|
defer db.Close()
|
|
|
|
sources, err := repository.ListShopSpecSources(db, *shop)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
report := service.CompareShopSpecs(*shop, sources, time.Now())
|
|
raw, err := json.MarshalIndent(report, "", " ")
|
|
if err != nil {
|
|
log.Fatalf("生成 JSON 报告失败: %v", err)
|
|
}
|
|
raw = append(raw, '\n')
|
|
if strings.TrimSpace(*output) == "" {
|
|
fmt.Print(string(raw))
|
|
return
|
|
}
|
|
if err := os.WriteFile(*output, raw, 0o600); err != nil {
|
|
log.Fatalf("写入本机报告失败: %v", err)
|
|
}
|
|
fmt.Printf("只读对比完成:%d 件商品,报告已写入 %s\n", report.Total, *output)
|
|
}
|