2021与蓝度共同重构项目,服务端
zhanzhiqin
2022-03-14 d647b819f2a73b98df27469e09846dcc34bc383d
C3充电桩
已修改5个文件
已添加2个文件
162 ■■■■ 文件已修改
dao/src/main/java/com/sandu/ximon/dao/domain/C3mCharging.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/resources/mapper/C3mChargingMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/amqp/AmqpMessageListener.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/amqp/processor/c3ChargingProcessor.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3HeartbeatReportInnerFrame.java 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/C3ChargingReportEnum.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3ChargingService.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/domain/C3mCharging.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Data;
/**
@@ -17,8 +18,8 @@
    /**
     * 
     */
    @TableId
    private Integer c3Id;
    @TableId(type = IdType.AUTO)
    private Long c3Id;
    /**
     * mcu udid
@@ -48,7 +49,7 @@
    /**
     * 
     */
    private Long timestamp;
    private LocalDateTime updateTime;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
dao/src/main/resources/mapper/C3mChargingMapper.xml
@@ -5,18 +5,18 @@
<mapper namespace="com.sandu.ximon.dao.mapper.C3mChargingMapper">
    <resultMap id="BaseResultMap" type="com.sandu.ximon.dao.domain.C3mCharging">
            <id property="c3Id" column="c3_id" jdbcType="INTEGER"/>
            <id property="c3Id" column="c3_id" jdbcType="BIGINT"/>
            <result property="mcuUdid" column="mcu_udid" jdbcType="VARCHAR"/>
            <result property="c3Name" column="c3_name" jdbcType="VARCHAR"/>
            <result property="c3Mac" column="c3_mac" jdbcType="VARCHAR"/>
            <result property="statusBit" column="status_bit" jdbcType="INTEGER"/>
            <result property="deviceTemperature" column="device_temperature" jdbcType="VARCHAR"/>
            <result property="timestamp" column="timestamp" jdbcType="BIGINT"/>
            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
    </resultMap>
    <sql id="Base_Column_List">
        c3_id,mcu_udid,c3_name,
        c3_mac,status_bit,device_temperature,
        timestamp
        update_time
    </sql>
</mapper>
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.c3ChargingProcessor;
import com.sandu.ximon.admin.manager.iot.frame.inner.report.*;
import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonReportMessage;
@@ -58,8 +59,8 @@
            String topic = message.getStringProperty("topic");
            String messageId = message.getStringProperty("messageId");
