forum.bitel.ru http://forum.bitel.ru/ |
|
Логин и пароль http://forum.bitel.ru/viewtopic.php?f=44&t=10936 |
Страница 1 из 1 |
Автор: | lexusrid [ 29 сен 2015, 13:33 ] |
Заголовок сообщения: | Логин и пароль |
Добрый день. Подскажите пожалуйста, при добавлении нового договора в bgbilling ему навешивается модуль inet с сервисом, где присутствует логин и пароль, возможно ли при добавлении договора автоматически в качестве логина для сервиса модуля Inet подставлять номер договора а в качестве пароля пароль статистики? |
Автор: | Amir [ 29 сен 2015, 13:40 ] |
Заголовок сообщения: | Re: Логин и пароль |
Сейчас вроде бы только повесить скрипт предобработки на сохранение сервиса. |
Автор: | lexusrid [ 29 сен 2015, 14:06 ] |
Заголовок сообщения: | Re: Логин и пароль |
Случаем нет ли у Вас такого скрипта, в скриптах не силен |
Автор: | vkulakov [ 29 сен 2015, 18:00 ] |
Заголовок сообщения: | Re: Логин и пароль |
Код: package ru.xxx.inet; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import bitel.billing.server.contract.bean.Contract; import bitel.billing.server.contract.bean.ContractManager; import ru.bitel.bgbilling.kernel.script.server.dev.EventScript; import ru.bitel.bgbilling.kernel.script.server.dev.EventScriptBase; import ru.bitel.bgbilling.modules.inet.api.common.bean.InetServ; import ru.bitel.bgbilling.modules.inet.api.server.event.InetServChangingEvent; import ru.bitel.bgbilling.server.util.Setup; import ru.bitel.common.sql.ConnectionSet; /** * <p>Генерирует логин и комментарий для сервисов модуля Inet.</p> * <p>Компилировать и запускать нужно из динамического кода клиента биллинга. * Динамический код нужно привязать к событию "Модуль Интернет => Изменяется сервис договора" * на вкладке "Функции скриптов поведения".</p> */ public class LoginGeneratorPub extends EventScriptBase<InetServChangingEvent> implements EventScript<InetServChangingEvent> { private Connection conn; @Override public void onEvent(InetServChangingEvent event, Setup setup, ConnectionSet connectionSet) throws Exception { conn = connectionSet.getConnection(); ContractManager cm = new ContractManager(conn); Contract contract = cm.getContractById(event.getContractId()); InetServ service = event.getInetServ(); cm.recycle(); String login = service.getLogin(); if(login.isEmpty() || login.equals("999999")) { String prefix = contract.getTitle(); login = prefix; PreparedStatement ps = connectionSet.getConnection().prepareStatement("SELECT id FROM inet_serv_" + event.getModuleId() + " WHERE login = ?"); for(int i = 0; true; i++, login = prefix + "_" + i) { ps.setString(1, login); ResultSet rs = ps.executeQuery(); if(!rs.first() || rs.getInt("id") == service.getId()) { service.setLogin(login); service.setPassword("passw0rd"); break; } } return; } } } Генерирует логин сервиса Inet из номера договора и подставляет пароль. Если передан не пустой логин, то новый логин не генерируется, если просто пересохраняем сервис, то логин не генерируется. В конфиге модуля Inet нужно прописать: Код: # Параметры автоматической генерации логина для сервиса # минимальное значение логина при генерации логина serv.login.min=999999 # максимальное значение логина при генерации логина (т.е. если в базе присутствуют логины 1,2,3 и 10000000, # то при генерации создастся логин 4, а не 10000001) serv.login.max=999999 Для вашей версии могут потребоваться изменения. |
Автор: | lexusrid [ 30 сен 2015, 11:42 ] | ||
Заголовок сообщения: | Re: Логин и пароль | ||
Cпасибо за скрипт, но ругается на что-то
|
Автор: | vkulakov [ 30 сен 2015, 12:08 ] |
Заголовок сообщения: | Re: Логин и пароль |
Трудно сказать, почему ему не нравиться угловая скобочка. Попробуйте удалить <InetServChangingEvent> в определении класса. |
Автор: | lexusrid [ 30 сен 2015, 12:34 ] | ||
Заголовок сообщения: | Re: Логин и пароль | ||
В управлении динамическим кодом при компиляции тоже ругается
|
Автор: | stark [ 30 сен 2015, 14:53 ] |
Заголовок сообщения: | Re: Логин и пароль |
lexusrid писал(а): Cпасибо за скрипт, но ругается на что-то вам дали динамических код, а вы его как bgbs пытаетесь использовать. |
Автор: | stark [ 30 сен 2015, 14:55 ] |
Заголовок сообщения: | Re: Логин и пароль |
lexusrid писал(а): В управлении динамическим кодом при компиляции тоже ругается LoginGereratorPub должно быть именем класса. |
Автор: | lexusrid [ 30 сен 2015, 15:07 ] |
Заголовок сообщения: | Re: Логин и пароль |
Спасибо всем огромное, разобрались, все теперь работает как надо |
Автор: | vkulakov [ 30 сен 2015, 16:43 ] |
Заголовок сообщения: | Re: Логин и пароль |
lexusrid писал(а): Спасибо всем огромное, разобрались, все теперь работает как надо Уверены, что "как надо"? Слишком быстро ответили. Считаю, что такие вещи надо хорошо тестировать, со всех сторон. И при создании договора проверить, и при создании отдельно сервиса, и при изменении существующего сервиса, и с пустым логином, и с заполненным и т. п. А то в неожиданном месте вылезет, и в авральном режиме придётся всё исправлять. |
Автор: | Phricker [ 30 сен 2015, 17:29 ] |
Заголовок сообщения: | Re: Логин и пароль |
а еще добавить Код: rs.close(); ps.close(); и пароль правильный ставить. |
Автор: | vkulakov [ 30 сен 2015, 17:45 ] |
Заголовок сообщения: | Re: Логин и пароль |
Phricker писал(а): а еще добавить Код: rs.close(); ps.close(); А ведь и правда, close() не хватает. Свой код поправил... И опять плюс поставить не могу... ![]() |
Автор: | Phricker [ 01 окт 2015, 00:36 ] |
Заголовок сообщения: | Re: Логин и пароль |
Хотел сделать, чтобы выдавалась ошибка в клиенте если такой логин уже есть. Плюс немножко переписал. Но не пошло. Ошибка бросается и есть в логах, но в клиенте не отображается. Но не пропадать же добру ![]() Код: package ru.ellcom.modules.inet; import java.sql.Connection; import java.util.List; import bitel.billing.server.contract.bean.Contract; import bitel.billing.server.contract.bean.ContractManager; import ru.bitel.bgbilling.common.BGMessageException; import ru.bitel.bgbilling.kernel.script.server.dev.EventScript; import ru.bitel.bgbilling.kernel.script.server.dev.EventScriptBase; import ru.bitel.bgbilling.modules.inet.api.common.bean.InetServ; import ru.bitel.bgbilling.modules.inet.api.server.bean.InetServDao; import ru.bitel.bgbilling.modules.inet.api.server.event.InetServChangingEvent; import ru.bitel.bgbilling.server.util.Setup; import ru.bitel.common.sql.ConnectionSet; /** * Генерирует логин и комментарий для сервисов модуля Inet. * Компилировать и запускать нужно из динамического кода клиента биллинга. * Динамический код нужно привязать к событию "Модуль Интернет => Изменяется сервис договора" * на вкладке "Функции скриптов поведения". */ public class LoginGeneratorPub extends EventScriptBase<InetServChangingEvent> implements EventScript<InetServChangingEvent> { private Connection con; @Override public void onEvent(InetServChangingEvent event, Setup setup, ConnectionSet connectionSet) throws Exception { con = connectionSet.getConnection(); ContractManager cm = new ContractManager(con); InetServDao inetServDao = new InetServDao(setup, con, event.getModuleId(), event.getUserId()); Contract contract = cm.getContractById(event.getContractId()); InetServ service = event.getInetServ(); String newLogin = contract.getTitle(); String newPassword = contract.getPswd(); cm.recycle(); List<InetServ> list = inetServDao.list(newLogin, service.getDateFrom(), service.getDateTo()); for (InetServ s : list) if (s.getId() != service.getId()) { throw new BGMessageException("Логин " + newLogin + " уже используется"); } service.setLogin(newLogin); service.setPassword(newPassword); inetServDao.update(service); } } Код: script 09-30/21:30:47 ERROR [http-bio-0.0.0.0-8080-exec-6] ScriptEventListener - java.util.concurrent.ExecutionException: java.security.PrivilegedActionException: java.lang.Exception: ru.bitel.bgbilling.common.BGMessageException: Логин 1
01000009 уже используется |
Автор: | vkulakov [ 01 окт 2015, 12:12 ] |
Заголовок сообщения: | Re: Логин и пароль |
Если логин уже используется, то ошибка бросается стандартной логикой биллинга и в скрипте её выкидывать не обязательно. Ну и через list, конечно, более правильно. А зачем inetServDao.update(service) добавили? Вроде здесь не нужно. И если добавили, то нужно евенты кидать. Лучше тогда переписать на InetServService. |
Автор: | Phricker [ 01 окт 2015, 12:15 ] |
Заголовок сообщения: | Re: Логин и пароль |
Ошибка бросается, но ее не видно в клиенте. А я думал таким образом может покажется ![]() |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |