fix: 使用原始SKU辅助档口匹配 (#259)

This commit is contained in:
chengma
2026-08-18 15:25:58 +08:00
parent 103610a012
commit 4383bb87df
9 changed files with 237 additions and 33 deletions
+34 -2
View File
@@ -20,7 +20,7 @@ import (
"cmautobuy/admin/spec"
)
const mysqlSchemaVersion = 27
const mysqlSchemaVersion = 28
// OpenMySQL 打开生产 MySQL 8 数据库。错误信息绝不包含完整 DSN 或密码。
func OpenMySQL(cfg config.DatabaseConfig) (*sql.DB, error) {
@@ -748,9 +748,34 @@ func MigrateMySQL(db *sql.DB) error {
return fmt.Errorf("记录 MySQL schema v27 失败: %w", err)
}
}
if current < 28 {
if err := migrateMySQLV28(db); err != nil {
return fmt.Errorf("执行 MySQL schema v28 失败: %w", err)
}
if err := checkMySQLV28Shape(db); err != nil {
return fmt.Errorf("MySQL schema v28 自检失败,未记录版本: %w", err)
}
if _, err := db.Exec(`INSERT INTO schema_migrations (version, applied_at) VALUES (?, ?)`, 28, time.Now().UTC().Format(time.RFC3339Nano)); err != nil {
return fmt.Errorf("记录 MySQL schema v28 失败: %w", err)
}
}
return CheckMySQLSchema(db)
}
// migrateMySQLV28 保留 Excel 原始 SKU,作为确定性匹配的可审计证据。
func migrateMySQLV28(db *sql.DB) error {
exists, err := mysqlColumnExists(db, "syb_inner_code_records", "source_sku_raw")
if err != nil {
return err
}
if exists {
return nil
}
_, err = db.Exec(`ALTER TABLE syb_inner_code_records
ADD COLUMN source_sku_raw VARCHAR(500) COLLATE utf8mb4_bin NULL AFTER stall`)
return err
}
// migrateMySQLV27 保存多件档口入库码逐件远端检查点,不拆分新的业务表。
func migrateMySQLV27(db *sql.DB) error {
exists, err := mysqlColumnExists(db, "syb_inner_code_records", "remote_items_json")
@@ -2348,7 +2373,14 @@ func CheckMySQLSchema(db *sql.DB) error {
if err := checkMySQLV26Shape(db); err != nil {
return err
}
return checkMySQLV27Shape(db)
if err := checkMySQLV27Shape(db); err != nil {
return err
}
return checkMySQLV28Shape(db)
}
func checkMySQLV28Shape(db *sql.DB) error {
return checkMySQLVarcharColumn(db, "syb_inner_code_records", "source_sku_raw", 500, true, "utf8mb4_bin", "")
}
func checkMySQLV27Shape(db *sql.DB) error {