Код:
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
Для вашей версии могут потребоваться изменения.