wenhongquan 1 år sedan
förälder
incheckning
c2381544df

+ 46 - 8
ruoyi-system/src/main/java/com/ruoyi/data/controller/TblDataController.java

@@ -2,6 +2,7 @@ package com.ruoyi.data.controller;
 
 import java.time.Duration;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicReference;
 
 
 import cn.hutool.core.bean.BeanUtil;
@@ -10,14 +11,13 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import com.ruoyi.common.core.domain.entity.SysDictData;
-import com.ruoyi.common.core.domain.entity.SysDictType;
+import com.ruoyi.common.utils.redis.CacheUtils;
 import com.ruoyi.common.utils.redis.RedisUtils;
 import com.ruoyi.data.domain.*;
 import com.ruoyi.data.domain.bo.*;
 import com.ruoyi.data.domain.vo.*;
 import com.ruoyi.data.service.*;
 import com.ruoyi.system.service.ISysDictTypeService;
-import lombok.Data;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.validation.annotation.Validated;
@@ -125,8 +125,25 @@ public class TblDataController extends BaseController {
             a.put("code",tblSensorVo.getId());
             a.put("state",1);
             if(RedisUtils.getCacheObject("sensor_status_"+tblSensorVo.getId())!=null){
-                Map<String,Integer> aa = RedisUtils.getCacheObject("sensor_status_"+tblSensorVo.getId());
-                a.put("state",aa.get("12")>1?0:1);
+                Map<String,Object> aa = RedisUtils.getCacheObject("sensor_status_"+tblSensorVo.getId());
+                a.put("state",(int)(aa.get("12"))>1?0:1);
+                a.put("lasttime",aa.get("lasttime")==null?"":aa.get("lasttime"));
+
+                AtomicReference<Date> dataBo12Time = new AtomicReference<>();
+                try {
+                    MqttSensorDataBo dataBo12 = CacheUtils.get("sensorData", tblSensorVo.getId().toString());
+                    dataBo12.getData().forEach(bo -> {
+                        if (dataBo12Time.get() == null) dataBo12Time.set(bo.getCreateTime());
+                        if (bo.getCreateTime().getTime() > dataBo12Time.get().getTime()) {
+                            dataBo12Time.set(bo.getCreateTime());
+                        }
+                    });
+                    if(dataBo12Time.get()!=null){
+                        a.put("lasttime", DateUtil.formatDateTime(dataBo12Time.get()));
+                    }
+                }catch (Exception e){}
+
+
             }else{
                 TblSensorRecordBo a1 =new TblSensorRecordBo();
                 Map<String, Object> t = new HashMap<>();
@@ -141,13 +158,34 @@ public class TblDataController extends BaseController {
                 a1.setParams(t);
 
                 List<TblSensorRecordVo>  a12 = iTblSensorRecordService.queryList(a1);
-                Map<String,Integer> temp = new HashMap<>();
+
+                AtomicReference<Date> dataBo12Time = new AtomicReference<>();
+                try {
+                    MqttSensorDataBo dataBo12 = CacheUtils.get("sensorData", tblSensorVo.getId().toString());
+                    dataBo12.getData().forEach(bo -> {
+                        if (dataBo12Time.get() == null) dataBo12Time.set(bo.getCreateTime());
+                        if (bo.getCreateTime().getTime() > dataBo12Time.get().getTime()) {
+                            dataBo12Time.set(bo.getCreateTime());
+                        }
+                    });
+                }catch (Exception e){}
+                if(dataBo12Time.get()==null){
+                    t = new HashMap<>();
+                    t.put("limit", 1);
+                    a1.setParams(t);
+                    List<TblSensorRecordVo>  a13 = iTblSensorRecordService.queryList(a1);
+                    dataBo12Time.set(a13.size()>0?a13.get(0).getCreateTime():null);
+                }
+
+                Map<String,Object> temp = new HashMap<>();
                 temp.put("12",a11.size());
                 temp.put("24",a12.size());
-                RedisUtils.setCacheObject("sensor_status_"+tblSensorVo.getId(),temp, Duration.ofSeconds(60*60));
+                temp.put("lasttime",dataBo12Time.get()==null?"-":DateUtil.formatDateTime(dataBo12Time.get()));
 
-                Map<String,Integer> aa = RedisUtils.getCacheObject("sensor_status_"+tblSensorVo.getId());
-                a.put("state",aa.get("12")>1?0:1);
+                RedisUtils.setCacheObject("sensor_status_"+tblSensorVo.getId(),temp, Duration.ofSeconds(60*60));
+                Map<String,Object> aa = RedisUtils.getCacheObject("sensor_status_"+tblSensorVo.getId());
+                a.put("state",(int)aa.get("12")>1?0:1);
+                a.put("lasttime",aa.get("lasttime")==null?"":aa.get("lasttime"));
             }
             list.add(a);
         });

+ 8 - 5
ruoyi-system/src/main/java/com/ruoyi/data/service/impl/MqttServiceImpl.java

@@ -111,9 +111,9 @@ public class MqttServiceImpl implements MqttService {
                         timedata=(dataBo.getTime());
                     }
                     Date finalTimedata = timedata;
-
                     //放缓存内  sensorId 缓存数据
                     MqttSensorDataBo dataBo1 = CacheUtils.get("sensorData", dataBo.getSensorId());
+
                     if (dataBo1 == null) {
                         dataBo.getData().forEach(i -> {
                             i.setCreateTime(finalTimedata);
@@ -168,8 +168,10 @@ public class MqttServiceImpl implements MqttService {
                         SensorDataToOtherMqttBo mqttdata = new SensorDataToOtherMqttBo();
                         mqttdata.setDeviceId(tblSensor.getDeviceId().toString());
                         List<SensorDataBo> dataBoList = JSONUtil.toList(tblSensor.getDatapoints(), SensorDataBo.class);
-                        dataBo.getData().forEach(i -> {
-                                dataBoList.stream().filter(j -> j.getName().equals(i.getName())).forEach(j -> {
+                        MqttSensorDataBo dataBo12 = CacheUtils.get("sensorData", dataBo.getSensorId());
+                        //推缓存数据
+                        dataBo12.getData().forEach(i -> {
+                            dataBoList.stream().filter(j -> j.getName().equals(i.getName())).forEach(j -> {
                                     i.setUnitSymbol(j.getUnitType());
                                     i.setUnit(j.getUnit());
                                     i.setUnitType(j.getUnit());
@@ -177,9 +179,10 @@ public class MqttServiceImpl implements MqttService {
                                 i.setParams(null);
                             }
                         );
-                        mqttdata.setData(dataBo.getData());
+                        mqttdata.setData(dataBo12.getData());
                         mqttdata.setSensorId(tblSensor.getId().toString());
                         mqttdata.setCreateTime(finalTimedata);
+
                         String mqttstr = JSONUtil.parseObj(mqttdata, true).toStringPretty();
                         //转发mqtt数据
 
@@ -208,7 +211,7 @@ public class MqttServiceImpl implements MqttService {
                                             }
                                         });
                                     } else {
-                                        String topic = "sensor/" + protocolType + "/" + tblSensor.getId().toString();
+                                        String topic = "forwarding/" + protocolType + "/" + tblSensor.getId().toString();
                                         mqttConnect.pub(topic, mqttstr.toString(), 0);
                                     }
                                 } catch (Exception e) {

+ 26 - 1
ruoyi-system/src/main/java/com/ruoyi/data/service/impl/ScheduledTask.java

@@ -3,7 +3,9 @@ package com.ruoyi.data.service.impl;
 import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateUtil;
 import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.utils.redis.CacheUtils;
 import com.ruoyi.common.utils.redis.RedisUtils;
+import com.ruoyi.data.domain.bo.MqttSensorDataBo;
 import com.ruoyi.data.domain.bo.TblBreakdownBo;
 import com.ruoyi.data.domain.bo.TblSensorBo;
 import com.ruoyi.data.domain.bo.TblSensorRecordBo;
@@ -18,6 +20,7 @@ import org.springframework.stereotype.Component;
 
 import java.time.Duration;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicReference;
 
 @Component
 public class ScheduledTask {
@@ -54,9 +57,31 @@ public class ScheduledTask {
                 a1.setParams(t);
 
                 List<TblSensorRecordVo>  a12 = iTblSensorRecordService.queryList(a1);
-                Map<String,Integer> temp = new HashMap<>();
+
+
+                AtomicReference<Date> dataBo12Time = new AtomicReference<>();
+                try {
+                    MqttSensorDataBo dataBo12 = CacheUtils.get("sensorData", tblSensorVo.getId().toString());
+                    dataBo12.getData().forEach(bo -> {
+                        if (dataBo12Time.get() == null) dataBo12Time.set(bo.getCreateTime());
+                        if (bo.getCreateTime().getTime() > dataBo12Time.get().getTime()) {
+                            dataBo12Time.set(bo.getCreateTime());
+                        }
+                    });
+                }catch (Exception e){}
+                if(dataBo12Time.get()==null){
+                    t = new HashMap<>();
+                    t.put("limit", 1);
+                    a1.setParams(t);
+                    List<TblSensorRecordVo>  a13 = iTblSensorRecordService.queryList(a1);
+                    dataBo12Time.set(a13.size()>0?a13.get(0).getCreateTime():null);
+                }
+
+                Map<String,Object> temp = new HashMap<>();
                 temp.put("12",a11.size());
                 temp.put("24",a12.size());
+                temp.put("lasttime",dataBo12Time.get()==null?"-":DateUtil.formatDateTime(dataBo12Time.get()));
+
                 RedisUtils.setCacheObject("sensor_status_"+tblSensorVo.getId(),temp, Duration.ofSeconds(60*60));
             }
         });

+ 5 - 1
ruoyi-system/src/main/java/com/ruoyi/data/service/impl/TblSensorRecordServiceImpl.java

@@ -69,12 +69,16 @@ public class TblSensorRecordServiceImpl implements ITblSensorRecordService {
         lqw.eq(StringUtils.isNotBlank(bo.getPointName()), TblSensorRecord::getPointName, bo.getPointName());
         lqw.eq(StringUtils.isNotBlank(bo.getPointValue()), TblSensorRecord::getPointValue, bo.getPointValue());
         lqw.eq(bo.getEquipmentId() != null, TblSensorRecord::getEquipmentId, bo.getEquipmentId());
-        lqw.orderBy(true,true, TblSensorRecord::getCreateTime);
+        lqw.orderBy(true,false, TblSensorRecord::getCreateTime);
+
         if(bo.getParams()!=null && bo.getParams().size()>0){
             if(bo.getParams().get("starttime")!=null && bo.getParams().get("endtime")!=null){
                 lqw.gt(bo.getParams().get("starttime")!=null, TblSensorRecord::getCreateTime, bo.getParams().get("starttime"));
                 lqw.lt(bo.getParams().get("endtime")!=null, TblSensorRecord::getCreateTime, bo.getParams().get("endtime"));
             }
+            if(bo.getParams().get("limit")!=null){
+                lqw.last("limit "+bo.getParams().get("limit"));
+            }
 
         }
         return lqw;