Описание
Требуется массово поменять страну клиентов. Например, с РФ на Казахстан. Это можно выполнить с помощью скрипта.
Как работает скрипт:
-
Проверяет корректность входных параметров:
- наличие двух аргументов: путь к файлу и код страны;
- существование указанного XLSX-файла;
- числовой формат id страны;
- наличие утилиты xlsx2csv для конвертации.
- Конвертирует XLSX-файл в CSV-формат во временный файл.
- Обрабатывает данные построчно:
- Пропускает заголовок CSV-файла.
- Извлекает ID из первого столбца.
- Проверяет валидность Id аккаунтов: поле не пустое и имеет числовой формат;
- Выполняет для каждого Id аккаунта команду смены страны.
- Формирует отчёт в консоли об успешно обработанных и ошибочных операциях.
Скрипт выведет следующие данные:
- прогресс обработки каждого ID;
- статус операций (успешно или ошибка);
- итоговую статистику по количеству операций.
Подготовка
Для скрипта потребуется:
- Утилита xlsx2csv.
- XLSX-файл с ID клиентов, для которых требуется замена страны. В файле должен присутствовать единственный столбец account_id;
- Id страны из BILLmanager. Чтобы проверить id страны, перейдите в раздел Справочники → Страны → столбец Id. Например, id Казахстана — 113.

Решение
Чтобы массово изменить страну клиентов:
- Подключитесь к серверу с платформой по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
- Установите xlsx2csv:
Ubuntu, Astra Linuxsudo apt install xlsx2csvAlmaLinuxsudo dnf install xlsx2csv - Создайте файл 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" - Сделайте файл исполняемым:
chmod +x process_ids.sh - Запустите скрипт:
./process_ids.sh /ваш/файл.xlsx 113Пояснения - Перезапустите платформу:
sudo /usr/local/mgr5/sbin/mgrctl -m billmgr -R - Проверьте, что данные клиентов обновились корректно. Перейдите в раздел Клиенты → Клиенты → выберите клиента → Изменить → поле Страна.
Может быть полезно
Связанные статьи: