南昌市物联网技防平台-后台
zengh
2021-05-19 a6129a274b46d94f24fda3c7493ef766cf614e96
海康报文保存
1 files modified
162 ■■■■■ changed files
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyServer/ServerHandler.java 162 ●●●●● patch | view | raw | blame | history
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyServer/ServerHandler.java
@@ -141,13 +141,71 @@
                serverHandler.animalHeatService.save(body);
            }
        } else if (CSType.equals("HK")) {
            //报文内容保存
            String ChannelName = "";//设备编码
            Message message = new Message();
            message.setEnumber(ChannelName);
            message.setContent(body);
            message.setTime(df.format(day));
            serverHandler.messageService.save(message);
            List<String> outData = new ArrayList<>();
            switch (content.substring(0, 2)) {
                case "BJ":
                    //报警信息
                    String devId = content.substring(12, 24);
                    List<Map<String, Object>> list = serverHandler.equipmentService.selectInfos(devId);
                    Alarm alarm = new Alarm();
                    alarm.setWaringType("紧急求救");
                    alarm.setAlarmType("一键报警");
                    alarm.setGalarmPeople("报警主机");
                    alarm.setAlarmTime(df.format(day));
                    alarm.setPlace((String) list.get(0).get("streeName"));//事发地址
                    alarm.setDeviceNumber((String) list.get(0).get("deviceNumber"));//设备编号
                    alarm.setDistrict((String) list.get(0).get("district"));//县区
                    alarm.setProvince((String) list.get(0).get("province"));//市
                    alarm.setCity((String) list.get(0).get("city"));
                    alarm.setJd((String) list.get(0).get("jd"));//经度
                    alarm.setWd((String) list.get(0).get("wd"));//纬度
                    alarm.setCid(String.valueOf(1));//警情代码
                    alarm.setJtype("0");
                    setAlarmData(alarm,list);
                    outData.add("BJOK");
                    //报文内容保存
                    String ChannelName = "";//设备编码
                    Message message = new Message();
                    message.setEnumber(ChannelName);
                    message.setContent(body);
                    message.setTime(df.format(day));
                    serverHandler.messageService.save(message);
                    break;
                case "XT":
                    //心跳信息
                    String devIds = content.substring(12, 24);
                    Date d = new Date();
                    SimpleDateFormat sbf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    String format = sbf.format(d);
                    serverHandler.equipmentService.updateChannel(format, devIds);
                    outData.add("XTOK");
                    break;
                case "JS":
                    //校时信息
                    Date sj = new Date();
                    SimpleDateFormat js = new SimpleDateFormat("yyyyMMddHHmmss");
                    outData.add("JSOK" + js.format(sj) );
                    break;
                case "ZT":
                    //状态信息
                    outData.add("ZTOK");
                    break;
            }
            for (int i = 0; i < outData.size(); i++) {
                channelHandlerContext.writeAndFlush(Unpooled.copiedBuffer(outData.get(i), CharsetUtil.UTF_8));
            }
        } else {
            String ChannelName = content.substring(10, 22);//设备编码
            String sub = content.substring(23, 27);
@@ -1728,4 +1786,94 @@
    }
    //警情信息录入并派发
    public void setAlarmData(Alarm alarm,List<Map<String, Object>> list){
        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());
        }
    }
}