//            log.info("收到订阅" + topic + "," + messageId);
//            log.info(content);
            log.info("收到订阅" + topic + "," + messageId);
            log.info(content);
            if (null != map.get("status")) {
                // ä¸Šä¸‹çº¿ä¸ŠæŠ¥å¤„理
@@ -90,8 +91,8 @@
        if (frame == null) {
            return;
        }
//        log.info("处理订阅");
//        log.info(frame.toString());
        log.info("处理订阅");
        log.info(frame.toString());
        if (frame.getOrderType().equals(A5OrderEnum.RESPONSE_LIGHT_DATA.getCode())) {
            // å•灯数据上报处理
            LightDataProcessor.getInstance().process(productKey, deviceName, frame);
@@ -119,9 +120,7 @@
            log.info("C3充电桩上报处理_codeRequestFrame");
            log.info(codeRequestFrame.toString());
        } else if (A5C3ReportEnum.HEART_BEAT.getCode().equals(functionCode)) {
            A5C3HeartbeatReportInnerFrame heartbeatReportInnerFrame = new A5C3HeartbeatReportInnerFrame().transformFrame(frame.getPayload());
            log.info("C3充电桩上报处理_heartbeatReportInnerFrame");
            log.info(heartbeatReportInnerFrame.toString());
            c3ChargingProcessor.c3ChargingProcessorgetInstance().process(productKey, deviceName, frame);
        } else if (A5C3ReportEnum.CHARGE_COMPLETE.getCode().equals(functionCode)) {
            A5C3CommonReportInnerFrame completeRequestFrame = new A5C3CommonReportInnerFrame().transformFrame(frame.getPayload());
            log.info("C3充电桩上报处理_completeRequestFrame");
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/amqp/processor/c3ChargingProcessor.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
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.A5C3HeartbeatReportInnerFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.enums.C3ChargingReportEnum;
import com.sandu.ximon.admin.service.C3ChargingService;
import lombok.extern.slf4j.Slf4j;
/**
 * @author ZZQ
 * @date 2022/3/11 16:24
 */
@Slf4j
public class c3ChargingProcessor implements IMessageProcessor {
    public c3ChargingProcessor() {
    }
    public static c3ChargingProcessor c3ChargingProcessorgetInstance() {
        return c3ChargingProcessor.C3ChargingProcessorHolder.INSTANCE;
    }
    private static class C3ChargingProcessorHolder {
        private static final c3ChargingProcessor INSTANCE = new c3ChargingProcessor();
    }
    @Override
    public void process(String productKey, String deviceName, CommonFrame frame) {
        String functionCode = frame.getPayload().substring(2, 4);
        if (C3ChargingReportEnum.HeartBeat_Data.getCode().equals(functionCode)) {
            log.info("心跳相应——C3充电桩数据"+productKey+"     -------       "+deviceName);
            A5C3HeartbeatReportInnerFrame heartbeatReportInnerFrame = new A5C3HeartbeatReportInnerFrame().transformFrame(frame.getPayload());
            log.info("C3充电桩上报处理_heartbeatReportInnerFrame");
            log.info(heartbeatReportInnerFrame.toString());
            SpringContextHolder.getBean(C3ChargingService.class).saveReportData(deviceName, heartbeatReportInnerFrame.getHeartBeatDataPackage());
        }
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3HeartbeatReportInnerFrame.java
@@ -37,7 +37,7 @@
        setDestinationAddress(hex.substring(8, 16));
        String heartBeatData = hex.substring(16, hex.length() - 8);
        String heartBeatData = hex.substring(8, hex.length() - 8);
        HeartBeatDataPackage heartBeatDataPackage = new HeartBeatDataPackage();
        heartBeatDataPackage.transformFrame(heartBeatData);
        setHeartBeatDataPackage(heartBeatDataPackage);
@@ -97,25 +97,26 @@
            if (StrUtil.isBlank(hex)) {
                return null;
            }
            this.year = hex.substring(0, 2);
            this.month = hex.substring(2, 4);
            this.day = hex.substring(4, 6);
            this.hour = hex.substring(6, 8);
            this.min = hex.substring(8, 10);
            this.sec = hex.substring(10, 12);
            this.chargingPort = hex.substring(12, 16);
            this.statusBit = hex.substring(16, 18);
            this.deviceTemperature = hex.substring(18, 22);
            this.gridVoltage = hex.substring(22, 26);
            this.gridCurrent = hex.substring(26, 30);
            this.frequency = hex.substring(30, 34);
            this.powerFactor = hex.substring(34, 38);
            this.activePower = hex.substring(38, 42);
            this.reactivePower = hex.substring(42, 46);
            this.chargedCapacity = hex.substring(46, 50);
            this.reservedCapacity = hex.substring(50, 54);
            this.remainingAmount = hex.substring(54, 58);
            this.alreadyChargingTime = hex.substring(58, 64);
            this.c3Mac = hex.substring(0, 8);
            this.year = hex.substring(8, 10);
            this.month = hex.substring(10, 12);
            this.day = hex.substring(12, 14);
            this.hour = hex.substring(14, 16);
            this.min = hex.substring(16, 18);
            this.sec = hex.substring(18, 20);
            this.chargingPort = hex.substring(20, 24);
            this.statusBit = hex.substring(24, 26);
            this.deviceTemperature = hex.substring(26, 30);
            this.gridVoltage = hex.substring(30, 34);
            this.gridCurrent = hex.substring(34, 38);
            this.frequency = hex.substring(38, 42);
            this.powerFactor = hex.substring(42, 46);
            this.activePower = hex.substring(46, 50);
            this.reactivePower = hex.substring(50, 54);
            this.chargedCapacity = hex.substring(54, 58);
            this.reservedCapacity = hex.substring(58, 62);
            this.remainingAmount = hex.substring(62, 66);
            this.alreadyChargingTime = hex.substring(66, 72);
            return this;
        }
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/C3ChargingReportEnum.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.sandu.ximon.admin.manager.iot.rrpc.enums;
/**
 * @author ZZQ
 * A5-82 C3充电桩上报
 * @date 2022/3/11 16:34
 */
public enum C3ChargingReportEnum {
    //  ä¸ŠæŠ¥å¿ƒè·³åŒ…
    HeartBeat_Data("42"),
    ;
    C3ChargingReportEnum(String code) {
        this.code = code;
    }
    private final String code;
    public String getCode() {
        return code;
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3ChargingService.java
@@ -1,12 +1,18 @@
package com.sandu.ximon.admin.service;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
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.A5C3HeartbeatReportInnerFrame;
import com.sandu.ximon.admin.manager.iot.frame.inner.request.C3FinishChargingReqInnerFrame;
import com.sandu.ximon.admin.manager.iot.frame.inner.request.C3RestartChargingReqInnerFrame;
import com.sandu.ximon.admin.manager.iot.frame.inner.request.C3StartChargingReqInnerFrame;
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.utils.RedisUtils;
import com.sandu.ximon.dao.domain.C3mCharging;
import com.sandu.ximon.dao.mapper.C3mChargingMapper;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
@@ -17,7 +23,31 @@
 */
@Service
@AllArgsConstructor
public class C3ChargingService {
public class C3ChargingService extends BaseServiceImpl<C3mChargingMapper, C3mCharging> {
    /**
     * ä¿å­˜ä¸ŠæŠ¥C3充电设备心跳数据
     *
     * @return æ˜¯å¦æˆåŠŸ
     */
    public boolean saveReportData(String deviceName, A5C3HeartbeatReportInnerFrame.HeartBeatDataPackage heartBeatDataPackage) {
        C3mCharging one = getOne(Wrappers.lambdaQuery(C3mCharging.class).eq(C3mCharging::getMcuUdid, deviceName));
        if (one == null) {
            //将设备信息添加到充电桩设备表
            C3mCharging c3mCharging = new C3mCharging();
            c3mCharging.setMcuUdid(deviceName);
            c3mCharging.setC3Mac(heartBeatDataPackage.getC3Mac());
            c3mCharging.setStatusBit(Integer.valueOf(heartBeatDataPackage.getStatusBit()));
            c3mCharging.setDeviceTemperature(heartBeatDataPackage.getDeviceTemperature());
            return save(c3mCharging);
        } else {
            one.setStatusBit(Integer.valueOf(heartBeatDataPackage.getStatusBit()));
            one.setDeviceTemperature(heartBeatDataPackage.getDeviceTemperature());
            return updateById(one);
        }
    }
    /**
     * å¼€å§‹å……电
     *