Jump to content

Recommended Posts

Posted (edited)

Коллеги, доброго дня.

 

Внедряемся по СОРМ3, готовимся к опытной эксплуатации

 

встал вопрос заполнения справочников СОРМа ( .csv - файлы)  из биллинга  UTM5

подскажите, кто-то делал такое,

и возможно есть какое-то обкатанное  готовое решение? 

 

 

Edited by Trapp
Posted
4 часа назад, Trapp сказал:

Внедряемся по СОРМ3, готовимся к опытной эксплуатации

 

встал вопрос заполнения справочников СОРМа ( .csv - файлы)  из биллинга  UTM5

У меня когнитивный диссонанс - "готовимся к опытной эксплуатации" vs "встал вопрос заполнения справочников".

Мы на стадии подготовки ТЗ вендорам на решение по приказу 573.

И уже сейчас меняем биллинг из за "встал вопрос заполнения справочников".

 

П.С. Извиняюсь за офф топ.

Posted

Обычно производитель СОРМа выдает требования - в каком виде и какие  данные ему нужно выгрузить из биллинга.

У нас не UTM, но подход был именно такой. Приложением к договору на поставку СОРМ идет описание, где указано как должны называться имена файлов с данными, какие данные и в каком формате в этих файлах должны содержаться, с какой периодичностью они должны обновляться и куда выгружаться. А дальше уже софт СОРМа берет эти файлики и заполняет этими данными ИС СОРМ3.

Posted
14 минут назад, Andrei сказал:

Приложением к договору на поставку СОРМ идет описание, где указано как должны называться имена файлов с данными, какие данные и в каком формате в этих файлах должны содержаться, с какой периодичностью они должны обновляться и куда выгружаться. А дальше уже софт СОРМа берет эти файлики и заполняет этими данными ИС СОРМ3. 

Тут главная проблема, что нужных полей может просто не быть.

Информация о структуре выгрузок не секретна, проверяйте свои базы данных и если всё хорошо - парсер Вам поможет.

Или нет. :)

Posted
10 часов назад, bike сказал:

проверяйте свои базы данных и если всё хорошо

У меня-то все хорошо. Это топикстартеру совет.

10 часов назад, bike сказал:

Тут главная проблема, что нужных полей может просто не быть.

А вот это никого не волнует, кроме оператора.

Posted

Коллеги, в том то и вопрос, что описание всех полей у всех интеграторов СОРМ +- одинковое

 

Вопрос найти - делал ли кто-то парсер для  UTM5,
чтобы не задействовать знакомого программиста

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

 

либо с кем-то кто делал, или плотно работал с УТМ5 - договориться об изменениях под нас, так сказать в хорошем и взаимовыгодном темпе.

 

 

 

  • 2 weeks later...
Posted

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

Posted
1 час назад, Cramac сказал:

@Antares ну так берем базу, выгружаем в цвс нужные поля и грузим на сорм. делов то :)

В том то и дело, что не в сорм надо ))) а куратору типа ексель, csv и т.п.

Posted
23 минуты назад, Antares сказал:

В том то и дело, что не в сорм надо ))) а куратору типа ексель, csv и т.п.

У нас был специальный фтпшник и туда каждую неделю складывали данные в csv.

Posted
42 минуты назад, VolanD666 сказал:

У нас был специальный фтпшник и туда каждую неделю складывали данные в csv.

А есть скриптик для забора данных из базы? )))

Posted
2 минуты назад, Antares сказал:

А есть скриптик для забора данных из базы? )))

А у нас не утм-ка была. Но в приципе, зная структуру бд- такой скрипт пишется за день, а может и меньше )

Posted
4 часа назад, Antares сказал:

В том то и дело, что не в сорм надо ))) а куратору типа ексель, csv и т.п.

ну эт не знаю, для продажи видимо :)

а так, та же выгрузка, да ему куда скажет. могу свой скинуть, но опять же, там выборка с двух баз, сначала своя, потом утм

Posted

@Trapp очень много будет зависеть от того какие поля в том же utm заполнены.

Нам приходилось много дописывать, т.к. не все поля есть в стандартных.

К тому же если у вас не 5+, то писать точно все самим придется.

 

 

Posted
5 часов назад, ShumBor сказал:

@Trapp очень много будет зависеть от того какие поля в том же utm заполнены.

Нам приходилось много дописывать, т.к. не все поля есть в стандартных.

К тому же если у вас не 5+, то писать точно все самим придется.

 

 

А там разве нельзя кастомные поля добавлять в UTM?

Posted
В 09.04.2021 в 20:22, VolanD666 сказал:

А там разве нельзя кастомные поля добавлять в UTM?

Я кумекал и там много вещей.
Во первых это персональные данные и нужно регаться в РКН как оператор со всеми требованиями, организационными и техническими.
Персональные данные и данные юриков простые операторы видеть лучше не должны да и админы, кроме того нужна политика доступа к данным с логированием к ним доступа, УТМ тут не вкатывает.
Выгружать нужно изменения, поправил фамилию нужно выгружать событие с отменой старой записи, отслеживать изменения в двух базах геморно.
С wifi зонами тоже нужно интегрировать, тут нужно генерировать пользователя для СОРМ но у есть только сотовый и координаты  но обязательных полей нет ... потому бум решать как без обязательных требований.
Про необходимость сохранения оплаты и координат автоматов и т.п. тоже не в пользу УТМ.
Короче планирую выгружать пользователей в базу и минимум данных, потом отдельный человек будет заполнять все персональные данные под логи и к этой записи уже автоматом будут добавляться IP и удаляться.
Ну и wifi только в базе СОРМ, чтобы УТМ не нагружать абонентами только с номером телефона, а в СОРМ выгружалось начало сессии и конец сессии, но как координаты обновлять нужно разбираться.
В общем нужно будет писать под версию СОРМ-а, ну нужно соображать.

Posted

Опять же нужно решать с абонентами которые в органах работают, вообще никаких данных в UTM быть не должно так зная логин пароль всё видно в личном кабинете, тупо писать "РФ" ))))
А вот уже в СОРМ-овой базе всё по полной.

Posted
В 08.04.2021 в 20:10, Cramac сказал:

ну эт не знаю, для продажи видимо :)

а так, та же выгрузка, да ему куда скажет. могу свой скинуть, но опять же, там выборка с двух баз, сначала своя, потом утм

Кидай, посмотрю

Posted

@Antares 

Скрытый текст

<?php
include ("/var/www/html/tech/admin/inc/config.php");
include ("/var/www/html/tech/admin/inc/function.php");

if($start_date = str_replace(array(" ","\r","\n"), "",file_get_contents('/var/www/html/tech/admin/sorm/date.txt')) )
echo date("d-m-Y H:i:s", $start_date);
 
function ftp_upload ($src,$remote)
{

    // установка соединения
    $conn_id = ftp_connect("10.10.10.22");

    // проверка имени пользователя и пароля
    $login_result = ftp_login($conn_id, "", "");

    // загрузка файла 
    if (ftp_put($conn_id, $remote, $src, FTP_ASCII)) {
     echo "$file успешно загружен на сервер<br>\r\n";
    } else {
     echo "Не удалось загрузить $file на сервер<br>\r\n";
    }

    // закрытие соединения
    ftp_close($conn_id);
}
        
$index_arr[1]="123123";

// типы платежей которые не смотрим
$dont_show_type_pay="(102,116,117,103,104,105,1,2,3,7)";

################################# Абоненты ####################################################
$city= runSQL("SELECT * FROM `acl_city` where id_user=2",$database_lan);
for ($i=0;$i<count($city);$i++)
{
    $citya.=" or city_id=".$city[$i]["id_city"];
}

echo "SELECT * FROM `user` where 1=1".$citya;
$user= runSQL("SELECT * FROM `user` where 1=1".$citya,$database_lan);

$user_out=array();
for ($i=0;$i<count($user);$i++)
{
    //Дом номер
    $res1= runSQL("SELECT * FROM doma where id='".$user[$i]["address"]."'",$database_lan);
    $nomer_doma = $res1[0]['nomer'];
    $street_id = $res1[0]['street_id'];

    //название улицы
    $res1= runSQL("SELECT * FROM street where id='$street_id'",$database_lan);
    $name_street = $res1[0]['name'];
    $id_gorod = $res1[0]['gorod_id'];
    $user_index=$index_arr[$res1[0]['gorod_id']];
    
    //название города
    $res1= runSQL("SELECT name FROM gorod where id='$id_gorod'",$database_lan);
    $name_gorod = $res1[0]['name'];

    $kvart = $user[$i]['kvart'];

    $utm= runSQL("
        SELECT *
        FROM users u, 
         service_links sl, 
         iptraffic_service_links isl, 
         ip_groups ig, 
         accounts a 
        WHERE u.id=sl.user_id 
         AND u.basic_account=a.id 
         AND u.login = '".$user[$i]["login"]."'
         AND isl.id=sl.id 
         AND isl.ip_group_id=ig.ip_group_id 
         AND ig.is_deleted=0 
         AND u.is_deleted=0 
         AND sl.is_deleted=0 ORDER BY u.id
    ",$database_utm);
    /*
        SELECT users.id, users.login, users_accounts.account_id
        FROM users_accounts
        LEFT JOIN users ON users.id = users_accounts.`uid`
        where users.login='".$user[$i]["login"]."'
    */
    $user_login_arr[]=$utm[0]["login"];
    if ($utm[0]["basic_account"]!="") 
        {
        $user_login_arr[]=$utm[0]["uname"];
        $user_basicid_arr[$user[$i]["login"]]=$utm[0]["basic_account"];
        }
        //print_r($utm);
        
        if ($user[$i]["data"]>$start_date or $user[$i]["update"]>$start_date)
        {
            $user_out[]=array(
                "1_id_filial"=>chr(34)."1".chr(34),
                "2_login"=>chr(34).($utm[0]["login"]!="" ? $utm[0]["uname"] : $user[$i]["login"]).chr(34),
                "3_static_ip"=>chr(34)."".chr(34),
                "4_email"=>chr(34).'-'.chr(34),
                "5_telefon"=>chr(34).$user[$i]["mobile_nomer"].chr(34),
                "6_mac"=>chr(34).''.chr(34),
                "7_data_reg"=>chr(34).date("d.m.Y H:i:s", $user[$i]["data"]).chr(34),
                "8_num_dogovor"=>chr(34).$user[$i]["id"].chr(34),
                "9_status_dog"=>chr(34).($user[$i]["otkl"]==0 ? "0": "1").chr(34), //0 podkl, 1 otkl
                "10_data_podkl_usl"=>chr(34).date("d.m.Y H:i:s", $user[$i]["data"]).chr(34),
                "11_data_otkl_usl"=>chr(34).($user[$i]["otkl"]!=0 ? date("d.m.Y H:i:s", $user[$i]["data_otkl"]) : "").chr(34),
                "12_tip_abon"=>chr(34)."0".chr(34), //0 fizik, 1 urik
                "13_tip_dannix_fio"=>chr(34)."1".chr(34),
                "14_name"=>chr(34)."".chr(34),
                "15_otch"=>chr(34)."".chr(34),
                "16_famil"=>chr(34)."".chr(34),
                "17_nestrukt_fio"=>chr(34).$user[$i]["name_full"].chr(34),
                "18_data_rogd"=>chr(34)."".chr(34),
                "19_tip_pasp_dann"=>chr(34)."0".chr(34), //0 - структурированные паспортные данные, 1 - неструктурированные
                "20_seriya_pasp"=>chr(34).$user[$i]["seria"].chr(34),
                "21_nomer_pasp"=>chr(34).$user[$i]["nomer"].chr(34),
                "22_kem_kogda_pasp"=>chr(34).$user[$i]["vidan"]." ".$user[$i]["data_vidachi"].chr(34),
                "23_nestrukt_pasp"=>chr(34)."".chr(34),
                "24_id_tip_dokumenta"=>chr(34)."1".chr(34),
                "25_bank_abon"=>chr(34)."".chr(34),
                "26_nomer_scheta_abon"=>chr(34)."".chr(34),
                "27_ur_name"=>chr(34)."".chr(34),
                "28_ur_inn"=>chr(34)."".chr(34),
                "29_ur_kont_lico"=>chr(34)."".chr(34),
                "30_ur_kont"=>chr(34)."".chr(34),
                "31_ur_bank"=>chr(34)."".chr(34),
                "32_ur_shcet"=>chr(34)."".chr(34),
                "33_tip_addr_abon"=>chr(34)."0".chr(34),//0 - структурированные данные, 1 - неструктурированные
                "34_index"=>chr(34).$user_index.chr(34),
                "35_strana"=>chr(34)."Россия".chr(34),
                "36_obl"=>chr(34)."Московская область".chr(34),
                "37_rayon"=>chr(34)."Орехово-Зуевский".chr(34),
                "38_gorod"=>chr(34).$name_gorod.chr(34),
                "39_ulica"=>chr(34).$name_street.chr(34),
                "40_dom"=>chr(34).$nomer_doma.chr(34),
                "41_korpus"=>chr(34)."".chr(34),
                "42_kvart"=>chr(34).$kvart.chr(34),
                "43_nestrukt_adr"=>chr(34)."".chr(34),
                "44_ustr_tip_addr"=>chr(34)."0".chr(34), //адрес устройства 0 - структурированные данные, 1 - неструктурированные
                "45_ustr_index"=>chr(34).$user_index.chr(34),
                "46_ustr_strana"=>chr(34)."Россия".chr(34),
                "47_ustr_obl"=>chr(34)."Московская область".chr(34),
                "48_ustr_rayon"=>chr(34)."Орехово-Зуевский".chr(34),
                "49_ustr_gorod"=>chr(34).$name_gorod.chr(34),
                "50_ustr_ulica"=>chr(34).$name_street.chr(34),
                "51_ustr_dom"=>chr(34).$nomer_doma.chr(34),
                "52_ustr_korpus"=>chr(34)."".chr(34),
                "53_ustr_kvart"=>chr(34).$kvart.chr(34),
                "54_ustr_nestrukt_adr"=>chr(34)."".chr(34),
                );    
        }

}

$fp = fopen('/var/www/html/tech/admin/sorm/abonents_new.csv', 'w');
foreach ($user_out as $fields) {
    $fields=implode(';', $fields);
    $fields=iconv('UTF-8', 'cp1251', $fields);
    fwrite($fp, $fields . PHP_EOL);
}
fclose($fp);

    
ftp_upload ("/var/www/html/tech/admin/sorm/abonents_new.csv","/abonents/abonents/abonents_new.csv");


################################# Абоненты - услуги ####################################################
unset($utm);
for ($i=0;$i<count($user);$i++)
{
        //Услуга интернет
    //$serv= runSQL("SELECT * FROM `user` limit 10",$database_lan);
    $service[]=array(
    "1_id_filial"=>chr(34)."1".chr(34),
    "2_login"=>chr(34).$user[$i]["login"].chr(34),
    "3_num_dog"=>chr(34).$user[$i]["id"].chr(34),
    "4_id_uslugi"=>chr(34).'1'.chr(34),
    "5_data_podkl"=>chr(34).date("d.m.Y H:i:s", $user[$i]["data"]).chr(34),
    "6_data_otkl"=>chr(34).($user[$i]["data_otkl"]>0 ? date("d.m.Y H:i:s", $user[$i]["data_otkl"]) : "").chr(34),
    "7_nastroyki"=>chr(34)."".chr(34)
    );

    //ищем обещанный
    if ($user_basicid_arr[$user[$i]["login"]]!="")
        {
        $utm= runSQL("SELECT *
            FROM payment_transactions
            where actual_date>'".$start_date."' and method in ('103','104') and account_id =".$user_basicid_arr[$user[$i]["login"]]."
        ",$database_utm);
        
        for ($q=0;$q<count($utm);$q++)
            {
                $service[]=array(
                "1_id_filial"=>chr(34)."1".chr(34),
                "2_login"=>chr(34).$user[$i]["login"].chr(34),
                "3_num_dog"=>chr(34).$user[$i]["id"].chr(34),
                "4_id_uslugi"=>chr(34).$utm[$q]["method"].chr(34),
                "5_data_podkl"=>chr(34).date("d.m.Y H:i:s", $utm[$q]["actual_date"]).chr(34),
                "6_data_otkl"=>chr(34).date("d.m.Y H:i:s", $utm[$q+1]["actual_date"]).chr(34),
                "7_nastroyki"=>chr(34)."".chr(34)
                );
                $q=$q+1;
            }
        }

    //ищем турбо    
}

$fp = fopen('/var/www/html/tech/admin/sorm/services.csv', 'w');
foreach ($service as $fields) {
    $fields=implode(';', $fields);
    fwrite($fp, $fields . PHP_EOL);
}
fclose($fp);
//ftp_upload ("/var/www/html/tech/admin/sorm/services.csv","/abonents/services/services.csv");

############################## Справочники - тип услуг ##########################################################
$tip_service=array();

    $tip_service[]=array(
    "1_id_filial"=>chr(34)."1".chr(34),
    "2_id_uslugi"=>chr(34)."1".chr(34),
    "3_obozn_uslugi"=>chr(34).'интернет'.chr(34),
    "4_start_time"=>chr(34).'01.01.1970 00:00:00'.chr(34),
    "5_end_time"=>chr(34)."".chr(34),
    "6_opisanie"=>chr(34).'интернет'.chr(34)
    );

    $tip_service[]=array(
    "1_id_filial"=>chr(34)."1".chr(34),
    "2_id_uslugi"=>chr(34)."104".chr(34),
    "3_obozn_uslugi"=>chr(34).'Обещанный платеж'.chr(34),
    "4_start_time"=>chr(34).'01.01.1970 00:00:00'.chr(34),
    "5_end_time"=>chr(34)."".chr(34),
    "6_opisanie"=>chr(34).'Обещанный платеж'.chr(34)
    );
    
$fp = fopen('/var/www/html/tech/admin/sorm/supplement_services.csv', 'w');
foreach ($tip_service as $fields) {
    $fields=implode(';', $fields);
    $fields=iconv('UTF-8', 'Windows-1251', $fields);
    fwrite($fp, $fields . PHP_EOL);
}
fclose($fp);
//ftp_upload ("/var/www/html/tech/admin/sorm/supplement_services.csv","/dictionaries/supplement-services/supplement_services.csv");

############################## Справочники - тип документов ##########################################################
$tip_dok=array();

    $tip_dok[]=array(
    "1_id_filial"=>chr(34)."1".chr(34),
    "2_id_dok"=>chr(34)."1".chr(34),
    "3_start_time"=>chr(34)."01.01.1970 00:00:00".chr(34),
    "4_end_time"=>chr(34).''.chr(34),
    "5_opisanie"=>chr(34)."Паспорт РФ".chr(34)
    );

$fp = fopen('/var/www/html/tech/admin/sorm/doc_types.csv', 'w');
foreach ($tip_dok as $fields) {
    $fields=implode(';', $fields);
    $fields=iconv('UTF-8', 'Windows-1251', $fields);
    fwrite($fp, $fields . PHP_EOL);
}
fclose($fp);
//ftp_upload ("/var/www/html/tech/admin/sorm/doc_types.csv","/dictionaries/doc-types/doc_types.csv");

 

############################## Справочники - способов оплаты ##########################################################
$tip_pay=array();
    $paytype= runSQL("SELECT * FROM `payment_methods` where id not in ".$dont_show_type_pay,$database_utm);
    for ($i=0;$i<count($paytype);$i++)
    {
        $tip_pay[]=array(
        "1_id_filial"=>chr(34)."1".chr(34),
        "2_id_tippay"=>chr(34).$paytype[$i]["id"].chr(34),
        "3_start_time"=>chr(34)."01.01.1970 00:00:00".chr(34),
        "4_end_time"=>chr(34).''.chr(34),
        "5_opisanie"=>chr(34).$paytype[$i]["name"].chr(34)
        );
    }

$fp = fopen('/var/www/html/tech/admin/sorm/pay_types.csv', 'w');
foreach ($tip_pay as $fields) {
    $fields=implode(';', $fields);
    $fields=iconv('UTF-8', 'Windows-1251', $fields);
    fwrite($fp, $fields . PHP_EOL);
}
fclose($fp);
//ftp_upload ("/var/www/html/tech/admin/sorm/pay_types.csv","/dictionaries/pay-types/pay_types.csv");

############################## Справочники - 7.6Пополнение баланса личного счета  ##########################################################
$pay=array();

    for ($i=0;$i<count($user);$i++)
    {
        /*$pays= runSQL("SELECT payment_transactions.method,payment_transactions.actual_date,payment_transactions.payment_incurrency FROM `users`
        left join users_accounts on users_accounts.uid=users.id
        left join payment_transactions on users_accounts.account_id=payment_transactions.account_id
        where users.login='".$user[$i]["login"]."' and payment_transactions.method not in ".$dont_show_type_pay." 
        ",$database_utm);*/
        
        $pays= runSQL("SELECT method,actual_date,payment_incurrency FROM `payment_transactions`
        where actual_date>'".$start_date."' and account_id='".$user_basicid_arr[$user[$i]["login"]]."' and method not in ".$dont_show_type_pay." 
        ",$database_utm);
        
        for($q=0;$q<count($pays);$q++)
        {
            $pay[]=array(
            "1_id_filial"=>chr(34)."1".chr(34),
            "2_id_tippay"=>chr(34).$pays[$q]["method"].chr(34),
            "3_numdog"=>chr(34).$user[$i]["id"].chr(34),
            "4_statikip"=>chr(34).''.chr(34),
            "5_data"=>chr(34).date("d.m.Y H:i:s",$pays[$q]["actual_date"]).chr(34),
            "6_summa"=>chr(34).$pays[$q]["payment_incurrency"].chr(34),
            "7_dopinfo"=>chr(34).''.chr(34)
            );            
        }

    }

$fp = fopen('/var/www/html/tech/admin/sorm/balance-fillup.csv', 'w');
foreach ($pay as $fields) {
    $fields=implode(';', $fields);
    $fields=iconv('UTF-8', 'Windows-1251', $fields);
    fwrite($fp, $fields . PHP_EOL);
}
fclose($fp);
ftp_upload ("/var/www/html/tech/admin/sorm/balance-fillup.csv","/payments/balance-fillup/balance-fillup.csv");

//записываем дату 
$fp = fopen('/var/www/html/tech/admin/sorm/date.txt', 'w');
fwrite($fp, time() . PHP_EOL);
fclose($fp);

 

  • 4 weeks later...
Posted

Всем привет, как получить текущий ip абонента? На данный момент получаю так: select ipid from discount_transactions_iptraffic_all where account_id = 213213  order by id desc limit 1; Но такая реализация занимает кучу времени если её выполнять для всех абонентов

Posted
В 06.05.2021 в 22:28, inettel_mal сказал:

Всем привет, как получить текущий ip абонента? На данный момент получаю так: select ipid from discount_transactions_iptraffic_all where account_id = 213213  order by id desc limit 1; Но такая реализация занимает кучу времени если её выполнять для всех абонентов

Дык может выгружать все ИПы одним запросом в хеш и дальше уже смотреть там?

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.