Скрипт для автоматической блокировки юзеров кот-ые не платят

Форум для размещения материалов по реализации различных схем использования ПО, решению частых проблем и предупреждению частых ошибок
Закрыто
Unknown_Error
Сообщения: 263
Зарегистрирован: Вс ноя 20, 2005 14:41

Скрипт для автоматической блокировки юзеров кот-ые не платят

Сообщение Unknown_Error »

Всем привет :)
Написал маленький шелл скрипт, для блокировки юзеров, которые не платят! Имеется возможность делать исключения для некоторых юзеров.
Но требуется Ваша критика и предложения чтобы улучшить его.

Система выглядит следующим образом:
1) Скрипт заносится в крон или еще куда-нибудь, где он периодически запускается, по Вашему усмотрению (у меня это каждый месяц 5-го числа)

2) После старта, скрипт делает выборку юзеров из БД которые вносили хоть какой-нибудь платеж > 0, за определенный промежуток времени (указывается в скрипте FROM_DATE and TO_DATE). Далее записывает результат в файл (output.out)

3) Далее к списку юзеров которые вносили платеж добавляются id тех юзеров которым надо сделать исключения (из файла exclude.act, надо создать в ручную, и указать account_id юзеров через enter). Все это дело компануется в файл temp.out

4) Потом делаем выборку из БД всех юзеров, которые не заблокированы и не удалены (помещаем все это дело в accounts.out)

5) Далее компануем два файла temp.out и accounts.out, в результате чего получаем файл в котором будут аккаунты которые следует заблокировать (все это дело пишется в файл utbfile.out)

6) Все, считываем файл utbfile.out и с помощью программы u5sh.jar блокируем юзеров.

Вот скрипт:
#!/bin/bash


MYSQL="/usr/bin/mysql"
DB_NAME="UTM5"

FROM_DATE="`/bin/date +"%Y-%m"`-01 00:00:00"
TO_DATE="`/bin/date +"%Y-%m"`-05 23:59:59"


USERS_TO_BLOCK_FILE="utbfile.out"
TEMP_FILE="temp.out"
ACCOUNTS_FILE="accounts.out"
OUTPUT_FILE="output.out"
EXCLUDE_FILE="exclude.act"
LOG_FILE="blocker.log"

ECHO="/bin/echo"
CAT="/bin/cat"
SORT="/usr/bin/sort"
UNIQ="/usr/bin/uniq"

JAVA="/usr/bin/java"
BLOCKER="/usr/local/blocker/u5sh.jar"


# -------------- Creating log file ---------------

$ECHO "Today is: `date +"%F"`" > $LOG_FILE

# -------------- Selecting users from UTM5 which has been pay for this month --------

$MYSQL $DB_NAME -Bs -q --exec \
"SELECT account_id FROM payment_transactions WHERE (payment_enter_date BETWEEN UNIX_TIMESTAMP('$FROM_DATE') AND UNIX_TIMESTAMP('$TO_DATE')) AND payment_incurrency > 0;" \
> $OUTPUT_FILE 2>>$LOG_FILE

$ECHO " - Query was successful (1)" >> $LOG_FILE

# -------------- Creating file with unique id's -------------

$CAT $EXCLUDE_FILE $OUTPUT_FILE | $SORT | $UNIQ > $TEMP_FILE 2>>$LOG_FILE

$ECHO " - Unique file was created successful" >> $LOG_FILE

# -------------- Creating file with users accounts, where account exist and not blocked ----------------

$MYSQL $DB_NAME -Bs -q --exec \
"SELECT id FROM accounts WHERE (is_blocked LIKE 0) AND (is_deleted NOT LIKE 1);" \
> $ACCOUNTS_FILE 2>>$LOG_FILE

$ECHO " - Query was successful (2)" >> $LOG_FILE

# ------------- Creating file with accounts id to block -------------------

$CAT $TEMP_FILE $ACCOUNTS_FILE | $SORT | $UNIQ -u > $USERS_TO_BLOCK_FILE 2>>$LOG_FILE

$ECHO " - File with users to block was successfully created" >> $LOG_FILE


# ------------------- It's time to block bad users >=| -----------------

while read AID; do
$JAVA -jar $BLOCKER --ChangeAccount -aid $AID -block 256 2>>$LOG_FILE
wait
done < $USERS_TO_BLOCK_FILE


$ECHO " - Users successfully blocked `date +"%F"`" >> $LOG_FILE


exit 0

Я специально писал каждый раз в разные файло, чтобы потом легче было отлаживать... Хотя и лог практически везде пишется :)

У меня все это дело было свалено в одну папку :)



P.S.> Особая благодарность Magnum72, если бы не u5sh.jar, то не было бы ентого скриптега :)


Ваше мнение?

Аватара пользователя
Magnum72
Сообщения: 1947
Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:

Re: Скрипт для автоматической блокировки юзеров кот-ые не пл

Сообщение Magnum72 »

Unknown_Error писал(а):Всем привет :)
Написал маленький шелл скрипт, для блокировки юзеров, которые не платят! Имеется возможность делать исключения для некоторых юзеров.
Но требуется Ваша критика и предложения чтобы улучшить его.

Ваше мнение?
Программа для шаттла блин :)

вариант реализации:

Создаешь дополнительный параметр и для юзеров котрых не надо блочить записываешь туда 1, (доп параметры можно менять прямыми запросами в базу биллинг их не держит)

одним SQL запросом выбираешь пользователей которые не платили какойето время и имеющим доп параметр не равным 1
полученный данные с запроса сразу пихаешь консольке.

Unknown_Error
Сообщения: 263
Зарегистрирован: Вс ноя 20, 2005 14:41

Сообщение Unknown_Error »

Хотел, а потом подумал, да ну их в баню :-D
Как всегда какая-нибудь девочка забудет поставить метки и пипец :)

А вообще хотел уточнить.
Блокировка идет по account_id или user_id?

loki_
Сообщения: 46
Зарегистрирован: Вс фев 12, 2006 16:35

Сообщение loki_ »


Закрыто