|  | @@ -1,37 +1,42 @@
 | 
	
		
			
				|  |  |  package com.xunmei.mediator.websocket.service.impl;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import cn.hutool.core.util.ObjectUtil;
 | 
	
		
			
				|  |  | +import com.alibaba.fastjson.JSONObject;
 | 
	
		
			
				|  |  |  import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 | 
	
		
			
				|  |  | +import com.xunmei.common.core.domain.iot.domain.IotAlarmDefenceArea;
 | 
	
		
			
				|  |  | +import com.xunmei.common.core.domain.iot.domain.IotAlarmSubsystem;
 | 
	
		
			
				|  |  |  import com.xunmei.common.core.domain.iot.domain.IotDvrDisk;
 | 
	
		
			
				|  |  |  import com.xunmei.common.core.domain.iot.domain.IotServerInfo;
 | 
	
		
			
				|  |  |  import com.xunmei.common.core.utils.StringUtils;
 | 
	
		
			
				|  |  |  import com.xunmei.common.redis.utils.RedisUtils;
 | 
	
		
			
				|  |  | +import com.xunmei.mediator.api.protection.service.IotAlarmDefenceAreaService;
 | 
	
		
			
				|  |  | +import com.xunmei.mediator.api.protection.service.IotAlarmSubsystemService;
 | 
	
		
			
				|  |  |  import com.xunmei.mediator.api.server.service.IotServerInfoService;
 | 
	
		
			
				|  |  |  import com.xunmei.mediator.api.video.service.IotDvrDiskService;
 | 
	
		
			
				|  |  |  import com.xunmei.mediator.iot.service.IIotDeviceInfoExtendService;
 | 
	
		
			
				|  |  |  import com.xunmei.mediator.iot.service.IIotDeviceInfoService;
 | 
	
		
			
				|  |  | +import com.xunmei.mediator.websocket.constant.WebSocketConstants;
 | 
	
		
			
				|  |  | +import com.xunmei.mediator.websocket.dto.DeviceBaseInfo;
 | 
	
		
			
				|  |  | +import com.xunmei.mediator.websocket.dto.WebsocketExecuteReq;
 | 
	
		
			
				|  |  | +import com.xunmei.mediator.websocket.dto.alarmHost.AlarmHostBaseInfo;
 | 
	
		
			
				|  |  |  import com.xunmei.mediator.websocket.dto.alarmHost.AlarmHostInfo;
 | 
	
		
			
				|  |  | +import com.xunmei.mediator.websocket.dto.alarmHost.AlarmInputInfo;
 | 
	
		
			
				|  |  | +import com.xunmei.mediator.websocket.dto.alarmHost.SubSystemInfo;
 | 
	
		
			
				|  |  |  import com.xunmei.mediator.websocket.dto.dvs.ChannelInfo;
 | 
	
		
			
				|  |  |  import com.xunmei.mediator.websocket.dto.dvs.DiskInfo;
 | 
	
		
			
				|  |  |  import com.xunmei.mediator.websocket.dto.dvs.DvsBaseInfo;
 | 
	
		
			
				|  |  |  import com.xunmei.mediator.websocket.dto.dvs.DvsInfo;
 | 
	
		
			
				|  |  |  import com.xunmei.mediator.websocket.enums.DeviceTypeEnum;
 | 
	
		
			
				|  |  | +import com.xunmei.mediator.websocket.enums.ProductEnums;
 | 
	
		
			
				|  |  |  import com.xunmei.mediator.websocket.redis.WebsocketPublisher;
 | 
	
		
			
				|  |  | +import com.xunmei.mediator.websocket.service.RouterService;
 | 
	
		
			
				|  |  |  import com.xunmei.mediator.websocket.service.WebsocketService;
 | 
	
		
			
				|  |  |  import com.xunmei.system.api.domain.iot.IotDeviceInfo;
 | 
	
		
			
				|  |  |  import com.xunmei.system.api.domain.iot.IotDeviceInfoExtend;
 | 
	
		
			
				|  |  |  import com.xunmei.system.api.domain.websocket.RedisWebsocketMsg;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  import java.time.LocalDateTime;
 | 
	
		
			
				|  |  | -import java.util.ArrayList;
 | 
	
		
			
				|  |  | -import java.util.Date;
 | 
	
		
			
				|  |  | -import java.util.HashSet;
 | 
	
		
			
				|  |  | -import java.util.Iterator;
 | 
	
		
			
				|  |  | -import java.util.List;
 | 
	
		
			
				|  |  | -import java.util.Set;
 | 
	
		
			
				|  |  | +import java.util.*;
 | 
	
		
			
				|  |  |  import java.util.concurrent.TimeUnit;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -import org.apache.commons.lang3.builder.EqualsBuilder;
 | 
	
		
			
				|  |  |  import org.redisson.api.RKeys;
 | 
	
		
			
				|  |  |  import org.redisson.api.RLock;
 | 
	
		
			
				|  |  |  import org.redisson.api.RedissonClient;
 | 
	
	
		
			
				|  | @@ -43,7 +48,7 @@ import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  |  import org.springframework.transaction.annotation.Transactional;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @Service
 | 
	
		
			
				|  |  | -public class WebsocketServiceImpl implements WebsocketService {
 | 
	
		
			
				|  |  | +public class WebsocketServiceImpl implements WebsocketService, RouterService {
 | 
	
		
			
				|  |  |      private static final Logger log = LoggerFactory.getLogger(WebsocketServiceImpl.class);
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private WebsocketPublisher websocketPublisher;
 | 
	
	
		
			
				|  | @@ -56,11 +61,19 @@ public class WebsocketServiceImpl implements WebsocketService {
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private IotDvrDiskService iIotDvrDiskService;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private IotAlarmDefenceAreaService iotAlarmDefenceAreaService;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private IotAlarmSubsystemService iotAlarmSubsystemService;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      private static final String LOCK_DVS_ACCPET_KEY_PREFIX = "websocket:lock:base_info_dvs_";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      private static final String LOCK_ALARM_HOST_ACCPET_KEY_PREFIX = "websocket:lock:base_info_alarm_host_";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    private static final String LOCK_SUBSYSTEM_INPUT_ACCPET_KEY_PREFIX = "websocket:lock:base_info_subSystem_input_";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 给指定iot服务发送消息
 | 
	
		
			
				|  |  |       *
 | 
	
	
		
			
				|  | @@ -183,6 +196,7 @@ public class WebsocketServiceImpl implements WebsocketService {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  | +    @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  |      public void dealAlarmHostInfo(List<AlarmHostInfo> alarmHostInfos, String token) throws Exception {
 | 
	
		
			
				|  |  |          //添加分布式锁
 | 
	
		
			
				|  |  |          String lockKey = LOCK_ALARM_HOST_ACCPET_KEY_PREFIX + token;
 | 
	
	
		
			
				|  | @@ -222,6 +236,52 @@ public class WebsocketServiceImpl implements WebsocketService {
 | 
	
		
			
				|  |  |          });
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | +    public void dealSubSystemAndInput(AlarmHostBaseInfo alarmHostBaseInfo, String token) throws Exception {
 | 
	
		
			
				|  |  | +        //添加分布式锁
 | 
	
		
			
				|  |  | +        String lockKey = LOCK_SUBSYSTEM_INPUT_ACCPET_KEY_PREFIX + token;
 | 
	
		
			
				|  |  | +        lockAndExecute(lockKey, () -> {
 | 
	
		
			
				|  |  | +            if (StringUtils.isEmpty(token) || alarmHostBaseInfo == null) {
 | 
	
		
			
				|  |  | +                log.error("同步报警主机子系统和防区信息失败。原因:token或alarmHostBaseInfo为空");
 | 
	
		
			
				|  |  | +                return;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            try {
 | 
	
		
			
				|  |  | +                if (StringUtils.isEmpty(token)) {
 | 
	
		
			
				|  |  | +                    log.error("同步报警主机子系统和防区信息失败,token为null,同步数据失败!");
 | 
	
		
			
				|  |  | +                    return;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                IotServerInfo serverInfo = iotServerInfoService.selectByToken(token);
 | 
	
		
			
				|  |  | +                if (ObjectUtil.isEmpty(serverInfo)) {
 | 
	
		
			
				|  |  | +                    log.error("同步报警主机子系统和防区信息失败,token:{},获取机构信息未空,结束同步!", token);
 | 
	
		
			
				|  |  | +                    return;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                //逻辑删除子系统和防区
 | 
	
		
			
				|  |  | +                iotAlarmSubsystemService.deleteByIotToken(token);
 | 
	
		
			
				|  |  | +                iotAlarmDefenceAreaService.deleteByIotToken(token);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                //添加子系统集合
 | 
	
		
			
				|  |  | +                List<IotAlarmSubsystem> addSubSystemList = new ArrayList();
 | 
	
		
			
				|  |  | +                //更新子系统集合
 | 
	
		
			
				|  |  | +                List<IotAlarmSubsystem> updateSubSystemList = new ArrayList();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                //添加子系统集合
 | 
	
		
			
				|  |  | +                List<IotAlarmDefenceArea> addDefenceAreaList = new ArrayList();
 | 
	
		
			
				|  |  | +                //更新子系统集合
 | 
	
		
			
				|  |  | +                List<IotAlarmDefenceArea> updateDefenceAreaList = new ArrayList();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                processSubSystem(alarmHostBaseInfo.getSubsystems(),serverInfo,token,addSubSystemList,updateSubSystemList);
 | 
	
		
			
				|  |  | +                processDefenceArea(alarmHostBaseInfo.getInputs(),serverInfo,token,addDefenceAreaList,updateDefenceAreaList);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            } catch (Exception var8) {
 | 
	
		
			
				|  |  | +                log.error("同步报警主机基础信息过程中出现异常", var8);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 批量保存和更新设备信息
 | 
	
		
			
				|  |  |       * @param addList
 | 
	
	
		
			
				|  | @@ -496,7 +556,7 @@ public class WebsocketServiceImpl implements WebsocketService {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  | -     * 处理dvs数据
 | 
	
		
			
				|  |  | +     * 处理报警主机数据
 | 
	
		
			
				|  |  |       *
 | 
	
		
			
				|  |  |       * @param alarmHostInfos
 | 
	
		
			
				|  |  |       * @param serverInfo
 | 
	
	
		
			
				|  | @@ -515,13 +575,9 @@ public class WebsocketServiceImpl implements WebsocketService {
 | 
	
		
			
				|  |  |                  if (info == null) {
 | 
	
		
			
				|  |  |                      info = createAlarmHostInfo(alarmHostInfo, serverInfo);
 | 
	
		
			
				|  |  |                      addList.add(info);
 | 
	
		
			
				|  |  | -                    //addListExtend.add(createIotDeviceInfoExtend(dvsInfo, info.getId(),token));
 | 
	
		
			
				|  |  |                  } else {
 | 
	
		
			
				|  |  |                      dealAlarmHostInfo(alarmHostInfo, info,serverInfo);
 | 
	
		
			
				|  |  |                      updateList.add(info);
 | 
	
		
			
				|  |  | -                    //IotDeviceInfoExtend extend = iIotDeviceInfoExtendService.selectByDeviceId(info.getId());
 | 
	
		
			
				|  |  | -                    //dealDvsExtend(dvsInfo, extend);
 | 
	
		
			
				|  |  | -                    //updateListExtend.add(extend);
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -577,4 +633,155 @@ public class WebsocketServiceImpl implements WebsocketService {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 处理报警主机子系统数据
 | 
	
		
			
				|  |  | +     * @param subSystemInfos
 | 
	
		
			
				|  |  | +     * @param serverInfo
 | 
	
		
			
				|  |  | +     * @param token
 | 
	
		
			
				|  |  | +     * @param addList
 | 
	
		
			
				|  |  | +     * @param updateList
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private void processSubSystem(List<SubSystemInfo> subSystemInfos, IotServerInfo serverInfo , String token , List<IotAlarmSubsystem> addList , List<IotAlarmSubsystem> updateList){
 | 
	
		
			
				|  |  | +        if (ObjectUtil.isEmpty(subSystemInfos)) {
 | 
	
		
			
				|  |  | +            log.error("同步报警主机子系统信息,获取报警主机子系统信息为空");
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            for (SubSystemInfo subSystemInfo : subSystemInfos) {
 | 
	
		
			
				|  |  | +                IotAlarmSubsystem info = iotAlarmSubsystemService.getByDeviceNameAndSubSystemId(token, subSystemInfo.getDeviceName(), subSystemInfo.getSubsystemId());
 | 
	
		
			
				|  |  | +                if (info == null) {
 | 
	
		
			
				|  |  | +                    info = createAlarmSubSystem(subSystemInfo, serverInfo);
 | 
	
		
			
				|  |  | +                    addList.add(info);
 | 
	
		
			
				|  |  | +                } else {
 | 
	
		
			
				|  |  | +                    dealAlarmSubSystem(subSystemInfo, info,serverInfo);
 | 
	
		
			
				|  |  | +                    updateList.add(info);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private IotAlarmSubsystem createAlarmSubSystem(SubSystemInfo subSystemInfo, IotServerInfo serverInfo){
 | 
	
		
			
				|  |  | +        IotAlarmSubsystem info = new IotAlarmSubsystem();
 | 
	
		
			
				|  |  | +        long id = IdWorker.getId(info);
 | 
	
		
			
				|  |  | +        info.setDeleted(0);
 | 
	
		
			
				|  |  | +        info.setCode(String.valueOf(subSystemInfo.getSubsystemId()));
 | 
	
		
			
				|  |  | +        info.setName(subSystemInfo.getSubsystemName());
 | 
	
		
			
				|  |  | +        //布防状态,0:撤防,1:布防,2:未知(未登记过或离线)
 | 
	
		
			
				|  |  | +        info.setStatus(2);
 | 
	
		
			
				|  |  | +        info.setOrgId(serverInfo.getOrgId());
 | 
	
		
			
				|  |  | +        info.setOrgName(serverInfo.getOrgName());
 | 
	
		
			
				|  |  | +        info.setOrgPath(serverInfo.getOrgPath());
 | 
	
		
			
				|  |  | +        info.setAlarmHostCode(subSystemInfo.getDeviceName());
 | 
	
		
			
				|  |  | +        //是否关联登记簿,0否1是
 | 
	
		
			
				|  |  | +        info.setInBook(0);
 | 
	
		
			
				|  |  | +        info.setIotToken(serverInfo.getIotCode());
 | 
	
		
			
				|  |  | +        info.setUpdateTime(LocalDateTime.now());
 | 
	
		
			
				|  |  | +        info.setCreateTime(LocalDateTime.now());
 | 
	
		
			
				|  |  | +        //设备来源:0:设备登记;1:iot推送
 | 
	
		
			
				|  |  | +        info.setSource(1);
 | 
	
		
			
				|  |  | +        info.setId(id);
 | 
	
		
			
				|  |  | +        return info;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private void dealAlarmSubSystem(SubSystemInfo subSystemInfo, IotAlarmSubsystem info, IotServerInfo serverInfo) {
 | 
	
		
			
				|  |  | +        info.setDeleted(0);
 | 
	
		
			
				|  |  | +        info.setName(subSystemInfo.getSubsystemName());
 | 
	
		
			
				|  |  | +        info.setOrgId(serverInfo.getOrgId());
 | 
	
		
			
				|  |  | +        info.setOrgName(serverInfo.getOrgName());
 | 
	
		
			
				|  |  | +        info.setOrgPath(serverInfo.getOrgPath());
 | 
	
		
			
				|  |  | +        info.setUpdateBy("system");
 | 
	
		
			
				|  |  | +        info.setUpdateTime(LocalDateTime.now());
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 处理报警主机防区数据
 | 
	
		
			
				|  |  | +     * @param alarmInputInfos
 | 
	
		
			
				|  |  | +     * @param serverInfo
 | 
	
		
			
				|  |  | +     * @param token
 | 
	
		
			
				|  |  | +     * @param addList
 | 
	
		
			
				|  |  | +     * @param updateList
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private void processDefenceArea(List<AlarmInputInfo> alarmInputInfos, IotServerInfo serverInfo , String token , List<IotAlarmDefenceArea> addList, List<IotAlarmDefenceArea> updateList){
 | 
	
		
			
				|  |  | +        if (ObjectUtil.isEmpty(alarmInputInfos)) {
 | 
	
		
			
				|  |  | +            log.error("同步报警主机防区信息,获取报警主机防区信息为空");
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            for (AlarmInputInfo alarmInputInfo : alarmInputInfos) {
 | 
	
		
			
				|  |  | +                IotAlarmDefenceArea info = iotAlarmDefenceAreaService.getBySubSystemCodeAndDeviceName(token,alarmInputInfo.getDeviceName(),alarmInputInfo.getSubsystemId(),alarmInputInfo.getInputIndex());
 | 
	
		
			
				|  |  | +                if (info == null) {
 | 
	
		
			
				|  |  | +                    info = createDefenceArea(alarmInputInfo, serverInfo);
 | 
	
		
			
				|  |  | +                    addList.add(info);
 | 
	
		
			
				|  |  | +                } else {
 | 
	
		
			
				|  |  | +                    dealDefenceArea(alarmInputInfo, info,serverInfo);
 | 
	
		
			
				|  |  | +                    updateList.add(info);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private IotAlarmDefenceArea createDefenceArea(AlarmInputInfo alarmInputInfo, IotServerInfo serverInfo){
 | 
	
		
			
				|  |  | +        IotAlarmDefenceArea info = new IotAlarmDefenceArea();
 | 
	
		
			
				|  |  | +        long id = IdWorker.getId(info);
 | 
	
		
			
				|  |  | +        info.setDeleted(0);
 | 
	
		
			
				|  |  | +        info.setAlarmHostCode(alarmInputInfo.getDeviceName());
 | 
	
		
			
				|  |  | +        info.setSubSystemCode(String.valueOf(alarmInputInfo.getSubsystemId()));
 | 
	
		
			
				|  |  | +        info.setDefenceAreaName(alarmInputInfo.getInputName());
 | 
	
		
			
				|  |  | +        info.setDefenceAreaIndex(alarmInputInfo.getInputIndex());
 | 
	
		
			
				|  |  | +        info.setSensorType(alarmInputInfo.getSensorType());
 | 
	
		
			
				|  |  | +        //info.setSensorTypeName();
 | 
	
		
			
				|  |  | +        //alarm:报警,bypass:旁路,normal:正常,activity:活动,unKnown:未知
 | 
	
		
			
				|  |  | +        info.setState("unKnown");
 | 
	
		
			
				|  |  | +        info.setIotToken(serverInfo.getIotCode());
 | 
	
		
			
				|  |  | +        info.setOrgId(serverInfo.getOrgId());
 | 
	
		
			
				|  |  | +        info.setOrgName(serverInfo.getOrgName());
 | 
	
		
			
				|  |  | +        info.setOrgPath(serverInfo.getOrgPath());
 | 
	
		
			
				|  |  | +        info.setUpdateTime(LocalDateTime.now());
 | 
	
		
			
				|  |  | +        info.setCreateTime(LocalDateTime.now());
 | 
	
		
			
				|  |  | +        info.setId(id);
 | 
	
		
			
				|  |  | +        return info;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private void dealDefenceArea(AlarmInputInfo alarmInputInfo, IotAlarmDefenceArea info, IotServerInfo serverInfo) {
 | 
	
		
			
				|  |  | +        info.setDeleted(0);
 | 
	
		
			
				|  |  | +        info.setDefenceAreaName(alarmInputInfo.getInputName());
 | 
	
		
			
				|  |  | +        info.setOrgId(serverInfo.getOrgId());
 | 
	
		
			
				|  |  | +        info.setOrgName(serverInfo.getOrgName());
 | 
	
		
			
				|  |  | +        info.setOrgPath(serverInfo.getOrgPath());
 | 
	
		
			
				|  |  | +        info.setSensorType(alarmInputInfo.getSensorType());
 | 
	
		
			
				|  |  | +        info.setUpdateBy("system");
 | 
	
		
			
				|  |  | +        info.setUpdateTime(LocalDateTime.now());
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public ProductEnums product() {
 | 
	
		
			
				|  |  | +        return ProductEnums.IOT_SERVER;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public String routerKey() {
 | 
	
		
			
				|  |  | +        StringJoiner result = new StringJoiner(",");
 | 
	
		
			
				|  |  | +        result.add(WebSocketConstants.GET_DEVICE_BASE_INFOS);
 | 
	
		
			
				|  |  | +        result.add(WebSocketConstants.GET_ALARM_HOST_DEVICE_INFOS);
 | 
	
		
			
				|  |  | +        return result.toString();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public Object execute(WebsocketExecuteReq req) {
 | 
	
		
			
				|  |  | +        try {
 | 
	
		
			
				|  |  | +            if (WebSocketConstants.GET_DEVICE_BASE_INFOS.equals(req.getEvent())){
 | 
	
		
			
				|  |  | +                JSONObject object = (JSONObject) req.getData();
 | 
	
		
			
				|  |  | +                if (object != null){
 | 
	
		
			
				|  |  | +                    List<DeviceBaseInfo> deviceBaseInfos = (List<DeviceBaseInfo>) object.get("deviceBaseInfos");
 | 
	
		
			
				|  |  | +                    chooseMethod(deviceBaseInfos);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }else if(WebSocketConstants.GET_ALARM_HOST_DEVICE_INFOS.equals(req.getEvent())){
 | 
	
		
			
				|  |  | +                dealSubSystemAndInput((AlarmHostBaseInfo) req.getData(),req.getToken());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }catch (Exception e){
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return null;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private void chooseMethod(List<DeviceBaseInfo> deviceBaseInfos){
 | 
	
		
			
				|  |  | +        //new HashMap<String,List>()
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  }
 |