Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?PHP
- define('MYSQL_ACCOUNT_FILED','account_id');
- define('ACCOUNT_PREFIX','');
- define('ACCOUNT_POSTFIX',' INTERNET');
- $debug = 0;
- if ($debug) error_reporting(E_ALL);
- require_once (dirname(__FILE__).'/config.php');
- require_once (dirname(__FILE__).'/lib/class_db.php');
- require_once (dirname(__FILE__).'/lib/str_func.php');
- // Функция, разбирающая Ф. И. О. на три поля
- function get_fio($s, $z) {
- $res = array();
- $s = trim($s);
- $fio = explode(' ',$s);
- if (count($fio)==3 and $z==0) {
- $res[0] = $fio[0];
- $res[1] = $fio[1];
- $res[2] = $fio[2];
- }
- else {
- $res[0] = $s;
- $res[1] = '';
- $res[2] = '';
- }
- return $res;
- }
- // Форматируем телефонные номера
- function get_phone_string($phones) {
- if ($phones <> '') {
- $trans = array(" " => "", ";" => ",", "+7" => "", "-" => "", "!" => ""); // удаляем в номере телефона пробелы, дефизы, +7...
- $result = strtr($phones, $trans);
- return $result;
- }
- else {
- return $phones;
- }
- }
- // Функция преобразования статуса Интернета и кода блокировки лицевого счета абонента UTM в текстовое описание
- function get_status($o, $p) {
- // Описание типов блокировок лицевого счета абонента
- // http://www.netup.ru/UTM5/documentation/008/Base_rus.html
- switch ($p) {
- case 0: $IS_BLOCKED = 'Блокировок нет';break;
- case 16: $IS_BLOCKED = 'Системная блокировка';break;
- case 48: $IS_BLOCKED = 'Системная блокировка с перерасчетом абонентской платы';break;
- case 80: $IS_BLOCKED = 'Системная блокировка с перерасчетом трафика';break;
- case 112: $IS_BLOCKED = 'Системная блокировка с перерасчетом абонентской платы и трафика';break;
- case 256: $IS_BLOCKED = 'Административная блокировка';break;
- case 768: $IS_BLOCKED = 'Административная блокировка с перерасчетом абонентской платы';break;
- case 1280: $IS_BLOCKED = 'Административная блокировка с перерасчетом трафика';break;
- case 1792: $IS_BLOCKED = 'Административная блокировка с перерасчетом абонентской платы и трафика';break;
- case 4112: $IS_BLOCKED = 'Системная блокировка по квоте';break;
- case 4144: $IS_BLOCKED = 'Системная блокировка по квоте с перерасчетом абонентской платы';break;
- case 4176: $IS_BLOCKED = 'Системная блокировка по квоте с перерасчетом трафика';break;
- case 4208: $IS_BLOCKED = 'Системная блокировка по квоте с перерасчетом абонентской платы и трафика';break;
- default: $IS_BLOCKED = 'Неизвестное состояние лицевого счета';
- }
- if ($o) {
- $CUST_STATE_DESCR = 'Включен';
- }
- else {
- $CUST_STATE_DESCR = 'Выключен. '.$IS_BLOCKED;
- }
- return $CUST_STATE_DESCR;
- }
- // Функция раскрашивания строки в зависимости от того включен Интернет или нет
- function get_row_color($int_status) {
- if ($int_status) {
- $HIS_COLOR = '$00DDFFDD'; // зеленый фон для включенных абонентов
- }
- else {
- $HIS_COLOR = '$00DDDDFF'; // красный фон для выключенных абонентов
- }
- return $HIS_COLOR;
- }
- $fb_session = new fbsql_db(FB_HOST, FB_DB, FB_USER, FB_PASS, 'UTF8');
- $my_session = new mysql_db(UTM_DB_HOST, UTM_DB_NAME, UTM_DB_USER, UTM_DB_PASS);
- // mysql_query('set names utf8');
- // перенес эту строчку в файл class_db.php в функцию mysql_db()
- // у меня без нее вся кириллица значками вопроса
- // Начало текущего месяца
- $start_date = date('Y-m-01');
- $exists_in_utm = array(); // массив абонентов UTM для проверки отсутствия абонентов из Атирры в UTM
- $mysql = "SELECT users.id,
- users_accounts.account_id,
- users.login,
- users.full_name,
- users.work_telephone,
- users.home_telephone,
- users.mobile_telephone,
- users.is_juridical,
- users.house_id,
- users.flat_number,
- users.entrance,
- users.floor,
- users.remote_switch_id,
- users.port_number,
- users.create_date,
- users.last_change_date,
- users.connect_date,
- accounts.is_blocked,
- accounts.int_status,
- accounts.balance,
- accounts.credit,
- account_tariff_link.tariff_id,
- account_tariff_link.next_tariff_id,
- account_tariff_link.discount_period_id,
- (select tariffs.name from tariffs where tariffs.id = account_tariff_link.tariff_id) as current_tariff,
- (select tariffs.name from tariffs where tariffs.id = account_tariff_link.next_tariff_id) as next_tariff,
- (select tariffs.comments from tariffs where tariffs.id = account_tariff_link.tariff_id) as current_tariff_comment,
- (select tariffs.comments from tariffs where tariffs.id = account_tariff_link.next_tariff_id) as next_tariff_comment
- FROM
- users, accounts, account_tariff_link, users_accounts
- WHERE
- users.is_deleted = 0
- AND accounts.id = users_accounts.account_id
- AND accounts.is_deleted = 0
- AND account_tariff_link.account_id = accounts.id
- AND account_tariff_link.is_deleted = 0
- AND users_accounts.uid = users.id
- ORDER BY
- users.id";
- $myres = $my_session ->select_assoc_all($mysql);
- $houses = array();
- $sql = "select h.HOUSE_ID, H.HOUSE_CODE from house h"; // получаем из БД Атирры список домов с их кодами
- $fbres = $fb_session->select_assoc_all($sql);
- foreach($fbres as $row) {
- $houses[$row['HOUSE_CODE']] = $row['HOUSE_ID']; // тут строим массив, содержаищий соответствие кода дома и его id
- }
- foreach($myres as $myrow) {
- $a = ACCOUNT_PREFIX.$myrow[MYSQL_ACCOUNT_FILED].ACCOUNT_POSTFIX; // генерируем номер лицевого счета с суффиксом INTERNET
- $exists_in_utm[$a] = $myrow[MYSQL_ACCOUNT_FILED];
- $house = $myrow['house_id'];
- $sql = "SELECT
- C.CUSTOMER_ID,
- H.HOUSE_CODE,
- C.FLAT_NO,
- C.FIRSTNAME,
- C.SURNAME,
- C.MIDLENAME,
- C.HOUSE_ID,
- C.JURIDICAL,
- C.DOGOVOR_NO,
- C.CONTRACT_DATE,
- C.VALID_TO,
- C.ACTIVIZ_DATE,
- C.PORCH_N,
- C.FLOOR_N,
- C.DEBT_SUM,
- C.PREPAY,
- C.NOTICE,
- C.CUST_STATE,
- C.CUST_STATE_DESCR,
- C.HIS_COLOR,
- C.PHONE_NO,
- C.MOBILE_PHONE
- FROM CUSTOMER C INNER JOIN HOUSE H ON (C.HOUSE_ID = H.HOUSE_ID)
- WHERE C.ACCOUNT_NO = '$a'"; // смотрим абонента в БД Атирры с таким лицевым
- $atrcust = $fb_session->select_assoc_all($sql);
- if (count($atrcust) == 0) { // если абонента нет, то добавим
- if (array_key_exists($house, $houses)) { // если id дома в БД Атирры есть, то...
- $fio = get_fio($myrow['full_name'], $myrow['is_juridical']); // парсим Ф.И.О.
- $HOUSE_ID = $houses[$house]; // id дома
- $ACCOUNT_NO = $a; // номер лицевого счета с суффиксом INTERNET
- $SURNAME = $fio[0]; // фамилия
- $FIRSTNAME = $fio[1]; // имя
- $MIDLENAME = $fio[2]; // отчество
- $PHONE_NO = get_phone_string($myrow['home_telephone']); // домашний телефон
- $MOBILE_PHONE = get_phone_string($myrow['mobile_telephone']); // мобильный телефон
- $FLAT_NO = $myrow['flat_number']; // номер квартиры
- $JURIDICAL = $myrow['is_juridical']; // 0 - физ. лица, 1 - юр. лица
- $DOGOVOR_NO = $myrow['id']; // номер договора
- $CONTRACT_DATE = date('Y-m-d', $myrow['create_date']); // дата договора
- $ACTIVIZ_DATE = date('Y-m-d', $myrow['connect_date']); // дата подключения
- $PORCH_N = $myrow['entrance']; // номер подъезда
- $FLOOR_N = $myrow['floor']; // этаж
- $BALANCE = round($myrow['balance'], 2); // баланс лицевого счета в UTM
- $PREPAY = round($myrow['credit'], 2); // обещанный платеж
- $NOTICE = 'Текущий тариф: '.$myrow['current_tariff'].' ('.$myrow['current_tariff_comment'].')'.PHP_EOL.'Следующий тариф: '.$myrow['next_tariff'].' ('.$myrow['next_tariff_comment'].')'; // примечание (текущий и следующий ТП)
- $CUST_STATE = $myrow['int_status']; // статус Интернета
- $CUST_STATE_DESCR = get_status($myrow['int_status'], $myrow['is_blocked']); // расшифровываем статус
- $HIS_COLOR = get_row_color($myrow['int_status']); // цвет фона строки
- $sql = "insert into CUSTOMER (
- HOUSE_ID,
- ACCOUNT_NO,
- SURNAME,
- FIRSTNAME,
- MIDLENAME,
- FLAT_NO,
- JURIDICAL,
- DOGOVOR_NO,
- CONTRACT_DATE,
- ACTIVIZ_DATE,
- PORCH_N,
- FLOOR_N,
- PREPAY,
- NOTICE,
- CUST_STATE,
- CUST_STATE_DESCR,
- HIS_COLOR,
- PHONE_NO,
- MOBILE_PHONE)
- values (
- '$HOUSE_ID',
- '$ACCOUNT_NO',
- '$SURNAME',
- '$FIRSTNAME',
- '$MIDLENAME',
- '$FLAT_NO',
- '$JURIDICAL',
- '$DOGOVOR_NO',
- '$CONTRACT_DATE',
- '$ACTIVIZ_DATE',
- '$PORCH_N',
- '$FLOOR_N',
- '$PREPAY',
- '$NOTICE',
- '$CUST_STATE',
- '$CUST_STATE_DESCR',
- '$HIS_COLOR',
- '$PHONE_NO',
- '$MOBILE_PHONE')";
- $fb_session->exec_modify_sql($sql);
- // тут добавляем атрибут "ИНТЕРНЕТ" вновь добавленному абоненту
- $sql = "SELECT C.CUSTOMER_ID FROM CUSTOMER C WHERE C.ACCOUNT_NO = '$a'"; // узнаем ID абонента, чтоб добавить ему атрибут
- $atrcustid = $fb_session->select_assoc_all($sql);
- $cust_id = $atrcustid[0];
- $CUSTOMER_ID = $cust_id['CUSTOMER_ID'];
- $NOTICE = 'Добавлен автоматически из биллинга UTM';
- $sql = "insert into CUSTOMER_ATTRIBUTES (
- CUSTOMER_ID,
- O_ID,
- NOTICE)
- values (
- '$CUSTOMER_ID',
- '234',
- '$NOTICE')"; // 234 - в моей БД id атрибута "ИНТЕРНЕТ". В вашей БД наверняка будет другой
- $fb_session->exec_modify_sql($sql);
- // Если баланс в UTM не ноль, то добавляем новому абоненту услугу синхронизации баланса
- if ($BALANCE <> 0) {
- $discount = round($BALANCE*'-1',2);
- $sql = "select ERROR, SALDO from MIGRATE_SERVICE_BY_ACCOUNT('$a',
- '20188', '$discount', '$start_date')"; // 20188 - разовая услуга "Начисления в биллинге UTM"
- $res = $fb_session->exec_modify_sql_with_result($sql);
- }
- }
- else {
- // Тут мылим себе письмо с сообщением о проблеме
- $body = "В БД Атирры не найден дом с кодом $house.".PHP_EOL
- ."Необходимо найти в UTM этот дом, и указать его ID в поле КОД ДОМА в справочнике Атирры.".PHP_EOL
- ."В противном случае абоненты, проживающие в этом доме не будут добавлены в БД Атирры.";
- mailinform($body);
- }
- }
- else {
- // проверка на предмет изменений сведений об абоненте
- $atr_ab = $atrcust[0];
- $fio = get_fio($myrow['full_name'], $myrow['is_juridical']); // парсим Ф.И.О.
- if (array_key_exists($house,$houses)) {
- $HOUSE_ID = $houses[$house]; // id дома
- }
- else {
- $HOUSE_ID = 0; // Если не найден код дома в Атирре, то дом не указываем
- // Тут мылим себе письмо с сообщением о проблеме
- $body = "В БД Атирры не найден дом с кодом $house.".PHP_EOL
- ."Необходимо найти в UTM этот дом, и указать его ID в поле КОД ДОМА в справочнике Атирры.".PHP_EOL
- ."В противном случае абоненты, проживающие в этом доме не будут обновлены в БД Атирры.";
- mailinform($body);
- }
- $ACCOUNT_NO = $a; // номер лицевого счета с суффиксом INTERNET
- $SURNAME = $fio[0]; // фамилия
- $FIRSTNAME = $fio[1]; // имя
- $MIDLENAME = $fio[2]; // отчество
- $PHONE_NO = get_phone_string($myrow['home_telephone']); // домашний телефон
- $MOBILE_PHONE = get_phone_string($myrow['mobile_telephone']); // мобильный телефон
- $FLAT_NO = $myrow['flat_number']; // номер квартиры
- $JURIDICAL = $myrow['is_juridical']; // 0 - физ. лица, 1 - юр. лица
- $DOGOVOR_NO = $myrow['id']; // номер договора
- $CONTRACT_DATE = date('Y-m-d', $myrow['create_date']); // дата договора
- $ACTIVIZ_DATE = date('Y-m-d', $myrow['connect_date']); // дата подключения
- $PORCH_N = $myrow['entrance']; // номер подъезда
- $FLOOR_N = $myrow['floor']; // этаж
- $BALANCE = round($myrow['balance'], 2); // баланс лицевого счета в UTM
- $PREPAY = round($myrow['credit'], 2); // обещанный платеж
- $NOTICE = 'Текущий тариф: '.$myrow['current_tariff'].' ('.$myrow['current_tariff_comment'].')'.PHP_EOL.'Следующий тариф: '.$myrow['next_tariff'].' ('.$myrow['next_tariff_comment'].')'; // примечание (текущий и следующий ТП)
- $CUST_STATE = $myrow['int_status']; // статус Интернета
- $CUST_STATE_DESCR = get_status($myrow['int_status'], $myrow['is_blocked']); // расшифровываем статус
- $HIS_COLOR = get_row_color($myrow['int_status']); // цвет фона строки
- $VALID_TO = ''; // дата окончания действия договора должна быть пустой у абонентов, которые попали в результат запроса в UTM
- // если изменилось хотябы что то, то обновляем запись полностью
- // сервер Firebird будет обновлять только фактически измененные поля, на сколько я знаю
- $update_sql = '';
- if (($house <> $atr_ab['HOUSE_CODE']) and ($HOUSE_ID <> 0)) $update_sql = $update_sql." HOUSE_ID = '$HOUSE_ID',";
- if ($SURNAME <> $atr_ab['SURNAME'] ) $update_sql = $update_sql." SURNAME = '$SURNAME',";
- if ($FIRSTNAME <> $atr_ab['FIRSTNAME']) $update_sql = $update_sql." FIRSTNAME = '$FIRSTNAME',";
- if ($MIDLENAME <> $atr_ab['MIDLENAME']) $update_sql = $update_sql." MIDLENAME = '$MIDLENAME',";
- if ($PHONE_NO <> $atr_ab['PHONE_NO'] ) $update_sql = $update_sql." PHONE_NO = '$PHONE_NO',";
- if ($FLAT_NO <> $atr_ab['FLAT_NO'] ) $update_sql = $update_sql." FLAT_NO = '$FLAT_NO',";
- if ($JURIDICAL <> $atr_ab['JURIDICAL']) $update_sql = $update_sql." JURIDICAL = '$JURIDICAL',";
- if ($DOGOVOR_NO <> $atr_ab['DOGOVOR_NO']) $update_sql = $update_sql." DOGOVOR_NO= '$DOGOVOR_NO',";
- if ($PORCH_N <> $atr_ab['PORCH_N']) $update_sql = $update_sql." PORCH_N = '$PORCH_N',";
- if ($FLOOR_N <> $atr_ab['FLOOR_N']) $update_sql = $update_sql." FLOOR_N = '$FLOOR_N',";
- if ($PREPAY <> $atr_ab['PREPAY']) $update_sql = $update_sql." PREPAY = '$PREPAY',";
- if ($NOTICE <> $atr_ab['NOTICE']) $update_sql = $update_sql." NOTICE = '$NOTICE',";
- if ($CUST_STATE <> $atr_ab['CUST_STATE']) $update_sql = $update_sql." CUST_STATE= '$CUST_STATE',";
- if ($HIS_COLOR <> $atr_ab['HIS_COLOR']) $update_sql = $update_sql." HIS_COLOR = '$HIS_COLOR',";
- if ($MOBILE_PHONE <> $atr_ab['MOBILE_PHONE']) $update_sql = $update_sql." MOBILE_PHONE = '$MOBILE_PHONE',";
- if ($CONTRACT_DATE <> $atr_ab['CONTRACT_DATE'])$update_sql = $update_sql." CONTRACT_DATE = '$CONTRACT_DATE',";
- if ($ACTIVIZ_DATE <> $atr_ab['ACTIVIZ_DATE']) $update_sql = $update_sql." ACTIVIZ_DATE = '$ACTIVIZ_DATE',";
- if ($CUST_STATE_DESCR <> $atr_ab['CUST_STATE_DESCR']) $update_sql = $update_sql." CUST_STATE_DESCR = '$CUST_STATE_DESCR',";
- if ($VALID_TO <> $atr_ab['VALID_TO']) $update_sql = $update_sql." VALID_TO = NULL,";
- if ($update_sql <> '') { // если есть что обновлять, то...
- $update_sql = substr($update_sql,0,-1); // удаляем лишнюю запятую в конце
- $sql = "update CUSTOMER set $update_sql where ACCOUNT_NO = '$ACCOUNT_NO'"; // окончательный запрос
- $fb_session->exec_modify_sql($sql);
- }
- // Проверка баланса. Если баланс в UTM и в Атирре отличаются, то корректируем сумму услуги синхронизации баланса
- if ($BALANCE <> round($atr_ab['DEBT_SUM']*'-1',2)) {
- $sql = "select ERROR, SALDO from MIGRATE_SERVICE_BY_ACCOUNT('$a',
- '20188', '0', '$start_date')";
- $res = $fb_session->exec_modify_sql_with_result($sql);
- $error_saldo = $res[0];
- if (!$error_saldo['ERROR']) {
- $saldo = round($error_saldo['SALDO']*'-1'-$atr_ab['PREPAY'],2);
- $new_discount = round($saldo-$BALANCE,2);
- $sql = "select ERROR, SALDO from MIGRATE_SERVICE_BY_ACCOUNT('$a',
- '20188', '$new_discount', '$start_date')";
- $res = $fb_session->exec_modify_sql_with_result($sql);
- unset($res);
- }
- }
- }
- unset($atrcust);
- }
- unset($res);
- // Тут мы выставляем дату окончания действия договора тем абонентам, которые больше не видны в запросах в UTM
- $sql = "SELECT C.CUSTOMER_ID, C.ACCOUNT_NO, C.VALID_TO FROM CUSTOMER C WHERE C.ACCOUNT_NO like '".ACCOUNT_PREFIX."%".ACCOUNT_POSTFIX."'"; // смотрим абонента в БД Атирры с таким лицевым
- $atrcust = $fb_session->select_assoc_all($sql);
- foreach($atrcust as $fbrow) {
- if (!array_key_exists($fbrow['ACCOUNT_NO'],$exists_in_utm)) {
- $ACCOUNT_NO = $fbrow['ACCOUNT_NO'];
- $VALID_TO = $fbrow['VALID_TO'];
- // Если поле даты окончания договора пустое, то добавляем сегодняшнюю дату
- if ($VALID_TO == '') {
- $NOW = date('Y-m-d');
- $sql = "update CUSTOMER set VALID_TO = '$NOW' where ACCOUNT_NO = '$ACCOUNT_NO'";
- $fb_session->exec_modify_sql($sql);
- }
- }
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement