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); } } /** * å¼å§å çµ *