mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-06-16 21:30:28 +08:00
支持yuxin主板预约充电
This commit is contained in:
@@ -75,6 +75,8 @@ public enum YKCFrameTypeCode {
|
|||||||
|
|
||||||
RESERVATION_CHARGING_SETUP_CODE(0x60, "预约充电设置"),
|
RESERVATION_CHARGING_SETUP_CODE(0x60, "预约充电设置"),
|
||||||
RESERVATION_CHARGING_SETUP_ANSWER_CODE(0x59, "预约充电设置响应"), // RESERVATION
|
RESERVATION_CHARGING_SETUP_ANSWER_CODE(0x59, "预约充电设置响应"), // RESERVATION
|
||||||
|
YUXIN_RESERVATION_CHARGING_SETUP_CODE(0xB2, "yuxin预约充电设置"),
|
||||||
|
YUXIN_RESERVATION_CHARGING_SETUP_ANSWER_CODE(0xB1, "yuxin预约充电设置响应"),
|
||||||
|
|
||||||
RESERVATION_CHARGING_STARTUP_RESULT_ANSWER_CODE(0x64, "预约充电启动结果上传响应"), // 平台响应
|
RESERVATION_CHARGING_STARTUP_RESULT_ANSWER_CODE(0x64, "预约充电启动结果上传响应"), // 平台响应
|
||||||
RESERVATION_CHARGING_STARTUP_RESULT_CODE(0x65, "预约充电启动结果上传"), // 桩 -> 平台
|
RESERVATION_CHARGING_STARTUP_RESULT_CODE(0x65, "预约充电启动结果上传"), // 桩 -> 平台
|
||||||
@@ -255,6 +257,7 @@ public enum YKCFrameTypeCode {
|
|||||||
|
|
||||||
// 预约充电设置
|
// 预约充电设置
|
||||||
RESERVATION_CHARGING_SETUP(RESERVATION_CHARGING_SETUP_CODE.getCode(), RESERVATION_CHARGING_SETUP_ANSWER_CODE.getCode()),
|
RESERVATION_CHARGING_SETUP(RESERVATION_CHARGING_SETUP_CODE.getCode(), RESERVATION_CHARGING_SETUP_ANSWER_CODE.getCode()),
|
||||||
|
YUXIN_RESERVATION_CHARGING_SETUP(YUXIN_RESERVATION_CHARGING_SETUP_CODE.getCode(), YUXIN_RESERVATION_CHARGING_SETUP_ANSWER_CODE.getCode()),
|
||||||
|
|
||||||
// 预约充电启动结果上传
|
// 预约充电启动结果上传
|
||||||
// RESERVATION_CHARGING_STARTUP_RESULT(RESERVATION_CHARGING_STARTUP_RESULT_CODE.getCode(), RESERVATION_CHARGING_STARTUP_RESULT_ANSWER_CODE.getCode()),
|
// RESERVATION_CHARGING_STARTUP_RESULT(RESERVATION_CHARGING_STARTUP_RESULT_CODE.getCode(), RESERVATION_CHARGING_STARTUP_RESULT_ANSWER_CODE.getCode()),
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package com.jsowell.common.core.domain.ykc.device2platform;
|
||||||
|
|
||||||
|
import com.jsowell.common.core.domain.ykc.YKCBaseMessage;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* yuxin预约充电设置响应
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class Data0xB1 extends YKCBaseMessage {
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package com.jsowell.common.core.domain.ykc.platform2device;
|
||||||
|
|
||||||
|
import com.jsowell.common.core.domain.ykc.YKCBaseMessage;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* yuxin预约充电设置
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class Data0xB2 extends YKCBaseMessage {
|
||||||
|
}
|
||||||
@@ -5,6 +5,7 @@ package com.jsowell.common.enums.ykc;
|
|||||||
*/
|
*/
|
||||||
public enum PileMainboardManufacturerEnum {
|
public enum PileMainboardManufacturerEnum {
|
||||||
UNKNOWN("unknown", "未知厂家"),
|
UNKNOWN("unknown", "未知厂家"),
|
||||||
|
YUXIN("yuxin", "yuxin主板"),
|
||||||
;
|
;
|
||||||
|
|
||||||
private String value;
|
private String value;
|
||||||
|
|||||||
@@ -15,9 +15,11 @@ import org.springframework.stereotype.Component;
|
|||||||
public class ReservationChargingHandler extends AbstractYkcHandler {
|
public class ReservationChargingHandler extends AbstractYkcHandler {
|
||||||
|
|
||||||
private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVATION_CHARGING_SETUP_CODE.getBytes());
|
private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVATION_CHARGING_SETUP_CODE.getBytes());
|
||||||
|
private final String yuxinType = YKCUtils.frameType2Str(YKCFrameTypeCode.YUXIN_RESERVATION_CHARGING_SETUP_CODE.getBytes());
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void afterPropertiesSet() throws Exception {
|
public void afterPropertiesSet() throws Exception {
|
||||||
YKCOperateFactory.register(type, this);
|
YKCOperateFactory.register(type, this);
|
||||||
|
YKCOperateFactory.register(yuxinType, this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import com.jsowell.common.core.redis.RedisCache;
|
|||||||
import com.jsowell.common.protocol.SyncPromise;
|
import com.jsowell.common.protocol.SyncPromise;
|
||||||
import com.jsowell.common.util.BytesUtil;
|
import com.jsowell.common.util.BytesUtil;
|
||||||
import com.jsowell.common.util.RpcUtil;
|
import com.jsowell.common.util.RpcUtil;
|
||||||
|
import com.jsowell.common.util.StringUtils;
|
||||||
import com.jsowell.common.util.YKCUtils;
|
import com.jsowell.common.util.YKCUtils;
|
||||||
import com.jsowell.netty.factory.YKCOperateFactory;
|
import com.jsowell.netty.factory.YKCOperateFactory;
|
||||||
import com.jsowell.pile.domain.PileReservationInfo;
|
import com.jsowell.pile.domain.PileReservationInfo;
|
||||||
@@ -25,6 +26,7 @@ import org.springframework.stereotype.Component;
|
|||||||
public class ReservationChargingResponseHandler extends AbstractYkcHandler {
|
public class ReservationChargingResponseHandler extends AbstractYkcHandler {
|
||||||
|
|
||||||
private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVATION_CHARGING_SETUP_ANSWER_CODE.getBytes());
|
private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVATION_CHARGING_SETUP_ANSWER_CODE.getBytes());
|
||||||
|
private final String yuxinType = YKCUtils.frameType2Str(YKCFrameTypeCode.YUXIN_RESERVATION_CHARGING_SETUP_ANSWER_CODE.getBytes());
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private RedisCache redisCache;
|
private RedisCache redisCache;
|
||||||
@@ -35,6 +37,7 @@ public class ReservationChargingResponseHandler extends AbstractYkcHandler {
|
|||||||
@Override
|
@Override
|
||||||
public void afterPropertiesSet() throws Exception {
|
public void afterPropertiesSet() throws Exception {
|
||||||
YKCOperateFactory.register(type, this);
|
YKCOperateFactory.register(type, this);
|
||||||
|
YKCOperateFactory.register(yuxinType, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -77,11 +80,16 @@ public class ReservationChargingResponseHandler extends AbstractYkcHandler {
|
|||||||
byte[] failedReasonByteArr = BytesUtil.copyBytes(msgBody, startIndex, length);
|
byte[] failedReasonByteArr = BytesUtil.copyBytes(msgBody, startIndex, length);
|
||||||
String failedReason = BytesUtil.bcd2Str(failedReasonByteArr);
|
String failedReason = BytesUtil.bcd2Str(failedReasonByteArr);
|
||||||
|
|
||||||
log.info("0x59预约充电响应, 交易流水号:{}, 桩SN:{}, 枪口号:{}, 结果:{}, 失败原因:{}",
|
String responseFrameType = YKCUtils.frameType2Str(ykcDataProtocol.getFrameType());
|
||||||
transactionCode, pileSn, connectorCode, resultCode, failedReason);
|
log.info("{}预约充电响应, 交易流水号:{}, 桩SN:{}, 枪口号:{}, 结果:{}, 失败原因:{}",
|
||||||
|
responseFrameType, transactionCode, pileSn, connectorCode, resultCode, failedReason);
|
||||||
|
|
||||||
// 根据请求id,在集合中找到与外部线程通信的SyncPromise对象
|
// 根据请求id,在集合中找到与外部线程通信的SyncPromise对象
|
||||||
String msgId = ctx.channel().id().toString() + "_" + YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVATION_CHARGING_SETUP_CODE.getBytes());
|
String requestFrameType = YKCFrameTypeCode.PileAnswersRelation.getRequestFrameType(responseFrameType);
|
||||||
|
if (StringUtils.isBlank(requestFrameType)) {
|
||||||
|
requestFrameType = YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVATION_CHARGING_SETUP_CODE.getBytes());
|
||||||
|
}
|
||||||
|
String msgId = ctx.channel().id().toString() + "_" + requestFrameType;
|
||||||
log.info("同步获取响应数据-收到消息, msgId:{}", msgId);
|
log.info("同步获取响应数据-收到消息, msgId:{}", msgId);
|
||||||
SyncPromise syncPromise = RpcUtil.getSyncPromiseMap().get(msgId);
|
SyncPromise syncPromise = RpcUtil.getSyncPromiseMap().get(msgId);
|
||||||
if(syncPromise != null) {
|
if(syncPromise != null) {
|
||||||
|
|||||||
@@ -559,8 +559,9 @@ public class PileRemoteService {
|
|||||||
String failedReason = BytesUtil.bcd2Str(failedReasonByteArr);
|
String failedReason = BytesUtil.bcd2Str(failedReasonByteArr);
|
||||||
String failedReasonMsg = ChargingFailedReasonEnum.getMsgByCode(Integer.parseInt(failedReason, 16));
|
String failedReasonMsg = ChargingFailedReasonEnum.getMsgByCode(Integer.parseInt(failedReason, 16));
|
||||||
|
|
||||||
log.info("0x59预约充电响应sync, 交易流水号:{}, 桩SN:{}, 枪口号:{}, 结果(00-失败; 01成功):{}, 失败原因:{}",
|
String responseFrameType = YKCUtils.frameType2Str(ykcDataProtocol.getFrameType());
|
||||||
transactionCode, pileSn, connectorCode, resultCode, failedReasonMsg);
|
log.info("{}预约充电响应sync, 交易流水号:{}, 桩SN:{}, 枪口号:{}, 结果(00-失败; 01成功):{}, 失败原因:{}",
|
||||||
|
responseFrameType, transactionCode, pileSn, connectorCode, resultCode, failedReasonMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import com.google.common.primitives.Bytes;
|
|||||||
import com.jsowell.common.constant.Constants;
|
import com.jsowell.common.constant.Constants;
|
||||||
import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode;
|
import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode;
|
||||||
import com.jsowell.common.enums.ykc.PileChannelEntity;
|
import com.jsowell.common.enums.ykc.PileChannelEntity;
|
||||||
|
import com.jsowell.common.enums.ykc.PileMainboardManufacturerEnum;
|
||||||
import com.jsowell.common.enums.ykc.ReturnCodeEnum;
|
import com.jsowell.common.enums.ykc.ReturnCodeEnum;
|
||||||
import com.jsowell.common.exception.BusinessException;
|
import com.jsowell.common.exception.BusinessException;
|
||||||
import com.jsowell.common.protocol.SyncPromise;
|
import com.jsowell.common.protocol.SyncPromise;
|
||||||
@@ -12,8 +13,10 @@ import com.jsowell.common.service.JcppService;
|
|||||||
import com.jsowell.common.util.*;
|
import com.jsowell.common.util.*;
|
||||||
import com.jsowell.common.util.Cp56Time2a.Cp56Time2aUtil;
|
import com.jsowell.common.util.Cp56Time2a.Cp56Time2aUtil;
|
||||||
import com.jsowell.common.util.spring.SpringUtils;
|
import com.jsowell.common.util.spring.SpringUtils;
|
||||||
|
import com.jsowell.pile.domain.PileBasicInfo;
|
||||||
import com.jsowell.pile.domain.ykcCommond.*;
|
import com.jsowell.pile.domain.ykcCommond.*;
|
||||||
import com.jsowell.pile.dto.SavePileMsgDTO;
|
import com.jsowell.pile.dto.SavePileMsgDTO;
|
||||||
|
import com.jsowell.pile.mapper.PileBasicInfoMapper;
|
||||||
import com.jsowell.pile.service.*;
|
import com.jsowell.pile.service.*;
|
||||||
import com.jsowell.pile.vo.web.BillingTemplateVO;
|
import com.jsowell.pile.vo.web.BillingTemplateVO;
|
||||||
import com.jsowell.pile.vo.web.PileModelInfoVO;
|
import com.jsowell.pile.vo.web.PileModelInfoVO;
|
||||||
@@ -58,6 +61,9 @@ public class YKCPushCommandServiceImpl implements YKCPushCommandService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private PileConnectorInfoService pileConnectorInfoService;
|
private PileConnectorInfoService pileConnectorInfoService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private PileBasicInfoMapper pileBasicInfoMapper;
|
||||||
|
|
||||||
@DubboReference
|
@DubboReference
|
||||||
private JcppService jcppService;
|
private JcppService jcppService;
|
||||||
|
|
||||||
@@ -70,6 +76,7 @@ public class YKCPushCommandServiceImpl implements YKCPushCommandService {
|
|||||||
YKCUtils.frameType2Str(YKCFrameTypeCode.REMOTE_CONTROL_START_CHARGING_CODE.getBytes()),
|
YKCUtils.frameType2Str(YKCFrameTypeCode.REMOTE_CONTROL_START_CHARGING_CODE.getBytes()),
|
||||||
YKCUtils.frameType2Str(YKCFrameTypeCode.REMOTE_CONTROL_STOP_CHARGING_CODE.getBytes()),
|
YKCUtils.frameType2Str(YKCFrameTypeCode.REMOTE_CONTROL_STOP_CHARGING_CODE.getBytes()),
|
||||||
YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVATION_CHARGING_SETUP_CODE.getBytes()),
|
YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVATION_CHARGING_SETUP_CODE.getBytes()),
|
||||||
|
YKCUtils.frameType2Str(YKCFrameTypeCode.YUXIN_RESERVATION_CHARGING_SETUP_CODE.getBytes()),
|
||||||
YKCUtils.frameType2Str(YKCFrameTypeCode.TIME_CHECK_SETTING_CODE.getBytes())
|
YKCUtils.frameType2Str(YKCFrameTypeCode.TIME_CHECK_SETTING_CODE.getBytes())
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -813,17 +820,32 @@ public class YKCPushCommandServiceImpl implements YKCPushCommandService {
|
|||||||
reservationTypeByteArr, verifyIdentityByteArr, vin1ByteArr, vin2ByteArr, vin3ByteArr,
|
reservationTypeByteArr, verifyIdentityByteArr, vin1ByteArr, vin2ByteArr, vin3ByteArr,
|
||||||
reservedStartTimeByteArr, reservedEndTimeByteArr, amountByteArr);
|
reservedStartTimeByteArr, reservedEndTimeByteArr, amountByteArr);
|
||||||
|
|
||||||
|
YKCFrameTypeCode frameTypeCode = getReservationChargingFrameType(pileSn);
|
||||||
byte[] response;
|
byte[] response;
|
||||||
try {
|
try {
|
||||||
response = this.supplySend(msg, pileSn, YKCFrameTypeCode.RESERVATION_CHARGING_SETUP_CODE);
|
response = this.supplySend(msg, pileSn, frameTypeCode);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("发送消息异常", e);
|
log.error("发送消息异常", e);
|
||||||
response = null;
|
response = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
log.info("【=====平台下发指令=====】: 预约充电指令, 交易流水号:{}, 桩编号:{}, 枪口号:{}, 操作(01-启动; 02-取消; 03-修改):{}, 身份验证:{}, 开始时间:{}, 结束时间:{}, 启动金额:{}",
|
log.info("【=====平台下发指令=====】: 预约充电指令, 帧类型:{}, 交易流水号:{}, 桩编号:{}, 枪口号:{}, 操作(01-启动; 02-取消; 03-修改):{}, 身份验证:{}, 开始时间:{}, 结束时间:{}, 启动金额:{}",
|
||||||
transactionCode, pileSn, connectorCode, operation, verifyIdentity, DateUtils.formatDateTime(reservedStartTime), DateUtils.formatDateTime(reservedEndTime), amount);
|
YKCUtils.frameType2Str(frameTypeCode.getBytes()), transactionCode, pileSn, connectorCode, operation, verifyIdentity, DateUtils.formatDateTime(reservedStartTime), DateUtils.formatDateTime(reservedEndTime), amount);
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private YKCFrameTypeCode getReservationChargingFrameType(String pileSn) {
|
||||||
|
try {
|
||||||
|
PileBasicInfo pileBasicInfo = pileBasicInfoMapper.selectPileBasicInfoBySn(pileSn);
|
||||||
|
String programVersion = pileBasicInfo == null ? null : pileBasicInfo.getProgramVersion();
|
||||||
|
PileMainboardManufacturerEnum manufacturer = PileProgramVersionUtils.getMainboardManufacturer(programVersion);
|
||||||
|
if (manufacturer == PileMainboardManufacturerEnum.YUXIN) {
|
||||||
|
return YKCFrameTypeCode.YUXIN_RESERVATION_CHARGING_SETUP_CODE;
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.warn("查询主板厂家失败, 使用默认预约充电帧类型, pileSn:{}", pileSn, e);
|
||||||
|
}
|
||||||
|
return YKCFrameTypeCode.RESERVATION_CHARGING_SETUP_CODE;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user