2021与蓝度共同重构项目,服务端
chenjiantian
2021-12-16 5bc250393f8296f2f34dd9f3d5f1bfb47e8e5a0f
Merge branch 'master' of http://112.74.63.130:8088/r/XimengPole/XMPoleManager
已修改6个文件
已添加1个文件
292 ■■■■ 文件已修改
dao/src/main/java/com/sandu/ximon/dao/domain/AirData.java 152 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/mapper/AirDataMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/resources/mapper/AirDataMapper.xml 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirDataController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/amqp/AmqpMessageListener.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/amqp/processor/AirDataProcessor.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/AirDataService.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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();
    }
}