BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 27 апр 2024, 19:10

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
СообщениеДобавлено: 07 фев 2017, 11:45 
Не в сети

Зарегистрирован: 01 мар 2013, 09:18
Сообщения: 46
Карма: 5
Доброго дня.

Имеем billing 6.1
Сервер: вер. 6.1.1177 / 19.08.2016 11:58:42
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.7.0_80
inet: вер. 6.1.734 / 22.06.2016 13:23:18

Хочу реализовать скрипт присвоения статической записи IP в случае если абонент получил IP из определенного пула.

import ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;
import bitel.billing.server.contract.bean.Contract;
import bitel.billing.server.contract.bean.ContractManager;
import java.util.Date;
import java.util.GregorianCalendar;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.sql.Statement;
import java.util.List;
import java.lang.String;
import ru.bitel.bgbilling.modules.inet.api.server.bean.InetServDao;
import ru.bitel.bgbilling.modules.inet.api.common.bean.InetServ;
import ru.bitel.bgbilling.modules.inet.api.server.bean.InetConnectionDao;
import ru.bitel.bgbilling.modules.inet.api.common.bean.InetConnection;
import ru.bitel.oss.systems.inventory.resource.common.bean.IpResourceSubscription;
import ru.bitel.oss.systems.inventory.resource.server.bean.IpResourceSubscriptionDao;
import ru.bitel.bgbilling.modules.inet.api.server.bean.InetServDao;
import ru.bitel.bgbilling.kernel.container.managed.ServerContext;
import ru.bitel.bgbilling.modules.inet.api.common.service.InetServService;
import ru.bitel.bgbilling.modules.inet.api.common.bean.InetServOption;

public class statusTest extends GlobalScriptBase
{
int resourceId = 27;
int modileId = 9;

@Override
public void execute( Setup setup1, ConnectionSet connectionSet2 )
throws Exception
{
int cid = 2842;
//int cid = 69744;

Connection con = connectionSet2.getConnection();
ServerContext sc = new ServerContext(setup1, modileId, 0);
InetConnectionDao connect = new InetConnectionDao(con, modileId);
IpResourceSubscriptionDao ird = new IpResourceSubscriptionDao(con, modileId);
InetServService iss = sc.getService(InetServService.class, modileId);
List<InetServ> isl = iss.inetServList(cid);
for(InetServ is :isl){
List<InetConnection> icl = connect.list(is.getId());
IpResourceSubscription ir = ird.findSubscribed(is.getId());
if(ir == null){
for(InetConnection ic : icl){
System.out.println(is.getIpResourceId() + "/" + ic.getIpResourceId());
if(is.getIpResourceId() == 0 && ic.getIpResourceId() == resourceId){
is.setIpResourceId(resourceId);
is.setAddressFrom(ic.getInetAddressBytes());
iss.inetServUpdate(is, new ArrayList<InetServOption>(), false, false, 0);
}
}
}
}
sc.recycle();
}
}


Проблема в том, что iss.inetServUpdate создает запись в inv_ip_resource_subscription_9 но не изменяет inet_serv_9 поля ipResourceId и IpResourceSubscribeId.
Насколько видно из реализации InetServServiceImpl.inetServUpdateInternal в нем есть вызов:
String titlePattern = this.getTitlePattern(inetServ, servTypeConfig, device);
inetServ.setTitle(titlePattern);
this.inetServDao.update(inetServ);
this.inetServOptionDao.update(inetServ.getId(), optionList);

