Изменил логику для работы по папке 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 с данным договором.