forum.bitel.ru http://forum.bitel.ru/ |
|
Нужна помощь со скриптом предобработки для NAS http://forum.bitel.ru/viewtopic.php?f=6&t=9120 |
Страница 1 из 1 |
Автор: | Иван [ 04 апр 2014, 01:28 ] |
Заголовок сообщения: | Нужна помощь со скриптом предобработки для NAS |
У меня есть такая задача, делить звонки по услугам в зависимости от номера куда звонят. Местная, сотовая, зоновая, междугородняя и тд связь. Это нужно и для разных счетов и для начислений. Таблица префиксов у меня большая. Выглядит так Код: Префикс Тип 8343 Зон 83435 МСТ 89201 ЗОН 89 СОТ Всего где то 90 записей. У меня в скрипте предобработке такой код: Код: value = request.getStringAttribute(30); if (value != null) { if (value.indexOf("810") == 0 ) { request.setOption( "service", 30 ); } else if (value.indexOf("8") == 0 ) { request.setOption( "service", 31 ); } ... Но, 90 if-ов, с учетом что самый длинный префикс должен выигрывать, мне кажется очень каким то большим костылем. Про длинный префикс я вот что имею ввиду. У меня есть в справочнике Код: 8912071 ЗОН 89 СОТ Звонок на 891207122 - зоновый , на 891297 - сотовый Может есть какой то метод проще чем if? Какие нибудь хеши или что то в таком роде? |
Автор: | Phricker [ 04 апр 2014, 01:29 ] |
Заголовок сообщения: | Re: Нужна помощь со скриптом предобработки для NAS |
REGEXP? |
Автор: | Иван [ 04 апр 2014, 01:41 ] |
Заголовок сообщения: | Re: Нужна помощь со скриптом предобработки для NAS |
Если шуточно, то когда вы начинаете решать проблему регекспом то у вас две проблемы. А если всерьез, не понимаю, куда тут regexp префиксы все в него засунуть? (83425|83237|81213) типа такого? |
Автор: | skn [ 04 апр 2014, 03:20 ] |
Заголовок сообщения: | Re: Нужна помощь со скриптом предобработки для NAS |
с точки зрения производительности можно сделать так (если префиксы меняются редко) if ( первая цифра равна 0 ) { if ( вторая цифра = 0 ) { и т.д. } else if ( вторая цифра = 1 ) { } ... } else if ( первая цифра = 1 ) { } else if ( ... другой вариант строить из префиксов дерево по такому же принципу (разбивать по цифрам) и писать обходчик этого дерева... |
Автор: | Иван [ 04 апр 2014, 12:10 ] |
Заголовок сообщения: | Re: Нужна помощь со скриптом предобработки для NAS |
А точно нет какого нить хеша или объекта в этой вашей яве, что б накидать туда префиксов и получать longest match? 90+ if-ов вгоняют меня в уныние. |
Автор: | skn [ 04 апр 2014, 13:49 ] |
Заголовок сообщения: | Re: Нужна помощь со скриптом предобработки для NAS |
Иван писал(а): А точно нет какого нить хеша или объекта в этой вашей яве, что б накидать туда префиксов и получать longest match? 90+ if-ов вгоняют меня в уныние. мне про такие хеши(объекты) ничего не известно.... |
Автор: | Иван [ 22 апр 2014, 16:30 ] |
Заголовок сообщения: | Re: Нужна помощь со скриптом предобработки для NAS |
Может кто нибудь сможет мне еще помочь. Я на ява не пишу ничего, затруднения с этим. Вот написал я все эти стопицот тысяч if-ов. Получается у меня половина проблемы снята, теперь услуги правильно назначаются для новых пакетов, но старые то все остались неправлиные, и пересчет им не помогает. Получается мне нужно пройтись по log_session_14_201404 взять там to_number и назначить нужный sid, используя эту функцию. Простая вроде б задача. Видимо выполнять ее через "глобальные скрипты поведения". Но не знаю с чего начать. Как мне эти update выполнять. Нет ли образцов такого кода? |
Автор: | Phricker [ 22 апр 2014, 16:54 ] |
Заголовок сообщения: | Re: Нужна помощь со скриптом предобработки для NAS |
утилиты - sql редактор Код: UPDATE log_session_14_201404 SET sid = 123 WHERE to_number LIKE '83425%' сначала проверьте на тестовой базе все ли вас устраивает |
Автор: | Иван [ 22 апр 2014, 16:57 ] |
Заголовок сообщения: | Re: Нужна помощь со скриптом предобработки для NAS |
Phricker, спасибо но Там очень не простой like Там есть java функция которая определяет sid в зависимости от to_number И перевести ее в sql, ну я б может и смог. Но подозреваю это не последний раз там изменения и дублировать не хочется. |
Автор: | Phricker [ 22 апр 2014, 16:59 ] |
Заголовок сообщения: | Re: Нужна помощь со скриптом предобработки для NAS |
А покажите ваши IFы. Все не надо ![]() |
Автор: | Иван [ 22 апр 2014, 17:05 ] |
Заголовок сообщения: | Re: Нужна помощь со скриптом предобработки для NAS |
Код: if (value.indexOf("0") == 0 ) { request.setOption( "service", 32 ); } if (value.indexOf("1") == 0 ) { request.setOption( "service", 31 ); if (value.length() == 3 ) { request.setOption( "service", 32 ); } } if (value.indexOf("2") == 0 ) { request.setOption( "service", 32 ); } if (value.indexOf("3") == 0 ) { request.setOption( "service", 32 ); } if (value.indexOf("4") == 0 ) { request.setOption( "service", 32 ); if (value.indexOf("4760") == 0 ) { request.setOption( "service", 31 ); if (value.indexOf("47601") == 0 ) { request.setOption( "service", 34 ); } } if (value.indexOf("4761") == 0 ) { request.setOption( "service", 31 ); } Я понимаю, что их наверно можно в sql загнать, но смотрите что меня останавливает: 1. Я хочу иметь одно место где буду это править. 2. Та логика что сейчас может и усложняться, если сейчас нет какой то проверки, то она может появится, например еще какой то атрибут с радиус пакета (я довольно сильно подозреваю что это будет cisco-NAS-Port= ...) поэтому хочется остаться тут внутри java. |
Автор: | Иван [ 23 апр 2014, 14:22 ] |
Заголовок сообщения: | Re: Нужна помощь со скриптом предобработки для NAS |
Код: public void main( setup, con, conSlave ) { ps_upd = con.prepareStatement("update log_session_14_201404 set sid=? where id=?"); query = "select id,to_number,sid from log_session_14_201404 order by id desc limit 20"; ps = con.prepareStatement( query ); rs = ps.executeQuery(); while(rs.next()){ int id=rs.getInt(1); String phone=rs.getString(2); int sid=rs.getInt(3); int real_sid=getSid(phone); if(sid!=real_sid) { ps_upd.setInt(1,real_sid); ps_upd.setInt(2,id); ps_upd.executeUpdate(); print (phone + "=>" + real_sid + " was " + sid ); } } } public int getSid(String value) { if (value.indexOf("0") == 0 ) { return 32; } if (value.indexOf("1") == 0 ) { if (value.length() == 3 ) { return 32; } return 31; } ... ... где функция getSid содержит стопицот моих if. Покритикуйте пожалуйста. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |