laowo 4 سال پیش
والد
کامیت
5cb37bfc06

+ 48 - 1
src/main/java/com/usky/controller/top/TopController.java

@@ -10,6 +10,7 @@ import com.usky.entity.mqtt.vo.TbDeviceVO;
 import com.usky.entity.mqtt.vo.TbDeviceVOTop;
 import com.usky.service.top.TopServcie;
 import com.usky.utils.HttpUtils;
+import com.usky.utils.Page;
 import com.usky.utils.RedisUtil;
 import com.usky.utils.Result;
 import io.swagger.annotations.Api;
@@ -107,10 +108,56 @@ public class TopController {
     @ApiImplicitParams({
             @ApiImplicitParam(name = "devId", value = "设备id", required = false, paramType = "query")
     })
-    public Result<Object> listYw(@RequestParam(name = "devId",required = false, defaultValue = "10011") String devId) {
+    public Result<Object> listYw(@RequestParam(name = "devId", required = false, defaultValue = "861050040560321") String devId) {
         List<TbDeviceInfoDTO> tbDeviceInfoDTOS = topServcie.listYw(devId);
         return Result.OK(tbDeviceInfoDTOS);
     }
 
 
+    @ApiOperation(value = "首页-历史告警查询")
+    @GetMapping("listHistryAlarms")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "devId", value = "设备id", required = false, paramType = "query"),
+            @ApiImplicitParam(name = "pageNo", value = "当前页 默认1", required = false, paramType = "query"),
+            @ApiImplicitParam(name = "status", value = "告警状态", required = false, paramType = "query"),
+            @ApiImplicitParam(name = "serial", value = "告警类型", required = false, paramType = "query"),
+            @ApiImplicitParam(name = "pageSize", value = "页数据条数20", required = false, paramType = "query")
+    })
+    public Page<TbDeviceAlarmsVO> listHistryAlarms(
+            @RequestParam(name = "pageSize", defaultValue = "20") Integer pageSize,
+            @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+            @RequestParam(name = "status", required = false) String status,
+            @RequestParam(name = "serial", required = false) String serial,
+            @RequestParam(name = "devId", required = false) String devId
+    ) {
+        Page<TbDeviceAlarmsVO> result = topServcie.listHistryAlarms(devId, pageSize, pageNo, status, serial);
+        return result;
+    }
+
+
+    @ApiOperation(value = "历史告警统计")
+    @GetMapping("listHistryAlarmsTj")
+    @ApiImplicitParams({
+
+    })
+    public Result<?> listHistryAlarmsTj(
+
+    ) {
+        Map result = topServcie.listHistryAlarmsTj();
+        return Result.OK(result);
+    }
+
+
+    @ApiOperation(value = "告警处理")
+    @PostMapping("updateAlarm")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "Id", value = "告警编号", required = true, paramType = "query")
+    })
+    public Result<?> updateAlarm(   @RequestParam(name = "Id") Integer Id
+    ) {
+
+        return topServcie.updateAlarm(Id);
+    }
+
+
 }

+ 27 - 13
src/main/java/com/usky/mqtthandler/Mqtt2MessageHandler.java

@@ -6,6 +6,7 @@ import com.usky.service.mqtt.MqttService;
 import lombok.SneakyThrows;
 import lombok.extern.log4j.Log4j2;
 import net.sf.json.JSONObject;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.integration.annotation.ServiceActivator;
 import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter;
