База знаний BILLmanager

Как массово изменить страну клиентов

Описание

Требуется массово поменять страну клиентов. Например, с РФ на Казахстан. Это можно выполнить с помощью скрипта. 

Как работает скрипт:

  1. Проверяет корректность входных параметров:

    • наличие двух аргументов: путь к файлу и код страны;
    • существование указанного XLSX-файла;
    • числовой формат id страны;
    • наличие утилиты xlsx2csv для конвертации.
  2. Конвертирует XLSX-файл в CSV-формат во временный файл.
  3. Обрабатывает данные построчно:
    1. Пропускает заголовок CSV-файла.
    2. Извлекает ID из первого столбца.
    3. Проверяет валидность Id аккаунтов: поле не пустое и имеет числовой формат;
    4. Выполняет для каждого Id аккаунта команду смены страны.
  4. Формирует отчёт в консоли об успешно обработанных и ошибочных операциях.

Скрипт выведет следующие данные:

  • прогресс обработки каждого ID;
  • статус операций (успешно или ошибка);
  • итоговую статистику по количеству операций.

Подготовка

Для скрипта потребуется:

  1. Утилита xlsx2csv.
  2. XLSX-файл с ID клиентов, для которых требуется замена страны. В файле должен присутствовать единственный столбец account_id;
  3. Id страны из BILLmanager. Чтобы проверить id страны, перейдите в раздел СправочникиСтраны → столбец Id. Например, id Казахстана — 113. 

Решение

Чтобы массово изменить страну клиентов:

  1. Подключитесь к серверу с платформой по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
  2. Установите xlsx2csv:
    Ubuntu, Astra Linux
    sudo apt install xlsx2csv
    AlmaLinux
    sudo dnf install xlsx2csv
  3. Создайте файл process_ids.sh со следующим содержимым:
    #!/bin/bash
    
    # Скрипт для выполнения команды billmgr для каждого ID из XLSX файла
    # Использование: ./script.sh <путь_к_файлу> <страна>
    
    # Проверка количества аргументов
    if [ $# -ne 2 ]; then
    echo "Использование: $0 <путь_к_xlsx_файлу> <код_страны>"
    echo "Пример: $0 /path/to/ids.xlsx 15"
    exit 1
    fi
    
    FILE_PATH="$1"
    COUNTRY="$2"
    
    # Проверка существования файла
    if [ ! -f "$FILE_PATH" ]; then
    echo "Ошибка: Файл '$FILE_PATH' не найден"
    exit 1
    fi
    
    # Проверка, что country - число
    if ! [[ "$COUNTRY" =~ ^[0-9]+$ ]]; then
    echo "Ошибка: Код страны должен быть числом"
    exit 1
    fi
    
    # Проверка наличия утилиты
    if ! command -v xlsx2csv &> /dev/null; then
    echo "Для работы скрипта необходима xlsx2csv"
    echo ": pip install xlsx2csv"
    exit 1
    fi
    
    # Функция для конвертации XLSX в CSV
    convert_xlsx_to_csv() {
    local xlsx_file="$1"
    
    if command -v xlsx2csv &> /dev/null; then
    xlsx2csv "$xlsx_file"
    else
    echo "Не найдена утилита для конвертации XLSX в CSV"
    exit 1
    fi
    }
    
    # Временный файл для CSV данных
    TEMP_CSV=$(mktemp)
    
    echo "Конвертация XLSX в CSV..."
    convert_xlsx_to_csv "$FILE_PATH" > "$TEMP_CSV"
    
    # Проверка успешности конвертации
    if [ $? -ne 0 ] || [ ! -s "$TEMP_CSV" ]; then
    echo "Ошибка при конвертации файла"
    rm -f "$TEMP_CSV"
    exit 1
    fi
    
    echo "Обработка ID из файла..."
    echo "Страна: $COUNTRY"
    echo "---"
    
    # Счётчики
    SUCCESS_COUNT=0
    ERROR_COUNT=0
    
    # Чтение CSV файла и обработка каждой строки
    {
    # Пропускаем заголовок
    read -r header
    
    while IFS=, read -r id other_columns; do
    # Убираем кавычки и лишние пробелы
    id=$(echo "$id" | sed 's/^"//; s/"$//; s/^[[:space:]]*//; s/[[:space:]]*$//')
    
    # Проверяем, что id не пустой и является числом
    if [ -n "$id" ] && [[ "$id" =~ ^[0-9]+$ ]]; then
    echo "Обработка ID: $id"
    
    # Выполняем команду
    if /usr/local/mgr5/sbin/mgrctl -m billmgr account.edit "elid=$id" "country=$COUNTRY" sok=ok; then
    echo "✓ Успешно обработан ID: $id"
    ((SUCCESS_COUNT++))
    else
    echo "✗ Ошибка при обработке ID: $id"
    ((ERROR_COUNT++))
    fi
    
    echo "---"
    else
    echo "Пропущена некорректная строка: $id"
    fi
    done
    } < "$TEMP_CSV"
    
    # Удаляем временный файл
    rm -f "$TEMP_CSV"
    
    echo "Обработка завершена:"
    echo "Успешно: $SUCCESS_COUNT"
    echo "Ошибок: $ERROR_COUNT"
  4. Сделайте файл исполняемым:
    chmod +x process_ids.sh
  5. Запустите скрипт:
    ./process_ids.sh /ваш/файл.xlsx 113
    Пояснения
  6. Перезапустите платформу:
    sudo /usr/local/mgr5/sbin/mgrctl -m billmgr -R
  7. Проверьте, что данные клиентов обновились корректно. Перейдите в раздел КлиентыКлиенты → выберите клиента → Изменить → поле Страна.
Может быть полезно
Дата последнего обновления статьи: 03.12.2025. Статья подготовлена техническими писателями ISPsystem