Pārlūkot izejas kodu

增加实时数据表,优化数据存储和查询,关闭sql打印,mqtt数据增加存储实时数据

wanxl 1 gadu atpakaļ
vecāks
revīzija
a117d35db1

+ 3 - 3
src/main/java/com/template/AutoCode.java

@@ -39,10 +39,10 @@ public class AutoCode {
         mpg.setGlobalConfig(gc);
 //2、设置数据源
         DataSourceConfig dsc = new DataSourceConfig();
-        dsc.setUrl("jdbc:mysql://172.16.40.109:3306/fangcang_new?useUnicode=tru&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true&allowPublicKeyRetrieval=true&allowMultiQueries=true&rewriteBatchedStatements=true&serverTimezone=Asia/Shanghai");
+        dsc.setUrl("jdbc:mysql://101.33.214.65:3306/fangcang_new?useUnicode=tru&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true&allowPublicKeyRetrieval=true&allowMultiQueries=true&rewriteBatchedStatements=true&serverTimezone=Asia/Shanghai");
         dsc.setDriverName("com.mysql.cj.jdbc.Driver");
         dsc.setUsername("root");
-        dsc.setPassword("Password123.");
+        dsc.setPassword("chuanghai@2022");
         dsc.setDbType(DbType.MYSQL);
         mpg.setDataSource(dsc);
         //3、包的配置
@@ -56,7 +56,7 @@ public class AutoCode {
         mpg.setPackageInfo(pc);
         //4、策略配置
         StrategyConfig strategy = new StrategyConfig();
-        strategy.setInclude("devices_alarm"); // 设置要映射的表名
+        strategy.setInclude("real_time_records"); // 设置要映射的表名
         strategy.setNaming(NamingStrategy.underline_to_camel);//下划线转驼峰
         strategy.setColumnNaming(NamingStrategy.underline_to_camel);//下划线转驼峰
         strategy.setEntityLombokModel(true); // 自动lombok;

+ 41 - 19
src/main/java/com/template/common/mqtt/PushCallback.java

@@ -5,8 +5,10 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.template.common.utils.TimeExchange;
 import com.template.model.Devices;
+import com.template.model.RealTimeRecords;
 import com.template.model.Records;
 import com.template.services.DevicesService;
+import com.template.services.RealTimeRecordsService;
 import com.template.services.RecordsService;
 import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
 import org.eclipse.paho.client.mqttv3.MqttCallback;
@@ -44,6 +46,9 @@ public class PushCallback implements MqttCallback {
     RecordsService recordsService;
 
     @Autowired
+    RealTimeRecordsService realTimeRecordsService;
+
+    @Autowired
     DevicesService devicesService;
 
 
@@ -94,51 +99,68 @@ public class PushCallback implements MqttCallback {
                 //01032004b600000121018e000000000000000000000030000000000001000000000000a13f
         List<Records> recordsList=new ArrayList<>();
         String[] arr= {"Temperature","Humidity","Light","CO2","Rotate","Air"};
+        RealTimeRecords realTimeRecords=new RealTimeRecords();
+        realTimeRecords.setDeviceId(devices.getId());
+        Date now =new Date();
         for(int i=0;i< arr.length;i++){
             Records records=new Records();
             records.setDeviceId(devices.getId());
             switch (arr[i]){
                 case "Temperature":
                     records.setType("Temperature");
-                    records.setValue((double) Integer.parseInt(content.substring(10,14), 16)/100);
-                    records.setCreateAt(new Date());
-                    records.setUpdateAt(new Date());
+                    double tem=(double) Integer.parseInt(content.substring(10,14), 16)/100;
+                    records.setValue(tem);
+                    records.setCreateAt(now);
+                    records.setUpdateAt(now);
+                    realTimeRecords.setTemperature(tem);
                     break;
                 case "Humidity":
                     records.setType("Humidity");
-                    records.setValue((double) Integer.parseInt(content.substring(6,10), 16)/10);
-                    records.setCreateAt(new Date());
-                    records.setUpdateAt(new Date());
+                    double hum=(double) Integer.parseInt(content.substring(6,10), 16)/10;
+                    records.setValue(hum);
+                    records.setCreateAt(now);
+                    records.setUpdateAt(now);
+                    realTimeRecords.setHumidity(hum);
                     break;
                 case "CO2":
                     records.setType("CO2");
-                    records.setValue((double) Integer.parseInt(content.substring(14,18), 16));
-                    records.setCreateAt(new Date());
-                    records.setUpdateAt(new Date());
+                    double co= Integer.parseInt(content.substring(14,18), 16);
+                    records.setValue(co);
+                    records.setCreateAt(now);
+                    records.setUpdateAt(now);
+                    realTimeRecords.setCo2(co);
                     break;
                 case "Light":
                     records.setType("Light");
-                    records.setValue((double) Integer.parseInt(content.substring(18,22), 16));
-                    records.setCreateAt(new Date());
-                    records.setUpdateAt(new Date());
+                    double light= Integer.parseInt(content.substring(18,22), 16);
+                    records.setValue(light);
+                    records.setCreateAt(now);
+                    records.setUpdateAt(now);
+                    realTimeRecords.setLight(light);
                     break;
                 case "Rotate":
                     records.setType("Rotate");
-                    records.setValue(this.getRandValue(5,95));
-                    records.setCreateAt(new Date());
-                    records.setUpdateAt(new Date());
+                    double rotate=this.getRandValue(5,95);
+                    records.setValue(rotate);
+                    records.setCreateAt(now);
+                    records.setUpdateAt(now);
+                    realTimeRecords.setRotate(rotate);
                     break;
                 case "Air":
                     records.setType("Air");
-                    records.setValue(this.getRandValue(0,95));
-                    records.setCreateAt(new Date());
-                    records.setUpdateAt(new Date());
+                    double air=this.getRandValue(5,95);
+                    records.setValue(air);
+                    records.setCreateAt(now);
+                    records.setUpdateAt(now);
+                    realTimeRecords.setAir(air);
                     break;
             }
             recordsList.add(records);
         }
+        realTimeRecords.setUpdateAt(now);
+        boolean b=realTimeRecordsService.saveOrUpdate(realTimeRecords);
         boolean a=recordsService.saveOrUpdateBatch(recordsList);
-        log.info("批量导入结果:"+a);
+        log.info("更新实时记录:"+b+",批量导入结果:"+a);
     }
 
         public double getRandValue(int min, int max) {

+ 1 - 1
src/main/java/com/template/config/MyBatisPlusConfig.java

@@ -41,7 +41,7 @@ public class MyBatisPlusConfig {
      * 在控制台显示sql语句
      */
     @Bean
-    @Profile({"dev","test"})// 设置 dev test 环境开启,保证我们的效率
+    @Profile({"test"})// 设置 dev test 环境开启,保证我们的效率
     public PerformanceInterceptor performanceInterceptor() {
         PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
         performanceInterceptor.setMaxTime(3000); //ms 设置sql执行的最大时间,如果超过了则不执行

+ 21 - 0
src/main/java/com/template/controller/RealTimeRecordsController.java

@@ -0,0 +1,21 @@
+package com.template.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 实时记录表 前端控制器
+ * </p>
+ *
+ * @author ceshi
+ * @since 2025-01-21
+ */
+@RestController
+@RequestMapping("/real-time-records")
+public class RealTimeRecordsController {
+
+}
+

+ 19 - 0
src/main/java/com/template/mapper/RealTimeRecordsMapper.java

@@ -0,0 +1,19 @@
+package com.template.mapper;
+
+import com.template.model.RealTimeRecords;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 实时记录表 Mapper 接口
+ * </p>
+ *
+ * @author ceshi
+ * @since 2025-01-21
+ */
+public interface RealTimeRecordsMapper extends BaseMapper<RealTimeRecords> {
+
+    List<RealTimeRecords> listAll();
+}

+ 79 - 0
src/main/java/com/template/model/RealTimeRecords.java

@@ -0,0 +1,79 @@
+package com.template.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 实时记录表
+ * </p>
+ *
+ * @author ceshi
+ * @since 2025-01-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="RealTimeRecords对象", description="实时记录表")
+public class RealTimeRecords implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "设备id")
+    @TableId(value = "device_id", type = IdType.INPUT)
+    private Integer deviceId;;
+
+    @ApiModelProperty(value = "温度")
+    private Double temperature;
+
+    @ApiModelProperty(value = "湿度")
+    private Double humidity;
+
+    @ApiModelProperty(value = "光照")
+    @TableField("Light")
+    private Double Light;
+
+    @ApiModelProperty(value = "co2")
+    @TableField("CO2")
+    private Double co2;
+
+    @ApiModelProperty(value = "电")
+    @TableField("Electric")
+    private Double Electric;
+
+    @ApiModelProperty(value = "水")
+    @TableField("Water")
+    private Double Water;
+
+    @ApiModelProperty(value = "风机转速")
+    @TableField("Rotate")
+    private Double Rotate;
+
+    @ApiModelProperty(value = "新风")
+    @TableField("Air")
+    private Double Air;
+
+    @ApiModelProperty(value = "更新时间")
+    private Date updateAt;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createAt;
+
+    @ApiModelProperty(value = "是否删除")
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer deleted;
+
+
+}

+ 14 - 0
src/main/java/com/template/scheduled/ScheduledService.java

@@ -7,6 +7,7 @@ import com.template.model.Devices;
 import com.template.model.Records;
 import com.template.services.ConfigsService;
 import com.template.services.DevicesService;
+import com.template.services.RealTimeRecordsService;
 import com.template.services.RecordsService;
 import org.apache.commons.lang3.time.DateUtils;
 import org.slf4j.Logger;
@@ -47,6 +48,9 @@ public class ScheduledService {
     DevicesService devicesService;
 
     @Autowired
+    RealTimeRecordsService realTimeRecordsService;
+
+    @Autowired
     ConfigsService configsService;
 
     @Value("${openys7.url}")
@@ -56,6 +60,16 @@ public class ScheduledService {
     @Value("${openys7.secret}")
     String secret;
 
+
+    //定时更新设备在线状态
+    @Scheduled(cron="0 30 * * * ?")
+//    @RequestMapping("/updateDeviceState")
+    public void updateDeviceState() {
+        List<Devices> devicesList=devicesService.list(new QueryWrapper<>());
+        for (Devices devices:devicesList){
+            realTimeRecordsService.listAll();
+        }
+    }
     //定时保存设备传感器假数据 后续删除
 //    @Scheduled(cron="0 0/5 * * * ?")
     public void getParkingInfoScheduled() {

+ 18 - 0
src/main/java/com/template/services/RealTimeRecordsService.java

@@ -0,0 +1,18 @@
+package com.template.services;
+
+import com.template.model.RealTimeRecords;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 实时记录表 服务类
+ * </p>
+ *
+ * @author ceshi
+ * @since 2025-01-21
+ */
+public interface RealTimeRecordsService extends IService<RealTimeRecords> {
+    List<RealTimeRecords> listAll();
+}

+ 33 - 0
src/main/java/com/template/services/impl/RealTimeRecordsServiceImpl.java

@@ -0,0 +1,33 @@
+package com.template.services.impl;
+
+import com.template.model.RealTimeRecords;
+import com.template.mapper.RealTimeRecordsMapper;
+import com.template.services.RealTimeRecordsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * <p>
+ * 实时记录表 服务实现类
+ * </p>
+ *
+ * @author ceshi
+ * @since 2025-01-21
+ */
+@Service
+public class RealTimeRecordsServiceImpl extends ServiceImpl<RealTimeRecordsMapper, RealTimeRecords> implements RealTimeRecordsService {
+    @Autowired
+    private RealTimeRecordsMapper realTimeRecordsMapper;
+    /**
+     * @return
+     */
+    @Override
+    public List<RealTimeRecords> listAll() {
+
+        return realTimeRecordsMapper.listAll();
+    }
+}

+ 9 - 0
src/main/resources/mapper/template/RealTimeRecordsMapper.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.template.mapper.RealTimeRecordsMapper">
+
+    <select id="listAll" resultType="Map">
+        select d.id,rtr.update_at as updateAt from devices d left join real_time_records rtr on d.id =rtr.device_id and rtr.deleted =0
+        where d.deleted =0
+    </select>
+</mapper>