@@ -37,30 +38,43 @@ public class Mqtt2MessageHandler implements MessageHandler {
     @ServiceActivator(inputChannel = "channel1")
     @Override
     public void handleMessage(Message<?> message) throws MessagingException {
-        String payload = (String) message.getPayload();
-        JSONObject data = JSONObject.fromObject(payload);
-        if (data.has("type")) {
-            if (CommonConstant.MQTT_MESSAGE_TYPE_INFO.equals(data.get("type"))) {
-
-                log.info("【MQTT】心跳数据{}解析】", message);
 
-                mqttService.infoSava(data);
+        String payload = (String) message.getPayload();
+        if (isJsonObject(payload)) {
+            JSONObject data = JSONObject.fromObject(payload);
+            if (data.has("type")) {
+                if (CommonConstant.MQTT_MESSAGE_TYPE_INFO.equals(data.get("type"))) {
+                    log.info("【MQTT】心跳数据{}解析】", message);
+                    mqttService.infoSava(data);
 
-            } else if (CommonConstant.MQTT_MESSAGE_TYPE_ALARM.equals(data.get("type"))) {
+                } else if (CommonConstant.MQTT_MESSAGE_TYPE_ALARM.equals(data.get("type"))) {
 
-                log.info("【MQTT】告警数据{}解析】", message);
+                    log.info("【MQTT】告警数据{}解析】", message);
 
-                mqttService.alarmSendAndSava(data);
-            } else {
+                    mqttService.alarmSendAndSava(data);
+                } else {
 
-                log.error("【MQTT】数据类型异常{}", message);
+                    log.error("【MQTT】数据类型异常{}", message);
+                }
             }
         } else {
-
             log.error("【MQTT】数据格式异常{}", message);
 
         }
 
     }
 
+
+    public static boolean isJsonObject(String content) {
+        if (StringUtils.isBlank(content)) {
+            return false;
+        }
+        try {
+            JSONObject data = JSONObject.fromObject(content);
+            return true;
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
 }

+ 21 - 8
src/main/java/com/usky/service/mqtt/MqttServiceImpl.java

@@ -11,8 +11,12 @@ import net.sf.json.JSONObject;
 import org.hibernate.Session;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.socket.TextMessage;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
 /**
  * @author laowo
  * @version v1.0
@@ -20,6 +24,7 @@ import org.springframework.web.socket.TextMessage;
  * @description TODO
  **/
 @Service
+@Transactional
 public class MqttServiceImpl extends BaseDaoImpl implements MqttService {
     @Autowired
     private RedisUtil redisUtil;
@@ -31,6 +36,9 @@ public class MqttServiceImpl extends BaseDaoImpl implements MqttService {
         for (int i = 0; i < devs.size(); i++) {
             //获取属性列表
             JSONObject device = (JSONObject) devs.get(i);
+            Object timeStamp = device.get("timeStamp");
+            String time = TimeUtil.getTime(timeStamp.toString());
+            device.put("timeStamp",time);
             device.put("type", "INFO");
             redisUtil.set((String) device.get("devId"), device.toString());
             JSONArray dp = (JSONArray) device.get("dp");
@@ -41,11 +49,11 @@ public class MqttServiceImpl extends BaseDaoImpl implements MqttService {
                 deviceInfoDTO.setDevId((String) device.get("devId"));
                 deviceInfoDTO.setDevcieModel((String) device.get("deviceModel"));
                 deviceInfoDTO.setDeviceName((String) device.get("deviceName"));
-                deviceInfoDTO.setDevceType((String) device.get("deviceType"));
-                deviceInfoDTO.setTimeStamp((String) device.get("timeStamp"));
+                deviceInfoDTO.setDevceType(String.valueOf(device.get("deviceType")));
+                deviceInfoDTO.setTimeStamp(device.get("timeStamp").toString());
                 deviceInfoDTO.setProperty((String) devDp.get("property"));
                 deviceInfoDTO.setSerial((String) devDp.get("serial"));
-                deviceInfoDTO.setValue((String) devDp.get("value"));
+                deviceInfoDTO.setValue(devDp.get("value").toString());
                 deviceInfoDTO.setCreateTime(TimeUtil.getTime());
                 //设备实时状体存续
                 Session session = getSession();
@@ -59,13 +67,16 @@ public class MqttServiceImpl extends BaseDaoImpl implements MqttService {
     @Override
     public void alarmSendAndSava(JSONObject data) {
 //获取设备列表
-        JSONArray devs = (JSONArray) data.get("alarams");
+        JSONArray devs = (JSONArray) data.get("alarms");
         for (int i = 0; i < devs.size(); i++) {
             //获取属性列表
             JSONObject device = (JSONObject) devs.get(i);
             device.put("type", "ALARM");
             JSONArray dp = (JSONArray) device.get("dp");
             redisUtil.set((String) device.get("devId"), device.toString());
+            Object timeStamp = device.get("timeStamp");
+            String time = TimeUtil.getTime(timeStamp.toString());
+            device.put("timeStamp",time);
             WsSessionManager.sendMessageToAll(new TextMessage(device.toString()));
             for (int j = 0; j < dp.size(); j++) {
                 TbDeviceAlarmsDTO deviceAlarmsDTO = new TbDeviceAlarmsDTO();
@@ -74,11 +85,11 @@ public class MqttServiceImpl extends BaseDaoImpl implements MqttService {
                 deviceAlarmsDTO.setDevId((String) device.get("devId"));
                 deviceAlarmsDTO.setDevcieModel((String) device.get("devcieModel"));
                 deviceAlarmsDTO.setDeviceName((String) device.get("deviceName"));
-                deviceAlarmsDTO.setDeviceType((String) device.get("deviceType"));
-                deviceAlarmsDTO.setTimeStamp((String) device.get("timeStamp"));
+                deviceAlarmsDTO.setDeviceType(String.valueOf(device.get("deviceType")));
+                deviceAlarmsDTO.setTimeStamp(device.get("timeStamp").toString());
                 deviceAlarmsDTO.setProperty((String) devDp.get("property"));
-                deviceAlarmsDTO.setSerial((String) devDp.get("serial"));
-                deviceAlarmsDTO.setValue((String) devDp.get("value"));
+                deviceAlarmsDTO.setSerial(String.valueOf(devDp.get("serial")));
+                deviceAlarmsDTO.setValue(String.valueOf(devDp.get("value")));
                 deviceAlarmsDTO.setStatus((Integer) devDp.get("status"));
                 deviceAlarmsDTO.setCreateTime(TimeUtil.getTime());
                 //告警存储
@@ -92,4 +103,6 @@ public class MqttServiceImpl extends BaseDaoImpl implements MqttService {
             }
         }
     }
+
+
 }

+ 31 - 1
src/main/java/com/usky/service/top/TopServcie.java

@@ -5,6 +5,7 @@ import com.usky.entity.mqtt.vo.TbDeviceAlarmsVO;
 import com.usky.entity.mqtt.vo.TbDeviceInfoVO;
 import com.usky.entity.mqtt.vo.TbDeviceVO;
 import com.usky.entity.mqtt.vo.TbDeviceVOTop;
+import com.usky.utils.Page;
 import com.usky.utils.Result;
 
 import java.util.List;
@@ -30,14 +31,43 @@ public interface TopServcie {
 
     /**
      * 首页设备查询
+     *
      * @return
      */
     List<TbDeviceVOTop> listDevcie();
 
     /**
      * 设备液位查询
-     * @return
+     *
      * @param devId
+     * @return
      */
     List<TbDeviceInfoDTO> listYw(String devId);
+
+    /**
+     * 历史告警查询
+     *
+     * @param devId
+     * @param pageSize
+     * @param pageNo
+     * @param s
+     * @param status
+     * @return
+     */
+    Page<TbDeviceAlarmsVO> listHistryAlarms(String devId, Integer pageSize, Integer pageNo, String status, String serial);
+
+    /**
+     * 告警历史统计
+     *
+     * @return
+     */
+    Map<String, Object> listHistryAlarmsTj();
+
+    /**
+     * 告警处理
+     *
+     * @param id
+     * @return
+     */
+    Result<?> updateAlarm(Integer id);
 }

+ 83 - 10
src/main/java/com/usky/service/top/TopServcieImpl.java

@@ -4,11 +4,12 @@ import com.usky.dao.impl.BaseDaoImpl;
 import com.usky.entity.mqtt.TbDeviceAlarmsDTO;
 import com.usky.entity.mqtt.TbDeviceDTO;
 import com.usky.entity.mqtt.TbDeviceInfoDTO;
-import com.usky.entity.mqtt.vo.TbDeviceVO;
+import com.usky.entity.mqtt.vo.TbDeviceAlarmsVO;
 import com.usky.entity.mqtt.vo.TbDeviceVOTop;
-import com.usky.utils.BeanHelp;
-import com.usky.utils.RedisUtil;
+import com.usky.utils.*;
 import net.sf.json.JSONObject;
+import org.apache.commons.lang3.StringUtils;
+import org.hibernate.query.Query;
 import org.hibernate.transform.Transformers;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -35,7 +36,7 @@ public class TopServcieImpl extends BaseDaoImpl implements TopServcie {
         //离线数量
         long unOline = alarmsDTOList.stream().filter(s -> "1".equals(s.getSerial())).count();
         //故障数量
-        long malfunction = alarmsDTOList.stream().filter(s -> "32".equals(s.getSerial())).count();
+        long malfunction = alarmsDTOList.stream().filter(s -> !"1".equals(s.getSerial())).collect(Collectors.groupingBy(TbDeviceAlarmsDTO::getDevId)).size();
         Map<String, Object> result = new HashMap<>();
         //设备总数
         result.put("deviceTotalNum", list.size());
@@ -49,12 +50,18 @@ public class TopServcieImpl extends BaseDaoImpl implements TopServcie {
         //查询七天告警数据
         List<TbDeviceAlarmsDTO> list = getSession().createSQLQuery("SELECT id,dev_id as devId,register_id AS registerId,device_name AS deviceName,device_type AS deviceType,devcie_model AS devcieModel,property,serial,`value`,`status`,create_time AS createTime ,time_stamp AS `timeStamp` FROM tb_device_alarms WHERE date_sub(curdate(), interval 7 day) < date(create_time) order by id ASC")
                 .setResultTransformer(Transformers.aliasToBean(TbDeviceAlarmsDTO.class)).list();
-        //根据时间分组
-    //    Map<String, List<TbDeviceAlarmsDTO>> collect = list.stream().collect(Collectors.groupingBy(TbDeviceAlarmsDTO::getCreateTime));
-   //     Map<LocalDate, List> modelMap = modelVOList.stream().collect(Collectors.groupingBy(Model::getGroupTime,
 
-     //   LinkedHashMap::new, Collectors.toList()));
-        Map<String, List<TbDeviceAlarmsDTO>> collect = list.stream().collect(Collectors.groupingBy(TbDeviceAlarmsDTO::getCreateTime, LinkedHashMap::new, Collectors.toList()));
+        List<TbDeviceAlarmsDTO> objects = new ArrayList<>();
+        for (TbDeviceAlarmsDTO deviceAlarmsDTO : list) {
+            String createTime = deviceAlarmsDTO.getCreateTime();
+            String time = createTime.substring(0, createTime.indexOf(" "));
+            deviceAlarmsDTO.setCreateTime(time);
+            objects.add(deviceAlarmsDTO);
+
+        }
+
+        Map<String, List<TbDeviceAlarmsDTO>> collect = objects.stream().collect(Collectors.groupingBy(TbDeviceAlarmsDTO::getCreateTime, LinkedHashMap::new, Collectors.toList()));
+
 
         List<Object> resultList = new ArrayList<>();
         Set<String> strings = collect.keySet();
@@ -79,7 +86,7 @@ public class TopServcieImpl extends BaseDaoImpl implements TopServcie {
         List<TbDeviceDTO> list = getSession().createQuery("from TbDeviceDTO t where t.del=0").list();
         List<TbDeviceVOTop> tbDeviceVOS = BeanHelp.copyWithCollection(list, TbDeviceVOTop.class);
         for (TbDeviceVOTop tbDeviceVOTop : tbDeviceVOS) {
-                  Object o = redisUtil.get(tbDeviceVOTop.getDevId());
+            Object o = redisUtil.get(tbDeviceVOTop.getDevId());
             JSONObject jsonObject = JSONObject.fromObject(o);
             tbDeviceVOTop.setData(jsonObject);
             tbDeviceVOTop.setUserName("吉超薄");
@@ -113,5 +120,71 @@ public class TopServcieImpl extends BaseDaoImpl implements TopServcie {
         List<TbDeviceInfoDTO> list = getSession().createSQLQuery(sb.toString()).setResultTransformer(Transformers.aliasToBean(TbDeviceInfoDTO.class)).list();
         return list;
     }
+
+    @Override
+    public Page<TbDeviceAlarmsVO> listHistryAlarms(String devId, Integer pageSize, Integer pageNo, String status, String serial) {
+        StringBuilder sb = new StringBuilder();
+        sb.append("from TbDeviceAlarmsDTO t where 1 =1 ");
+        if (StringUtils.isNotBlank(devId)) {
+            sb.append(" and t.devId= '" + devId + "' ");
+        }
+        if (StringUtils.isNotBlank(status)) {
+            sb.append(" and t.status= " + status + " ");
+        }
+        if (StringUtils.isNotBlank(serial)) {
+            sb.append(" and t.serial= '" + serial + "' ");
+        }
+        Query query = getSession().createQuery(sb.toString());
+
+
+        Page<TbDeviceAlarmsVO> result = new Page<>(query.list().size(), pageSize);
+        query.setFirstResult((pageNo - 1) * pageSize);
+        query.setMaxResults(pageSize);
+        List<TbDeviceAlarmsVO> tbDeviceAlarmsVOS = BeanHelp.copyWithCollection(query.list(), TbDeviceAlarmsVO.class);
+        result.setPageList(tbDeviceAlarmsVOS);
+        result.setPageNo(pageNo);
+        return result;
+    }
+
+    @Override
+    public Map<String, Object> listHistryAlarmsTj() {
+        List<TbDeviceAlarmsDTO> list = getSession().createQuery("from TbDeviceAlarmsDTO ").list();
+        Map<String, Object> result = new HashMap<>();
+        //历史告警总数
+        result.put("total", list.size());
+        //未处理告警
+        long count = list.stream().filter(s -> s.getStatus() == 0).count();
+        //离线告警数
+        long offline = list.stream().filter(s -> "1".equals(s.getSerial())).count();
+        //   号1离线2异动32故障 3液位告警 4 电量告警
+        long YD = list.stream().filter(s -> "32".equals(s.getSerial())).count();
+        long YW = list.stream().filter(s -> "3".equals(s.getSerial())).count();
+        long DL = list.stream().filter(s -> "4".equals(s.getSerial())).count();
+        //未处理数
+        result.put("untreated", count);
+        result.put("offline", offline);
+        result.put("YD", YD);
+        result.put("YW", YW);
+        result.put("DL", DL);
+        return result;
+    }
+
+    @Override
+    public Result<?> updateAlarm(Integer id) {
+        List<TbDeviceAlarmsDTO> list = getSession().createQuery("from TbDeviceAlarmsDTO t  where t.status=0 and t.id=" + id + "").list();
+        if (ListUtil.isBlank(list)) {
+            return Result.error("告警不存在!");
+        }
+        TbDeviceAlarmsDTO o = list.get(0);
+        o.setStatus(1);
+        getSession().update(o);
+        return Result.OK("操作成功!");
+    }
+
+    public static void main(String[] args) {
+        String time = "2018/12/8 12:45";
+        String substring = time.substring(0, time.indexOf(" "));
+        System.out.println("substring = " + substring);
+    }
 }
 

+ 16 - 0
src/main/java/com/usky/utils/TimeUtil.java

@@ -15,9 +15,25 @@ public class TimeUtil {
         String format = df.format(new Date());
         return format;
     }
+
     public static String getTime(Date date) {
         SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         String format = df.format(date);
         return format;
     }
+
+    /**
+     * 字符串时间戳转时间
+     *
+     * @param timeStamp
+     * @return
+     */
+    public static String getTime(String timeStamp) {
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Date date = new Date(Long.valueOf(timeStamp+"000"));
+        String strTime = sdf.format(date);
+        return strTime;
+    }
+
 }

+ 2 - 2
src/main/resources/application.yml

@@ -72,8 +72,8 @@ mqtt:
       producer-enable: true
    #   url: [tcp://124.71.175.91:1883]
       url: [tcp://47.98.201.73:1883]
-      topics: [usky,test]
-      qos: [1,0]
+      topics: [/usky/10012/861050040560669/#,/usky/10012/861050040560321/#,/usky/10012/861050040533286/#]
+      qos: [0,0,0]
   #   username: wjzn2021
   #   password: wjzn2021
       username: usky