2021与蓝度共同重构项目,服务端
zhanzhiqin
2022-03-24 abef71a4699135dd5007d0e6fcc610dac0370ff3
灯杆倾斜
已修改9个文件
已添加2个文件
235 ■■■■ 文件已修改
dao/src/main/java/com/sandu/ximon/dao/domain/LightPoleHeeling.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/mapper/LightPoleHeelingMapper.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/resources/mapper/LightPoleHeelingMapper.xml 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LightPoleHeelingController.java 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/amqp/AmqpMessageListener.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/amqp/processor/AirDataProcessor.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/amqp/processor/PoleMonitorDataProcessor.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5LightPoleHeelingOperationReportInnerFrame.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/LightPoleHeelingSetHeartbeatPacketTimeReqInnerFrame.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/param/LightPoleHeelingListParam.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightPoleHeelingService.java 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/domain/LightPoleHeeling.java
@@ -19,27 +19,12 @@
     * 
     */
    @TableId(type = IdType.AUTO)
    private Long id;
    private Long warningNumber;
    /**
     * æ‰€å±žäºº
     * è®¾å¤‡MAC地址
     */
    private Long userId;
    /**
     * å‘Šè­¦å·
     */
    private String warningNumber;
    /**
     * ç¯æ†ID
     */
    private Long lightPoleId;
    /**
     * ç¯æ†åç§°
     */
    private String lightPoleName;
    private String mac;
    /**
     * è­¦å‘Šç­‰çº§
dao/src/main/java/com/sandu/ximon/dao/mapper/LightPoleHeelingMapper.java
@@ -4,9 +4,11 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface LightPoleHeelingMapper extends BaseMapper<LightPoleHeeling> {
    List<LightPoleHeeling> listLightPoleHeeling(String keyword, Integer processingState);
}
dao/src/main/resources/mapper/LightPoleHeelingMapper.xml
@@ -5,23 +5,36 @@
<mapper namespace="com.sandu.ximon.dao.mapper.LightPoleHeelingMapper">
    <resultMap id="BaseResultMap" type="com.sandu.ximon.dao.domain.LightPoleHeeling">
            <id property="id" column="id" jdbcType="BIGINT"/>
            <result property="userId" column="user_id" jdbcType="BIGINT"/>
            <result property="warningNumber" column="warning_number" jdbcType="VARCHAR"/>
            <result property="lightPoleId" column="light_pole_id" jdbcType="BIGINT"/>
            <result property="lightPoleName" column="light_pole_name" jdbcType="VARCHAR"/>
            <result property="warningLevel" column="warning_level" jdbcType="VARCHAR"/>
            <result property="theXAxis" column="the_x_axis" jdbcType="DOUBLE"/>
            <result property="theYAxis" column="the_y_axis" jdbcType="DOUBLE"/>
            <result property="theZAxis" column="the_z_axis" jdbcType="DOUBLE"/>
            <result property="processingState" column="processing_state" jdbcType="INTEGER"/>
            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
        <id property="warningNumber" column="warning_number" jdbcType="BIGINT"/>
        <result property="mac" column="mac" jdbcType="VARCHAR"/>
        <result property="warningLevel" column="warning_level" jdbcType="VARCHAR"/>
        <result property="theXAxis" column="the_x_axis" jdbcType="DOUBLE"/>
        <result property="theYAxis" column="the_y_axis" jdbcType="DOUBLE"/>
        <result property="theZAxis" column="the_z_axis" jdbcType="DOUBLE"/>
        <result property="processingState" column="processing_state" jdbcType="INTEGER"/>
        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
    </resultMap>
    <sql id="Base_Column_List">
        id,user_id,warning_number,
        light_pole_id,light_pole_name,warning_level,
        the_x_axis,the_y_axis,the_z_axis,
        processing_state,create_time
        id,mac,warning_number,
        warning_level,the_x_axis,the_y_axis,
        the_z_axis,processing_state,create_time
    </sql>
    <select id="listLightPoleHeeling" resultType="com.sandu.ximon.dao.domain.LightPoleHeeling">
        SELECT *
        FROM light_pole_heeling
        WHERE warning_number IN (
        SELECT MAX(warning_number)
        FROM light_pole_heeling
        <where>
            <if test="keyword != null and keyword != ''">
                AND warning_number LIKE CONCAT(CONCAT('%', #{keyword}), '%')
            </if>
            <if test="processingState != null and keyword != 2">
                AND processing_state = #{processingState}
            </if>
        </where>
        GROUP BY mac
        ORDER BY warning_number DESC)
    </select>
</mapper>
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LightPoleHeelingController.java
@@ -1,8 +1,10 @@
package com.sandu.ximon.admin.controller;
import com.sandu.common.domain.ResponseVO;
import com.sandu.common.object.BaseConditionVO;
import com.sandu.common.util.ResponseUtil;
import com.sandu.ximon.admin.param.C3ChargingParam;
import com.sandu.ximon.admin.param.LightPoleHeelingListParam;
import com.sandu.ximon.admin.param.LightPoleHeelingParam;
import com.sandu.ximon.admin.service.LightPoleHeelingService;
import com.sandu.ximon.dao.domain.LightPoleHeeling;
@@ -32,9 +34,10 @@
     *
     * @return
     */
    @GetMapping("/listLightPoleHeelingByKeyword/{keyword}")
    public ResponseVO<Object> listLightPoleHeelingByKeyword(@PathVariable String keyword) {
        List<LightPoleHeeling> list = lightPoleHeelingService.listLightPoleHeelingByKeyword(keyword);
    @PostMapping("/listLightPoleHeelingByKeyword")
    public ResponseVO<Object> listLightPoleHeelingByKeyword(BaseConditionVO baseConditionVO
            , @RequestBody(required = false) LightPoleHeelingListParam lightPoleHeelingListParam) {
        List<LightPoleHeeling> list = lightPoleHeelingService.listLightPoleHeelingByKeyword(baseConditionVO, lightPoleHeelingListParam);
        return ResponseUtil.successPage(list);
    }
@@ -67,8 +70,11 @@
     */
    @PostMapping("/RestartLightPoleHeeling")
    public ResponseVO<Object> RestartLightPoleHeeling(@RequestBody @Validated LightPoleHeelingParam lightPoleHeelingParam) {
        return ResponseUtil.success(lightPoleHeelingService.RestartLightPoleHeeling(lightPoleHeelingParam.getDeviceName()));
        if ("操作成功".equals(lightPoleHeelingService.RestartLightPoleHeeling(lightPoleHeelingParam.getDeviceName()))) {
            return ResponseUtil.success(lightPoleHeelingService.RestartLightPoleHeeling(lightPoleHeelingParam.getDeviceName()));
        } else {
            return ResponseUtil.fail(lightPoleHeelingService.RestartLightPoleHeeling(lightPoleHeelingParam.getDeviceName()));
        }
    }
    /**
@@ -76,8 +82,11 @@
     */
    @PostMapping("/SetHeartbeatPacketTime")
    public ResponseVO<Object> SetHeartbeatPacketTime(@RequestBody @Validated LightPoleHeelingParam lightPoleHeelingParam) {
        return ResponseUtil.success(lightPoleHeelingService.SetHeartbeatPacketTime(lightPoleHeelingParam.getDeviceName(), lightPoleHeelingParam.getTime()));
        if ("操作成功".equals(lightPoleHeelingService.RestartLightPoleHeeling(lightPoleHeelingParam.getDeviceName()))) {
            return ResponseUtil.success(lightPoleHeelingService.SetHeartbeatPacketTime(lightPoleHeelingParam.getDeviceName(), lightPoleHeelingParam.getTime()));
        } else {
            return ResponseUtil.fail(lightPoleHeelingService.SetHeartbeatPacketTime(lightPoleHeelingParam.getDeviceName(), lightPoleHeelingParam.getTime()));
        }
    }
    /**
@@ -85,7 +94,11 @@
     */
    @PostMapping("/SetSensorState")
    public ResponseVO<Object> SetSensorState(@RequestBody @Validated LightPoleHeelingParam lightPoleHeelingParam) {
        if ("操作成功".equals(lightPoleHeelingService.RestartLightPoleHeeling(lightPoleHeelingParam.getDeviceName()))) {
            return ResponseUtil.success(lightPoleHeelingService.SetSensorState(lightPoleHeelingParam.getDeviceName()));
        } else {
            return ResponseUtil.fail(lightPoleHeelingService.SetSensorState(lightPoleHeelingParam.getDeviceName()));
        }
        return ResponseUtil.success(lightPoleHeelingService.SetSensorState(lightPoleHeelingParam.getDeviceName()));
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/amqp/AmqpMessageListener.java
@@ -3,6 +3,7 @@
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.amqp.processor.PoleMonitorDataProcessor;
import com.sandu.ximon.admin.manager.iot.amqp.processor.c3ChargingProcessor;
import com.sandu.ximon.admin.manager.iot.frame.inner.report.*;
import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame;
@@ -106,6 +107,8 @@
            // å¤§æ°”数据指令上报
            AirDataProcessor.getInstance().process(productKey, deviceName, frame);
//            atmosphereAnalysis(productKey, deviceName, frame);
        } else if (frame.getOrderType().equals(A5OrderEnum.RESPONSE_POLE_MONITOR_DATA.getCode())) {
            PoleMonitorDataProcessor.getInstance().process(productKey, deviceName, frame);
        }
    }
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/amqp/processor/AirDataProcessor.java
@@ -19,7 +19,7 @@
    }
    public static AirDataProcessor getInstance() {
        return AirDataProcessor.AirDataProcessorHolder.INSTANCE;
        return AirDataProcessorHolder.INSTANCE;
    }
    private static class AirDataProcessorHolder {
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/amqp/processor/PoleMonitorDataProcessor.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
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.frame.inner.report.A5LightPoleHeelingHeartbeatReportInnerFrame;
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.manager.iot.rrpc.enums.LightPoleHeelingEnum;
import com.sandu.ximon.admin.service.AirDataService;
import com.sandu.ximon.admin.service.LightPoleHeelingService;
import lombok.extern.slf4j.Slf4j;
/**
 * @author ZZQ
 * @date 2022/3/24 9:45
 */
@Slf4j
public class PoleMonitorDataProcessor implements IMessageProcessor {
    public PoleMonitorDataProcessor() {
    }
    public static PoleMonitorDataProcessor getInstance() {
        return PoleMonitorDataProcessorHolder.INSTANCE;
    }
    private static class PoleMonitorDataProcessorHolder {
        private static final PoleMonitorDataProcessor INSTANCE = new PoleMonitorDataProcessor();
    }
    @Override
    public void process(String productKey, String deviceName, CommonFrame frame) {
        String functionCode = frame.getPayload().substring(2, 4);
        if (LightPoleHeelingEnum.TheHeartbeatPackage.getCode().equals(functionCode)) {
            log.info("心跳相应——灯杆倾斜");
            A5LightPoleHeelingHeartbeatReportInnerFrame heartbeatReportInnerFrame = new A5LightPoleHeelingHeartbeatReportInnerFrame().transformFrame(frame.getPayload());
            log.info(heartbeatReportInnerFrame.toString());
            SpringContextHolder.getBean(LightPoleHeelingService.class).saveLightPoleHeelingHeartbeat(deviceName, heartbeatReportInnerFrame.getHeartBeatDataPackage());
//            SpringContextHolder.getBean(LightService.class).saveLight(deviceName,heartbeatReportInnerFrame.getHeartBeatDataPackage());
        }
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5LightPoleHeelingOperationReportInnerFrame.java
@@ -36,9 +36,9 @@
        //  è´Ÿè·é•¿åº¦(2)
        setPayloadLength(hex.substring(4, 8));
        //MAC地址
        setMac(hex.substring(8, 16));
        setMac(hex.substring(8, 12));
        //硬件交互响应结果
        setState(returnState(hex.substring(16, 18)));
        setState(returnState(hex.substring(12, 14)));
        setCrc32(hex.substring(hex.length() - 8));
        //  æ ¡éªŒCRC32
@@ -48,6 +48,7 @@
    }
    public String returnState(String stateCode) {
        System.out.println(stateCode + "  ++++");
        String State = "";
        switch (stateCode) {
            case "00":
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/LightPoleHeelingSetHeartbeatPacketTimeReqInnerFrame.java
@@ -28,14 +28,13 @@
        }
        payload = data;
        payload = "FFFF" + data;
    }
    @Override
    public String getEncodeFrame() {
        String functionCode = LightPoleHeelingEnum.SetHeartbeatPacketTime.getCode();
        String payloadLength = "0004";
        String payload = "FFFF";
        String frame = functionCode + payloadLength + payload;
        return MQTTConnectTypeEnum.SYNCHRONIZATION.getCode() + frame.toUpperCase() + CRC32Utils.getCRC32(frame.toUpperCase());
    }
ximon-admin/src/main/java/com/sandu/ximon/admin/param/LightPoleHeelingListParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.sandu.ximon.admin.param;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
/**
 * ç¯æ†å€¾æ–œ
 *
 * @author ZZQ
 * @date 2022/3/22 15:18
 */
@Data
public class LightPoleHeelingListParam {
    //灯杆倾斜列表查询关键字
    private String keyword;
    //处理状态
    private Integer processingState;
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightPoleHeelingService.java
@@ -2,7 +2,9 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.pagehelper.PageHelper;
import com.sandu.common.execption.BusinessException;
import com.sandu.common.object.BaseConditionVO;
import com.sandu.common.service.impl.BaseServiceImpl;
import com.sandu.ximon.admin.manager.iot.frame.A5Frame;
import com.sandu.ximon.admin.manager.iot.frame.inner.report.*;
@@ -10,16 +12,20 @@
import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.enums.A5OrderEnum;
import com.sandu.ximon.admin.manager.iot.rrpc.mainboard.MainBoardInvokeSyncService;
import com.sandu.ximon.admin.param.LightPoleHeelingListParam;
import com.sandu.ximon.dao.domain.LightPoleHeeling;
import com.sandu.ximon.dao.mapper.LightPoleHeelingMapper;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
@Service
@AllArgsConstructor
public class LightPoleHeelingService extends BaseServiceImpl<LightPoleHeelingMapper, LightPoleHeeling> {
    private LightPoleHeelingMapper lightPoleHeelingMapper;
    /**
     * æŸ¥è¯¢å…¨éƒ¨ç¯æ†å€¾ä¾§å‘Šè­¦
     */
@@ -33,22 +39,14 @@
    /**
     * æ¨¡ç³ŠæŸ¥è¯¢
     */
    public List<LightPoleHeeling> listLightPoleHeelingByKeyword(String keyword) {
        LambdaQueryWrapper<LightPoleHeeling> wrapper = Wrappers.lambdaQuery(LightPoleHeeling.class);
        if (keyword != null) {
            wrapper.like(LightPoleHeeling::getLightPoleName, keyword).or(
                    lambdaQueryWrapper -> {
                        lambdaQueryWrapper.like(LightPoleHeeling::getLightPoleId, keyword);
                    }
            ).or(
                    lambdaQueryWrapper -> {
                        lambdaQueryWrapper.like(LightPoleHeeling::getWarningNumber, keyword);
                    }
            );
    public List<LightPoleHeeling> listLightPoleHeelingByKeyword(BaseConditionVO baseConditionVO, LightPoleHeelingListParam lightPoleHeelingListParam) {
        PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize());
        if (lightPoleHeelingListParam == null) {
            lightPoleHeelingListParam = new LightPoleHeelingListParam();
        }
        List<LightPoleHeeling> forHelpList = list(wrapper);
        return forHelpList;
        List<LightPoleHeeling> lightPoleHeelings
                = lightPoleHeelingMapper.listLightPoleHeeling(lightPoleHeelingListParam.getKeyword(), lightPoleHeelingListParam.getProcessingState());
        return lightPoleHeelings;
    }
    /**
@@ -68,7 +66,12 @@
        A5LightPoleHeelingHeartbeatReportInnerFrame heartbeatReportInnerFrame
                = new A5LightPoleHeelingHeartbeatReportInnerFrame().transformFrame(commonFrame.getPayload());
        if (heartbeatReportInnerFrame.isValidate()) {
            //灯杆倾斜心跳包保存数据库
            saveLightPoleHeelingHeartbeat(deviceName, heartbeatReportInnerFrame.getHeartBeatDataPackage());
            return heartbeatReportInnerFrame.getHeartBeatDataPackage();
        } else {
            throw new BusinessException("数据校验错误,请重新请求");
@@ -176,4 +179,30 @@
            throw new BusinessException("数据校验错误,请重新请求");
        }
    }
    /**
     * ä¿å­˜å¿ƒè·³åŒ…数据
     *
     * @param deviceName
     * @param heartBeatDataPackage
     * @return
     */
    public boolean saveLightPoleHeelingHeartbeat(String deviceName, A5LightPoleHeelingHeartbeatReportInnerFrame.HeartBeatDataPackage heartBeatDataPackage) {
        LightPoleHeeling lightPoleHeeling = new LightPoleHeeling();
        lightPoleHeeling.setMac(deviceName);
        lightPoleHeeling.setTheXAxis(heartBeatDataPackage.getTheXAxis());
        lightPoleHeeling.setTheYAxis(heartBeatDataPackage.getTheYAxis());
        lightPoleHeeling.setTheZAxis(heartBeatDataPackage.getTheZAxis());
        if (Math.abs(heartBeatDataPackage.getTheXAxis()) >= 10 || Math.abs(heartBeatDataPackage.getTheYAxis()) >= 10) {
            lightPoleHeeling.setWarningLevel("一级警告");
        } else if ((Math.abs(heartBeatDataPackage.getTheXAxis()) >= 5 && Math.abs(heartBeatDataPackage.getTheXAxis()) < 10)
                || (Math.abs(heartBeatDataPackage.getTheYAxis()) >= 5 && Math.abs(heartBeatDataPackage.getTheYAxis()) < 10)) {
            lightPoleHeeling.setWarningLevel("二级警告");
        } else {
            lightPoleHeeling.setWarningLevel("正常");
        }
        return save(lightPoleHeeling);
    }
}