feat: 增加顺运宝店铺筛选 (#151)
This commit is contained in:
@@ -19,7 +19,7 @@ import (
|
||||
"cmautobuy/admin/spec"
|
||||
)
|
||||
|
||||
const mysqlSchemaVersion = 10
|
||||
const mysqlSchemaVersion = 11
|
||||
|
||||
// OpenMySQL 打开生产 MySQL 8 数据库。错误信息绝不包含完整 DSN 或密码。
|
||||
func OpenMySQL(cfg config.DatabaseConfig) (*sql.DB, error) {
|
||||
@@ -543,10 +543,50 @@ func MigrateMySQL(db *sql.DB) error {
|
||||
if _, err := db.Exec(`INSERT INTO schema_migrations (version, applied_at) VALUES (?, ?)`, 10, time.Now().UTC().Format(time.RFC3339Nano)); err != nil {
|
||||
return fmt.Errorf("记录 MySQL schema v10 失败: %w", err)
|
||||
}
|
||||
current = 10
|
||||
}
|
||||
if current < 11 {
|
||||
if err := migrateMySQLV11(db); err != nil {
|
||||
return fmt.Errorf("执行 MySQL schema v11 失败: %w", err)
|
||||
}
|
||||
if err := checkMySQLV11Shape(db); err != nil {
|
||||
return fmt.Errorf("MySQL schema v11 自检失败,未记录版本: %w", err)
|
||||
}
|
||||
if _, err := db.Exec(`INSERT INTO schema_migrations (version, applied_at) VALUES (?, ?)`, 11, time.Now().UTC().Format(time.RFC3339Nano)); err != nil {
|
||||
return fmt.Errorf("记录 MySQL schema v11 失败: %w", err)
|
||||
}
|
||||
}
|
||||
return CheckMySQLSchema(db)
|
||||
}
|
||||
|
||||
// migrateMySQLV11 增加顺运宝店铺列,并从保留的原始 JSON 回填历史数据。
|
||||
// DDL 和 UPDATE 都可重放:中断后再次启动只补缺列和仍为空的记录。
|
||||
func migrateMySQLV11(db *sql.DB) error {
|
||||
exists, err := mysqlColumnExists(db, "syb_orders", "shop_name")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !exists {
|
||||
if _, err := db.Exec(`ALTER TABLE syb_orders ADD COLUMN shop_name VARCHAR(500) NULL AFTER order_no`); err != nil {
|
||||
return fmt.Errorf("增加 syb_orders.shop_name 失败: %w", err)
|
||||
}
|
||||
}
|
||||
if _, err := db.Exec(`UPDATE syb_orders
|
||||
SET shop_name=NULLIF(TRIM(JSON_UNQUOTE(JSON_EXTRACT(
|
||||
IF(JSON_VALID(syb_data),syb_data,'{}'),'$.stock.shopName'))),'')
|
||||
WHERE shop_name IS NULL`); err != nil {
|
||||
return fmt.Errorf("回填顺运宝店铺名失败: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func checkMySQLV11Shape(db *sql.DB) error {
|
||||
if err := checkMySQLVarcharColumn(db, "syb_orders", "shop_name", 500, true, "utf8mb4_0900_ai_ci", ""); err != nil {
|
||||
return err
|
||||
}
|
||||
return checkMySQLNullDefault(db, "syb_orders", "shop_name")
|
||||
}
|
||||
|
||||
// migrateMySQLV10 修复曾在 v8/v9 开发中间状态记录过版本的数据库。
|
||||
// 两版迁移均逐项检查结构,v8 回填只处理空值,因此可安全重放;
|
||||
// 历史 v8/v9 版本记录保持不变,完整自检通过后再追加 v10。
|
||||
@@ -564,7 +604,10 @@ func checkMySQLV10Shape(db *sql.DB) error {
|
||||
if err := checkMySQLV8Shape(db); err != nil {
|
||||
return err
|
||||
}
|
||||
return checkMySQLV9Shape(db)
|
||||
if err := checkMySQLV9Shape(db); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func migrateMySQLV9(db *sql.DB) error {
|
||||
|
||||
Reference in New Issue
Block a user