dao/src/main/java/com/sandu/ximon/dao/domain/AirData.java
@@ -1,39 +1,141 @@ package com.sandu.ximon.dao.domain; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import java.time.LocalDateTime; import lombok.Data; /** * * @TableName air_data */ @TableName(value ="air_data") @Data public class AirData implements Serializable { /** * */ @TableId(type = IdType.AUTO) private Long id; //æå±ç¯æ private String belongTo; //æ¥å ¥æ¶é´ /** * 设å¤mac */ private String deviceMac; /** * 设å¤åå· */ private String deviceType; /** * 模åé¢çç¶ææ å¿ */ private String moduleWarmUpStatusFlag; /** * æ¸©åº¦å¼ */ private Double temperature; /** * æ¹¿åº¦å¼ */ private Double humidity; /** * é£é */ private Double windSpeed; /** * é£å */ private Double windDirection; /** * 大æ°å */ private Integer pressure; /** * å 强 */ private Integer lightIntensity; /** * åªé³ */ private Integer noise; /** * PM2.5 */ private Integer pm25; /** * PM10 */ private Integer pm10; /** * æ»æ¬æµ®é¢ç²ç©ï¼TSPï¼ */ private Integer tsp; /** * SO2äºæ°§åç¡«ç¸å¯¹å¼ */ private Integer so2; /** * ç²éç¸å¯¹å¼ */ private Integer ech2o; /** * NO2äºæ°§åæ°® */ private Integer no2; /** * TVOC */ private Integer tvoc; /** * CO䏿°§å碳 */ private Integer co; /** * äºæ°§å碳 */ private Integer co2; /** * O3èæ°§ */ private Integer o3; /** * Fæ°åç© */ private Integer fluoride; /** * */ private LocalDateTime createTime; //温度 private String temperature; //湿度 private String humidity; //PM2.5 private String PM25; //亮度 private int brightness; //PM10 private String PM10; //ç²é private String formaldehyde; //äºæ°§å碳CO2 private String CO2; //å®¤å ææºæ°æç©è´¨ private int tVoc; //é£é private String windSpeed; //䏿¥æ¶é´ /** * */ private LocalDateTime updateTime; } @TableField(exist = false) private static final long serialVersionUID = 1L; } dao/src/main/java/com/sandu/ximon/dao/mapper/AirDataMapper.java
@@ -1,10 +1,21 @@ package com.sandu.ximon.dao.mapper; import com.sandu.common.domain.BaseMapper; import com.sandu.ximon.dao.domain.AirData; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.sandu.ximon.dao.domain.Monitor; import org.apache.ibatis.annotations.Mapper; import java.util.List; /** * @Entity com.sandu.ximon.dao.domain.AirData */ @Mapper public interface AirDataMapper extends BaseMapper<AirData> { List<String> listAirEquipmentMAC(); } dao/src/main/resources/mapper/AirDataMapper.xml
@@ -6,18 +6,36 @@ <resultMap id="BaseResultMap" type="com.sandu.ximon.dao.domain.AirData"> <id property="id" column="id" jdbcType="BIGINT"/> <result property="belongTo" column="belong_to" jdbcType="VARCHAR"/> <result property="deviceMac" column="device_mac" jdbcType="VARCHAR"/> <result property="deviceType" column="device_type" jdbcType="VARCHAR"/> <result property="moduleWarmUpStatusFlag" column="module_warm_up_status_flag" jdbcType="VARCHAR"/> <result property="temperature" column="temperature" jdbcType="DOUBLE"/> <result property="humidity" column="humidity" jdbcType="DOUBLE"/> <result property="windSpeed" column="wind_speed" jdbcType="DOUBLE"/> <result property="windDirection" column="wind_direction" jdbcType="DOUBLE"/> <result property="pressure" column="pressure" jdbcType="INTEGER"/> <result property="lightIntensity" column="light_intensity" jdbcType="INTEGER"/> <result property="noise" column="noise" jdbcType="INTEGER"/> <result property="pm25" column="pm25" jdbcType="INTEGER"/> <result property="pm10" column="pm10" jdbcType="INTEGER"/> <result property="tsp" column="tsp" jdbcType="INTEGER"/> <result property="so2" column="so2" jdbcType="INTEGER"/> <result property="ech2o" column="ech2o" jdbcType="INTEGER"/> <result property="no2" column="no2" jdbcType="INTEGER"/> <result property="tvoc" column="tvoc" jdbcType="INTEGER"/> <result property="co" column="co" jdbcType="INTEGER"/> <result property="co2" column="co2" jdbcType="INTEGER"/> <result property="o3" column="o3" jdbcType="INTEGER"/> <result property="fluoride" column="fluoride" jdbcType="INTEGER"/> <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/> <result property="temperature" column="temperature" jdbcType="VARCHAR"/> <result property="humidity" column="humidity" jdbcType="VARCHAR"/> <result property="PM25" column="p_m25" jdbcType="VARCHAR"/> <result property="brightness" column="brightness" jdbcType="INTEGER"/> <result property="PM10" column="p_m10" jdbcType="VARCHAR"/> <result property="formaldehyde" column="formaldehyde" jdbcType="VARCHAR"/> <result property="CO2" column="c_o2" jdbcType="VARCHAR"/> <result property="tVoc" column="t_voc" jdbcType="INTEGER"/> <result property="windSpeed" column="wind_speed" jdbcType="VARCHAR"/> <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/> </resultMap> <select id="listAirEquipmentMAC" resultType="java.lang.String"> SELECT DISTINCT device_mac FROM air_data </select> </mapper> ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirDataController.java
@@ -25,13 +25,12 @@ } /** * æ¨¡ç³æ¥è¯¢ * * æ¥è¯¢å¤§æ°è®¾å¤MACå°å * @return */ @GetMapping("/listAirDataByKeyword/{keyword}") public ResponseVO<Object> listAirDataByKeyword(@PathVariable String keyword) { List<AirData> list = airDataService.listAirDataByKeyword(keyword); @GetMapping("/listAirEquipmentMAC") public ResponseVO<Object> listAirEquipmentMAC() { List<String> list = airDataService.listAirEquipmentMAC(); return ResponseUtil.successPage(list); } ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/amqp/AmqpMessageListener.java
@@ -1,6 +1,7 @@ package com.sandu.ximon.admin.manager.iot.amqp; import com.alibaba.fastjson.JSON; import com.sandu.ximon.admin.manager.iot.amqp.processor.AirDataProcessor; import com.sandu.ximon.admin.manager.iot.amqp.processor.LightDataProcessor; import com.sandu.ximon.admin.manager.iot.frame.inner.report.*; import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame; @@ -93,13 +94,14 @@ log.info(frame.toString()); if (frame.getOrderType().equals(A5OrderEnum.RESPONSE_LIGHT_DATA.getCode())) { // åç¯æ°æ®ä¸æ¥å¤ç LightDataProcessor.getInstance().process(productKey,deviceName,frame); LightDataProcessor.getInstance().process(productKey, deviceName, frame); } else if (frame.getOrderType().equals(A5OrderEnum.RESPONSE_C3_DATA.getCode())) { // C3å çµæ¡©ä¸æ¥å¤ç c3ChargingReportAnalysis(productKey, deviceName, frame); } else if (frame.getOrderType().equals(A5OrderEnum.RESPONSE_ATMOSPHERE_DATA.getCode())) { // å¤§æ°æ°æ®æä»¤ä¸æ¥ atmosphereAnalysis(productKey, deviceName, frame); AirDataProcessor.getInstance().process(productKey, deviceName, frame); // atmosphereAnalysis(productKey, deviceName, frame); } } ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/amqp/processor/AirDataProcessor.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,44 @@ package com.sandu.ximon.admin.manager.iot.amqp.processor; import com.sandu.common.util.SpringContextHolder; import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5AtmosphereHeartbeatReportInnerFrame; import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame; import com.sandu.ximon.admin.manager.iot.rrpc.enums.A5AtmosphereReportEnum; import com.sandu.ximon.admin.service.AirDataService; import lombok.extern.slf4j.Slf4j; /** * @author ZZQ * @date 2021/12/14 * å¤§æ°æ°æ®ä¸æ¥å¤ç */ @Slf4j public class AirDataProcessor implements IMessageProcessor { private AirDataProcessor() { } public static AirDataProcessor getInstance() { return AirDataProcessor.AirDataProcessorHolder.INSTANCE; } private static class AirDataProcessorHolder { private static final AirDataProcessor INSTANCE = new AirDataProcessor(); } @Override public void process(String productKey, String deviceName, CommonFrame frame) { String functionCode = frame.getPayload().substring(2, 4); if (A5AtmosphereReportEnum.HeartBeat_Data.getCode().equals(functionCode)) { log.info("å¿è·³ç¸åº"); A5AtmosphereHeartbeatReportInnerFrame heartbeatReportInnerFrame = new A5AtmosphereHeartbeatReportInnerFrame().transformFrame(frame.getPayload()); log.info(heartbeatReportInnerFrame.toString()); SpringContextHolder.getBean(AirDataService.class).saveReportData(deviceName, heartbeatReportInnerFrame.getHeartBeatDataPackage()); // SpringContextHolder.getBean(LightService.class).saveLight(deviceName,heartbeatReportInnerFrame.getHeartBeatDataPackage()); } } } ximon-admin/src/main/java/com/sandu/ximon/admin/service/AirDataService.java
@@ -4,10 +4,11 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.sandu.common.execption.BusinessException; import com.sandu.common.service.impl.BaseServiceImpl; import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5AtmosphereHeartbeatReportInnerFrame; import com.sandu.ximon.dao.domain.AirData; import com.sandu.ximon.dao.domain.Monitor; import com.sandu.ximon.dao.mapper.AirDataMapper; import lombok.AllArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import java.util.List; @@ -15,6 +16,21 @@ @Service @AllArgsConstructor public class AirDataService extends BaseServiceImpl<AirDataMapper, AirData> { private final AirDataMapper airDataMapper; /** * ä¿å䏿¥å¤§æ°å¿è·³æ°æ® * * @return æ¯å¦æå */ public boolean saveReportData(String deviceName, A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage heartBeatDataPackage) { AirData airData = new AirData(); BeanUtils.copyProperties(heartBeatDataPackage, airData); airData.setDeviceMac(deviceName); return save(airData); } /** * æ¥è¯¢å ¨é¨å¤§æ°è®¾å¤ @@ -27,16 +43,10 @@ } /** * æ¨¡ç³æ¥è¯¢ * æ¥è¯¢å¤§æ°è®¾å¤MACå°å */ public List<AirData> listAirDataByKeyword(String keyword) { LambdaQueryWrapper<AirData> wrapper = Wrappers.lambdaQuery(AirData.class); if(keyword != null){ wrapper.like(AirData::getBelongTo,keyword); } List<AirData> airDataList = list(wrapper); return airDataList; public List<String> listAirEquipmentMAC() { return airDataMapper.listAirEquipmentMAC(); } }