Не подскажете как правильно сохранить ItemServ чтобы присваивались изменения из is?
А в частности:
is.setIpResourceId(resourceId);
is.setAddressFrom(ic.getInetAddressBytes());
и id из inv_ip_resource_subscription_9


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07 фев 2017, 12:20 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Код:
ServerContext context = ServerContext.get();
        ResourceService resourceService = context.getService(ResourceService.class, 12);
        InetServService inetServService = context.getService(InetServService.class, 12);
        ArrayList<Integer> ipResourceCategoryIds = new ArrayList<Integer>();
        ipResourceCategoryIds.add(55);
        List<IpResourceRange> freeIpResourceRangeList = resourceService.freeIpResourceRangeList(ipResourceCategoryIds, null, new Date(), new Date(), 1, 1);
        if (!freeIpResourceRangeList.isEmpty()) {
            inetServService.inetServList(304741, null);
            InetServ inetServ = inetServService.inetServGet(317359);
            inetServ.setAddressFrom(freeIpResourceRangeList.get(0).getAddressFrom());
            inetServ.setAddressTo(freeIpResourceRangeList.get(0).getAddressTo());
            inetServService.inetServUpdate(inetServ, new ArrayList<InetServOption>(), false, false, 0);
        }

Такой код прописывает в таблицу.

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07 фев 2017, 16:35 
Не в сети

Зарегистрирован: 01 мар 2013, 09:18
Сообщения: 46
Карма: 5
Да. Но тут есть существенная разница. Я говорю о изменению существующего сервиса.
Переписал середку скрипта:

InetServ oldIs = is.clone();
InetSubscriber isb = new InetSubscriber(con, modileId);
IpResourceSubscription ips = isb.add(cid, is, resourceId, ic.getInetAddressBytes());
is.setAddressFrom(ic.getInetAddressBytes());
is.setIpResourceSubscriptionId(ips.getId());
InetServWrapper isw = new InetServWrapper(con, modileId);
isw.update(is);
EventProcessor.getInstance().request(new InetServChangingEvent(modileId, userId, oldIs, is));
sc.publishAfterCommit(new InetServModifiedEvent(modileId, cid, userId, oldIs, is, new ArrayList<InetServOption>()));


InetServWrapper

import ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase;
import ru.bitel.bgbilling.server.util.Setup;
import java.sql.Connection;
import ru.bitel.bgbilling.modules.inet.api.server.bean.InetServDao;
import ru.bitel.bgbilling.modules.inet.api.common.bean.InetServ;

public class InetServWrapper extends InetServDao
{
public InetServWrapper(Connection con, int modileId)
{
super(con, modileId);
}

public void Update(InetServ is) throws Exception
{
this.updateImpl( is );
}
}


InetSubscriber

import bitel.billing.server.contract.bean.ContractUtils;
import ru.bitel.bgbilling.modules.inet.api.common.bean.InetServ;
import java.sql.Connection;
import java.util.Date;

import ru.bitel.oss.systems.inventory.resource.common.bean.IpResourceSubscription;
import ru.bitel.oss.systems.inventory.resource.server.bean.IpResourceSubscriptionDao;

public class InetSubscriber extends IpResourceSubscriptionDao
{
public InetSubscriber(Connection con, int modileId)
{
super(con, modileId);
}

public void Update(IpResourceSubscription ips) throws Exception
{
this.updateImpl( ips );
}

public IpResourceSubscription add(int cid, InetServ is, int resourceId, byte[] address) throws Exception{
ContractUtils cu = new ContractUtils(this.con);
String subscriberTitle = cu.getContractTitle(cid, true) + ";" + is.getTitle();
IpResourceSubscription ips = new IpResourceSubscription();
ips.setSubscriberTitle(subscriberTitle);
ips.setIpResourseId(resourceId);
ips.setAddressFrom(address);
ips.setAddressTo(address);
ips.setDateFrom(new Date());
ips.setSubscriberId(is.getId());
this.update(ips);
return ips;
}
}


Создание записи IpResourceSubscription работает.
Обновление записи InetServ работает.
Но публикация изменений по прежнему не работает.
Может кто скажет что не так в вызываемых мною событиях так как это события из InetServServiceImpl.inetServUpdateInternal которые вызываются в примере где работает.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07 фев 2017, 16:50 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
а я про что говорил?
Код:
InetServ inetServ = inetServService.inetServGet(317359);

получает текущий сервис с ID = 317359

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 фев 2017, 08:08 
Не в сети

