From 426f50baf57ae5901a6b5a26d1567e3b270d2499 Mon Sep 17 00:00:00 2001
From: zhuguifei <312353457@qq.com>
Date: 星期三, 20 十一月 2024 10:46:38 +0800
Subject: [PATCH] 完善租户故障解析接口,完成实时故障和历史故障上报云服务器

---
 jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryFaultRecord.java                   |    6 +
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRealTimeDataServiceImpl.java |  116 ++++++++++++++--------
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryEquipmentServiceImpl.java    |   26 +++++
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryEquipmentService.java            |    8 +
 jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/CommonCacheConstant.java                                  |    8 +
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mqtt/MqMessage.java                          |   22 ++++
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mqtt/MqttSampleCallback.java                 |   10 +-
 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/init/RedisInitListener.java                        |   32 ++++++
 jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryFaultRecordVo.java                     |   32 ++++++
 jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/MqttConstant.java                                         |   14 ++
 10 files changed, 223 insertions(+), 51 deletions(-)

diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/CommonCacheConstant.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/CommonCacheConstant.java
new file mode 100644
index 0000000..9858fa0
--- /dev/null
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/CommonCacheConstant.java
@@ -0,0 +1,8 @@
+package org.jeecg.common.constant;
+
+public interface CommonCacheConstant {
+    //redis缂撳瓨绉熸埛鏁版嵁
+    String SYS_CACHE_TENANT = "sys:cache:tenant";
+    //redis缂撳瓨鍚勭鎴蜂笅璁惧淇℃伅
+    String DRY_CACHE_TENANT_EQUS = "dry:cache:tenant::equs";
+}
diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/MqttConstant.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/MqttConstant.java
index addf80e..54530d6 100644
--- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/MqttConstant.java
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/MqttConstant.java
@@ -55,6 +55,7 @@
   String TENANT_UP_PREFIX = "tenant/up";
   String TENANT_UP_PREFIX_REALTIME_DATA = TENANT_UP_PREFIX + "/realTime/data";
   String TENANT_UP_PREFIX_FAULT_DATA = TENANT_UP_PREFIX + "/fault/data";
+  String TENANT_UP_PREFIX_REAL_FAULT_DATA = TENANT_UP_PREFIX + "/real/fault/data";
 
   String TENANT_UP_PREFIX_EQU = TENANT_UP_PREFIX + "/equipment";
 
@@ -71,10 +72,19 @@
 
   /**************************start*******************************/
   /**************************end*******************************/
-
   //redis缂撳瓨
+  //client
+  String MQTT_REAL_FAULT = "mqtt:real:fault";
+
+
+
+  //service(cloud)
+  //鍦ㄧ嚎瀹㈡埛绔�
   String MQTT_ONLINE_CLIENT = "mqtt:online:client::";
-  String MQTT_EQP_FAULT = "mqtt:eqp:fault";
+  //鎵�鏈夌鎴风殑瀹炴椂鎶ヨ锛�%s锛氱鎴穒d锛�
+  String MQTT_CLOUD_REAL_FAULT = "mqtt:real:fault:%s:";
+
+
 
 
 }
diff --git a/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryFaultRecord.java b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryFaultRecord.java
index a4ab146..ad09d31 100644
--- a/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryFaultRecord.java
+++ b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryFaultRecord.java
@@ -40,6 +40,9 @@
 	@Excel(name = "宸ュ崟id", width = 15)
     @ApiModelProperty(value = "宸ュ崟id")
     private String orderId;
+    @Excel(name = "绉熸埛id", width = 15)
+    @ApiModelProperty(value = "绉熸埛id")
+    private Integer tenantId;
 	/**鏁呴殰鍚嶇О*/
 	@Excel(name = "鏁呴殰鍚嶇О", width = 15)
     @ApiModelProperty(value = "鏁呴殰鍚嶇О")
@@ -92,8 +95,9 @@
     public DryFaultRecord() {
     }
 
