diff --git a/jsowell-common/src/main/java/com/jsowell/common/core/domain/ykc/YKCFrameTypeCode.java b/jsowell-common/src/main/java/com/jsowell/common/core/domain/ykc/YKCFrameTypeCode.java index 9d7559c88..8b67ff87c 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/core/domain/ykc/YKCFrameTypeCode.java +++ b/jsowell-common/src/main/java/com/jsowell/common/core/domain/ykc/YKCFrameTypeCode.java @@ -71,6 +71,9 @@ public enum YKCFrameTypeCode { BILLING_TEMPLATE_SETTING_CODE(0x58, "计费模型设置"), BILLING_TEMPLATE_SETTING_ANSWER_CODE(0x57, "计费模型设置应答"), + RESERVE_CHARGING_CODE(0x60, "预约充电设置"), + RESERVE_CHARGING_ANSWER_CODE(0x59, "预约充电设置响应"), + GROUND_LOCK_DATA_UPLOAD_CODE(0x61, "地锁数据上送"), REMOTE_CONTROL_GROUND_LOCK_LIFTING_CODE(0x62, "遥控地锁升降"), CHARGING_PILE_RESPOND_GROUND_LOCK_LIFTING_CODE(0X63, "充电桩响应地锁升降数据"), diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/ReserveChargingHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/ReserveChargingHandler.java new file mode 100644 index 000000000..fe8506383 --- /dev/null +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/ReserveChargingHandler.java @@ -0,0 +1,23 @@ +package com.jsowell.netty.handler; + +import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode; +import com.jsowell.common.util.YKCUtils; +import com.jsowell.netty.factory.YKCOperateFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 预约充电 + * @deprecated 桩不会发送这个指令,由平台主动发送 + */ +@Slf4j +@Component +public class ReserveChargingHandler extends AbstractHandler{ + + private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVE_CHARGING_CODE.getBytes()); + + @Override + public void afterPropertiesSet() throws Exception { + YKCOperateFactory.register(type, this); + } +} diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/ReserveChargingResponseHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/ReserveChargingResponseHandler.java new file mode 100644 index 000000000..84f096d7a --- /dev/null +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/ReserveChargingResponseHandler.java @@ -0,0 +1,11 @@ +package com.jsowell.netty.handler; + +/** + * 预约充电响应 + */ +public class ReserveChargingResponseHandler extends AbstractHandler{ + @Override + public void afterPropertiesSet() throws Exception { + + } +} diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ykcCommond/ReserveChargingCommand.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ykcCommond/ReserveChargingCommand.java new file mode 100644 index 000000000..1e1b33063 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ykcCommond/ReserveChargingCommand.java @@ -0,0 +1,53 @@ +package com.jsowell.pile.domain.ykcCommond; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 预约充电指令 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class ReserveChargingCommand { + /** + * 交易流水号 + */ + private String transactionCode; + + /** + * 充电桩编号 + */ + private String pileSn; + + /** + * 枪口号 + */ + private String connectorCode; + + /** + * 操作 + */ + private String operation; + + /** + * 开始时间 + */ + private Date appointmentStartTime; + + /** + * 结束时间 + */ + private Date appointmentEndTime; + + /** + * 启动金额 + */ + private BigDecimal amount; +} diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileRemoteService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileRemoteService.java index b897777c3..53fe21aec 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileRemoteService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileRemoteService.java @@ -248,4 +248,11 @@ public class PileRemoteService { public void remoteControlGroundLock(RemoteControlGroundLockCommand command) { ykcPushCommandService.pushRemoteControlGroundLock(command); } + + /** + * 预约充电指令 + */ + public void reserveCharging(ReserveChargingCommand command) { + ykcPushCommandService.pushReserveChargingCommand(command); + } } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/YKCPushCommandService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/YKCPushCommandService.java index 998f9639b..a87f67fa1 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/YKCPushCommandService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/YKCPushCommandService.java @@ -77,4 +77,10 @@ public interface YKCPushCommandService { * */ void pushRemoteControlGroundLock(RemoteControlGroundLockCommand command); + + /** + * 发送预约充电命令 + * @param command + */ + void pushReserveChargingCommand(ReserveChargingCommand command); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/YKCPushCommandServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/YKCPushCommandServiceImpl.java index 2ff9acc11..978cab0e7 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/YKCPushCommandServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/YKCPushCommandServiceImpl.java @@ -262,19 +262,17 @@ public class YKCPushCommandServiceImpl implements YKCPushCommandService { public void pushProofreadTimeCommand(ProofreadTimeCommand command) { // log.info("充电桩对时,thread:{}", Thread.currentThread().getName()); String pileSn = command.getPileSn(); - // Date date = new Date(); - // Date parseDate = DateUtils.parseDate("2023-02-28 16:45:20"); - Date date = DateUtils.parseDate(DateUtils.getDateTime()); - // 根据不同程序版本获取工具类 - // String programVersion = redisCache.getCacheMapValue(CacheConstants.PILE_PROGRAM_VERSION, pileSn); - // AbsCp56Time2aUtil cp56Time2aUtil = Cp56Time2aFactory.getInvokeStrategy(programVersion); - // String encodeCP56Time2a = cp56Time2aUtil.date2HexStr(date); - byte[] bytes = Cp56Time2aUtil.date2Hbyte(date); byte[] pileSnByteArr = BytesUtil.str2Bcd(pileSn); - byte[] msg = Bytes.concat(pileSnByteArr, bytes); + + // 时间 + Date date = DateUtils.parseDate(DateUtils.getDateTime()); + byte[] dateBytes = Cp56Time2aUtil.date2Hbyte(date); + + // 拼装msg + byte[] msg = Bytes.concat(pileSnByteArr, dateBytes); this.push(msg, pileSn, YKCFrameTypeCode.TIME_CHECK_SETTING_CODE); - log.info("[充电桩:{}对时, 时间:{}, CP56Time2a:{}]", pileSn, DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, date), BytesUtil.binary(bytes, 16)); + log.info("[充电桩:{}对时, 时间:{}, CP56Time2a:{}]", pileSn, DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, date), BytesUtil.binary(dateBytes, 16)); } /** @@ -473,4 +471,44 @@ public class YKCPushCommandServiceImpl implements YKCPushCommandService { this.push(msg, pileSn, YKCFrameTypeCode.REMOTE_CONTROL_GROUND_LOCK_LIFTING_CODE); } + + /** + * 发送预约充电命令 + * @param command + */ + @Override + public void pushReserveChargingCommand(ReserveChargingCommand command) { + // 交易流水号 + String transactionCode = command.getTransactionCode(); + byte[] transactionCodeArr = BytesUtil.str2Bcd(transactionCode); + + // 桩编号 + String pileSn = command.getPileSn(); + byte[] pileSnByteArr = BytesUtil.str2Bcd(pileSn); + + // 枪口号 + String connectorCode = command.getConnectorCode(); + byte[] connectorCodeByteArr = BytesUtil.str2Bcd(connectorCode); + + // 枪口号 + String operation = command.getOperation(); + byte[] operateByteArr = BytesUtil.str2Bcd(operation); + + // 开始时间 + Date appointmentStartTime = command.getAppointmentStartTime(); + byte[] appointmentStartTimeByteArr = Cp56Time2aUtil.date2Hbyte(DateUtils.parseDate(appointmentStartTime)); + + // 结束时间 + Date appointmentEndTime = command.getAppointmentEndTime(); + byte[] appointmentEndTimeByteArr = Cp56Time2aUtil.date2Hbyte(DateUtils.parseDate(appointmentEndTime)); + + // 启动金额 + BigDecimal amount = command.getAmount(); + byte[] amountByteArr = YKCUtils.getPriceByte(amount.toString(), 2); + + // 拼装msg信息 + byte[] msg = Bytes.concat(transactionCodeArr, pileSnByteArr, connectorCodeByteArr, operateByteArr, + appointmentStartTimeByteArr, appointmentEndTimeByteArr, amountByteArr); + this.push(msg, pileSn, YKCFrameTypeCode.RESERVE_CHARGING_CODE); + } }