Зарегистрирован: 01 мар 2013, 09:18
Сообщения: 46
Карма: 5
Phricker писал(а):
а я про что говорил?
Код:
InetServ inetServ = inetServService.inetServGet(317359);

получает текущий сервис с ID = 317359

Я пробовал добавить получение нового сервиса после обновления старого. К сожалению это не помогло.
InetServWrapper isw = new InetServWrapper(con, modileId);
isw.update(is);
InetServ newIs = iss.inetServGet(is.getId());
EventProcessor.getInstance().request(new InetServChangingEvent(modileId, userId, oldIs, newIs));
sc.publishAfterCommit(new InetServModifiedEvent(modileId, cid, userId, oldIs, newIs, new ArrayList<InetServOption>()));


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 фев 2017, 11:32 
Не в сети

Зарегистрирован: 01 мар 2013, 09:18
Сообщения: 46
Карма: 5
Изменил логику для работы по папке inv_device
public class statusTest extends GlobalScriptBase
{
int resourceTypeId = 9;
int resourceId = 27;
int moduleId = 9;
int userId= 0;

@Override
public void execute( Setup setup1, ConnectionSet connectionSet2 )
throws Exception
{
Connection con = connectionSet2.getConnection();
Statement statement = con.createStatement();
ArrayList<Integer> cids = new ArrayList<Integer>();

ResultSet rs = statement.executeQuery(
" SELECT " +
" is9.contractId as id " +
" FROM inv_device_9 id9 " +
" join inet_serv_9 is9 on is9.deviceId = id9.id " +
" where id9.parentId = 782 "
);
while(rs.next()){
cids.add(rs.getInt("id"));
}

ServerContext sc = new ServerContext(setup1, moduleId, userId);
ResourceService resourceService = sc.getService(ResourceService.class, sc.getModuleId());
ArrayList<Integer> ipResourceCategoryIds = new ArrayList<Integer>();
ipResourceCategoryIds.add(resourceTypeId);
ArrayList<Integer> ipResourceIds = new ArrayList<Integer>();
ipResourceIds.add(resourceId);
List<IpResourceRange> freeIpResourceRangeList = resourceService.freeIpResourceRangeList(ipResourceCategoryIds, ipResourceIds, new Date(), new Date(), 1, 512);
System.out.println("Обработаем: " + cids + "\n");
InetConnectionDao connect = new InetConnectionDao(con, moduleId);
IpResourceSubscriptionDao ird = new IpResourceSubscriptionDao(con, moduleId);
InetServService iss = sc.getService(InetServService.class, moduleId);
for(Integer cid : cids){
List<InetServ> isl = iss.inetServList(cid);
for(InetServ is :isl){
IpResourceSubscription ir = ird.findSubscribed(is.getId());
if(ir == null && is.getIpResourceId() == 0){
List<InetConnection> icl = connect.list(is.getId());
System.out.println("Текущие соединения: " + icl + "\n");
if(icl.isEmpty()){
InetServ oldIs = is.clone();
InetSubscriber isb = new InetSubscriber(con, moduleId);
IpResourceSubscription ips = isb.addFreeIp(cid, is, resourceId, freeIpResourceRangeList);
is.setAddressFrom(ips.getAddressFrom());
is.setIpResourceSubscriptionId(ips.getId());
InetServWrapper isw = new InetServWrapper(con, moduleId);
isw.update(is);
InetServ newIs = iss.inetServGet(is.getId());
EventProcessor.getInstance().request(new InetServChangingEvent(moduleId, userId, oldIs, is));
sc.publishAfterCommit(new InetServModifiedEvent(moduleId, cid, userId, oldIs, is, new ArrayList<InetServOption>()));
System.out.println("Добавим к cid:" + cid + " новый IP: " + IpAddress.toString(ips.getAddressFrom()) + "\n");
} else {
for(InetConnection ic : icl){
if(is.getIpResourceId() == 0 && ic.getIpResourceId() == resourceId){
InetServ oldIs = is.clone();
InetSubscriber isb = new InetSubscriber(con, moduleId);
IpResourceSubscription ips = isb.add(cid, is, resourceId, ic.getInetAddressBytes());
is.setAddressFrom(ic.getInetAddressBytes());
is.setIpResourceSubscriptionId(ips.getId());
InetServWrapper isw = new InetServWrapper(con, moduleId);
isw.update(is);
InetServ newIs = iss.inetServGet(is.getId());
EventProcessor.getInstance().request(new InetServChangingEvent(moduleId, userId, oldIs, is));
sc.publishAfterCommit(new InetServModifiedEvent(moduleId, cid, userId, oldIs, is, new ArrayList<InetServOption>()));
System.out.println("Добавим к cid:" + cid + " выданный IP: " + IpAddress.toString(ips.getAddressFrom()) + "\n");
}
}
}
}
}
}
sc.recycle();
}
}