-    public DryFaultRecord(String orderId, String faultName,Integer faultType, Date startTime, Date endTime) {
+    public DryFaultRecord(String orderId,Integer tenantId, String faultName,Integer faultType, Date startTime, Date endTime) {
         this.orderId = orderId;
+        this.tenantId = tenantId;
         this.faultName = faultName;
         this.startTime = startTime;
         this.endTime = endTime;
diff --git a/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryFaultRecordVo.java b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryFaultRecordVo.java
new file mode 100644
index 0000000..8e54c18
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryFaultRecordVo.java
@@ -0,0 +1,32 @@
+package org.jeecg.modules.dry.vo;
+
+import lombok.Data;
+
+import org.jeecg.modules.dry.entity.DryFaultRecord;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ */
+@Data
+public class DryFaultRecordVo extends DryFaultRecord implements Serializable {
+    private static final long serialVersionUID = 1L;
+    //redis鏁呴殰缁撴潫鎶�鏈�
+    private Integer eCount;
+    //璁惧鍚嶇О
+    private String equName;
+    //绉熸埛鍚嶇О
+    private String tenantName;
+
+    public DryFaultRecordVo() {
+    }
+
+    public DryFaultRecordVo(String orderId, Integer tenantId, String faultName, Integer faultType, Date startTime, Date endTime, Integer eCount, String equName, String tenantName) {
+        super(orderId, tenantId, faultName, faultType, startTime, endTime);
+        this.eCount = eCount;
+        this.equName = equName;
+        this.tenantName = tenantName;
+    }
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mqtt/MqMessage.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mqtt/MqMessage.java
new file mode 100644
index 0000000..892bf70
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mqtt/MqMessage.java
@@ -0,0 +1,22 @@
+package org.jeecg.modules.dry.mqtt;
+
+import lombok.Data;
+
+/**
+ * Mqtt娑堟伅杞戒綋
+ * @param <T>
+ */
+@Data
+public class MqMessage<T> {
+    private T data;
+    private String tentId;
+
+
+    public MqMessage() {
+    }
+
+    public MqMessage(T data, String tentId) {
+        this.data = data;
+        this.tentId = tentId;
+    }
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mqtt/MqttSampleCallback.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mqtt/MqttSampleCallback.java
index 1efee35..1143056 100644
--- a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mqtt/MqttSampleCallback.java
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mqtt/MqttSampleCallback.java
@@ -216,11 +216,11 @@
       case MqttConstant.TENANT_UP_PREFIX_FAULT_DATA:
         ThreadUtil.execute(() -> {
           try {
-
-            JSONObject jsonObject = JSON.parseObject(message);
-            List<DryFaultRecord> faultRecords = JSON.parseArray(jsonObject.get("data").toString(), DryFaultRecord.class);
-            System.err.println(faultRecords.toString());
-            faultRecordService.saveBatch(faultRecords);
+            MqMessage<List<DryFaultRecord>> listMqMessage = JSON.parseObject(message, new TypeReference<MqMessage<List<DryFaultRecord>>>() {
+            });
+         //   List<DryFaultRecord> faultRecords = JSON.parseArray(jsonObject.get("data").toString(), DryFaultRecord.class);
+            System.err.println(listMqMessage.toString());
+            faultRecordService.saveBatch(listMqMessage.getData());
 
           } catch (Exception e) {
             e.printStackTrace();
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryEquipmentService.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryEquipmentService.java
index 660e823..6e39cbd 100644
--- a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryEquipmentService.java
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryEquipmentService.java
@@ -5,6 +5,7 @@
 
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Description: 骞茬嚗鏈�
@@ -16,4 +17,11 @@
 
     DryEquipment selectByTenantIdEquipmentId(String tenantId, String equipmentId);
 
+    /**
+     * 鏌ヨ绉熸埛涓嬫墍鏈夎澶�
+     * @param tenantId
+     * @return
+     */
+    Map<String,DryEquipment>  queryEquByTenantId(Integer tenantId);
+
 }
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryEquipmentServiceImpl.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryEquipmentServiceImpl.java
index 9644a12..93ff976 100644
--- a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryEquipmentServiceImpl.java
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryEquipmentServiceImpl.java
@@ -1,17 +1,23 @@
 package org.jeecg.modules.dry.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.jeecg.common.config.TenantContext;
+import org.jeecg.common.constant.CommonCacheConstant;
 import org.jeecg.common.util.RedisUtil;
 import org.jeecg.modules.dry.common.CacheConstants;
 import org.jeecg.modules.dry.entity.DryEquipment;
 import org.jeecg.modules.dry.mapper.DryEquipmentMapper;
 import org.jeecg.modules.dry.service.IDryEquipmentService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
-import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /**
  * @Description: 骞茬嚗鏈�
@@ -24,6 +30,8 @@
 
     @Autowired
     private RedisUtil redisUtil;
+
+
     @Override
     public DryEquipment selectByTenantIdEquipmentId(String tenantId, String equipmentId) {
         DryEquipment dryEquipment = (DryEquipment) redisUtil.hget(CacheConstants.RedisKeyEnum.EQP_MAP.getCode(), tenantId + equipmentId);
@@ -39,4 +47,20 @@
         }
         return dryEquipment;
     }
+
+    @Override
+    @Cacheable(cacheNames = CommonCacheConstant.DRY_CACHE_TENANT_EQUS, key = "#tenantId" , unless = "#result == null " )
+    public Map<String,DryEquipment> queryEquByTenantId(Integer tenantId) {
+        TenantContext.setTenant(tenantId +"");
+        QueryWrapper<DryEquipment> queryWrapper  = new QueryWrapper<>();
+        queryWrapper.lambda().eq(DryEquipment::getTenantId,tenantId);
+        List<DryEquipment> equipmentList = this.list(queryWrapper);
+        Map<String, DryEquipment> userMap = equipmentList.stream()
+                .collect(Collectors.toMap(
+                        DryEquipment::getCode,
+                        Function.identity(),
+                        (existingValue, newValue) -> existingValue // 濡傛灉閿啿绐侊紝淇濈暀鏃у��
+                ));
+        return userMap;
+    }
 }
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRealTimeDataServiceImpl.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRealTimeDataServiceImpl.java
index 8910d51..8def570 100644
--- a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRealTimeDataServiceImpl.java
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRealTimeDataServiceImpl.java
@@ -3,48 +3,35 @@
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.thread.ThreadUtil;
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.mina.core.service.IoAcceptor;
-import org.apache.mina.core.service.IoHandler;
 import org.apache.mina.core.session.IoSession;
-import org.apache.shiro.SecurityUtils;
-import org.eclipse.paho.client.mqttv3.MqttClient;
 import org.eclipse.paho.client.mqttv3.MqttException;
 import org.eclipse.paho.client.mqttv3.MqttMessage;
-import org.jeecg.common.api.CommonAPI;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.config.TenantContext;
-import org.jeecg.common.config.mqtoken.UserTokenContext;
+import org.jeecg.common.constant.CommonCacheConstant;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.constant.MqttConstant;
 import org.jeecg.common.system.util.JwtUtil;
-import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.DateUtils;
 import org.jeecg.common.util.RedisUtil;
 import org.jeecg.common.util.SpringContextUtils;
 import org.jeecg.modules.dry.common.CacheConstants;
 import org.jeecg.modules.dry.entity.*;
+import org.jeecg.modules.dry.mqtt.MqMessage;
 import org.jeecg.modules.dry.mqtt.MqttUtil;
 import org.jeecg.modules.dry.service.*;
 import org.jeecg.modules.dry.socket.ServerHandler;
-import org.jeecg.modules.dry.socket.SocketServerConfig;
-import org.jeecg.modules.dry.util.DryUtil;
 import org.jeecg.modules.dry.vo.*;
-import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import javax.security.auth.login.LoginContext;
-import java.io.IOException;
-import java.io.ObjectOutputStream;
-import java.net.Socket;
 import java.text.DecimalFormat;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -494,20 +481,41 @@
 
     @Override
     public Result<?> fitFultRecord(RealTimeDataVo vo) {
+        TenantContext.setTenant(vo.getTenantid()+"");
         ThreadUtil.execute(() -> {
             try {
                 //瑙f瀽瀛樺偍鎶ヨ鏁版嵁
                 List<DryFaultRecord> faultRecords1 = fitFault(vo.getEqp_fault(), vo.getWorkorder(), vo.getTenantid(), vo.getMachineid(), 1);
                 List<DryFaultRecord> faultRecords2 = fitFault(vo.getEqp_warning(), vo.getWorkorder(), vo.getTenantid(), vo.getMachineid(), 2);
                 faultRecords1.addAll(faultRecords2);
-                JSONObject json = new JSONObject();
-                json.put("data",JSON.toJSONString(faultRecords1));
 
-                if(faultRecords1.isEmpty())  return;
-                MqttMessage mqttMessage = new MqttMessage();
-                mqttMessage.setQos(0);
-                mqttMessage.setPayload((JSON.toJSONString(json).getBytes()));
-                mqttUtil.getMqttClient().publish(MqttConstant.TENANT_UP_PREFIX_FAULT_DATA,mqttMessage);
+
+                //澶勭悊缁撴潫鍚庯紝灏唕edis涓疄鏃舵暟鎹彂閫佽嚦浜戞湇鍔″櫒
+                    Map<Object, Object> toCloudFaultMap = redisUtil.hmget(MqttConstant.MQTT_REAL_FAULT);
+                    if(!toCloudFaultMap.isEmpty()){
+                        MqMessage< Map<Object, Object>> message = new MqMessage<>();
+                        message.setData(toCloudFaultMap);
+                        message.setTentId(vo.getTenantid()+"");
+                        MqttMessage mqttMessage = new MqttMessage();
+                        mqttMessage.setQos(0);
+                        mqttMessage.setPayload(JSON.toJSONString(message).getBytes());
+                        mqttUtil.getMqttClient().publish(MqttConstant.TENANT_UP_PREFIX_REAL_FAULT_DATA,mqttMessage);
+                    }
+
+
+                //瑕佷繚瀛樼殑鍘嗗彶鏁呴殰
+                if(!faultRecords1.isEmpty()){
+                    MqMessage<List<DryFaultRecord>> message = new MqMessage<>();
+                    message.setData(faultRecords1);
+                    message.setTentId(vo.getTenantid()+"");
+                    MqttMessage mqttMessage = new MqttMessage();
+                    mqttMessage.setQos(0);
+                    mqttMessage.setPayload((JSON.toJSONString(message).getBytes()));
+                    mqttUtil.getMqttClient().publish(MqttConstant.TENANT_UP_PREFIX_FAULT_DATA,mqttMessage);
+                }
+
+
+
 
             } catch (Exception e) {
                 e.printStackTrace();
@@ -533,7 +541,7 @@
         //鏁版嵁鏍锋湰锛�"eqp_fault": "婊氱瓛闄嶈秴鏃�-鎶ヨ,椋庢満杩囨祦鎶ヨ,婊氱瓛鍗囪秴鏃�-鎶ヨ,椋庣鍗囨姤璀�",
         System.err.println((faultType == 1 ? "绫诲瀷锛氭晠闅�" : "绫诲瀷锛氭姤璀�") +  DateUtils.formatDateTime()+"--"+fault);
         //redis涓殑鏁呴殰
-        Map<Object, Object> rFauMap = redisUtil.hmget(MqttConstant.MQTT_EQP_FAULT);
+        Map<Object, Object> rFauMap = redisUtil.hmget(MqttConstant.MQTT_REAL_FAULT);
         Map<String, Object> redFauMap = rFauMap.entrySet().stream()
                 .collect(Collectors.toMap(
                         entry -> entry.getKey().toString(),  // 閿浆鎹负瀛楃涓�
@@ -550,50 +558,74 @@
         }
         //1.瑙f瀽鏁版嵁
         String[] eqpFaults = fault.split(",");
+        Map<String,DryFaultRecord> addFauMap = new HashMap<>();
         Map<String,DryFaultRecord> realFauMap = new HashMap<>();
         for (int i = 0; i < eqpFaults.length; i++) {
             String eqpFault = eqpFaults[i];
             //閬垮厤绌哄瓧绗︿覆
-            if(StringUtils.isEmpty(eqpFault)) continue;
+            if(StringUtils.isEmpty(eqpFault.trim())) continue;
             //1.1妫�鏌qtt涓槸鍚﹀凡瀛樺湪杩欎釜鏁呴殰
-            String redisKey = String.format("%s_%s_%s", tenantId, machineId,eqpFault);
-            String  rFault = (String) redisUtil.get(redisKey);
+            String redisKey = String.format("%s_%s_%s", tenantId, machineId,eqpFault).trim();
+
+
+            realFauMap.put(redisKey, new DryFaultRecord());
+            DryFaultRecordVo  rFault = (DryFaultRecordVo) redisUtil.hget(MqttConstant.MQTT_REAL_FAULT,redisKey);
             //1.2濡傛灉redis涓嶅瓨鍦ㄥ垯瀛樺叆锛堝瓨鏁呴殰寮�濮嬶級
             if(rFault ==null){
                 //缁勮缂撳瓨鏁版嵁
-                DryFaultRecord faultRecord = new DryFaultRecord(orderId,eqpFault,faultType,new Date(),null);
-                realFauMap.put(redisKey,faultRecord);
+//                DryFaultRecord faultRecord = new DryFaultRecord(orderId,tenantId,eqpFault,faultType,new Date(),null);
+//                addFauMap.put(redisKey,faultRecord);
+                Map<String, DryEquipment> equipmentMap = equipmentService.queryEquByTenantId(tenantId);
+                String tenantName = (String) redisUtil.hget(CommonCacheConstant.SYS_CACHE_TENANT, tenantId + "");
+                DryFaultRecordVo vo = new DryFaultRecordVo(orderId,tenantId,eqpFault,faultType,new Date(),null,1,equipmentMap.get(machineId).getName(),tenantName);
+                addFauMap.put(redisKey,vo);
+            }else {
+                //濡傛灉鏁版嵁宸插瓨鍦紝涓旇鏁板ぇ浜�1灏遍噸缃鏁帮紙璁℃暟3娆″悗鍒ゅ畾鏁呴殰缁撴潫锛�3娆′箣鍓嶉噸鏂颁笂鎶ユ晠闅滆鏄庢晠闅滆繕鍦ㄦ寔缁� 闇�瑕侀噸鏂拌鏁帮級
+                if(rFault.getECount()!=null && rFault.getECount() > 1){
+                    rFault.setECount(1);
+                    redisUtil.hset(MqttConstant.MQTT_REAL_FAULT,redisKey,rFault);
+                    System.err.println("鎶ヨ娆℃暟閲嶇疆 clear clear 锛宬ey-"+redisKey);
+                }
+
             }
 
         }
 
         //1.3缂撳瓨鑷硆edis
         //鍚堝苟鏁版嵁
-        realFauMap.forEach((key, value) -> redFauMap.putIfAbsent(key, value));
+        addFauMap.forEach((key, value) -> redFauMap.putIfAbsent(key, value));
         //娌℃湁鏂版晠闅滄暟鎹笉鐢ㄨ鐩�
-        if(!realFauMap.isEmpty()){
-            redisUtil.hmset(MqttConstant.MQTT_EQP_FAULT,redFauMap);
+        if(!addFauMap.isEmpty()){
+            redisUtil.hmset(MqttConstant.MQTT_REAL_FAULT,redFauMap);
         }
-
-
 
         //2妫�娴嬪凡缁撴潫鐨勬晠闅�
         //2.1濡傛灉瀹炴椂鏁版嵁涓嶅瓨鍦╮edis瀛樺湪鍒欎唬琛ㄦ晠闅滅粨鏉燂紝瀛樺叆鏁版嵁搴�
-        Map<Object, Object> curFauMap = redisUtil.hmget(MqttConstant.MQTT_EQP_FAULT);
+        Map<Object, Object> curFauMap = redisUtil.hmget(MqttConstant.MQTT_REAL_FAULT);
         curFauMap.keySet().stream()
                 //鐗瑰埆娉ㄦ剰锛屽涓姤璀︾被鍨嬪叡鐢ㄦ柟娉曢渶瑕佸尯鍒嗙被鍨�
-                .filter(key -> !realFauMap.containsKey(key) && ((DryFaultRecord)curFauMap.get(key)).getFaultType() == faultType)
+                .filter(key -> !realFauMap.containsKey(key) && ((DryFaultRecordVo)curFauMap.get(key)).getFaultType() == faultType)
                 .forEach(key -> {
-                    System.err.println((faultType == 1 ? "绫诲瀷锛氭晠闅�" : "绫诲瀷锛氭姤璀�") +  DateUtils.formatDateTime()+"瀛樺叆鏁版嵁搴�");
-                    DryFaultRecord record = (DryFaultRecord)redFauMap.get(key);
-                    record.setEndTime(new Date());
-                    faultRecordService.save(record);
-                    redisUtil.hdel(MqttConstant.MQTT_EQP_FAULT,key);
+                    DryFaultRecordVo vo = (DryFaultRecordVo)redFauMap.get(key);
+                    vo.setECount(vo.getECount()+1);
+                    if(redisUtil.hget(MqttConstant.MQTT_REAL_FAULT,key.toString())!=null){
+                        //鏇存柊娆℃暟
+                        redisUtil.hset(MqttConstant.MQTT_REAL_FAULT,key.toString(),vo);
+                        System.err.println("鎶ヨ娆℃暟鏇存柊锛宬ey-"+key);
+                    }
 
-                    result.add(record);
-
+                    if(vo.getECount()>=3){
+                        vo.setEndTime(new Date());
+                        //TODO 缁撴潫瓒呰繃鏌愪釜鏃堕棿鍖洪棿鍒ゅ畾涓洪敊璇暟鎹�
+                        faultRecordService.save(vo);
+                        redisUtil.hdel(MqttConstant.MQTT_REAL_FAULT,key);
+                        result.add(vo);
+                        System.err.println((faultType == 1 ? "绫诲瀷锛氭晠闅�" : "绫诲瀷锛氭姤璀�") +  DateUtils.formatDateTime()+"瀛樺叆鏁版嵁搴�");
+                    }
                 });
 
+
+
         return result;
     }
 
diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/init/RedisInitListener.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/init/RedisInitListener.java
new file mode 100644
index 0000000..8aa71ce
--- /dev/null
+++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/init/RedisInitListener.java
@@ -0,0 +1,32 @@
+package org.jeecg.config.init;
+
+import org.jeecg.common.constant.CommonCacheConstant;
+import org.jeecg.common.util.RedisUtil;
+import org.jeecg.modules.system.entity.SysTenant;
+import org.jeecg.modules.system.service.ISysTenantService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.event.ApplicationStartedEvent;
+import org.springframework.context.ApplicationListener;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Component
+public class RedisInitListener  implements ApplicationListener<ApplicationStartedEvent> {
+    @Autowired
+    private RedisUtil redisUtil;
+    @Autowired
+    private ISysTenantService sysTenantService;
+
+    @Override
+    public void onApplicationEvent(ApplicationStartedEvent event) {
+        //鏌ヨ鎵�鏈夌鎴蜂俊鎭苟缂撳瓨鑷硆edis
+        List<SysTenant> tenantList = sysTenantService.list();
+        //list杞琺ap
+        Map<String, Object> tenantMap = tenantList.stream()
+                .collect(Collectors.toMap(t -> String.valueOf(t.getId()),  t -> (Object) t.getName(), (existingValue, newValue) -> existingValue));
+        redisUtil.hmset(CommonCacheConstant.SYS_CACHE_TENANT,tenantMap);
+    }
+}

--
Gitblit v1.9.3