Trapp Posted March 23, 2021 Posted March 23, 2021 (edited) Коллеги, доброго дня. Внедряемся по СОРМ3, готовимся к опытной эксплуатации встал вопрос заполнения справочников СОРМа ( .csv - файлы) из биллинга UTM5 подскажите, кто-то делал такое, и возможно есть какое-то обкатанное готовое решение? Edited March 23, 2021 by Trapp Вставить ник Quote
bike Posted March 23, 2021 Posted March 23, 2021 4 часа назад, Trapp сказал: Внедряемся по СОРМ3, готовимся к опытной эксплуатации встал вопрос заполнения справочников СОРМа ( .csv - файлы) из биллинга UTM5 У меня когнитивный диссонанс - "готовимся к опытной эксплуатации" vs "встал вопрос заполнения справочников". Мы на стадии подготовки ТЗ вендорам на решение по приказу 573. И уже сейчас меняем биллинг из за "встал вопрос заполнения справочников". П.С. Извиняюсь за офф топ. Вставить ник Quote
Andrei Posted March 23, 2021 Posted March 23, 2021 Обычно производитель СОРМа выдает требования - в каком виде и какие данные ему нужно выгрузить из биллинга. У нас не UTM, но подход был именно такой. Приложением к договору на поставку СОРМ идет описание, где указано как должны называться имена файлов с данными, какие данные и в каком формате в этих файлах должны содержаться, с какой периодичностью они должны обновляться и куда выгружаться. А дальше уже софт СОРМа берет эти файлики и заполняет этими данными ИС СОРМ3. Вставить ник Quote
bike Posted March 23, 2021 Posted March 23, 2021 14 минут назад, Andrei сказал: Приложением к договору на поставку СОРМ идет описание, где указано как должны называться имена файлов с данными, какие данные и в каком формате в этих файлах должны содержаться, с какой периодичностью они должны обновляться и куда выгружаться. А дальше уже софт СОРМа берет эти файлики и заполняет этими данными ИС СОРМ3. Тут главная проблема, что нужных полей может просто не быть. Информация о структуре выгрузок не секретна, проверяйте свои базы данных и если всё хорошо - парсер Вам поможет. Или нет. :) Вставить ник Quote
Andrei Posted March 24, 2021 Posted March 24, 2021 10 часов назад, bike сказал: проверяйте свои базы данных и если всё хорошо У меня-то все хорошо. Это топикстартеру совет. 10 часов назад, bike сказал: Тут главная проблема, что нужных полей может просто не быть. А вот это никого не волнует, кроме оператора. Вставить ник Quote
Trapp Posted March 24, 2021 Author Posted March 24, 2021 Коллеги, в том то и вопрос, что описание всех полей у всех интеграторов СОРМ +- одинковое Вопрос найти - делал ли кто-то парсер для UTM5, чтобы не задействовать знакомого программиста ( он есть, но ленивый, почти как памятник, а пинать уже не интересно, люди то взрослые уже) либо с кем-то кто делал, или плотно работал с УТМ5 - договориться об изменениях под нас, так сказать в хорошем и взаимовыгодном темпе. Вставить ник Quote
Andrei Posted March 24, 2021 Posted March 24, 2021 Если есть описание БД (или дамп для примера) + описание от производителя СОРМ, то пишите в личку. Вставить ник Quote
Cramac Posted April 8, 2021 Posted April 8, 2021 Делал такое, но у меня еще своя дублирующая база связанная с утм. Вставить ник Quote
Antares Posted April 8, 2021 Posted April 8, 2021 Нам куратор намекнул как то недавно, что бы им хотелось иметь базу данных абонентов, со всеми данными...не хотят видите ли они лишний раз к биллингу цепляться. Тоже думаю, как бы им выгрузить. Вставить ник Quote
Cramac Posted April 8, 2021 Posted April 8, 2021 @Antares ну так берем базу, выгружаем в цвс нужные поля и грузим на сорм. делов то :) Вставить ник Quote
Antares Posted April 8, 2021 Posted April 8, 2021 1 час назад, Cramac сказал: @Antares ну так берем базу, выгружаем в цвс нужные поля и грузим на сорм. делов то :) В том то и дело, что не в сорм надо ))) а куратору типа ексель, csv и т.п. Вставить ник Quote
VolanD666 Posted April 8, 2021 Posted April 8, 2021 23 минуты назад, Antares сказал: В том то и дело, что не в сорм надо ))) а куратору типа ексель, csv и т.п. У нас был специальный фтпшник и туда каждую неделю складывали данные в csv. Вставить ник Quote
Antares Posted April 8, 2021 Posted April 8, 2021 42 минуты назад, VolanD666 сказал: У нас был специальный фтпшник и туда каждую неделю складывали данные в csv. А есть скриптик для забора данных из базы? ))) Вставить ник Quote
VolanD666 Posted April 8, 2021 Posted April 8, 2021 2 минуты назад, Antares сказал: А есть скриптик для забора данных из базы? ))) А у нас не утм-ка была. Но в приципе, зная структуру бд- такой скрипт пишется за день, а может и меньше ) Вставить ник Quote
Cramac Posted April 8, 2021 Posted April 8, 2021 4 часа назад, Antares сказал: В том то и дело, что не в сорм надо ))) а куратору типа ексель, csv и т.п. ну эт не знаю, для продажи видимо :) а так, та же выгрузка, да ему куда скажет. могу свой скинуть, но опять же, там выборка с двух баз, сначала своя, потом утм Вставить ник Quote
ShumBor Posted April 9, 2021 Posted April 9, 2021 @Trapp очень много будет зависеть от того какие поля в том же utm заполнены. Нам приходилось много дописывать, т.к. не все поля есть в стандартных. К тому же если у вас не 5+, то писать точно все самим придется. Вставить ник Quote
VolanD666 Posted April 9, 2021 Posted April 9, 2021 5 часов назад, ShumBor сказал: @Trapp очень много будет зависеть от того какие поля в том же utm заполнены. Нам приходилось много дописывать, т.к. не все поля есть в стандартных. К тому же если у вас не 5+, то писать точно все самим придется. А там разве нельзя кастомные поля добавлять в UTM? Вставить ник Quote
dryukov Posted April 10, 2021 Posted April 10, 2021 В 09.04.2021 в 20:22, VolanD666 сказал: А там разве нельзя кастомные поля добавлять в UTM? Я кумекал и там много вещей. Во первых это персональные данные и нужно регаться в РКН как оператор со всеми требованиями, организационными и техническими. Персональные данные и данные юриков простые операторы видеть лучше не должны да и админы, кроме того нужна политика доступа к данным с логированием к ним доступа, УТМ тут не вкатывает. Выгружать нужно изменения, поправил фамилию нужно выгружать событие с отменой старой записи, отслеживать изменения в двух базах геморно. С wifi зонами тоже нужно интегрировать, тут нужно генерировать пользователя для СОРМ но у есть только сотовый и координаты но обязательных полей нет ... потому бум решать как без обязательных требований. Про необходимость сохранения оплаты и координат автоматов и т.п. тоже не в пользу УТМ. Короче планирую выгружать пользователей в базу и минимум данных, потом отдельный человек будет заполнять все персональные данные под логи и к этой записи уже автоматом будут добавляться IP и удаляться. Ну и wifi только в базе СОРМ, чтобы УТМ не нагружать абонентами только с номером телефона, а в СОРМ выгружалось начало сессии и конец сессии, но как координаты обновлять нужно разбираться. В общем нужно будет писать под версию СОРМ-а, ну нужно соображать. Вставить ник Quote
dryukov Posted April 10, 2021 Posted April 10, 2021 Опять же нужно решать с абонентами которые в органах работают, вообще никаких данных в UTM быть не должно так зная логин пароль всё видно в личном кабинете, тупо писать "РФ" )))) А вот уже в СОРМ-овой базе всё по полной. Вставить ник Quote
Antares Posted April 11, 2021 Posted April 11, 2021 В 08.04.2021 в 20:10, Cramac сказал: ну эт не знаю, для продажи видимо :) а так, та же выгрузка, да ему куда скажет. могу свой скинуть, но опять же, там выборка с двух баз, сначала своя, потом утм Кидай, посмотрю Вставить ник Quote
ShumBor Posted April 12, 2021 Posted April 12, 2021 @VolanD666 У нас так и сделано. Просто до этого эти данные были только в бумажных договорах. Вставить ник Quote
Cramac Posted April 13, 2021 Posted April 13, 2021 @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); Вставить ник Quote
inettel_mal Posted May 6, 2021 Posted May 6, 2021 Всем привет, как получить текущий ip абонента? На данный момент получаю так: select ipid from discount_transactions_iptraffic_all where account_id = 213213 order by id desc limit 1; Но такая реализация занимает кучу времени если её выполнять для всех абонентов Вставить ник Quote
VolanD666 Posted May 11, 2021 Posted May 11, 2021 В 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; Но такая реализация занимает кучу времени если её выполнять для всех абонентов Дык может выгружать все ИПы одним запросом в хеш и дальше уже смотреть там? Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.