南昌市物联网技防平台-后台
zengh
2021-05-11 47a458ca867f700ad8dfe8bccdbb6bf59ca2d301
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyServer/ServerHandler.java
@@ -9,9 +9,16 @@
import org.springblade.jfpt.Netty.service.nettyService;
import org.springblade.jfpt.alarm.entity.Alarm;
import org.springblade.jfpt.alarm.service.IAlarmService;
import org.springblade.jfpt.alarm.vo.AlarmVO;
import org.springblade.jfpt.animalheat.service.AnimalHeatService;
import org.springblade.jfpt.catalog.service.catalogService;
import org.springblade.jfpt.equipment.service.IEquipmentService;
import org.springblade.jfpt.message.entity.Message;
import org.springblade.jfpt.message.service.IMessageService;
import org.springblade.jfpt.operation.service.IOperationService;
import org.springblade.jfpt.operation.vo.OperationVO;
import org.springblade.jfpt.webscoket.service.IPushMsgService;
import org.springblade.system.user.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -41,6 +48,9 @@
   private org.springblade.jfpt.Netty.service.nettyService nettyService;
   @Autowired
   private  IMessageService messageService;
   @Autowired
   private IEquipmentService equipmentService;
   @Autowired
@@ -48,6 +58,12 @@
   @Autowired
   private IAlarmService alarmService;
   @Autowired
   private IPushMsgService pushMsgService;
   @Autowired
   private IOperationService operationService;
   private static ServerHandler serverHandler;
