From 17bb663d9484fbee814c6776d89428dfd65ac062 Mon Sep 17 00:00:00 2001 From: "autumn.g@foxmail.com" Date: Wed, 2 Aug 2023 14:43:34 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E8=8E=B7=E5=8F=96=E5=9C=B0=E9=94=81?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/constant/CacheConstants.java | 3 ++ .../core/domain/ykc/GroundLockData.java | 45 +++++++++++++++++++ .../netty/handler/AbstractHandler.java | 2 +- .../handler/GroundLockDataUploadHandler.java | 37 ++++++++++++++- .../impl/PileConnectorInfoServiceImpl.java | 28 ++++++++++++ .../pile/vo/web/PileConnectorInfoVO.java | 6 +++ 6 files changed, 119 insertions(+), 2 deletions(-) create mode 100644 jsowell-common/src/main/java/com/jsowell/common/core/domain/ykc/GroundLockData.java diff --git a/jsowell-common/src/main/java/com/jsowell/common/constant/CacheConstants.java b/jsowell-common/src/main/java/com/jsowell/common/constant/CacheConstants.java index d68b6f249..31b621df0 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/constant/CacheConstants.java +++ b/jsowell-common/src/main/java/com/jsowell/common/constant/CacheConstants.java @@ -25,6 +25,9 @@ public class CacheConstants { public static final String GET_PILE_MODEL_INFO_BY_MODEL_ID = "get_pile_model_info_by_model_id:"; + // 地锁数据 + public static final String GROUND_LOCK_DATA = "ground_lock_data:"; + // 根据站点id查询充电桩列表 public static final String GET_PILE_LIST_BY_STATION_ID = "get_pile_list_by_station_id:"; diff --git a/jsowell-common/src/main/java/com/jsowell/common/core/domain/ykc/GroundLockData.java b/jsowell-common/src/main/java/com/jsowell/common/core/domain/ykc/GroundLockData.java new file mode 100644 index 000000000..f4dae4f24 --- /dev/null +++ b/jsowell-common/src/main/java/com/jsowell/common/core/domain/ykc/GroundLockData.java @@ -0,0 +1,45 @@ +package com.jsowell.common.core.domain.ykc; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 地锁数据 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class GroundLockData { + /** + * 充电桩编号 + */ + private String pileSn; + + /** + * 枪口号 + */ + private String connectorCode; + + /** + * 车位锁状态 + */ + private String parkingLockStatus; + + /** + * 车位状态 + */ + private String parkingStatus; + + /** + * 地锁电量状态 + */ + private String groundLockElectric; + + /** + * 报警状态 + */ + private String alarmStatus; +} diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/AbstractHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/AbstractHandler.java index c8aa229db..c7ceb6cd5 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/AbstractHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/AbstractHandler.java @@ -67,7 +67,7 @@ public abstract class AbstractHandler implements InitializingBean { */ protected void saveLastTime(String pileSn) { String redisKey = CacheConstants.PILE_LAST_CONNECTION + pileSn; - redisCache.setCacheObject(redisKey, DateUtils.getTime(), 60 * 60 * 24); + redisCache.setCacheObject(redisKey, DateUtils.getTime(), CacheConstants.cache_expire_time_1d); } } \ No newline at end of file diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/GroundLockDataUploadHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/GroundLockDataUploadHandler.java index adff001ab..0a9cfd437 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/GroundLockDataUploadHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/GroundLockDataUploadHandler.java @@ -1,13 +1,17 @@ package com.jsowell.netty.handler; import com.alibaba.fastjson2.JSONObject; +import com.jsowell.common.constant.CacheConstants; +import com.jsowell.common.core.domain.ykc.GroundLockData; import com.jsowell.common.core.domain.ykc.YKCDataProtocol; import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode; +import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.util.BytesUtil; import com.jsowell.common.util.YKCUtils; import com.jsowell.netty.factory.YKCOperateFactory; import io.netty.channel.Channel; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** @@ -21,6 +25,9 @@ import org.springframework.stereotype.Component; @Slf4j @Component public class GroundLockDataUploadHandler extends AbstractHandler{ + @Autowired + private RedisCache redisCache; + private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.GROUND_LOCK_DATA_UPLOAD_CODE.getBytes()); @Override @@ -33,10 +40,15 @@ public class GroundLockDataUploadHandler extends AbstractHandler{ log.info("[===地锁数据上送===] param:{}, channel:{}", JSONObject.toJSONString(ykcDataProtocol), channel.toString()); // 消息体 byte[] msgBody = ykcDataProtocol.getMsgBody(); + // 桩编码 byte[] pileSnByteArr = BytesUtil.copyBytes(msgBody, 0, 7); + String pileSn = BytesUtil.bcd2Str(pileSnByteArr); + // 枪号 - byte[] connectorByteArr = BytesUtil.copyBytes(msgBody, 7, 1); + byte[] connectorCodeByteArr = BytesUtil.copyBytes(msgBody, 7, 1); + String connectorCode = BytesUtil.bcd2Str(connectorCodeByteArr); + /** * 车位锁状态 * 0x00:未到位状态 @@ -44,14 +56,37 @@ public class GroundLockDataUploadHandler extends AbstractHandler{ * 0xFF:降锁到位状态 */ byte[] parkingLockStatusByteArr = BytesUtil.copyBytes(msgBody, 8, 1); + String parkingLockStatus = BytesUtil.bcd2Str(parkingLockStatusByteArr); + // 车位状态 0x00:无车辆 0xFF:停放车辆 byte[] parkingStatusByteArr = BytesUtil.copyBytes(msgBody, 9, 1); + String parkingStatus = BytesUtil.bcd2Str(parkingStatusByteArr); + // 地锁电量状态 百分比值0~100 byte[] groundLockElectricByteArr = BytesUtil.copyBytes(msgBody, 10, 1); + String groundLockElectric = BytesUtil.bcd2Str(groundLockElectricByteArr); + // 报警状态 0x00:正常无报警 0xFF:待机状态摇臂破坏 0x55:摇臂升降异常(未到位) byte[] alarmStatusByteArr = BytesUtil.copyBytes(msgBody, 11, 1); + String alarmStatus = BytesUtil.bcd2Str(alarmStatusByteArr); + // 预留位 全部置0 byte[] waitingUseByteArr = BytesUtil.copyBytes(msgBody, 12, 4); + String waitingUse = BytesUtil.bcd2Str(waitingUseByteArr); + + // 封装到对象中 + GroundLockData data = GroundLockData.builder() + .pileSn(pileSn) + .connectorCode(connectorCode) + .parkingLockStatus(parkingLockStatus) + .parkingStatus(parkingStatus) + .groundLockElectric(groundLockElectric) + .alarmStatus(alarmStatus) + .build(); + + // 地锁信息放缓存中 缓存10分钟 + String redisKey = CacheConstants.GROUND_LOCK_DATA + pileSn + connectorCode; + redisCache.setCacheObject(redisKey, data, CacheConstants.cache_expire_time_10m); return null; } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileConnectorInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileConnectorInfoServiceImpl.java index 4a4bff08d..0d3346947 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileConnectorInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileConnectorInfoServiceImpl.java @@ -8,6 +8,7 @@ import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.jsowell.common.constant.CacheConstants; import com.jsowell.common.constant.Constants; +import com.jsowell.common.core.domain.ykc.GroundLockData; import com.jsowell.common.core.domain.ykc.RealTimeMonitorData; import com.jsowell.common.core.page.PageResponse; import com.jsowell.common.core.redis.RedisCache; @@ -481,9 +482,36 @@ public class PileConnectorInfoServiceImpl implements IPileConnectorInfoService { // 并修改数据库状态为离线 updateConnectorStatusByPileSn(pileConnectorInfoVO.getPileSn(), PileConnectorDataBaseStatusEnum.OFF_NETWORK.getValue()); } + + // 获取地锁数据 + pileConnectorInfoVO.setGroundLockData(queryGroundLockData(pileConnectorInfoVO.getPileConnectorCode())); } } + /** + * 通过充电桩枪口编号查询对应地锁数据 + * @param pileSn 充电桩编号 + * @param connectorCode 枪口号 + */ + private GroundLockData queryGroundLockData(String pileSn, String connectorCode) { + if (StringUtils.isBlank(pileSn) || StringUtils.isBlank(connectorCode)) { + return null; + } + return queryGroundLockData(pileSn + connectorCode); + } + + /** + * 通过充电桩枪口编号查询对应地锁数据 + * @param pileConnectorCode 充电桩枪口编号 + */ + private GroundLockData queryGroundLockData(String pileConnectorCode) { + if (StringUtils.isBlank(pileConnectorCode)) { + return null; + } + String redisKey = CacheConstants.GROUND_LOCK_DATA + pileConnectorCode; + return redisCache.getCacheObject(redisKey); + } + /** * 通过桩编号修改枪口状态 * 仅用于登录逻辑使用 diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/PileConnectorInfoVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/PileConnectorInfoVO.java index 7267c6a0b..3e52b62e2 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/PileConnectorInfoVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/PileConnectorInfoVO.java @@ -1,5 +1,6 @@ package com.jsowell.pile.vo.web; +import com.jsowell.common.core.domain.ykc.GroundLockData; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -163,4 +164,9 @@ public class PileConnectorInfoVO { */ private String ratedPower; + /** + * 地锁数据 + */ + private GroundLockData groundLockData; + }