qiangdanxitong/database/sync_database.sh

155 lines
7.1 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# ========================================
# DesignHub 数据库结构同步脚本
# 用途: 自动检测并添加缺失的表和字段
# 版本: v2.0
# ========================================
set -e
# 配置
DB_HOST="${DB_HOST:-localhost}"
DB_USER="${DB_USER:-root}"
DB_PASS="${DB_PASS:-DesignHub@2025_Root}"
DB_NAME="${DB_NAME:-designhub}"
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}DesignHub 数据库结构同步工具${NC}"
echo -e "${GREEN}========================================${NC}"
echo ""
# 检查字段是否存在的函数
check_column_exists() {
local table=$1
local column=$2
mysql -h"$DB_HOST" -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" -sN -e "
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA='$DB_NAME'
AND TABLE_NAME='$table'
AND COLUMN_NAME='$column'
" 2>/dev/null
}
# 添加字段的函数
add_column() {
local table=$1
local column=$2
local definition=$3
local after=$4
if [ -n "$after" ]; then
local sql="ALTER TABLE \`$table\` ADD COLUMN \`$column\` $definition AFTER \`$after\`;"
else
local sql="ALTER TABLE \`$table\` ADD COLUMN \`$column\` $definition;"
fi
echo -e "${YELLOW} 添加字段: ${table}.${column}${NC}"
mysql -h"$DB_HOST" -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" -e "$sql" 2>/dev/null
}
# 同步字段的主函数
sync_column() {
local table=$1
local column=$2
local definition=$3
local after=$4
if [ $(check_column_exists "$table" "$column") -eq 0 ]; then
add_column "$table" "$column" "$definition" "$after"
else
echo -e "${GREEN} ✓ 字段已存在: ${table}.${column}${NC}"
fi
}
echo -e "${GREEN}开始同步数据库结构...${NC}"
echo ""
# ========================================
# 同步 sys_user 表
# ========================================
echo -e "${GREEN}[1/7] 同步 sys_user 表${NC}"
sync_column "sys_user" "dept_name" "VARCHAR(100) NULL COMMENT '部门名称'" "dept_id"
sync_column "sys_user" "score" "INT DEFAULT 0 COMMENT '用户积分'" "status"
echo ""
# ========================================
# 同步 task 表
# ========================================
echo -e "${GREEN}[2/7] 同步 task 表${NC}"
sync_column "task" "third_party_task_no" "VARCHAR(100) NULL COMMENT '第三方平台任务编号'" "task_no"
sync_column "task" "task_type_ids" "VARCHAR(255) NULL COMMENT '任务类型ID列表(逗号分隔)'" "task_type_id"
sync_column "task" "score_reward" "INT DEFAULT 0 COMMENT '实际积分奖励'" "score"
sync_column "task" "estimated_duration" "INT NULL COMMENT '预估时长(小时)'" "estimated_hours"
sync_column "task" "demand_type_id" "BIGINT NULL COMMENT '需求类型ID'" "estimated_duration"
sync_column "task" "actual_start_time" "DATETIME NULL COMMENT '实际开始时间'" "start_time"
sync_column "task" "submit_time" "DATETIME NULL COMMENT '提交审核时间'" "complete_time"
sync_column "task" "actual_end_time" "DATETIME NULL COMMENT '实际结束时间'" "submit_time"
sync_column "task" "priority" "INT DEFAULT 0 COMMENT '优先级:0-低 1-普通 2-高 3-紧急'" "actual_end_time"
sync_column "task" "remark" "VARCHAR(500) NULL COMMENT '备注信息'" "priority"
sync_column "task" "is_pipeline" "TINYINT DEFAULT 0 COMMENT '是否流水线任务:0-否,1-是'" "delay_days"
sync_column "task" "pipeline_mode" "VARCHAR(20) NULL COMMENT '流水线模式:sequential(顺序)/parallel(并行)'" "is_pipeline"
sync_column "task" "approval_status" "VARCHAR(20) DEFAULT 'draft' COMMENT '审核状态:draft-草稿 pending_demand_approval-待需求审核 pending_receiving_approval-待接单审核 approved-已通过 rejected-已驳回'" "audit_status"
sync_column "task" "current_approver_id" "BIGINT NULL COMMENT '当前审核人ID'" "approval_status"
sync_column "task" "current_approver_role" "VARCHAR(50) NULL COMMENT '当前审核人角色'" "current_approver_id"
sync_column "task" "demand_approval_time" "DATETIME NULL COMMENT '需求部门审核时间'" "current_approver_role"
sync_column "task" "receiving_approval_time" "DATETIME NULL COMMENT '接单部门审核时间'" "demand_approval_time"
echo ""
# ========================================
# 同步 task_type 表
# ========================================
echo -e "${GREEN}[3/7] 同步 task_type 表${NC}"
sync_column "task_type" "allowed_dept_ids" "VARCHAR(255) NULL COMMENT '可接单部门ID列表(逗号分隔)'" "description"
echo ""
# ========================================
# 同步 category 表
# ========================================
echo -e "${GREEN}[4/7] 同步 category 表${NC}"
sync_column "category" "description" "VARCHAR(500) NULL COMMENT '描述'" "is_leaf"
echo ""
# ========================================
# 同步 team_score_pool 表
# ========================================
echo -e "${GREEN}[5/7] 同步 team_score_pool 表${NC}"
sync_column "team_score_pool" "dept_id" "BIGINT NULL COMMENT '部门ID(与team_id相同)'" "id"
sync_column "team_score_pool" "total_recharge" "INT DEFAULT 0 COMMENT '累计充值积分'" "balance"
sync_column "team_score_pool" "total_consume" "INT DEFAULT 0 COMMENT '累计消耗积分'" "total_recharge"
sync_column "team_score_pool" "total_earn" "INT DEFAULT 0 COMMENT '累计获得积分'" "total_consume"
sync_column "team_score_pool" "period_limit" "INT DEFAULT 0 COMMENT '周期限额'" "monthly_used"
sync_column "team_score_pool" "period_used" "INT DEFAULT 0 COMMENT '当前周期已消耗'" "period_limit"
sync_column "team_score_pool" "period_start_time" "DATETIME NULL COMMENT '当前周期开始时间'" "period_used"
sync_column "team_score_pool" "alert_threshold" "INT DEFAULT 80 COMMENT '预警阈值(百分比)'" "monthly_used"
sync_column "team_score_pool" "limit_enabled" "INT DEFAULT 0 COMMENT '是否启用限制:0-否 1-是'" "alert_threshold"
sync_column "team_score_pool" "limit_period" "VARCHAR(20) DEFAULT 'month' COMMENT '限制周期:day/week/month'" "limit_enabled"
echo ""
# ========================================
# 同步 achievement 表
# ========================================
echo -e "${GREEN}[6/7] 同步 achievement 表${NC}"
sync_column "achievement" "achievement_code" "VARCHAR(50) NULL COMMENT '成就代码'" "id"
sync_column "achievement" "achievement_name" "VARCHAR(100) NULL COMMENT '成就名称'" "achievement_code"
echo ""
# ========================================
# 同步 user_achievement 表
# ========================================
echo -e "${GREEN}[7/7] 同步 user_achievement 表${NC}"
sync_column "user_achievement" "progress_value" "INT NULL COMMENT '当前进度值'" "achievement_id"
sync_column "user_achievement" "reward_claimed" "INT DEFAULT 0 COMMENT '奖励是否已领取:0-否 1-是'" "progress_value"
sync_column "user_achievement" "claim_time" "DATETIME NULL COMMENT '领取时间'" "reward_claimed"
echo ""
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}数据库结构同步完成!${NC}"
echo -e "${GREEN}========================================${NC}"