Selaa lähdekoodia

'优化统一告警表-列表和统一告警表-统计,新增统一告警表-大屏最新6条告警数据信息接口'

james 1 vuosi sitten
vanhempi
commit
959caaf7c0

+ 11 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/BaseAlarmController.java

@@ -14,6 +14,8 @@ import org.springframework.web.bind.annotation.*;
 
 import org.springframework.stereotype.Controller;
 
+import java.util.List;
+
 /**
  * <p>
  * 统一告警表 前端控制器
@@ -48,6 +50,15 @@ public class BaseAlarmController {
         return ApiResult.success(baseAlarmService.page(baseAlarmListVO));
     }
 
+    /**
+     * 大屏最新6条告警信息
+     * @return
+     */
+    @PostMapping("/getScreenAlarmList")
+    public ApiResult<List<BaseAlarm>> getScreenAlarmList(){
+        return ApiResult.success(baseAlarmService.getScreenAlarmList());
+    }
+
     /**
      * 修改
      * @param baseAlarm

+ 4 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/BaseAlarmService.java

@@ -9,6 +9,8 @@ import com.usky.iot.service.vo.BaseAlarmRequestVO;
 import com.usky.iot.service.vo.BaseAlarmResponeVO;
 import org.springframework.web.bind.annotation.RequestBody;
 
+import java.util.List;
+
 /**
  * <p>
  * 统一告警表 服务类
@@ -23,6 +25,8 @@ public interface BaseAlarmService extends CrudService<BaseAlarm> {
 
     CommonPage<BaseAlarm> page(BaseAlarmListVO baseAlarmListVO);
 
+    List<BaseAlarm> getScreenAlarmList();
+
     void update(BaseAlarm baseAlarm);
 
     boolean add(BaseAlarm baseAlarm);

+ 53 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/config/mqtt/MqttInConfig.java

@@ -0,0 +1,53 @@
+package com.usky.iot.service.config.mqtt;
+
+import com.usky.iot.service.enums.TopListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.integration.channel.DirectChannel;
+import org.springframework.integration.core.MessageProducer;
+import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter;
+import org.springframework.integration.mqtt.support.DefaultPahoMessageConverter;
+import org.springframework.messaging.MessageChannel;
+
+import java.util.List;
+
+/**
+ * @author yq
+ * @date 2021/11/1 16:37
+ */
+@ConditionalOnProperty(prefix = "mqtt", value = {"enabled"}, havingValue = "true")
+@Configuration
+public class MqttInConfig {
+
+    @Autowired
+    private MqttBaseConfig mqttBaseConfig;
+
+    public static final String CHANNEL_NAME_INPUT = "mqttInputChannel";
+
+    @Bean(name = CHANNEL_NAME_INPUT)
+    public MessageChannel mqttInputChannel() {
+        return new DirectChannel();
+    }
+
+
+    /**
+     * 消息订阅绑定-消费者
+     *
+     * @return
+     */
+    @Bean
+    public MessageProducer inbound() {
+        List<TopListener> parse = TopListener.parse(1);
+        String[] tops = parse.stream().map(TopListener::getCode).toArray(String[]::new);
+        String clientId = "h-backend-mqtt-in-" + System.currentTimeMillis();
+        MqttPahoMessageDrivenChannelAdapter adapter = new MqttPahoMessageDrivenChannelAdapter(clientId,
+                mqttBaseConfig.mqttClientFactory(), tops);
+        adapter.setCompletionTimeout(mqttBaseConfig.getCompletionTimeout());
+        adapter.setConverter(new DefaultPahoMessageConverter());
+        adapter.setQos(2);
+        adapter.setOutputChannel(mqttInputChannel());
+        return adapter;
+    }
+}

+ 1 - 27
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/enums/TopListener.java

@@ -9,37 +9,11 @@ import java.util.List;
  */
 public enum TopListener {
 
-    /**
-     * 城运对接
-     */
-    MH_WATER_INFO("fireInfo","mh/water/info",1),
-    MH_WATER_ALERT("fireInfo","mh/water/alert",1),
-    MH_WATER_STATISTICS("fireInfo","mh/water/statistics",1),
-    DEVICE_INFO("fireInfo","device/info",1),
-    DEVICE_ALERT("fireInfo","device/alert",1),
-    DEVICE_DETAIL("fireInfo","device/detail",1),
-    DEVICE_AJ("fireInfo","device/aj",1),
 
     /**
      * 全部设备对接
      */
-    FIRE_INFO("fireInfo","/usky/ytDP0001/+/+/info",1),
-    FIRE_ALERT("fireAlarm","/usky/ytDP0001/+/+/alarm",1),
-    WATER_INFO("waterInfo","/usky/ytDP0002/+/+/info",1),
-    WATER_ALERT("waterAlert","/usky/ytDP0002/+/+/alarm",1),
-    SMOKE_INFO("smokeInfo","/usky/ytDP0003/+/+/info",1),
-    SMOKE_ALERT("smokeAlarm","/usky/ytDP0003/+/+/alarm",1),
-    LIQUID_INFO("waterInfo","/usky/ytDP0005/+/+/info",1),
-    LIQUID_ALERT("waterAlert","/usky/ytDP0005/+/+/alarm",1),
-    RTU_INFO("rtuinfo","/usky/ytDP0006/+/+/info",1),
-    RTU_ALERT("rtuAlert","/usky/ytDP0006/+/+/alarm",1),
-    ELECTRICAL_INFO("electricalInfo","/usky/ytDP0007/+/+/info",1),
-    ELECTRICAL_ALERT("electricalAlarm","/usky/ytDP0007/+/+/alarm",1),
-    MH_COVER_INFO("waterInfo","/usky/ytDP0008/+/+/info",1),
-    MH_COVER_ALERT("waterAlert","/usky/ytDP0008/+/+/alarm",1),
-    VIDEO_ALERT("videoAlert","/usky/ytCamCore/+/+/alarm",1),
-    LR_SMOKE_INFO("smokeInfo","/usky/ytDP00033/+/+/info",1),
-    LR_SMOKE_ALERT("smokeAlarm","/usky/ytDP00033/+/+/alarm",1);
+    XFFJ("XFInfo","/511-XFFJ/+/+/control",1);
 
 
 

+ 81 - 15
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseAlarmServiceImpl.java

@@ -1,6 +1,7 @@
 package com.usky.iot.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -59,6 +60,14 @@ public class BaseAlarmServiceImpl extends AbstractCrudService<BaseAlarmMapper, B
                 .eq(DmpProductInfo::getTenantId,SecurityUtils.getTenantId());
         List<DmpProductInfo> list1 = dmpProductInfoService.list(queryWrapper);
         if(CollectionUtils.isNotEmpty(list1)){
+            QueryWrapper<DmpDeviceInfo> queryWrapper1 = Wrappers.query();
+            queryWrapper1.select("product_code as productCode","count(*) as count")
+                    .in("service_status",1,2)
+                    .eq("delete_flag",0)
+                    .eq("tenant_id",SecurityUtils.getTenantId())
+                    .groupBy("product_code");
+            List<Map<String,Object>> mapList= dmpDeviceInfoService.listMaps(queryWrapper1);
+
             for(int i=0;i<list1.size();i++){
                 BaseAlarmResponeVO responeVO = new BaseAlarmResponeVO();
                 responeVO.setProductCode(list1.get(i).getProductCode());
@@ -85,17 +94,16 @@ public class BaseAlarmServiceImpl extends AbstractCrudService<BaseAlarmMapper, B
                 responeVO.setProcessRate(processRate);
 
                 //设备总数
-                int deviceCount = 0;
-                List<Integer> serviceStatusList = new ArrayList<>();
-                serviceStatusList.add(1);
-                serviceStatusList.add(2);
-                LambdaQueryWrapper<DmpDeviceInfo> queryWrapper1 = Wrappers.lambdaQuery();
-                queryWrapper1.in(DmpDeviceInfo::getServiceStatus,serviceStatusList)
-                        .eq(DmpDeviceInfo::getProductCode,list1.get(i).getProductCode())
-                        .eq(DmpDeviceInfo::getDeleteFlag,0)
-                        .eq(DmpDeviceInfo::getTenantId,SecurityUtils.getTenantId());
-                deviceCount = dmpDeviceInfoService.count(queryWrapper1);
-                responeVO.setDeviceCount(deviceCount);
+                responeVO.setDeviceCount(0);
+                if(CollectionUtils.isNotEmpty(mapList)){
+                    for(int j=0;j<mapList.size();j++){
+                        if(list1.get(i).getProductCode().equals(mapList.get(j).get("productCode"))){
+                            responeVO.setDeviceCount(Integer.parseInt(String.valueOf(mapList.get(j).get("count"))));
+                            break;
+                        }
+                    }
+                }
+
                 //离线告警统计
                 //离线告警未处理
                 int offLineUntreated = 0;
@@ -146,16 +154,31 @@ public class BaseAlarmServiceImpl extends AbstractCrudService<BaseAlarmMapper, B
                 .orderByDesc(BaseAlarm::getId);
         List<BaseAlarm> records = this.list(queryWrapper);
         if(records.size()>0){
+            List<String> devList = new ArrayList<>();
             for(int i=0;i<records.size();i++){
+                devList.add(records.get(i).getDeviceId());
+            }
+
+            if(devList.size() > 0){
                 LambdaQueryWrapper<DmpDeviceInfo> queryWrapper1 = Wrappers.lambdaQuery();
-                queryWrapper1.eq(DmpDeviceInfo::getDeviceId,records.get(i).getDeviceId())
+                queryWrapper1.in(DmpDeviceInfo::getDeviceId,devList)
                         .eq(DmpDeviceInfo::getTenantId,SecurityUtils.getTenantId())
                         .eq(DmpDeviceInfo::getDeleteFlag,0);
-                DmpDeviceInfo deviceInfo = dmpDeviceInfoService.getOne(queryWrapper1);
-                if(deviceInfo != null){
-                    records.get(i).setDeviceName(deviceInfo.getDeviceName());
+                List<DmpDeviceInfo> deviceInfo = dmpDeviceInfoService.list(queryWrapper1);
+                if(CollectionUtils.isNotEmpty(deviceInfo)){
+                    for(int i=0;i<records.size();i++){
+                        for(int j=0;j<deviceInfo.size();j++){
+                            if(records.get(i).getDeviceId().equals(deviceInfo.get(j).getDeviceId())){
+                                records.get(i).setDeviceName(deviceInfo.get(j).getDeviceName());
+                                continue;
+                            }
+                        }
+
+                    }
                 }
+            }
 
+            for(int i=0;i<records.size();i++){
                 BaseAlarmType baseAlarmType = baseMapper.getAlarmTypeOne(records.get(i).getAlarmType());
                 if(baseAlarmType != null){
                     records.get(i).setTypeImg(baseAlarmType.getTypeImg());
@@ -190,6 +213,49 @@ public class BaseAlarmServiceImpl extends AbstractCrudService<BaseAlarmMapper, B
 
     }
 
+    public List<BaseAlarm> getScreenAlarmList(){
+
+        LambdaQueryWrapper<BaseAlarm> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper
+                .eq(BaseAlarm::getTenantId,SecurityUtils.getTenantId())
+                .orderByDesc(BaseAlarm::getId).last("limit 6");
+        List<BaseAlarm> records = this.list(queryWrapper);
+        if(records.size()>0){
+            List<String> devList = new ArrayList<>();
+            for(int i=0;i<records.size();i++){
+                devList.add(records.get(i).getDeviceId());
+            }
+
+            if(devList.size() > 0){
+                LambdaQueryWrapper<DmpDeviceInfo> queryWrapper1 = Wrappers.lambdaQuery();
+                queryWrapper1.in(DmpDeviceInfo::getDeviceId,devList)
+                        .eq(DmpDeviceInfo::getTenantId,SecurityUtils.getTenantId())
+                        .eq(DmpDeviceInfo::getDeleteFlag,0);
+                List<DmpDeviceInfo> deviceInfo = dmpDeviceInfoService.list(queryWrapper1);
+                if(CollectionUtils.isNotEmpty(deviceInfo)){
+                    for(int i=0;i<records.size();i++){
+                        for(int j=0;j<deviceInfo.size();j++){
+                            if(records.get(i).getDeviceId().equals(deviceInfo.get(j).getDeviceId())){
+                                records.get(i).setDeviceName(deviceInfo.get(j).getDeviceName());
+                                continue;
+                            }
+                        }
+
+                    }
+                }
+            }
+
+            for(int i=0;i<records.size();i++){
+                BaseAlarmType baseAlarmType = baseMapper.getAlarmTypeOne(records.get(i).getAlarmType());
+                if(baseAlarmType != null){
+                    records.get(i).setTypeImg(baseAlarmType.getTypeImg());
+                }
+
+            }
+        }
+        return records;
+    }
+
     public void update(BaseAlarm baseAlarm){
         int handleRange = baseAlarm.getHandleRange();
         if(handleRange == 0){  //批量

+ 56 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/listener/MqttListener.java

@@ -0,0 +1,56 @@
+package com.usky.iot.service.listener;
+
+
+import com.usky.iot.service.config.mqtt.MqttInConfig;
+import com.usky.iot.service.enums.TopListener;
+import com.usky.iot.service.mqtt.SimpleContext;
+import com.usky.iot.service.vo.MqttBaseVO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.integration.annotation.ServiceActivator;
+import org.springframework.messaging.MessageHandler;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author yq
+ * @date 2021/11/3 8:13
+ */
+@ConditionalOnProperty(prefix = "mqtt", value = {"enabled"}, havingValue = "true")
+@Slf4j
+@Component
+public class MqttListener {
+
+    public static final String MESSAGE_NAME = "messageInput";
+
+    @Autowired
+    private SimpleContext simpleContext;
+
+    /**
+     * 处理消息-消费者
+     *
+     * @return
+     */
+    @Bean(MESSAGE_NAME)
+    @ServiceActivator(inputChannel = MqttInConfig.CHANNEL_NAME_INPUT)
+    public MessageHandler handler() {
+        return message -> {
+            String payload = message.getPayload().toString();
+            //进行接口推送
+            String[] infoCode1 = TopListener.XFFJ.getCode().split("/");
+            Object mqttReceivedTopic = message.getHeaders().get("mqtt_receivedTopic");
+            if (null != mqttReceivedTopic) {
+                String topic = mqttReceivedTopic.toString();
+                MqttBaseVO mqttBaseVO = new MqttBaseVO();
+                mqttBaseVO.setTopic(topic);
+                if((topic.indexOf(infoCode1[2]) != -1 && topic.indexOf(infoCode1[5]) != -1)) {
+                    mqttBaseVO.setDescribe("control");
+                    mqttBaseVO.setData(payload);
+                }
+                //统一处理数据
+                simpleContext.getResource(mqttBaseVO);
+            }
+        };
+    }
+}

+ 26 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/mqtt/SimpleContext.java

@@ -0,0 +1,26 @@
+package com.usky.iot.service.mqtt;
+
+
+import com.usky.iot.service.vo.MqttBaseVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * 中间处理消息转发
+ */
+@Service
+public class SimpleContext {
+    @Autowired
+    private final Map<String, MqttStrategy> strategyMap = new ConcurrentHashMap<>();
+
+    public SimpleContext(Map<String, MqttStrategy> strategyMap) {
+        strategyMap.forEach(this.strategyMap::put);
+    }
+
+    public String getResource(MqttBaseVO mqttBaseVO) {
+        return strategyMap.get(mqttBaseVO.getDescribe()).disposeMessage(mqttBaseVO);
+    }
+}

+ 24 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/mqtt/control/Control.java

@@ -0,0 +1,24 @@
+package com.usky.iot.service.mqtt.control;
+
+import com.usky.iot.service.mqtt.MqttStrategy;
+import com.usky.iot.service.vo.MqttBaseVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * @author yq
+ * @date 2022/3/4 15:07
+ */
+@Service("control")
+public class Control implements MqttStrategy {
+
+
+    @Override
+    public String disposeMessage(MqttBaseVO mqttBaseVO) {
+
+        return null;
+    }
+
+
+}