fix(seeds): 修复多门店种子数据互不干扰
Deploy / deploy (push) Successful in 1m14s

- S001.sql: 修复 INSERT IGNORE INTO 缺少空格的语法错误
- S002.sql: 重写为动态 @shop_id 模式,移除 TRUNCATE,改用 INSERT IGNORE INTO
- clear_shop.sql: 新增按 @shop_code 清空单店数据的参数化脚本
- scripts/dev.sh: seed 命令支持 --clear 参数(先清空再写入)
- seed.yml: 新增 clear 输入参数,支持按需清空后写入

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
wangjia
2026-05-24 13:52:47 +08:00
parent 8adb94a9a4
commit acf2b22201
5 changed files with 153 additions and 122 deletions
+28 -6
View File
@@ -36,12 +36,22 @@ WEB_PID_FILE="$LOG_DIR/web.pid"
mkdir -p "$LOG_DIR"
# ── seed 命令 ────────────────────────────────────────────────
# 用法: cmd_seed <shop_code>
# 从 backend/config/config.yaml 读取 DSN,执行 backend/seeds/<shop>.sql
# 用法: cmd_seed [--clear] <shop_code>
# 从 docker-compose.yml 读取容器信息,执行 backend/seeds/<shop>.sql
# --clear: 写入前先清空该门店所有数据
cmd_seed() {
local shop="${1:-}"
local clear=false
local shop=""
while [ $# -gt 0 ]; do
case "$1" in
--clear) clear=true ;;
*) shop="$1" ;;
esac
shift
done
if [ -z "$shop" ]; then
error "用法: sh scripts/dev.sh seed <shop_code> 示例: sh scripts/dev.sh seed H001"
error "用法: sh scripts/dev.sh seed [--clear] <shop_code> 示例: sh scripts/dev.sh seed S001"
exit 1
fi
@@ -64,6 +74,17 @@ cmd_seed() {
exit 1
fi
if [ "$clear" = "true" ]; then
local clear_file="$ROOT/backend/seeds/clear_shop.sql"
if [ ! -f "$clear_file" ]; then
error "清空脚本不存在: $clear_file"
exit 1
fi
info "清空 ${shop} 数据 → 容器 ${container} / ${db_name}"
{ printf "SET @shop_code='%s';\n" "$shop"; cat "$clear_file"; } \
| docker exec -i "$container" mysql --default-character-set=utf8mb4 -uroot -p"$db_pass" "$db_name"
fi
info "写入 ${shop} 种子数据 → 容器 ${container} / ${db_name}"
docker exec -i "$container" mysql --default-character-set=utf8mb4 -uroot -p"$db_pass" "$db_name" < "$sql_file"
success "${shop} 种子数据写入完成"
@@ -107,7 +128,8 @@ show_help() {
echo " --web-only 仅启动前端(Web"
echo ""
echo "数据库命令:"
echo " seed <shop_code> 清空并写入指定门店测试数据(如 H001"
echo " seed <shop_code> 写入指定门店测试数据(如 S001"
echo " seed --clear <shop> 先清空再写入(单店)"
echo " reset 删表重建(AutoMigrate"
echo " clear 清空所有业务数据"
echo ""
@@ -135,7 +157,7 @@ case "$COMMAND" in
esac
;;
seed)
cmd_seed "${2:-}"
cmd_seed "${2:-}" "${3:-}"
exit 0
;;
reset)