瀏覽代碼

添加设备事件表

pengshaojie 6 年之前
父節點
當前提交
fd8bbf3b12

+ 2 - 2
wsm-admin-dao/src/main/java/com/wsm/admin/dao/IDeviceStatusDao.java

@@ -1,9 +1,9 @@
 package com.wsm.admin.dao;
 
-import com.wsm.admin.model.DeviceStatus;
+import com.wsm.admin.model.DeviceEvent;
 import com.wsm.common.dao.IBaseDao;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public interface IDeviceStatusDao extends IBaseDao<DeviceStatus, Long> {
+public interface IDeviceEventDao extends IBaseDao<DeviceEvent, Long> {
 }

+ 14 - 1
wsm-admin-dao/src/main/java/com/wsm/admin/model/Device.java

@@ -21,7 +21,7 @@ public class Device extends BaseModel implements Serializable {
     @Column(length = 50)
     private String deviceId;
     /**
-     * 设备id 16进制码
+     * 设备id 16进制码(烟感专用字段)
      */
     @Column(length = 50)
     private String deviceId16Hex;
@@ -44,6 +44,11 @@ public class Device extends BaseModel implements Serializable {
      * 地址
      */
     private String address;
+    /**
+     * 状态类型:0-正常  1-报警  2-低压  3-故障
+     */
+    @Column(length = 2)
+    private Byte status;
 
     public String getDeviceId() {
         return deviceId;
@@ -92,4 +97,12 @@ public class Device extends BaseModel implements Serializable {
     public void setAddress(String address) {
         this.address = address;
     }
+
+    public Byte getStatus() {
+        return status;
+    }
+
+    public void setStatus(Byte status) {
+        this.status = status;
+    }
 }

+ 12 - 10
wsm-admin-dao/src/main/java/com/wsm/admin/model/DeviceStatus.java

@@ -7,24 +7,26 @@ import javax.persistence.*;
 import java.io.Serializable;
 
 /**
- * 设备状态
+ * 设备事件
  */
 @Entity
-@Table(name = "tb_device_status")
+@Table(name = "tb_device_event")
 @Where(clause = "rec_status='A'")
-public class DeviceStatus extends BaseModel implements Serializable {
+public class DeviceEvent extends BaseModel implements Serializable {
 
     private static final long serialVersionUID = 5512725645194142786L;
 
     @ManyToOne(fetch = FetchType.LAZY)
     private Device device;
-
+    /**
+     * 事件内容
+     */
     private String content;
     /**
-     * 状态类型:0-正常  1-报警  2-低压  3-故障
+     * 处理状态:0-待解决, 1-已立案,2-出警中,3-已解决
      */
     @Column(length = 2)
-    private Byte status;
+    private Byte handleStatus;
 
     public Device getDevice() {
         return device;
@@ -42,11 +44,11 @@ public class DeviceStatus extends BaseModel implements Serializable {
         this.content = content;
     }
 
-    public Byte getStatus() {
-        return status;
+    public Byte getHandleStatus() {
+        return handleStatus;
     }
 
-    public void setStatus(Byte status) {
-        this.status = status;
+    public void setHandleStatus(Byte handleStatus) {
+        this.handleStatus = handleStatus;
     }
 }

+ 7 - 0
wsm-admin-service/src/main/java/com/wsm/admin/service/IDeviceEventService.java

@@ -0,0 +1,7 @@
+package com.wsm.admin.service;
+
+import com.wsm.admin.model.DeviceEvent;
+import com.wsm.common.service.IBaseService;
+
+public interface IDeviceEventService extends IBaseService<DeviceEvent, Long> {
+}

+ 0 - 7
wsm-admin-service/src/main/java/com/wsm/admin/service/IDeviceStatusService.java

@@ -1,7 +0,0 @@
-package com.wsm.admin.service;
-
-import com.wsm.admin.model.DeviceStatus;
-import com.wsm.common.service.IBaseService;
-
-public interface IDeviceStatusService extends IBaseService<DeviceStatus, Long> {
-}

+ 23 - 0
wsm-admin-service/src/main/java/com/wsm/admin/service/impl/DeviceEventServiceImpl.java

@@ -0,0 +1,23 @@
+package com.wsm.admin.service.impl;
+
+import com.wsm.admin.dao.IDeviceEventDao;
+import com.wsm.admin.model.DeviceEvent;
+import com.wsm.admin.service.IDeviceEventService;
+import com.wsm.common.dao.IBaseDao;
+import com.wsm.common.service.impl.BaseServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class DeviceEventServiceImpl extends BaseServiceImpl<DeviceEvent, Long> implements IDeviceEventService {
+
+    @Autowired
+    private IDeviceEventDao deviceEventDao;
+
+    @Override
+    public IBaseDao<DeviceEvent, Long> getBaseDao() {
+        return this.deviceEventDao;
+    }
+
+
+}

+ 0 - 23
wsm-admin-service/src/main/java/com/wsm/admin/service/impl/DeviceStatusServiceImpl.java

@@ -1,23 +0,0 @@
-package com.wsm.admin.service.impl;
-
-import com.wsm.admin.dao.IDeviceStatusDao;
-import com.wsm.admin.model.DeviceStatus;
-import com.wsm.admin.service.IDeviceStatusService;
-import com.wsm.common.dao.IBaseDao;
-import com.wsm.common.service.impl.BaseServiceImpl;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service
-public class DeviceStatusServiceImpl extends BaseServiceImpl<DeviceStatus, Long> implements IDeviceStatusService {
-
-    @Autowired
-    private IDeviceStatusDao deviceServiceDao;
-
-    @Override
-    public IBaseDao<DeviceStatus, Long> getBaseDao() {
-        return this.deviceServiceDao;
-    }
-
-
-}

+ 11 - 1
wsm-admin-web/src/main/java/com/wsm/admin/api/DeviceController.java

@@ -51,13 +51,23 @@ public class DeviceController extends BaseController {
     @ResponseBody
     public AjaxJson edit(Device device) {
         try {
+            String device16hex = null;
+            if ("YG".equals(device.getDeviceType())){
+                String deviceId = device.getDeviceId();
+                device16hex = "5947" + deviceId.substring(5, deviceId.length());
+                device.setDeviceId16Hex(device16hex);
+            }
             if (device.getId() != null) {
                 Device dbDevice = deviceService.find(Long.valueOf(device.getId()));
                 dbDevice.setDeviceId16Hex(device.getDeviceId16Hex());
                 dbDevice.setDeviceId(device.getDeviceId());
                 dbDevice.setDeviceType(device.getDeviceType());
-                deviceService.update(device);
+                dbDevice.setLongitude(device.getLongitude());
+                dbDevice.setLatitude(device.getLatitude());
+                dbDevice.setAddress(device.getAddress());
+                deviceService.update(dbDevice);
             }else{
+                device.setStatus((byte)0);
                 deviceService.save(device);
             }
         } catch (Exception e) {

+ 42 - 22
wsm-admin-web/src/main/java/com/wsm/admin/handle/UdpServerHandler.java

@@ -2,11 +2,11 @@ package com.wsm.admin.handle;
 
 import com.alibaba.fastjson.JSONObject;
 import com.wsm.admin.model.Device;
-import com.wsm.admin.model.DeviceStatus;
+import com.wsm.admin.model.DeviceEvent;
 import com.wsm.admin.service.IDeviceService;
-import com.wsm.admin.service.IDeviceStatusService;
+import com.wsm.admin.service.IDeviceEventService;
 import com.wsm.admin.service.impl.DeviceServiceImpl;
-import com.wsm.admin.service.impl.DeviceStatusServiceImpl;
+import com.wsm.admin.service.impl.DeviceEventServiceImpl;
 import com.wsm.common.util.DeviceUtil;
 import com.wsm.common.util.ByteUtil;
 import com.wsm.common.util.SpringContext;
@@ -37,7 +37,7 @@ public class UdpServerHandler extends SimpleChannelInboundHandler<DatagramPacket
 
     private static final Logger log= LoggerFactory.getLogger(UdpServerHandler.class);
 
-    private IDeviceStatusService deviceStatusService;
+    private IDeviceEventService deviceEventService;
     private IDeviceService deviceService;
     private SimpMessagingTemplate messagingTemplate;
 
@@ -45,8 +45,8 @@ public class UdpServerHandler extends SimpleChannelInboundHandler<DatagramPacket
         if (deviceService == null){
             deviceService = SpringContext.getBean(DeviceServiceImpl.class);
         }
-        if (deviceStatusService == null){
-            deviceStatusService = SpringContext.getBean(DeviceStatusServiceImpl.class);
+        if (deviceEventService == null){
+            deviceEventService = SpringContext.getBean(DeviceEventServiceImpl.class);
         }
         if (messagingTemplate == null){
             messagingTemplate = SpringContext.getBean(SimpMessagingTemplate.class);
@@ -55,7 +55,10 @@ public class UdpServerHandler extends SimpleChannelInboundHandler<DatagramPacket
 
     private static final Map<String, String> jgDeviceStatusMap = new HashMap<>();
 
+    private static final String LOW_PRESSURE_CODE = "ERC40";
+
     static {
+        jgDeviceStatusMap.put(LOW_PRESSURE_CODE, "电池电压");
         jgDeviceStatusMap.put("ERC52", "水浸事件");
         jgDeviceStatusMap.put("ERC51", "井盖掀翻");
         jgDeviceStatusMap.put("ERC50", "井盖倾斜/抬起");
@@ -130,21 +133,40 @@ public class UdpServerHandler extends SimpleChannelInboundHandler<DatagramPacket
                     log.warn("=======时间"+dateTime.toDate()+"=======\n");
 
                     Device device = deviceService.findByDeviceId(deviceId);
+                    String content = jgDeviceStatusMap.get(type);
+                    boolean needEvent = false;
                     if (device != null){
-                        DeviceStatus status =  new DeviceStatus();
-                        status.setContent(jgDeviceStatusMap.get(type));
-                        status.setDevice(device);
-                        status.setStatus((byte)1);
-                        status.setCreateTime(dateTime.toDate());
-                        status.setUpdateTime(dateTime.toDate());
-                        deviceStatusService.save(status);
-                        log.warn(device.getDeviceId() + ":"+ status.getContent());
-
-                        JSONObject result = new JSONObject();
-                        result.put("id", device.getDeviceId());
-                        result.put("deviceType", device.getDeviceType());
-                        result.put("status", "ERC"+type);
-                        messagingTemplate.convertAndSend("/topic/device", result.toJSONString());
+                        if (LOW_PRESSURE_CODE.equals(type)){
+                            String pressure = eventStrArr[11];
+                            // 低压
+                            if (Integer.valueOf(pressure) <= 20){
+                                device.setStatus((byte)2);
+                                needEvent = true;
+                            }
+                        }else {
+                            // 报警
+                            device.setStatus((byte)1);
+                            needEvent = true;
+                        }
+                        deviceService.update(device);
+
+                        if (needEvent){
+                            DeviceEvent event = new DeviceEvent();
+                            event.setDevice(device);
+                            event.setContent(content);
+                            event.setHandleStatus((byte)0);
+                            event.setCreateTime(dateTime.toDate());
+                            event.setUpdateTime(dateTime.toDate());
+                            deviceEventService.save(event);
+                            log.warn(device.getDeviceId() + ":"+ event.getContent());
+
+                            JSONObject result = new JSONObject();
+                            result.put("id", device.getDeviceId());
+                            result.put("deviceType", device.getDeviceType());
+                            result.put("status", type);
+                            // 推送信息到前端
+                            messagingTemplate.convertAndSend("/topic/device", result.toJSONString());
+                        }
                     }
                 }
             }
@@ -166,8 +188,6 @@ public class UdpServerHandler extends SimpleChannelInboundHandler<DatagramPacket
         return feedback.toString().toUpperCase();
     }
 
-
-
     @Override
     public void channelReadComplete(ChannelHandlerContext ctx) {
         ctx.flush();

+ 33 - 15
wsm-admin-web/src/main/java/com/wsm/admin/init/TcpServer.java

@@ -2,11 +2,12 @@ package com.wsm.admin.init;
 
 import com.alibaba.fastjson.JSONObject;
 import com.wsm.admin.model.Device;
-import com.wsm.admin.model.DeviceStatus;
+import com.wsm.admin.model.DeviceEvent;
 import com.wsm.admin.service.IDeviceService;
-import com.wsm.admin.service.IDeviceStatusService;
+import com.wsm.admin.service.IDeviceEventService;
 import com.wsm.common.util.ByteUtil;
 import com.wsm.common.util.DeviceUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -41,12 +42,15 @@ public class TcpServer {
     private static Selector selector;
 
     @Autowired
-    private IDeviceStatusService deviceStatusService;
+    private IDeviceEventService deviceEventService;
     @Autowired
     private IDeviceService deviceService;
     @Autowired
     private SimpMessagingTemplate messagingTemplate;
 
+    private static final String LOW_PRESSURE_CODE = "384";
+    private static final String SMOKE_CODE = "111";
+
     private static final Map<String, String> deviceStatusMap = new HashMap<>();
 
     static {
@@ -60,8 +64,8 @@ public class TcpServer {
         deviceStatusMap.put("3801", "消防手报状态:弹起");
         deviceStatusMap.put("3E01", "喷淋状态:打开");
 
-        deviceStatusMap.put("111", "烟雾报警");
-        deviceStatusMap.put("384", "低压报警");
+        deviceStatusMap.put(SMOKE_CODE, "烟雾报警");
+        deviceStatusMap.put(LOW_PRESSURE_CODE, "低压报警");
         deviceStatusMap.put("993", "底座上的烟感低压");
         deviceStatusMap.put("992", "NB 底座低压报警 ");
         deviceStatusMap.put("991", "燃气报警");
@@ -178,13 +182,17 @@ public class TcpServer {
                 break;
             // 状态
             case "04":
-                int total = Integer.valueOf(str[16]);
+                log.warn("======心跳信息,推送状态信息======");
+                /*int total = Integer.valueOf(str[16]);
                 for (int i = 0, length = 3; i < total; i++){
                     String a = str[17 + i * length];
                     //String b = str[18 + i * length];
                     String c = str[19 + i * length];
                     // 状态异常
-                    if (!org.springframework.util.StringUtils.isEmpty(deviceStatusMap.get(a+c)) && device != null){
+                    if (!StringUtils.isEmpty(deviceStatusMap.get(a+c)) && device != null){
+
+
+
                         DeviceStatus status =  new DeviceStatus();
                         status.setContent(deviceStatusMap.get(a+c));
                         status.setDevice(device);
@@ -199,24 +207,34 @@ public class TcpServer {
 
                         messagingTemplate.convertAndSend("/topic/device", result.toJSONString());
                     }
-                }
+                }*/
                 break;
             // 报警
             case "09":
                 // 报警
                 String hex = ByteUtil.hexStringToString(str[24]+str[25]+str[26]);
-                if (!org.springframework.util.StringUtils.isEmpty(deviceStatusMap.get(hex)) && device != null){
-                    DeviceStatus status =  new DeviceStatus();
-                    status.setContent(deviceStatusMap.get(hex));
-                    status.setDevice(device);
-                    status.setStatus((byte)1);
-                    deviceStatusService.save(status);
-                    log.warn(device.getDeviceId() + ":"+ status.getContent());
+                if (!StringUtils.isEmpty(deviceStatusMap.get(hex)) && device != null){
+
+                    if (LOW_PRESSURE_CODE.equals(hex)){
+                        device.setStatus((byte)2);
+                    }else if (SMOKE_CODE.equals(hex)){
+                        device.setStatus((byte)1);
+                    }
+                    deviceService.update(device);
+
+                    DeviceEvent event =  new DeviceEvent();
+                    event.setContent(deviceStatusMap.get(hex));
+                    event.setDevice(device);
+                    event.setHandleStatus((byte)0);
+                    deviceEventService.save(event);
+                    log.warn(device.getDeviceId() + ":"+ event.getContent());
 
                     JSONObject result = new JSONObject();
                     result.put("id", device.getDeviceId());
                     result.put("deviceType", device.getDeviceType());
                     result.put("status", hex);
+
+                    // 推送报警事件给前端
                     messagingTemplate.convertAndSend("/topic/device", result.toJSONString());
                 }
                 break;

+ 83 - 0
wsm-application/src/main/resources/static/js/map.js

@@ -0,0 +1,83 @@
+/*初始化地图*/
+var map, markersArray = [], geocoder;
+function init(){
+    var myLatlng = new qq.maps.LatLng(39.916527,116.397128);
+    var myOptions = {
+        zoom: 16,
+        center: myLatlng,
+        mapTypeId: qq.maps.MapTypeId.ROADMAP,
+        disableDefaultUI: true
+    };
+
+    map = new qq.maps.Map(document.getElementById("container"), myOptions);
+
+    qq.maps.event.addListener(
+        map, 'click', function(event) {
+            var latLng = new qq.maps.LatLng(event.latLng.getLat(), event.latLng.getLng());
+            if (geocoder == null) geocoder = getGeocoder();
+            geocoder.getAddress(latLng);
+        }
+    );
+
+    /*地图地址查询*/
+
+    var lat = $("#latitude").val();
+    var lng = $("#longitude").val();
+    var addressSearch = $("#addressSearch").val();
+
+    if (lat != null && "" != lat && lng != null && "" != lng){
+        var latLng = new qq.maps.LatLng(lat, lng);
+        if (geocoder == null) geocoder = getGeocoder();
+        geocoder.getAddress(latLng);
+
+    }else if (addressSearch != null && "" != addressSearch) {
+        if (geocoder == null) geocoder = getGeocoder();
+        geocoder.getLocation(addressSearch);
+    }
+
+    /*地图地址查询*/
+    $("#searchBtn").click(function() {
+        if (geocoder == null) geocoder = getGeocoder();
+        geocoder.getLocation($("#addressSearch").val());
+    });
+
+}
+
+function getGeocoder(){
+    geocoder = new qq.maps.Geocoder({
+        complete : function(result){
+
+            clearOverlays();
+
+            var addComp = result.detail.addressComponents;
+
+            $("#addressSearch").val(result.detail.address);
+            $("#city").val(addComp.city);
+            $("#latitude").val(result.detail.location.lat);
+            $("#longitude").val(result.detail.location.lng);
+
+            //添加标记
+            map.setCenter(result.detail.location);
+            var marker = new qq.maps.Marker({
+                map:map,
+                position: result.detail.location,
+                draggable: false,
+            });
+            markersArray.push(marker);
+        }
+    });
+    return geocoder;
+}
+
+//清除覆盖层
+function clearOverlays() {
+    if (markersArray) {
+        for (i in markersArray) {
+            markersArray[i].setMap(null);
+        }
+    }
+}
+
+window.onload = init;
+/*初始化地图*/
+

+ 26 - 2
wsm-application/src/main/resources/templates/admin/device/form.html

@@ -11,6 +11,7 @@
         .layui-form-label {
             width: 100px;
         }
+        #container{height:500px;}
     </style>
 </head>
 <body class="child-body">
@@ -29,6 +30,8 @@
         <div class="layui-card-body">
             <form class="layui-form" action="/admin/device/save" method="post">
                 <input type="hidden" id="deviceId" name="id" th:value="${device.id}">
+                <input type="hidden" id="longitude" name="longitude" th:value="${device.longitude}">
+                <input type="hidden" id="latitude" name="latitude" th:value="${device.latitude}">
                 <div class="layui-form-item">
                     <label class="layui-form-label">设备号</label>
                     <div class="layui-input-inline">
@@ -36,13 +39,13 @@
                                lay-vertype="tips" class="layui-input" >
                     </div>
                 </div>
-                <div class="layui-form-item">
+                <!--<div class="layui-form-item">
                     <label class="layui-form-label">设备号16进制码</label>
                     <div class="layui-input-inline">
                         <input type="text" name="deviceId16Hex" th:value="${device.deviceId16Hex}" lay-verify="required"
                                lay-vertype="tips" class="layui-input" >
                     </div>
-                </div>
+                </div>-->
                 <div class="layui-form-item">
                     <label class="layui-form-label">设备类型</label>
                     <div class="layui-input-inline">
@@ -53,6 +56,24 @@
                     </div>
                 </div>
                 <div class="layui-form-item">
+                    <label class="layui-form-label">地址</label>
+                    <div class="layui-input-block">
+                        <div class="layui-col-xs6">
+                            <input id="addressSearch" type="text" name="address" th:value="${device.address}" lay-verify="required"
+                                lay-vertype="tips" class="layui-input" >
+                        </div>
+                        <div class="layui-col-xs3" style="text-align: left;">
+                            <button id="searchBtn" type="button" class="layui-btn">查找</button>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label"></label>
+                    <div class="layui-input-block">
+                        <div id="container"></div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
                     <div class="layui-input-block">
                         <button class="layui-btn" lay-submit lay-filter="save"
                                 th:text="${#strings.equals(device.id,null)?'保存':'修改'}"></button>
@@ -63,7 +84,10 @@
         </div>
     </div>
 </div>
+<script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=YCABZ-AFPRX-VD54O-TL3VN-TL7A3-KPBQJ"></script>
 <script src="/plugins/layui/layui.js"></script>
+<script src="/js/jquery.min.js"></script>
+<script src="/js/map.js"></script>
 <script type="text/javascript">
     layui.use(['element', 'form', 'laydate', 'upload'], function () {
         var form = layui.form, $ = layui.jquery;