InetSubscriber

public class InetSubscriber extends IpResourceSubscriptionDao
{

public InetSubscriber(Connection con, int modileId)
{
super(con, modileId);
}

public void Update(IpResourceSubscription ips) throws Exception
{
this.updateImpl( ips );
}

public IpResourceSubscription add(int cid, InetServ is, int resourceId, byte[] address) throws Exception{
ContractUtils cu = new ContractUtils(this.con);
String subscriberTitle = cu.getContractTitle(cid, true) + ";" + is.getTitle();
IpResourceSubscription ips = new IpResourceSubscription();
ips.setSubscriberTitle(subscriberTitle);
ips.setIpResourseId(resourceId);
ips.setAddressFrom(address);
ips.setAddressTo(address);
ips.setSubscriberId(is.getId());
this.update(ips);
return ips;
}

public IpResourceSubscription addFreeIp(int cid, InetServ is, int resourceId, List<IpResourceRange> freeIpResourceRangeList) throws Exception
{
ContractUtils cu = new ContractUtils(this.con);
String subscriberTitle = cu.getContractTitle(cid, true) + ";" + is.getTitle();
IpResourceSubscription ips = new IpResourceSubscription();
if (!freeIpResourceRangeList.isEmpty()) {
ips.setSubscriberTitle(subscriberTitle);
ips.setIpResourseId(resourceId);
ips.setAddressFrom(freeIpResourceRangeList.get(0).getAddressFrom());
ips.setAddressTo(freeIpResourceRangeList.get(0).getAddressTo());
freeIpResourceRangeList.remove(0);
ips.setSubscriberId(is.getId());
this.update(ips);
}
return ips;
}
}


Возникла новая проблема. resourceService.freeIpResourceRangeList() возвращает уже присвоенный на inetServ Ip адрес.
Имеется запись с данным Ip в таблице inv_ip_resource_subscription_9 с указанной датой окончания сервиса http://joxi.ru/DrlNvxgFvvZVB2
При установке в клиенте биллинга этого ip адреса пишет что существует конфликт ip с данным договором.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 09 фев 2017, 09:28 
Не в сети

Зарегистрирован: 01 мар 2013, 09:18
Сообщения: 46
Карма: 5
Тут даже просто если в договоре имеется статическая привязка IP c закрытым сервисом. http://joxi.ru/l2Z1Xz4TwwOXLm
То при добавлении в новый сервис имею ошибку http://joxi.ru/eAOlL8zIxxQVdr
Я думаю это связано с тем что при построении интервалов использования IP используется дата начала сервиса, а не запись в inv_ip_resource_subscription_9;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 09 фев 2017, 10:32 
Не в сети

Зарегистрирован: 01 мар 2013, 09:18
Сообщения: 46
Карма: 5
В результате того что биллинг считает активный интервал статического IP по датам активности сервиса, невозможно отделить
интервал активности статического IP от активности сервиса.
Пришлось удалить статические записи IP из закрытых сервисов.
Тему можно закрывать.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
POWERED_BY
Русская поддержка phpBB
[ Time : 0.078s | 35 Queries | GZIP : On ]