#!/bin/bash # Пакетная миграция проектов по статусу # Цвета для вывода GREEN='\033[0;32m' RED='\033[0;31m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Параметры STATUS="${1:-completed}" BATCH_SIZE="${2:-50}" DRY_RUN="${3:-false}" echo "🚀 === ПАКЕТНАЯ МИГРАЦИЯ ПРОЕКТОВ ===" echo "" echo "📊 Параметры:" echo " • Статус: $STATUS" echo " • Размер пакета: $BATCH_SIZE проектов" echo " • Dry-run: $DRY_RUN" echo "" # Получаем список проектов для миграции PROJECT_LIST=$(mysql -u ci20465_72new -pEcY979Rn ci20465_72new -N -e " SELECT DISTINCT p.projectid FROM vtiger_project p INNER JOIN vtiger_senotesrel sr ON p.projectid = sr.crmid INNER JOIN vtiger_notes n ON sr.notesid = n.notesid WHERE n.filestatus = 1 AND p.projectstatus = '$STATUS' ORDER BY p.projectid LIMIT $BATCH_SIZE; " 2>/dev/null) if [ -z "$PROJECT_LIST" ]; then echo -e "${RED}❌ Нет проектов для миграции!${NC}" exit 1 fi # Подсчитываем количество проектов PROJECT_COUNT=$(echo "$PROJECT_LIST" | wc -l) echo -e "${GREEN}✅ Найдено проектов для миграции: $PROJECT_COUNT${NC}" echo "" # Счётчики CURRENT=0 SUCCESS=0 FAILED=0 # Создаём файл для статистики STATS_FILE="/var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/logs/batch_stats_$(date +%Y%m%d_%H%M%S).txt" echo "Batch Migration Statistics" > "$STATS_FILE" echo "Status: $STATUS" >> "$STATS_FILE" echo "Started: $(date)" >> "$STATS_FILE" echo "" >> "$STATS_FILE" # Мигрируем каждый проект for PROJECT_ID in $PROJECT_LIST; do CURRENT=$((CURRENT + 1)) echo -e "${YELLOW}[$CURRENT/$PROJECT_COUNT]${NC} Мигрируем проект $PROJECT_ID..." # Запускаем миграцию if [ "$DRY_RUN" = "true" ]; then RESULT=$(php /var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/migrate_project_files.php --dry-run --project=$PROJECT_ID 2>&1) else RESULT=$(php /var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/migrate_project_files.php --project=$PROJECT_ID 2>&1) fi # Проверяем результат if echo "$RESULT" | grep -q "МИГРАЦИЯ ЗАВЕРШЕНА"; then DOCS_SUCCESS=$(echo "$RESULT" | grep "Успешно:" | tail -1 | awk '{print $NF}') DOCS_TOTAL=$(echo "$RESULT" | grep "Всего документов:" | tail -1 | awk '{print $NF}') echo -e " ${GREEN}✅ Успешно: $DOCS_SUCCESS/$DOCS_TOTAL документов${NC}" SUCCESS=$((SUCCESS + 1)) echo "$PROJECT_ID: SUCCESS ($DOCS_SUCCESS/$DOCS_TOTAL)" >> "$STATS_FILE" else echo -e " ${RED}❌ Ошибка миграции${NC}" FAILED=$((FAILED + 1)) echo "$PROJECT_ID: FAILED" >> "$STATS_FILE" fi # Небольшая пауза между проектами sleep 1 done echo "" echo "📊 === ИТОГОВАЯ СТАТИСТИКА ===" echo -e "${GREEN}✅ Успешно: $SUCCESS проектов${NC}" echo -e "${RED}❌ Ошибок: $FAILED проектов${NC}" echo "" echo "📝 Детальная статистика: $STATS_FILE" # Записываем итоги echo "" >> "$STATS_FILE" echo "Finished: $(date)" >> "$STATS_FILE" echo "Success: $SUCCESS" >> "$STATS_FILE" echo "Failed: $FAILED" >> "$STATS_FILE"