New file |
| | |
| | | package com.whyc.constant; |
| | | |
| | | /** |
| | | * 设备常量 |
| | | */ |
| | | public class DeviceConstant { |
| | | |
| | | //6185设备工作状态对应关系workState |
| | | final public static int DEV_ONLINE_CHARGE=0; //在线浮充 |
| | | final public static int DEV_PRE_CHARGE=1; //预充电 |
| | | final public static int DEV_NUCLEAR_CAP=2; //核容测试 |
| | | final public static int DEV_POWER_CUT=3; //停电测试 |
| | | final public static int DEV_RES_TEST=4; //内阻测试 |
| | | final public static int DEV_KD_TEST=5; //kd测试 |
| | | |
| | | } |
| | |
| | | |
| | | //查询分级告警的个数 |
| | | int serchByLevel(@Param("alarmLevel") int alarmLevel, @Param("uId") int uId); |
| | | |
| | | Integer getAlarmHighLow(@Param(value = "userId")int userId, @Param(value = "almSignalId")int almSignalId); |
| | | |
| | | } |
| | |
| | | |
| | | //查询分级告警的个数 |
| | | int serchByLevel(@Param("alarmLevel") int alarmLevel, @Param("uId") int uId, @Param("almTypes") List<Integer> almTypes); |
| | | |
| | | List<PwrdevAlarm> getAnalysis(int userId, List<Integer> types); |
| | | |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.github.pagehelper.PageHelper; |
| | | import com.github.pagehelper.PageInfo; |
| | | import com.whyc.constant.AlarmConstant; |
| | | import com.whyc.dto.AlarmDaoFactory; |
| | | import com.whyc.dto.BattMaintDealarm; |
| | | import com.whyc.dto.Response; |
| | |
| | | } |
| | | return new Response().setII(1, list.size() > 0, list, "分级告警数"); |
| | | } |
| | | |
| | | /** |
| | | * 单体容量 monCapStd |
| | | * alm_id |
| | | * Alarm_CapAlarm =119010 |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | public Response<Map> getMonCapacityLowAnalysis(int userId) { |
| | | Response<Map> response = new Response(); |
| | | Map<String, Object> resultMap = new HashMap<>(); |
| | | |
| | | try { |
| | | //单体容量低告警数和对应的告警机房数 |
| | | //BatteryAlarmDto batteryAlarmDto = mapper.getLowCapacityAlarms(userId,AlarmConstant.Alarm_IGNAL_ID_CapAlarmLow); |
| | | //int alarmNum = batteryAlarmDto.getNum(); |
| | | Integer alarmLow = mapper.getAlarmHighLow(userId, AlarmConstant.Alarm_IGNAL_ID_CapAlarmLow); |
| | | Integer alarmHigh = mapper.getAlarmHighLow(userId, AlarmConstant.Alarm_IGNAL_ID_CapAlarmHigh); |
| | | //int stationNum = batteryAlarmDto.getStationNum(); |
| | | //总告警数 |
| | | //Integer totalAlarmNum = mapper.getTotalAlarms(userId); |
| | | //总机房数 |
| | | //int totalStationNum = infoMapper.getStationCount(userId); |
| | | |
| | | //容量低告警占比 |
| | | //String capLowRateStr = (String) MathUtil.divide(alarmNum,totalAlarmNum,3); |
| | | //容量低告警机房占比 |
| | | //String capLowStationRateStr = (String) MathUtil.divide(stationNum,totalStationNum,3); |
| | | |
| | | resultMap.put("单体容量低告警",alarmLow); |
| | | resultMap.put("单体容量高告警",alarmHigh); |
| | | //resultMap.put("告警总数",totalAlarmNum); |
| | | //resultMap.put("告警占比",capLowRateStr); |
| | | |
| | | //resultMap.put("告警机房数",alarmNum); |
| | | //resultMap.put("告警机房占比",capLowStationRateStr); |
| | | |
| | | response.set(1, resultMap); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return response.set(0); |
| | | } |
| | | return response; |
| | | } |
| | | |
| | | /** |
| | | * 单体电压、内阻和温度 |
| | | * alm_id 电池告警参数 |
| | | * 三个告警总数不同,带条件?电压、内阻、温度 |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | public Response<Map> getMonVRTAnalysis(int userId) { |
| | | |
| | | Response<Map> response = new Response(); |
| | | HashMap<String, Object> resultMap = new HashMap<>(); |
| | | Map<String, Object> monVolMap = new HashMap<>();//单体电压 Alarm_vol_Monomer =119005; |
| | | Map<String, Object> monResMap = new HashMap<>();//单体内阻 Alarm_res_Monomer =119007 |
| | | Map<String, Object> monTemMap = new HashMap<>();//单体温度 Alarm_tmp_Monomer =119006 |
| | | |
| | | /*======单体电压======*/ |
| | | |
| | | //高告警数量 |
| | | Integer volHighAlarmsNum = mapper.getAlarmHighLow(userId,AlarmConstant.ALM_SIGNAL_ID_MonVolHigh); |
| | | //低告警数量 |
| | | Integer volLowAlarmsNum = mapper.getAlarmHighLow(userId,AlarmConstant.ALM_SIGNAL_ID_MonVolLow); |
| | | |
| | | //单体电压总告警数 |
| | | //Integer volTotalAlarmNum = volHighAlarmsNum+volLowAlarmsNum; |
| | | |
| | | //告警总数 |
| | | //Integer totalStationAlarmNum =mapper.getTotalAlarms(userId); |
| | | |
| | | //电压告警机房数 |
| | | //int volTotalAlarmStations = mapper.getTotalAlarmStations(userId,AlarmConstant.Alarm_vol_Monomer); |
| | | |
| | | //总机房数 |
| | | //int totalStationNum = infoMapper.getStationCount(userId); |
| | | |
| | | //电压告警占比 |
| | | //String volRateStr = (String) MathUtil.divide(volTotalAlarmNum,totalStationAlarmNum,3); |
| | | //电压告警机房占比 |
| | | //String volStationRateStr = (String) MathUtil.divide(volTotalAlarmStations,totalStationNum,3); |
| | | |
| | | |
| | | monVolMap.put("单体电压高告警", volHighAlarmsNum); //高告警数量 alm_signal_id 9 |
| | | monVolMap.put("单体电压低告警", volLowAlarmsNum); //低告警数量 alm_signal_id 10 |
| | | //monVolMap.put("告警总数", volTotalAlarmNum); //告警总数 |
| | | //monVolMap.put("告警总数比例", volRateStr); //告警总数比例 |
| | | //monVolMap.put("告警机房总数", volTotalAlarmStations); //告警机房总数 |
| | | //monVolMap.put("告警机房数比例", volStationRateStr); //告警机房数比例 |
| | | resultMap.put("单体电压", monVolMap); |
| | | |
| | | |
| | | |
| | | /*======单体内阻======*/ |
| | | |
| | | //高告警数量 |
| | | Integer resHighAlarmsNum = mapper.getAlarmHighLow(userId,AlarmConstant.ALM_SIGNAL_ID_MonResHigh); |
| | | //低告警数量 |
| | | Integer resLowAlarmsNum = mapper.getAlarmHighLow(userId,AlarmConstant.ALM_SIGNAL_ID_MonResLow); |
| | | |
| | | //单体内阻总告警数 |
| | | //Integer resTotalAlarmNum = resHighAlarmsNum+resLowAlarmsNum; |
| | | |
| | | //内阻告警机房数 |
| | | //int resTotalAlarmStations = mapper.getTotalAlarmStations(userId,AlarmConstant.Alarm_res_Monomer); |
| | | |
| | | //内阻告警占比 |
| | | //String resRateStr = (String) MathUtil.divide(resTotalAlarmNum,totalStationAlarmNum,3); |
| | | //内阻告警机房占比 |
| | | //String resStationRateStr = (String) MathUtil.divide(resTotalAlarmStations,totalStationNum,3); |
| | | |
| | | monResMap.put("单体内阻高告警", resHighAlarmsNum); //高告警数量 alm_signal_id 13 |
| | | monResMap.put("单体内阻低告警", resLowAlarmsNum); //低告警数量 alm_signal_id 14 |
| | | //monResMap.put("告警总数", resTotalAlarmNum); //告警总数 |
| | | //monResMap.put("告警总数比例", resRateStr); //告警总数比例 |
| | | //monResMap.put("告警机房总数", resTotalAlarmStations); //告警机房总数 |
| | | //monResMap.put("告警机房数比例", resStationRateStr); //告警机房数比例 |
| | | resultMap.put("单体内阻", monResMap); |
| | | |
| | | /*======单体温度======*/ |
| | | |
| | | //高告警数量 |
| | | Integer tempHighAlarmsNum = mapper.getAlarmHighLow(userId,AlarmConstant.ALM_SIGNAL_ID_MonTmpHigh); |
| | | //低告警数量 |
| | | Integer tempLowAlarmsNum = mapper.getAlarmHighLow(userId,AlarmConstant.ALM_SIGNAL_ID_MonTmpLow); |
| | | |
| | | //单体温度总告警数 |
| | | //Integer tempTotalAlarmNum = tempHighAlarmsNum+tempLowAlarmsNum; |
| | | |
| | | //温度告警机房数 |
| | | //int tempTotalAlarmStations = mapper.getTotalAlarmStations(userId,AlarmConstant.Alarm_tmp_Monomer); |
| | | |
| | | //温度告警占比 |
| | | //String tempRateStr = (String) MathUtil.divide(tempTotalAlarmNum,totalStationAlarmNum,3); |
| | | //温度告警机房占比 |
| | | //String tempStationRateStr = (String) MathUtil.divide(tempTotalAlarmStations,totalStationNum,3); |
| | | |
| | | monTemMap.put("单体温度高告警", tempHighAlarmsNum); //高告警数量 alm_signal_id 13 |
| | | monTemMap.put("单体温度低告警", tempLowAlarmsNum); //低告警数量 alm_signal_id 14 |
| | | //monTemMap.put("告警总数", tempTotalAlarmNum); //告警总数 |
| | | //monTemMap.put("告警总数比例", tempRateStr); //告警总数比例 |
| | | //monTemMap.put("告警机房总数", tempTotalAlarmStations); //告警机房总数 |
| | | //monTemMap.put("告警机房数比例", tempStationRateStr); //告警机房数比例 |
| | | resultMap.put("单体温度", monTemMap); |
| | | |
| | | response.setCode(1); |
| | | response.setData(resultMap); |
| | | return response; |
| | | } |
| | | } |
| | |
| | | import com.github.pagehelper.PageInfo; |
| | | import com.whyc.dto.Response; |
| | | import com.whyc.dto.paramter.DevAlarmPar; |
| | | import com.whyc.mapper.BattDevAlarmDataMapper; |
| | | import com.whyc.mapper.DevalarmDataMapper; |
| | | import com.whyc.pojo.DevalarmData; |
| | | import com.whyc.pojo.UserInf; |
| | |
| | | |
| | | @Resource |
| | | private DevalarmDataMapper mapper; |
| | | |
| | | @Resource |
| | | private BattDevAlarmDataMapper battDevAlarmDataMapper; |
| | | //设备告警实时查询 |
| | | public Response serchByInfo(DevAlarmPar par) { |
| | | PageHelper.startPage(par.getPage().getPageCurr(),par.getPage().getPageSize()); |
| | |
| | | } |
| | | return new Response().setII(1, list.size() > 0, list, "分级告警数"); |
| | | } |
| | | |
| | | public int getAlarmNum(int userId) { |
| | | return battDevAlarmDataMapper.searchNums(userId); |
| | | } |
| | | } |
| | |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.github.pagehelper.PageHelper; |
| | | import com.github.pagehelper.PageInfo; |
| | | import com.whyc.constant.DeviceConstant; |
| | | import com.whyc.dto.Response; |
| | | import com.whyc.mapper.Fbs9100StateMapper; |
| | | import com.whyc.pojo.Fbs9100State; |
| | | import com.whyc.util.ActionUtil; |
| | | import com.whyc.util.DateUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.*; |
| | | |
| | | @Service |
| | | public class Fbs9100StateService { |
| | |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | public Response<Map> getBTSEquipStatus(int userId) throws ParseException { |
| | | |
| | | Response<Map> response = new Response(); |
| | | Map<String, Integer> resultMap = new HashMap<>(); |
| | | resultMap.put("在线浮充数量",0); |
| | | resultMap.put("预充电数量",0); |
| | | resultMap.put("核容测试数量",0); |
| | | resultMap.put("内阻测试数量",0); |
| | | resultMap.put("通讯故障数量",0); |
| | | /*try { |
| | | List<FBS9100State> statusList = fbs9100StateMapper.getStatus(userId); |
| | | for (int i = 0; i < statusList.size(); i++) { |
| | | switch (statusList.get(i).getWorkState()){ |
| | | case DeviceConstant.DEV_ONLINE_CHARGE: |
| | | resultMap.put("在线浮充",statusList.get(i).getNum()); |
| | | break; |
| | | case DeviceConstant.DEV_PRE_CHARGE: |
| | | resultMap.put("预充电",statusList.get(i).getNum()); |
| | | break; |
| | | case DeviceConstant.DEV_NUCLEAR_CAP: |
| | | resultMap.put("核容测试",statusList.get(i).getNum()); |
| | | break; |
| | | case DeviceConstant.DEV_RES_TEST: |
| | | resultMap.put("内阻测试",statusList.get(i).getNum()); |
| | | break; |
| | | } |
| | | } |
| | | response.setCode(1); |
| | | response.setData(resultMap); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | response.setCode(0); |
| | | return response; |
| | | }*/ |
| | | QueryWrapper<Fbs9100State> wrapper = Wrappers.query(); |
| | | wrapper.select("record_datetime","dev_workstate"); |
| | | List<Fbs9100State> fbs9100StateList = mapper.selectList(wrapper); |
| | | //首先查看是否通讯故障,时间大于1分钟为通讯故障 |
| | | for (int i = 0; i < fbs9100StateList.size(); i++) { |
| | | Calendar instance = Calendar.getInstance(); |
| | | instance.add(Calendar.MINUTE,-1); |
| | | Date time = instance.getTime(); |
| | | if(time.compareTo(DateUtil.YYYY_MM_DD_HH_MM_SS.parse(fbs9100StateList.get(i).getRecordDatetime()))>0){ |
| | | resultMap.put("通讯故障数量",resultMap.get("通讯故障数量")+1); |
| | | }else{ |
| | | switch (fbs9100StateList.get(i).getDevWorkstate()){ |
| | | case DeviceConstant.DEV_ONLINE_CHARGE: |
| | | resultMap.put("在线浮充数量",resultMap.get("在线浮充数量")+1); |
| | | break; |
| | | case DeviceConstant.DEV_PRE_CHARGE: |
| | | resultMap.put("预充电数量",resultMap.get("预充电数量")+1); |
| | | break; |
| | | case DeviceConstant.DEV_NUCLEAR_CAP: |
| | | resultMap.put("核容数量",resultMap.get("核容测试数量")+1); |
| | | break; |
| | | case DeviceConstant.DEV_RES_TEST: |
| | | resultMap.put("内阻测试数量",resultMap.get("内阻测试数量")+1); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | return new Response<Map>().set(1,resultMap); |
| | | } |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | | import com.github.pagehelper.PageHelper; |
| | | import com.github.pagehelper.PageInfo; |
| | | import com.whyc.constant.AlarmConstant; |
| | | import com.whyc.dto.AlarmDaoFactory; |
| | | import com.whyc.dto.Response; |
| | | import com.whyc.mapper.PwrdevAlarmMapper; |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.ListIterator; |
| | | import java.util.*; |
| | | import java.util.concurrent.atomic.AtomicBoolean; |
| | | |
| | | @Service |
| | |
| | | } |
| | | return new Response().setII(1, list.size() > 0, list, "分级告警数"); |
| | | } |
| | | |
| | | /** |
| | | * +告警机房数和占比 |
| | | * @return |
| | | * @param userId |
| | | */ |
| | | public Response<List> getAcABCAnalysis(int userId){ |
| | | |
| | | //交流A/B/C-过压, |
| | | //交流A/B/C-欠压, |
| | | //交流A/B/C-缺相, |
| | | //交流A/B/C-过流 |
| | | Map<String,Integer> resultMap = new HashMap<>(); |
| | | resultMap.put("过压",0); |
| | | resultMap.put("欠压",0); |
| | | resultMap.put("缺相",0); |
| | | resultMap.put("过流",0); |
| | | |
| | | List<Integer> types = Arrays.asList( |
| | | AlarmConstant.acIn1_over_volA, |
| | | AlarmConstant.acIn1_over_volB, |
| | | AlarmConstant.acIn1_over_volC, |
| | | AlarmConstant.acIn1_under_volA, |
| | | AlarmConstant.acIn1_under_volB, |
| | | AlarmConstant.acIn1_under_volC, |
| | | AlarmConstant.acIn1_less_A, |
| | | AlarmConstant.acIn1_less_B, |
| | | AlarmConstant.acIn1_less_C, |
| | | AlarmConstant.acb1_over_currA, |
| | | AlarmConstant.acb1_over_currB, |
| | | AlarmConstant.acb1_over_currC); |
| | | |
| | | List<PwrdevAlarm> data = mapper.getAnalysis(userId,types); |
| | | |
| | | for (int i = 0; i < data.size(); i++) { |
| | | switch (data.get(i).getAlmType()){ |
| | | case AlarmConstant.acIn1_over_volA: |
| | | case AlarmConstant.acIn1_over_volB: |
| | | case AlarmConstant.acIn1_over_volC: |
| | | resultMap.put("过压",resultMap.get("过压")+data.get(i).getNum().intValue()); |
| | | break; |
| | | case AlarmConstant.acIn1_under_volA: |
| | | case AlarmConstant.acIn1_under_volB: |
| | | case AlarmConstant.acIn1_under_volC: |
| | | resultMap.put("欠压",resultMap.get("欠压")+data.get(i).getNum().intValue()); |
| | | break; |
| | | case AlarmConstant.acIn1_less_A: |
| | | case AlarmConstant.acIn1_less_B: |
| | | case AlarmConstant.acIn1_less_C: |
| | | resultMap.put("缺相",resultMap.get("缺相")+data.get(i).getNum().intValue()); |
| | | break; |
| | | case AlarmConstant.acb1_over_currA: |
| | | case AlarmConstant.acb1_over_currB: |
| | | case AlarmConstant.acb1_over_currC: |
| | | resultMap.put("过流",resultMap.get("过流")+data.get(i).getNum().intValue()); |
| | | break; |
| | | default: |
| | | throw new IllegalStateException("Unexpected value: " + data.get(i)); |
| | | } |
| | | |
| | | } |
| | | |
| | | //告警机房总数和比例 |
| | | HashMap<String, Integer> map2 = new HashMap<>(); |
| | | |
| | | //int alarmStationCount = mapper.getAlarmStationCountSpec(userId,types); |
| | | //int stationCount = infoMapper.getStationCount(userId); |
| | | |
| | | //map2.put("告警机房总数",alarmStationCount); |
| | | //map2.put("告警机房数比例",(int)MathUtil.divide(alarmStationCount,stationCount,2)); |
| | | |
| | | List<Map<String, Integer>> mapList = Arrays.asList(resultMap, map2); |
| | | return new Response<List>().set(1,mapList); |
| | | } |
| | | } |
New file |
| | |
| | | package com.whyc.webSocket; |
| | | |
| | | import com.whyc.config.WebSocketConfig; |
| | | import com.whyc.dto.Response; |
| | | import com.whyc.pojo.UserInf; |
| | | import com.whyc.service.*; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.servlet.http.HttpSession; |
| | | import javax.websocket.*; |
| | | import javax.websocket.server.ServerEndpoint; |
| | | import java.io.IOException; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 大屏展示 Socket |
| | | */ |
| | | @Component |
| | | @ServerEndpoint(value = "/screen",encoders = WebSocketEncoder.class,configurator = WebSocketConfig.class) |
| | | public class ScreenSocket { |
| | | |
| | | private Session session; |
| | | |
| | | private Thread thread; |
| | | private static PwrdevAlarmService powerAlarmService; |
| | | |
| | | private static BattalarmDataService battAlarmDataService; |
| | | |
| | | private static Fbs9100StateService fbs9100StateService; |
| | | |
| | | private static DevalarmDataService devAlarmDataService; |
| | | |
| | | @Autowired |
| | | public void setPowerAlarmService(PwrdevAlarmService powerAlarmService) { |
| | | ScreenSocket.powerAlarmService = powerAlarmService; |
| | | } |
| | | |
| | | @OnOpen |
| | | public void onOpen(Session session, EndpointConfig config){ |
| | | this.session = session; |
| | | HttpSession httpSession = (HttpSession) config.getUserProperties().get("httpSession"); |
| | | UserInf user = (UserInf) httpSession.getAttribute("user"); |
| | | final int userId = user.getUId().intValue(); |
| | | System.out.println(user); |
| | | Thread thread = new Thread() { |
| | | @Override |
| | | public void run() { |
| | | try { |
| | | Map<String, Response> res = new HashMap<>(); |
| | | Response sessionRes = new Response().set(1, httpSession.getId()); |
| | | while (!currentThread().isInterrupted()) { |
| | | //一体 告警:交流ABC |
| | | Response res_acABC = powerAlarmService.getAcABCAnalysis(userId); |
| | | //一体 告警:单体容量 |
| | | Response res_monCapacityLowAnalysis = battAlarmDataService.getMonCapacityLowAnalysis(userId); |
| | | //一体 告警:单体温度内阻温度 |
| | | Response<Map> res_monVRTAnalysis = battAlarmDataService.getMonVRTAnalysis(userId); |
| | | //一体 统计:三种设备类型 告警数统计 |
| | | int battAlarmNum = battAlarmDataService.serchRealTime(userId).getCode(); |
| | | int devAlarmNum = devAlarmDataService.getAlarmNum(userId); |
| | | int powerAlarmNum = (int) powerAlarmService.getAlarmNum().getData(); |
| | | //一体 统计:电池品牌统计 |
| | | |
| | | //一体 统计:设备状态 |
| | | Response<Map> res_devStates = fbs9100StateService.getBTSEquipStatus(userId); |
| | | //一体 统计:各种设备类型总数 电池 设备 电源 站点 TODO 需要添加电源验证下站点的变化逻辑 |
| | | |
| | | //续航检测??? TODO |
| | | |
| | | |
| | | res.put("acABC", res_acABC); |
| | | session.getBasicRemote().sendObject(new Response().set(1, res)); |
| | | sleep(4000); |
| | | } |
| | | } catch (Exception e) { |
| | | this.interrupt(); |
| | | } |
| | | } |
| | | }; |
| | | thread.start(); |
| | | this.thread = thread; |
| | | } |
| | | |
| | | @OnClose |
| | | public void onClose(CloseReason closeReason) throws IOException { |
| | | //System.err.println("closeReason = " + closeReason); |
| | | if(session.isOpen()){ |
| | | session.close(); |
| | | } |
| | | } |
| | | |
| | | @OnError |
| | | public void onError(Throwable error) throws IOException { |
| | | //error.printStackTrace(); |
| | | thread.isInterrupted(); |
| | | if(session.isOpen()){ |
| | | session.close(); |
| | | } |
| | | } |
| | | |
| | | } |