diff --git a/src/main/java/com/rehome/mqttclienttemperature/MqttRSAClient.java b/src/main/java/com/rehome/mqttclienttemperature/MqttRSAClient.java index 798975d..2a7ffab 100644 --- a/src/main/java/com/rehome/mqttclienttemperature/MqttRSAClient.java +++ b/src/main/java/com/rehome/mqttclienttemperature/MqttRSAClient.java @@ -108,7 +108,7 @@ public class MqttRSAClient { log.info("topic:"+s); log.info("Qos:"+mqttMessage.getQos()); log.info("message RSA:"+strData); - temperatureService.saveTemperature(strData,s); + //temperatureService.saveTemperature(strData,s); } @Override diff --git a/src/main/java/com/rehome/mqttclienttemperature/controller/TemperatureController.java b/src/main/java/com/rehome/mqttclienttemperature/controller/TemperatureController.java index 666f448..da2aeab 100644 --- a/src/main/java/com/rehome/mqttclienttemperature/controller/TemperatureController.java +++ b/src/main/java/com/rehome/mqttclienttemperature/controller/TemperatureController.java @@ -59,15 +59,4 @@ public class TemperatureController { private List queryFirst10ByDataDateAndLocationDesc(@RequestBody @Validated RequestTemperatureDto dto) { return temperatureService.queryFirst10ByDataDateAndLocationDesc(dto.getDataDate(),dto.getLocationDesc()); } - - /** - * APP更新版本号 - */ - @GetMapping("/save") - private String save(@Param("temperature")String temperature, @Param("humidity")String humidity) { - System.out.println(temperature); - System.out.println(humidity); - return "success"; - } - } diff --git a/src/main/java/com/rehome/mqttclienttemperature/controller/TemperatureEspController.java b/src/main/java/com/rehome/mqttclienttemperature/controller/TemperatureEspController.java new file mode 100644 index 0000000..d1792e0 --- /dev/null +++ b/src/main/java/com/rehome/mqttclienttemperature/controller/TemperatureEspController.java @@ -0,0 +1,44 @@ +package com.rehome.mqttclienttemperature.controller; + +import com.rehome.mqttclienttemperature.dto.RequestNowTemperatureDto; +import com.rehome.mqttclienttemperature.dto.RequestTemperatureDto; +import com.rehome.mqttclienttemperature.entity.Temperature; +import com.rehome.mqttclienttemperature.response.Result; +import com.rehome.mqttclienttemperature.service.TemperatureEspService; +import com.rehome.mqttclienttemperature.service.TemperatureService; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.annotations.Param; +import org.springframework.validation.BindingResult; +import org.springframework.validation.FieldError; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author HuangWenfei + * App自动更新 + * 2024-10-16 11:11 + */ + +@Slf4j +@RestController +@CrossOrigin +@RequestMapping("/web/temperature/esp") +public class TemperatureEspController { + @Resource + private TemperatureEspService temperatureEspService; + + /** + * APP更新版本号 + */ + @GetMapping("/saveEspTemperature") + private String save(@Param("temperature")String temperature, @Param("humidity")String humidity) { + log.info(temperature); + log.info(humidity); + this.temperatureEspService.saveTemperature(temperature,humidity); + return "success"; + } +} diff --git a/src/main/java/com/rehome/mqttclienttemperature/dao/TemperatureEspRepository.java b/src/main/java/com/rehome/mqttclienttemperature/dao/TemperatureEspRepository.java new file mode 100644 index 0000000..66eafe5 --- /dev/null +++ b/src/main/java/com/rehome/mqttclienttemperature/dao/TemperatureEspRepository.java @@ -0,0 +1,108 @@ +package com.rehome.mqttclienttemperature.dao; + + + + +import com.rehome.mqttclienttemperature.entity.TemperatureEsp; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import java.util.List; + + +/** + * Esp8266 DHT传感器获取到的温湿度数据 + * 参数一 T :当前需要映射的实体 + * 参数二 ID :当前映射的实体中的OID的类型 + * + */ +public interface TemperatureEspRepository extends JpaRepository { + + //方法名称必须要遵循驼峰式命名规则,findBy(关键字)+属性名称(首字母大写)+查询条件(首字母大写) + TemperatureEsp findByDataDate(String dataDate); + TemperatureEsp findByDataHour(String dataHour); + TemperatureEsp findByDataMinute(String dataMinute); + @Query(value = "select * from temperature t where t.data_date=?1 and t.location_desc=?2", nativeQuery = true) + List findByDataDateAndLocationDesc(String dataDate,String locationDesc); + + List findFirst10ByDataDateAndLocationDesc(String dataDate,String locationDesc, Sort sort); + + Page queryFirst10ByDataDateAndLocationDesc(String dataDate,String locationDesc, Pageable pageable); + + TemperatureEsp findFirstByOrderByDataDateDesc(); + + + + + + + + +// 五、分页查询 +// +// Page findALL(Pageable pageable); +// Page findByUserName(String userName,Pageable pageable); +// +// 在查询的方法中,需要传入参数Pageable , +// 当查询中有多个参数的时候Pageable建议做为最后一个参数传入 。 +// Pageable 是 Spring 封装的分页实现类,使用的时候需要传入页数、每页条数和排序规则。 +// +// int page=1,size=10; +// Sort sort = new Sort(Direction.DESC, "id"); +// Pageable pageable = new PageRequest(page, size, sort); +// userRepository.findALL(pageable); +// userRepository.findByUserName("testName", pageable); +// +// +// 六、限制查询 +// +// 查询前 N 个元素 +// +// User findFirstByOrderByLastnameAsc(); +// User findTopByOrderByAgeDesc(); +// Page queryFirst10ByLastname(String lastname, Pageable pageable); +// List findFirst10ByLastname(String lastname, Sort sort); +// List findTop10ByLastname(String lastname, Pageable pageable); +// + + + +// 使用Spring JPA中Page、Pageable接口和Sort类完成分页排序【专题】 +// +// 首先来说一下分页和排序所用到的Page、Pageable接口和Sort类都是什么 +// +// JpaRepository提供了两个和分页和排序有关的查询 +// +// List findAll(Sort sort) 返回所有实体,按照指定顺序排序返回 +// +// List findAll(Pageable pageable) 返回实体列表,实体的offest和limit通过pageable来指定 +// +// Sort对象用来指示排序,最简单的Sort对象构造可以传入一个属性名列表(不是数据库列名,是属性名),默认采用升序排序。例: +// +// Sort sort = new Sort("id"); +// //或 Sort sort = new Sort(Direction.ASC,"id"); +// return userDao.findAll(sort); +// 程序将查询所有user并按照id进行生序排序。Sort还包括其他一些构造方法,在这里就不一一赘述。 +// +// Pageable接口用于构造翻页查询,PageRequest是其实现类,可以通过提供的工厂方法创建PageRequest: +// +// public static PageRequest of(int page, int size) +// 也可以在PageRequest中加入排序: +// +// public static PageRequest of(int page, int size, Sort sort) +// 方法中的参数,page总是从0开始,表示查询页,size指每页的期望行数。 +// +// Page接口可以获得当前页面的记录、总页数、总记录数、是否有上一页或下一页等。Spring Data翻页查询总是返回Page对象,Page对象提供了以下常用的方法: +// +// int getTotalPages() 总的页数 +// long getTotalElements() 返回总数 +// List getContent() 返回此次查询的结果集 +// ———————————————— + + + + + +} \ No newline at end of file diff --git a/src/main/java/com/rehome/mqttclienttemperature/entity/TemperatureEsp.java b/src/main/java/com/rehome/mqttclienttemperature/entity/TemperatureEsp.java index ca9a907..4f4ee26 100644 --- a/src/main/java/com/rehome/mqttclienttemperature/entity/TemperatureEsp.java +++ b/src/main/java/com/rehome/mqttclienttemperature/entity/TemperatureEsp.java @@ -1,15 +1,14 @@ package com.rehome.mqttclienttemperature.entity; -import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.hibernate.annotations.Proxy; -import org.springframework.data.annotation.CreatedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; import javax.persistence.*; import java.io.Serializable; import java.util.Date; + @EntityListeners(AuditingEntityListener.class) @Proxy(lazy = false) @Data @@ -25,49 +24,51 @@ import java.util.Date; //创建组合索引,注意每个索引名都相同 //@Table(indexes = {@Index(name = "data_date_location_desc", columnList = "dataDate"),@Index(name = "data_date_location_desc", columnList = "locationDesc")}) //同时创建普通索引和组合索引,注意普通索引每个索引名都不同,注意组合索引每个索引名都相同 -@Table(indexes = {@Index(name = "idx_dataDate", columnList = "dataDate"),@Index(name = "idx_locationDesc", columnList = "locationDesc"),@Index(name = "idx_dataHour", columnList = "dataHour"),@Index(name = "idx_dataMinute", columnList = "dataMinute"),@Index(name = "data_date_location_desc", columnList = "dataDate"),@Index(name = "data_date_location_desc", columnList = "locationDesc")}) +@Table(indexes = {@Index(name = "idx_dataDateEsp", columnList = "dataDate"),@Index(name = "idx_locationDescEsp", columnList = "locationDesc"),@Index(name = "idx_dataHourEsp", columnList = "dataHour"),@Index(name = "idx_dataMinuteEsp", columnList = "dataMinute"),@Index(name = "data_date_location_desc_esp", columnList = "dataDate"),@Index(name = "data_date_location_desc_esp", columnList = "locationDesc")}) public class TemperatureEsp implements Serializable { - // @Id -// @GeneratedValue(strategy = GenerationType.IDENTITY) -// @ApiModelProperty(value = "主键") @Id - @ApiModelProperty(value = "主键") - @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="temperature_seq") - @SequenceGenerator(name="temperature_seq", sequenceName="temperature_seq_appserver",initialValue = 1,allocationSize = 1) - //@GeneratedValue(strategy = GenerationType.SEQUENCE) + @GeneratedValue(strategy = GenerationType.IDENTITY) + //@ApiModelProperty(value = "主键") +// @Id +// @ApiModelProperty(value = "主键") +// @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="temperature_seq") +// @SequenceGenerator(name="temperature_seq", sequenceName="temperature_seq_appserver",initialValue = 1,allocationSize = 1) private Long id; - @ApiModelProperty(value = "温度") + //@ApiModelProperty(value = "温度") @Column(length=10) private String temperature; - @ApiModelProperty(value = "湿度") + //@ApiModelProperty(value = "湿度") @Column(length=10) private String humidity; - @ApiModelProperty(value = "日期") + //@ApiModelProperty(value = "日期") @Column(length=20) private String dataDate; - @ApiModelProperty(value = "时") + //@ApiModelProperty(value = "时") @Column(length=20) private String dataHour; - @ApiModelProperty(value = "分") + //@ApiModelProperty(value = "分") @Column(length=20) private String dataMinute; - @ApiModelProperty(value = "主题") + //@ApiModelProperty(value = "主题") @Column(length=60) private String topic; - @ApiModelProperty(value = "位置描述") + //@ApiModelProperty(value = "位置描述") @Column(length=80) private String locationDesc; //@CreatedDate - @ApiModelProperty(value = "创建时间") + //@ApiModelProperty(value = "创建时间") @Temporal(TemporalType.TIMESTAMP) private Date createDate; + @Column(length=10) + private String source; + } \ No newline at end of file diff --git a/src/main/java/com/rehome/mqttclienttemperature/service/TemperatureEspService.java b/src/main/java/com/rehome/mqttclienttemperature/service/TemperatureEspService.java new file mode 100644 index 0000000..a6a3612 --- /dev/null +++ b/src/main/java/com/rehome/mqttclienttemperature/service/TemperatureEspService.java @@ -0,0 +1,12 @@ +package com.rehome.mqttclienttemperature.service; + +import com.rehome.mqttclienttemperature.entity.Temperature; +import com.rehome.mqttclienttemperature.entity.TemperatureEsp; + +//Esp8266 DHT温湿度传感器服务 +public interface TemperatureEspService { + //保存 Esp8266通过DHT传感器获取到的温湿度数据 + void saveTemperature(String temperatureValue,String humidityValue); + void saveTemperature(String temperatureValue,String humidityValue,String topic); + void saveTemperature(TemperatureEsp temperatureEsp); +} diff --git a/src/main/java/com/rehome/mqttclienttemperature/service/impl/TemperatureEspServiceImpl.java b/src/main/java/com/rehome/mqttclienttemperature/service/impl/TemperatureEspServiceImpl.java new file mode 100644 index 0000000..101ff14 --- /dev/null +++ b/src/main/java/com/rehome/mqttclienttemperature/service/impl/TemperatureEspServiceImpl.java @@ -0,0 +1,114 @@ +package com.rehome.mqttclienttemperature.service.impl; + +import com.rehome.mqttclienttemperature.dao.TemperatureEspRepository; +import com.rehome.mqttclienttemperature.dao.TemperatureRepository; +import com.rehome.mqttclienttemperature.entity.Temperature; +import com.rehome.mqttclienttemperature.entity.TemperatureEsp; +import com.rehome.mqttclienttemperature.service.TemperatureEspService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Slf4j +@Service +public class TemperatureEspServiceImpl implements TemperatureEspService { + @Resource + private TemperatureEspRepository temperatureEspRepository; + + @Override + public void saveTemperature(String temperatureValue, String humidityValue) { + try { + if(temperatureValue!=null&&temperatureValue.length()>0&&humidityValue!=null&&humidityValue.length()>0){ + Date now = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdfHour = new SimpleDateFormat("yyyy-MM-dd HH"); + SimpleDateFormat sdfMinute = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + SimpleDateFormat sdfSecond = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + String nowDate = sdf.format(now); + String nowHour = sdfHour.format(now); + String dataMinute = sdfMinute.format(now); + String dataSecond = sdfSecond.format(now); + TemperatureEsp temperatureEsp = new TemperatureEsp(); + temperatureEsp.setCreateDate(now); + temperatureEsp.setDataDate(nowDate); + temperatureEsp.setDataHour(nowHour); + temperatureEsp.setDataMinute(dataMinute); + temperatureEsp.setSource("http"); + + String topic = "BF9D7939ND2N"; + if(topic!=null){ + temperatureEsp.setTopic(topic); + if(topic.equals("BF9D7939ND2N")){ + temperatureEsp.setLocationDesc("广东省珠海市高新区唐家湾镇南方软件园B2栋4楼珠海瑞洪智能系统工程有限公司"); + } + if(topic.equals("WifiSHT/7C87CE9F5CBF/SHT20")){ + temperatureEsp.setLocationDesc("广东省珠海市金湾区三灶镇百川路1号1栋1单元1508房"); + } + if(topic.equals("WifiSHT/4CEBD686B6AA/SHT20")){ + temperatureEsp.setLocationDesc("广西壮族自治区崇左市天等县天等镇荣华村弄在屯113号"); + } + } + temperatureEsp.setHumidity(humidityValue); + temperatureEsp.setTemperature(temperatureValue); + + //mysql + this.temperatureEspRepository.save(temperatureEsp); + } + }catch (Exception e){ + e.printStackTrace(); + } + } + + @Override + public void saveTemperature(String temperatureValue, String humidityValue, String topic) { + try { + if(temperatureValue!=null&&temperatureValue.length()>0&&humidityValue!=null&&humidityValue.length()>0){ + Date now = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdfHour = new SimpleDateFormat("yyyy-MM-dd HH"); + SimpleDateFormat sdfMinute = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + SimpleDateFormat sdfSecond = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + String nowDate = sdf.format(now); + String nowHour = sdfHour.format(now); + String dataMinute = sdfMinute.format(now); + String dataSecond = sdfSecond.format(now); + TemperatureEsp temperatureEsp = new TemperatureEsp(); + temperatureEsp.setCreateDate(now); + temperatureEsp.setDataDate(nowDate); + temperatureEsp.setDataHour(nowHour); + temperatureEsp.setDataMinute(dataMinute); + temperatureEsp.setSource("mqtt"); + + if(topic!=null){ + temperatureEsp.setTopic(topic); + if(topic.equals("/device/BF9D7939ND2NBM8WVDK0SO5D/r")){ + temperatureEsp.setLocationDesc("广东省珠海市高新区唐家湾镇南方软件园B2栋4楼珠海瑞洪智能系统工程有限公司"); + } + if(topic.equals("WifiSHT/7C87CE9F5CBF/SHT20")){ + temperatureEsp.setLocationDesc("广东省珠海市金湾区三灶镇百川路1号1栋1单元1508房"); + } + if(topic.equals("WifiSHT/4CEBD686B6AA/SHT20")){ + temperatureEsp.setLocationDesc("广西壮族自治区崇左市天等县天等镇荣华村弄在屯113号"); + } + } + temperatureEsp.setHumidity(humidityValue); + temperatureEsp.setTemperature(temperatureValue); + + //mysql + this.temperatureEspRepository.save(temperatureEsp); + } + }catch (Exception e){ + e.printStackTrace(); + } + } + + @Override + public void saveTemperature(TemperatureEsp temperatureEsp) { + this.temperatureEspRepository.save(temperatureEsp); + } +}