155 lines
7.1 KiB
Bash
Executable File
155 lines
7.1 KiB
Bash
Executable File
#!/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}"
|