forum.bitel.ru http://forum.bitel.ru/ |
|
а как связать inet_connection_{mid} и contract? http://forum.bitel.ru/viewtopic.php?f=44&t=11444 |
Страница 1 из 1 |
Автор: | Galkov [ 14 мар 2016, 13:16 ] |
Заголовок сообщения: | а как связать inet_connection_{mid} и contract? |
а как связать inet_connection_{mid} и contract? вообще нужен список контрактов, у которых есть активные сессии pppoe с ip опеределённого диапазона. |
Автор: | nik247 [ 14 мар 2016, 13:28 ] |
Заголовок сообщения: | Re: а как связать inet_connection_{mid} и contract? |
Galkov писал(а): а как связать inet_connection_{mid} и contract? вообще нужен список контрактов, у которых есть активные сессии pppoe с ip опеределённого диапазона. Через servId в inet_connection_{mid}: Код: servId int(11) false id сервиса ipAddress varbinary(24) true ip адрес А servId описан в inet_serv_{mid}: Код: id int(11) false id сервиса
contractId int(11) false id договора |
Автор: | Galkov [ 14 мар 2016, 17:21 ] |
Заголовок сообщения: | Re: а как связать inet_connection_{mid} и contract? |
Почему-то ниже приведённый код не сбрасывает сессии... я правильное значение подставляю как id сессии? Код: Connection con = connectionSet2.getConnection();
Statement stmt = con.createStatement(); String SQL = "select is1.id as sessionID from contract c left join contract_balance cb on c.id=cb.cid left join inet_serv_1 is1 on is1.contractId = c.id left join inet_connection_1 ic1 on ic1.servId = is1.Id where ((cb.summa1+cb.summa2-cb.summa3-cb.summa4) >= 0) and (cb.yy = YEAR (NOW())) and (cb.mm=MONTH(NOW())) and (is1.id is not NULL) and (is1.deviceid=5) and (is1.dateFrom<NOW()) and (is1.dateTo>NOW() or (is1.dateTo is NULL)) and (ic1.deviceState=1) and (ic1.status IN (0,1,2)) and (ic1.acctSessionId is NOT NULL) and (INET_NTOA(CONV(HEX(ic1.ipAddress),16,10)) LIKE '10.225.%' )"; logger.debug(ARROW+SQL); ResultSet res = stmt.executeQuery(SQL); InetSessionDao ISD = new InetSessionDao(con,1); java.util.Date Dt = new java.util.Date(); while (res.next()) { long str = Long.parseLong(res.getString("sessionID")); if (RUMPEL) { if (ISD.closeSession(str, Dt)) { logger.info(ARROW+": сессия закрыта!"); } else { logger.info(ARROW+": какая-то ошибка с закрытием сессии"); } } else { logger.info(ARROW+res.getString("ID")+" "+res.getString("sessionID")+" "+Dt); logger.info(ARROW+": учебный режим!"); } } try { if (stmt != null) stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } |
Автор: | Phricker [ 14 мар 2016, 17:31 ] |
Заголовок сообщения: | Re: а как связать inet_connection_{mid} и contract? |
ic1.id |
Автор: | Galkov [ 14 мар 2016, 17:36 ] |
Заголовок сообщения: | Re: а как связать inet_connection_{mid} и contract? |
Phricker писал(а): ic1.id так тоже идёт через Код: logger.info(ARROW+": какая-то ошибка с закрытием сессии"); и сессия не закрыта. |
Автор: | Phricker [ 14 мар 2016, 18:50 ] |
Заголовок сообщения: | Re: а как связать inet_connection_{mid} и contract? |
Я сбрасываю так. Код: package ru.ellcom.bgbilling.scripts.inet;
import ru.bitel.bgbilling.kernel.container.managed.ServerContext; import ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase; import ru.bitel.bgbilling.modules.inet.api.common.service.InetServService; import ru.bitel.bgbilling.modules.inet.api.common.service.InetSessionService; import ru.bitel.bgbilling.server.util.Setup; import ru.bitel.common.sql.ConnectionSet; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; public class breakSessions extends GlobalScriptBase { static int INET_MID = 12; //ID модуля Inet @Override public void execute( Setup setup, ConnectionSet connectionSet ) throws Exception { Connection con = connectionSet.getConnection(); ServerContext context = ServerContext.get(); InetSessionService inetServ = context.getService(InetSessionService.class, INET_MID); int count = 0; print("Start"); long timeStart = System.currentTimeMillis(); //String query = " SELECT id FROM inet_connection_12 WHERE ipaddress BETWEEN UNHEX(CONV(INET_ATON('172.24.219.1'), 10, 16)) AND UNHEX(CONV(INET_ATON('172.24.255.255'), 10, 16)) AND STATUS = 1 "; String query = " SELECT id FROM inet_connection_12 WHERE STATUS = 1 AND deviceid = 1714 "; //String query = " SELECT * FROM inet_connection_12 WHERE STATUS = 1 AND accessCode > 0 "; PreparedStatement ps = con.prepareStatement( query ); ResultSet rs = ps.executeQuery(); while ( rs.next() ) { count++; long sessionId = rs.getInt( 1 ); //inetServ.connectionClose(sessionId); inetServ.connectionFinish(sessionId); } rs.close(); ps.close(); print("Сброшено " + count + " соединений"); long timeEnd = System.currentTimeMillis(); print( "Process time: " + (timeEnd - timeStart)/1000 + " s." ); } } |
Автор: | Galkov [ 14 мар 2016, 19:28 ] |
Заголовок сообщения: | Re: а как связать inet_connection_{mid} и contract? |
спасибо! Код: inetServ.connectionFinish(sessionId); работает. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |