#!/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}"