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пасибо за скрипт, но ругается на что-то

Вложения:
5.png
5.png [ 85.33 КБ | Просмотров: 7740 ]

Автор:  vkulakov [ 30 сен 2015, 12:08 ]
Заголовок сообщения:  Re: Логин и пароль

Трудно сказать, почему ему не нравиться угловая скобочка. Попробуйте удалить <InetServChangingEvent> в определении класса.

Автор:  lexusrid [ 30 сен 2015, 12:34 ]
Заголовок сообщения:  Re: Логин и пароль

В управлении динамическим кодом при компиляции тоже ругается

Вложения:
6.png
6.png [ 64.69 КБ | Просмотров: 7736 ]

Автор:  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: Логин и пароль

Хотел сделать, чтобы выдавалась ошибка в клиенте если такой логин уже есть.
Плюс немножко переписал.
Но не пошло. Ошибка бросается и есть в логах, но в клиенте не отображается.
Но не пропадать же добру :D


Код:
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: Логин и пароль

Ошибка бросается, но ее не видно в клиенте.
А я думал таким образом может покажется :D

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/