forum.bitel.ru http://forum.bitel.ru/ |
|
Создание комментария при изменении сервиса [6.0] http://forum.bitel.ru/viewtopic.php?f=44&t=10081 |
Страница 1 из 1 |
Автор: | vkulakov [ 15 янв 2015, 21:20 ] | |||
Заголовок сообщения: | Создание комментария при изменении сервиса [6.0] | |||
На событие "Изменяется сервис договора" повесил скрипт, в котором по данным сервиса генерирую комментарий. В скрипте к текущему комментарию добавляю свои данные. В результате, если при сохранении сервиса в текущем комментарии указать что-нибудь, например, слово "тест", то после сохранения и открытия сервиса комментарий отображается нормально. Если при сохранении указать пустой комментарий, то после сохранения и открытия сервиса комментарий отображается серым цветом и курсивом, а при клике на комментарий он вовсе исчезает. Если закрыть/открыть договор, то комментарий отображается нормально и никуда не исчезает. Собственно, что это? Курсивом показывает точно не мой скрипт.
|
Автор: | stark [ 16 янв 2015, 12:04 ] |
Заголовок сообщения: | Re: Создание комментария при изменении сервиса [6.0] |
не понял, как связан скрипт и сохранение . |
Автор: | vkulakov [ 16 янв 2015, 12:10 ] |
Заголовок сообщения: | Re: Создание комментария при изменении сервиса [6.0] |
Скрипт повешен на событие "Изменяется сервис договора", которое вызывается при сохранении сервиса. |
Автор: | stark [ 16 янв 2015, 12:39 ] |
Заголовок сообщения: | Re: Создание комментария при изменении сервиса [6.0] |
покажите код скрипта |
Автор: | vkulakov [ 16 янв 2015, 13:41 ] |
Заголовок сообщения: | Re: Создание комментария при изменении сервиса [6.0] |
Код: package ru.xxx.inet;
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.List; import bitel.billing.common.IPUtils; 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.InetDevice; import ru.bitel.bgbilling.modules.inet.api.common.bean.InetDeviceType; import ru.bitel.bgbilling.modules.inet.api.common.bean.InetInterface; import ru.bitel.bgbilling.modules.inet.api.common.bean.InetServ; import ru.bitel.bgbilling.modules.inet.api.server.bean.InetDeviceDao; import ru.bitel.bgbilling.modules.inet.api.server.bean.InetDeviceTypeDao; import ru.bitel.bgbilling.modules.inet.api.server.event.InetServChangingEvent; import ru.bitel.bgbilling.server.util.Setup; import ru.bitel.common.Utils; import ru.bitel.common.sql.ConnectionSet; /** * <p>Генерирует логин и комментарий для сервисов модуля Inet и IPoE.</p> * <p>Компилировать и запускать нужно из динамического кода клиента биллинга. * Динамический код нужно привязать к событиям "Модуль Интернет => Изменяется сервис договора" и * "Модуль IPoE => Изменяется сервис договора" на вкладке "Функции скриптов поведения".</p> * @author "vkulakov <vkulakov@xxx.ru>" */ public class LoginGenerator extends EventScriptBase<InetServChangingEvent> implements EventScript<InetServChangingEvent> { private Connection conn; private int SUBNET_TYPE_ID = 4; private int IPOE_MODULE_ID = 27; private String IPOE_PASSWORD = "xxx"; @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(event.getModuleId() != IPOE_MODULE_ID && service.getTypeId() != SUBNET_TYPE_ID && (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); break; } } return; } if(event.getModuleId() == IPOE_MODULE_ID) { InetDeviceDao dd = new InetDeviceDao(conn, event.getModuleId()); InetDeviceTypeDao td = new InetDeviceTypeDao(conn, event.getModuleId()); InetDevice device = dd.get(service.getDeviceId()); InetDeviceType deviceType = td.get(device.getDeviceTypeId()); td.recycle(); dd.recycle(); InetInterface iface = null; for(InetInterface i : deviceType.getInterfaceList()) { if(i.getId() == service.getInterfaceId()) { iface = i; break; } } StringBuilder sb = new StringBuilder("nas-port"); sb.append(":"); sb.append(device.getHost().split(":")[0]); if(iface == null) { event.setError("Не задан интерфейс для сервиса"); return; } sb.append(":"); sb.append(iface.getTitle()); List<String> identifiers = service.getIdentifierList(); if(identifiers == null || identifiers.isEmpty()) { event.setError("Не заданы VLAN'ы для сервиса"); return; } if(identifiers.size() > 1) { event.setError("Задано слишком много VLAN'ов для сервиса"); return; } sb.append("/"); sb.append(identifiers.get(0)); PreparedStatement ps = conn.prepareStatement("" + "SELECT" + " id" + " FROM" + " inet_serv_" + event.getModuleId() + " WHERE" + " deviceId = ? AND" + " interfaceId = ? AND" + " identifier = ?"); ps.setInt(1, service.getDeviceId()); ps.setInt(2, service.getInterfaceId()); ps.setString(3, identifiers.get(0)); ResultSet rs = ps.executeQuery(); if(rs.first() && rs.getInt("id") != service.getId()) { event.setError("Сервис с такими VLAN'ами уже существует: " + contract.getTitle()); return; } String c = service.getComment(); StringBuilder comment; if(Utils.isBlankString(c)) { comment = new StringBuilder(""); } else { comment = new StringBuilder(c.replaceAll("(?s)---.*?IP.*?Маска.*?Шлюз.*?DNS.*?---\\s*", "").trim()); } int addressFrom = Utils.convertBytesToInt(service.getAddressFrom()); int addressTo = Utils.convertBytesToInt(service.getAddressTo()); if(addressTo - addressFrom < 3) { event.setError("Задана слишком маленькая подсеть для сервиса"); return; } comment.append("\n---\n"); comment.append("IP: "); if(addressTo - addressFrom == 3) { comment.append(IPUtils.convertIpToString(addressFrom + 2)); } else { comment.append(IPUtils.convertIpToString(addressFrom + 2)); comment.append(" - "); comment.append(IPUtils.convertIpToString(addressTo - 1)); } comment.append("\n"); comment.append("Маска: "); comment.append(IPUtils.convertIpToString(~(addressFrom ^ addressTo))); comment.append("\n"); comment.append("Шлюз: "); comment.append(IPUtils.convertIpToString(addressFrom + 1)); comment.append("\n"); comment.append("DNS: "); comment.append("x.x.x.x, x.x.x.x"); comment.append("\n"); comment.append("---"); comment.append("\n"); if(comment.length() > 250) { event.setError("Задан слишком длинный комментарий для сервиса - " + comment.length()); return; } service.setLogin(sb.toString()); service.setPassword(IPOE_PASSWORD); service.setComment(comment.toString()); return; } } } |
Автор: | vkulakov [ 16 янв 2015, 16:43 ] |
Заголовок сообщения: | Re: Создание комментария при изменении сервиса [6.0] |
Что скажете? |
Автор: | Amir [ 16 янв 2015, 19:11 ] |
Заголовок сообщения: | Re: Создание комментария при изменении сервиса [6.0] |
Похоже, проблема в самом компоненте отображения. Исправим в ближайшее время. |
Автор: | Amir [ 23 янв 2015, 18:39 ] |
Заголовок сообщения: | Re: Создание комментария при изменении сервиса [6.0] |
В следующем билде должно быть нормально. |
Автор: | vkulakov [ 27 янв 2015, 13:17 ] |
Заголовок сообщения: | Re: Создание комментария при изменении сервиса [6.0] |
Спасибо, если не забуду - проверю. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |