Files
cmautobuy/admin/cmd/compare-shop-specs/main.go
T

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)
}