@@ -100,6 +116,9 @@
    */
   @Override
   public void channelRead(ChannelHandlerContext channelHandlerContext, Object info) throws Exception {
      long startTime1 = System.currentTimeMillis();
      Date day = new Date();
      SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      System.out.println("接收到了:" + info);
      ByteBuf buf = (ByteBuf) info;
      byte[] req = new byte[buf.readableBytes()];
@@ -107,6 +126,8 @@
      String body = new String(req, "UTF-8");
      String content = body;
      System.out.println("接收客户端数据:" + body);
      String state="系统故障"; //设备故障状态
      String reason=null; //故障原因
      //获取字符串的长度
      int length = content.length();
      //当字符串长度大于200时,采集体温数据,小于则采集报警数据
@@ -138,6 +159,7 @@
         List<String> outData = new ArrayList<>();
         switch (content.substring(0, 2)) {
            case "LA": {
               System.out.println("按下按钮+++++++++++++++++++++++++++++++++");
               String devId = content.substring(10, 22);
               //String fqbm = content.substring(24, 26);
               String d = content.substring(26, 27);
@@ -148,8 +170,6 @@
               Alarm alarm = new Alarm();
               alarm.setAlarmType("一键报警");
               alarm.setGalarmPeople("报警主机");
               Date day = new Date();
               SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
               alarm.setAlarmTime(df.format(day));
               alarm.setPlace((String) list.get(0).get("streeName"));//事发地址
               alarm.setDeviceNumber((String) list.get(0).get("deviceNumber"));//设备编号
@@ -361,36 +381,56 @@
                     } else if (fqbm.equals("1")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("交流电故障");
                        reason="交流电故障";
                        serverHandler.equipmentService.updateExstate(state,reason,devId);
                     } else if (fqbm.equals("2")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("备电偏低");
                        reason="备电偏低";
                        serverHandler.equipmentService.updateExstate(state,reason,devId);
                     } else if (fqbm.equals("3")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("RAM校验错误");
                        reason="RAM校验错误";
                        serverHandler.equipmentService.updateExstate(state,reason,devId);
                     } else if (fqbm.equals("4")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("ROM校验错误");
                        reason="ROM校验错误";
                        serverHandler.equipmentService.updateExstate(state,reason,devId);
                     } else if (fqbm.equals("5")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("远程编程");
                        reason="远程编程";
                        serverHandler.equipmentService.updateExstate(state,reason,devId);
                     } else if (fqbm.equals("6")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("主机设置更改");
                        reason="主机设置更改";
                        serverHandler.equipmentService.updateExstate(state,reason,devId);
                     } else if (fqbm.equals("7")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("自检失败");
                        reason="自检失败";
                        serverHandler.equipmentService.updateExstate(state,reason,devId);
                     } else if (fqbm.equals("8")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("系统关闭");
                        reason="系统关闭";
                        serverHandler.equipmentService.updateExstate(state,reason,devId);
                     } else if (fqbm.equals("9")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("备电故障");
                        reason="备电故障";
                        serverHandler.equipmentService.updateExstate(state,reason,devId);
                     }
                     break;
                  case "31":
                     if (fqbm.equals("0")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("接地故障");
                        reason="接地故障";
                        serverHandler.equipmentService.updateExstate(state,reason,devId);
                     }
                     break;
                  case "32":
@@ -418,51 +458,79 @@
                     if (fqbm.equals("0")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("系统周边");
                        reason="系统周边";
                        serverHandler.equipmentService.updateExstate(state,reason,devId);
                     } else if (fqbm.equals("1")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("回路断开");
                        reason="回路断开";
                        serverHandler.equipmentService.updateExstate(state,reason,devId);
                     } else if (fqbm.equals("2")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("回路短路");
                        reason="回路短路";
                        serverHandler.equipmentService.updateExstate(state,reason,devId);
                     } else if (fqbm.equals("3")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("扩展模块故障");
//                        reason="扩展模块故障";
//                        serverHandler.equipmentService.updateExstate(state,reason,devId);
                     } else if (fqbm.equals("4")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("中继器故障");
//                        reason="中继器故障";
//                        serverHandler.equipmentService.updateExstate(state,reason,devId);
                     } else if (fqbm.equals("5")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("打印机缺纸");
//                        reason="打印机缺纸";
//                        serverHandler.equipmentService.updateExstate(state,reason,devId);
                     } else if (fqbm.equals("6")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("打印机故障");
//                        reason="打印机故障";
//                        serverHandler.equipmentService.updateExstate(state,reason,devId);
                     } else if (fqbm.equals("7")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("扩展模块无直流");
//                        reason="扩展模块无直流";
//                        serverHandler.equipmentService.updateExstate(state,reason,devId);
                     } else if (fqbm.equals("8")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("扩展模块低电压");
                        reason="扩展模块低电压";
                        serverHandler.equipmentService.updateExstate(state,reason,devId);
                     } else if (fqbm.equals("9")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("扩展模块复位");
//                        reason="扩展模块复位";
//                        serverHandler.equipmentService.updateExstate(state,reason,devId);
                     }
                     break;
                  case "34":
                     if (fqbm.equals("1")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("扩展模块防拆触发");
//                        reason="扩展模块防拆触发";
//                        serverHandler.equipmentService.updateExstate(state,reason,devId);
                     }
                     break;
                  case "35":
                     if (fqbm.equals("0")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("通讯故障");
                        reason="通讯故障";
                        serverHandler.equipmentService.updateExstate(state,reason,devId);
                     } else if (fqbm.equals("1")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("电话线故障");
                        reason="电话线故障";
                        serverHandler.equipmentService.updateExstate(state,reason,devId);
                     } else if (fqbm.equals("2")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("电话接口2故障");
//                        reason="电话接口2故障";
//                        serverHandler.equipmentService.updateExstate(state,reason,devId);
                     } else if (fqbm.equals("3")) {
                        alarm.setWaringType("通讯故障");
                        alarm.setContent("远距离无线通讯");
@@ -1302,10 +1370,14 @@
                     if (fqbm.equals("0")) {
                        alarm.setWaringType("系统故障-恢复");
                        alarm.setContent("电话线故障-通讯故障(转发)");
                        reason="";
                        serverHandler.equipmentService.updateExstate("",reason,devId);
                     }
                     else if (fqbm.equals("1")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("交流电故障-通讯故障(转发)");
                        reason="";
                        serverHandler.equipmentService.updateExstate("",reason,devId);
                     }
                     else if (fqbm.equals("2")) {
                        alarm.setWaringType("系统故障");
@@ -1314,6 +1386,7 @@
                     else if (fqbm.equals("3")) {
                        alarm.setWaringType("系统故障");
                        alarm.setContent("警号/继电器故障-通讯故障(转发)");
                     }
                     else if (fqbm.equals("4")) {
                        alarm.setWaringType("系统故障");
@@ -1330,6 +1403,8 @@
                     else if (fqbm.equals("7")) {
                        alarm.setWaringType("系统故障-恢复");
                        alarm.setContent("交流电故障恢复-通讯故障(转发)");
                        reason="";
                        serverHandler.equipmentService.updateExstate("",reason,devId);
                     }
                     else if (fqbm.equals("8")) {
                        alarm.setWaringType("系统故障-恢复");
@@ -1342,14 +1417,20 @@
                     else if (fqbm.equals("A")) {
                        alarm.setWaringType("系统故障-恢复");
                        alarm.setContent("电话线故障-通讯故障(转发)");
                        reason="";
                        serverHandler.equipmentService.updateExstate("",reason,devId);
                     }
                     else if (fqbm.equals("B")) {
                        alarm.setWaringType("系统故障-恢复");
                        alarm.setContent("回路短路故障恢复-通讯故障(转发)");
                        reason="";
                        serverHandler.equipmentService.updateExstate("",reason,devId);
                     }
                     else if (fqbm.equals("C")) {
                        alarm.setWaringType("系统故障-恢复");
                        alarm.setContent("无线监控恢复-通讯故障(转发)");
                        reason="";
                        serverHandler.equipmentService.updateExstate("",reason,devId);
                     }
                     else if (fqbm.equals("E")) {
                        alarm.setWaringType("系统故障");
@@ -1358,6 +1439,8 @@
                     else if (fqbm.equals("F")) {
                        alarm.setWaringType("系统故障-恢复");
                        alarm.setContent("无线监控故障恢复-通讯故障(转发)");
                        reason="";
                        serverHandler.equipmentService.updateExstate("",reason,devId);
                     }
                     break;
                  case "9B":
@@ -1642,9 +1725,102 @@
                     break;
               }
               serverHandler.alarmService.s(alarm);
               outData.add("LEOK#@");
               //报文内容保存
               Message message = new Message();
               message.setEnumber(ChannelName);
               message.setContent(body);
               message.setTime(df.format(day));
               serverHandler.messageService.save(message);
               if(alarm.getWaringType().equals("紧急求救")){
                  //修改设备状态
                  serverHandler.equipmentService.updateExstate("一键报警",null,(String) list.get(0).get("deviceNumber"));
                  //警情分发测试代码
                  //查询所有闲置的接警员
                  List<User> policeList = serverHandler.alarmService.queryPolice();
                  List<User> online_police = new ArrayList<>();
                  List<User> zx_police = new ArrayList<>();
                  for (int i = 0; i < policeList.size(); i++) {
                     //System.out.println(policeList.get(i).get("real_name"));
                     if (null!=policeList.get(i).getOnline_status()){
                        if(policeList.get(i).getOnline_status().equals("1")){
                           zx_police.add(policeList.get(i));
                           if(null!=policeList.get(i).getWork_status()){
                              if (policeList.get(i).getWork_status().equals("0")){
                                 online_police.add(policeList.get(i));
                              }
                           }
                        }
                     }
                  }
                  //如果无在线闲置人员
                  if (online_police.size() == 0){
                     //判断是否有在线人员
                     if (zx_police.size() == 0){
                        //无在线人员,选取所有接警员
                        online_police = policeList;
                     }else{
                        //有在线人员
                        online_police = zx_police;
                     }
                  }
                  List policeIdArr = new ArrayList();
                  //将闲置状态的人员id存入数组
                  for (int i = 0; i < online_police.size(); i++) {
                     policeIdArr.add(online_police.get(i).getId());
                  }
                  //通过id计算接警员最后一次接警时间,倒序返回闲置最久的人员,派发任务
                  List<AlarmVO> police = serverHandler.alarmService.queryPoliceTime(policeIdArr);
                  if (police.size() != 0){
                     alarm.setAlarmId( police.get(0).getAlarmId().toString());
                     alarm.setAlarmPeople( police.get(0).getAlarmPeople().toString());
                     alarm.setPhoneNumber( police.get(0).getPhoneNumber().toString());
                     Date date = new Date();
                     SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                     alarm.setJjTime(dateFormat.format(date));
                     serverHandler.alarmService.updatePoliceStatus( police.get(0).getAlarmId().toString(),"1");
                  }else {
                     alarm.setAlarmId( online_police.get(0).getId().toString());
                     alarm.setAlarmPeople(online_police.get(0).getName().toString());
                     alarm.setPhoneNumber(online_police.get(0).getPhone().toString());
                     Date date = new Date();
                     SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                     alarm.setJjTime(dateFormat.format(date));
                     serverHandler.alarmService.updatePoliceStatus(online_police.get(0).getId().toString(),"1");
                  }
               }
               serverHandler.alarmService.s(alarm);
               if(alarm.getWaringType().equals("紧急求救")){
                  OperationVO operation = new OperationVO();
                  operation.setSnumber(alarm.getAlarmId());
                  operation.setSname(alarm.getAlarmPeople());
                  operation.setJid(alarm.getId().toString());
                  operation.setZc("接警");
                  operation.setZctime(alarm.getJjTime());
                  serverHandler.operationService.save(operation);
                  //通过websocket给前端接警员发送信息
                  serverHandler.pushMsgService.pushMsg(alarm.getAlarmId(), alarm.getId().toString());
               }
               outData.add("LEOK#@");
               long endTime1 = System.currentTimeMillis();    //获取结束时间
               System.out.println("代码运行时间:" + (endTime1 - startTime1) + "ms");    //输出程序运行时间
               break;
            }
            case "LD": {