新增 甬城泊车相关接口、controller

This commit is contained in:
Lemon
2023-11-09 13:50:41 +08:00
parent 4e853ed592
commit 7d7a68a9ad
10 changed files with 256 additions and 104 deletions

View File

@@ -0,0 +1,66 @@
package com.jsowell.common.enums.thirdparty;
import com.jsowell.common.util.StringUtils;
/**
* TODO
*
* @author Lemon
* @Date 2023/11/8 9:11:55
*/
public enum ThirdPartyOperatorIdEnum {
LIAN_LIAN_PLATFORM("1", "425010765"),
ZHONG_DIAN_LIAN_PLATFORM("2", "14405899X"),
JIANG_SU_PLATFORM("3", "726079387"),
YONG_CHENG_BO_CHE("4", "330205020"),
;
private String type;
private String OperatorId;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getOperatorId() {
return OperatorId;
}
public void setOperatorId(String operatorId) {
OperatorId = operatorId;
}
ThirdPartyOperatorIdEnum(String type, String operatorId) {
this.type = type;
OperatorId = operatorId;
}
/**
* 根据 type 获取 operatorId
*
* @param type 编码
* @return operatorId
*/
public static String getOperatorIdByType(String type) {
for (ThirdPartyOperatorIdEnum item : ThirdPartyOperatorIdEnum.values()) {
if (StringUtils.equals(item.getType(), type)) {
return item.getOperatorId();
}
}
return null;
}
public static String getTypeByOperatorId(String operatorId) {
for (ThirdPartyOperatorIdEnum item : ThirdPartyOperatorIdEnum.values()) {
if (StringUtils.equals(item.getOperatorId(), operatorId)) {
return item.getType();
}
}
return null;
}
}

View File

@@ -47,7 +47,7 @@ public enum ThirdPlatformTypeEnum {
* @param code 编码 * @param code 编码
* @return 停止原因描述 * @return 停止原因描述
*/ */
public static String getMsgByCode(String code) { public static String getLabelByCode(String code) {
for (ThirdPlatformTypeEnum item : ThirdPlatformTypeEnum.values()) { for (ThirdPlatformTypeEnum item : ThirdPlatformTypeEnum.values()) {
if (StringUtils.equals(item.getCode(), code)) { if (StringUtils.equals(item.getCode(), code)) {
return item.getLabel(); return item.getLabel();

View File

@@ -682,7 +682,7 @@ public class TransactionRecordsRequestHandler extends AbstractHandler {
if (Objects.isNull(relationInfo)) { if (Objects.isNull(relationInfo)) {
return; return;
} }
String thirdPartyType = relation.getThirdPartyType(); String thirdPartyType = relationInfo.getThirdPartyType();
if (StringUtils.equals(ThirdPlatformTypeEnum.LIAN_LIAN_PLATFORM.getCode(), thirdPartyType)) { if (StringUtils.equals(ThirdPlatformTypeEnum.LIAN_LIAN_PLATFORM.getCode(), thirdPartyType)) {
// 联联平台 // 联联平台
// 推送订单信息 // 推送订单信息
@@ -701,6 +701,7 @@ public class TransactionRecordsRequestHandler extends AbstractHandler {
} }
if (StringUtils.equals(ThirdPlatformTypeEnum.YONG_CHENG_BO_CHE.getCode(), thirdPartyType)) { if (StringUtils.equals(ThirdPlatformTypeEnum.YONG_CHENG_BO_CHE.getCode(), thirdPartyType)) {
// 甬城泊车 // 甬城泊车
log.info("甬城泊车平台 推送充电订单信息 param:{}", orderBasicInfo.getOrderCode());
String result = ycbcService.pushChargeOrderInfo(orderBasicInfo.getOrderCode()); String result = ycbcService.pushChargeOrderInfo(orderBasicInfo.getOrderCode());
log.info("甬城泊车平台 推送充电订单信息 result:{}", result); log.info("甬城泊车平台 推送充电订单信息 result:{}", result);
} }

View File

@@ -4,18 +4,22 @@ import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.jsowell.common.constant.CacheConstants; import com.jsowell.common.constant.CacheConstants;
import com.jsowell.common.constant.Constants;
import com.jsowell.common.core.domain.ykc.RealTimeMonitorData; import com.jsowell.common.core.domain.ykc.RealTimeMonitorData;
import com.jsowell.common.core.domain.ykc.YKCDataProtocol; import com.jsowell.common.core.domain.ykc.YKCDataProtocol;
import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode; import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode;
import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.core.redis.RedisCache;
import com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum; import com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum;
import com.jsowell.common.enums.ykc.OrderStatusEnum; import com.jsowell.common.enums.ykc.OrderStatusEnum;
import com.jsowell.common.enums.ykc.StartModeEnum;
import com.jsowell.common.enums.ykc.StartTypeEnum;
import com.jsowell.common.enums.ykc.YKCPileFaultReasonEnum; import com.jsowell.common.enums.ykc.YKCPileFaultReasonEnum;
import com.jsowell.common.util.BytesUtil; import com.jsowell.common.util.BytesUtil;
import com.jsowell.common.util.StringUtils; 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.OrderBasicInfo; import com.jsowell.pile.domain.OrderBasicInfo;
import com.jsowell.pile.domain.PileBasicInfo;
import com.jsowell.pile.domain.ThirdPartyStationRelation; import com.jsowell.pile.domain.ThirdPartyStationRelation;
import com.jsowell.pile.service.*; import com.jsowell.pile.service.*;
import com.jsowell.pile.vo.base.ThirdPartyStationRelationVO; import com.jsowell.pile.vo.base.ThirdPartyStationRelationVO;
@@ -305,11 +309,9 @@ public class UploadRealTimeMonitorHandler extends AbstractHandler {
} }
try { try {
// 推送第三方平台 // 推送第三方平台,先通过桩编号查出站点信息
OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByTransactionCode(transactionCode); PileBasicInfo pileBasicInfo = pileBasicInfoService.selectPileBasicInfoBySN(pileSn);
if (orderInfo == null) {
return null;
}
Map<String, String> pileStatusMap = pileConnectorInfoService.getPileStatus(Lists.newArrayList(pileSn)); Map<String, String> pileStatusMap = pileConnectorInfoService.getPileStatus(Lists.newArrayList(pileSn));
String pileStatus = pileStatusMap.get(pileSn); String pileStatus = pileStatusMap.get(pileSn);
if (StringUtils.equals(connectorStatus, pileStatus)) { if (StringUtils.equals(connectorStatus, pileStatus)) {
@@ -318,10 +320,10 @@ public class UploadRealTimeMonitorHandler extends AbstractHandler {
// 状态不一样,传给第三方平台 // 状态不一样,传给第三方平台
// 查询该站点是否推送第三方平台 // 查询该站点是否推送第三方平台
ThirdPartyStationRelation relation = new ThirdPartyStationRelation(); ThirdPartyStationRelation relation = new ThirdPartyStationRelation();
if (StringUtils.isBlank(orderInfo.getStationId())) { if (StringUtils.isBlank(String.valueOf(pileBasicInfo.getStationId()))) {
return null; return null;
} }
relation.setStationId(Long.parseLong(orderInfo.getStationId())); relation.setStationId(pileBasicInfo.getStationId());
ThirdPartyStationRelationVO relationInfo = thirdPartyStationRelationService.selectRelationInfo(relation); ThirdPartyStationRelationVO relationInfo = thirdPartyStationRelationService.selectRelationInfo(relation);
if (Objects.isNull(relationInfo)) { if (Objects.isNull(relationInfo)) {
return null; return null;
@@ -329,6 +331,10 @@ public class UploadRealTimeMonitorHandler extends AbstractHandler {
String pileConnectorCode = pileSn + connectorCode; String pileConnectorCode = pileSn + connectorCode;
if (StringUtils.equals(ThirdPlatformTypeEnum.LIAN_LIAN_PLATFORM.getCode(), relationInfo.getThirdPartyType())) { if (StringUtils.equals(ThirdPlatformTypeEnum.LIAN_LIAN_PLATFORM.getCode(), relationInfo.getThirdPartyType())) {
// 联联 // 联联
OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByTransactionCode(transactionCode);
if (orderInfo == null) {
return null;
}
log.info("推送联联平台实时数据 params: orderBasicInfo:{}", JSON.toJSONString(orderInfo)); log.info("推送联联平台实时数据 params: orderBasicInfo:{}", JSON.toJSONString(orderInfo));
// 设备状态变化推送 notification_stationStatus // 设备状态变化推送 notification_stationStatus
lianLianService.pushConnectorStatus(pileConnectorCode, connectorStatus); lianLianService.pushConnectorStatus(pileConnectorCode, connectorStatus);
@@ -341,7 +347,7 @@ public class UploadRealTimeMonitorHandler extends AbstractHandler {
} }
if (StringUtils.equals(ThirdPlatformTypeEnum.ZHONG_DIAN_LIAN_PLATFORM.getCode(), relationInfo.getThirdPartyType())) { if (StringUtils.equals(ThirdPlatformTypeEnum.ZHONG_DIAN_LIAN_PLATFORM.getCode(), relationInfo.getThirdPartyType())) {
// 中电联 // 中电联
log.info("推送中电联平台实时数据 params: orderBasicInfo:{}", JSON.toJSONString(orderInfo)); log.info("推送中电联平台实时数据 pileConnectorCode:{}, connectorStatus:{}", pileConnectorCode, connectorStatus);
zdlService.notificationStationStatus(pileConnectorCode, connectorStatus); zdlService.notificationStationStatus(pileConnectorCode, connectorStatus);
} }
if (StringUtils.equals(ThirdPlatformTypeEnum.JIANG_SU_PLATFORM.getCode(), relation.getThirdPartyType())) { if (StringUtils.equals(ThirdPlatformTypeEnum.JIANG_SU_PLATFORM.getCode(), relation.getThirdPartyType())) {
@@ -351,12 +357,20 @@ public class UploadRealTimeMonitorHandler extends AbstractHandler {
} }
if (StringUtils.equals(ThirdPlatformTypeEnum.YONG_CHENG_BO_CHE.getCode(), relationInfo.getThirdPartyType())) { if (StringUtils.equals(ThirdPlatformTypeEnum.YONG_CHENG_BO_CHE.getCode(), relationInfo.getThirdPartyType())) {
// 甬城泊车 // 甬城泊车
log.info("推送甬城泊车平台实时数据 params: orderBasicInfo:{}", JSON.toJSONString(orderInfo)); log.info("推送甬城泊车平台设备状态变化推送 pileConnectorCode:{}, connectorStatus:{}", pileConnectorCode, connectorStatus);
// 设备状态变化推送 notification_stationStatus // 设备状态变化推送 notification_stationStatus
String result1 = ycbcService.notificationStationStatus(pileConnectorCode, connectorStatus); String result1 = ycbcService.notificationStationStatus(pileConnectorCode, connectorStatus);
log.info("推送甬城泊车平台设备状态变化推送 result:{}", result1);
// 推送充电状态 // 推送充电状态
String result2 = ycbcService.pushChargeStatus(orderInfo.getOrderCode()); OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByTransactionCode(transactionCode);
log.info("推送甬城泊车平台实时数据 result1:{}\n result2:{}", result1, result2); if (orderInfo == null) {
return null;
}
if (StringUtils.equals(orderInfo.getStartMode(), StartModeEnum.THIRD_PARTY_PLATFORM.getValue())) {
log.info("推送甬城泊车充电订单状态 param:{}", orderInfo);
String result2 = ycbcService.pushChargeStatus(orderInfo.getOrderCode());
log.info("推送甬城泊车充电订单状态 result:{}", result2);
}
} }
} catch (Exception e) { } catch (Exception e) {
log.error("推送第三方平台 实时数据 异常", e); log.error("推送第三方平台 实时数据 异常", e);

View File

@@ -211,7 +211,7 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter {
// 删除桩编号和channel的关系 // 删除桩编号和channel的关系
if (StringUtils.isNotBlank(pileSn)) { if (StringUtils.isNotBlank(pileSn)) {
PileChannelEntity.removeByPileSn(pileSn); // PileChannelEntity.removeByPileSn(pileSn);
} }
// 删除连接 // 删除连接
CHANNEL_MAP.remove(channelId); CHANNEL_MAP.remove(channelId);

View File

@@ -13,6 +13,7 @@ import com.jsowell.common.core.domain.ykc.RealTimeMonitorData;
import com.jsowell.common.enums.lianlian.LianLianPileStatusEnum; import com.jsowell.common.enums.lianlian.LianLianPileStatusEnum;
import com.jsowell.common.enums.lianlian.PayChannelEnum; import com.jsowell.common.enums.lianlian.PayChannelEnum;
import com.jsowell.common.enums.lianlian.StationPaymentEnum; import com.jsowell.common.enums.lianlian.StationPaymentEnum;
import com.jsowell.common.enums.thirdparty.ThirdPartyOperatorIdEnum;
import com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum; import com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum;
import com.jsowell.common.enums.ykc.OrderPayModeEnum; import com.jsowell.common.enums.ykc.OrderPayModeEnum;
import com.jsowell.common.enums.ykc.OrderStatusEnum; import com.jsowell.common.enums.ykc.OrderStatusEnum;
@@ -225,10 +226,10 @@ public class LianLianServiceImpl implements LianLianService {
} }
public static void main(String[] args) throws UnsupportedEncodingException { public static void main(String[] args) throws UnsupportedEncodingException {
String dataSecret = "VTAEKDPVN9CUS7WO"; // SPBNJ1Z5EQNmpK08 String dataSecret = "SPBNJ1Z5EQNmpK08"; // SPBNJ1Z5EQNmpK08 VTAEKDPVN9CUS7WO
String dataSecretIV = "83UZFFRRZDYNF5CR"; // peRoTcb2C7zqKeII String dataSecretIV = "peRoTcb2C7zqKeII"; // peRoTcb2C7zqKeII 83UZFFRRZDYNF5CR
String signSecret = "sRjCDeokckFGpYpA"; // sRjCDeokckFGpYpA String signSecret = "sRjCDeokckFGpYpA"; // sRjCDeokckFGpYpA
String dataString = "G1bRJULwSjloSpIrYO4fBIiNfQPxWKxtY3WZjdru78xkr6A2zggaIecRj4nxfGHyqbOx1mzmDR3nj4tTSfmlwFtdDTi38fdodI4AoPpf4naeOBvHzVzTapvnpGDU3txZxlyNx4axEWanyicO2y1EGSeP6d3oCdhK1N6ghfaEGPYVG2c/Y/cOqhrQ+xlwAB41"; String dataString = "LrjN9OmwM1HLzq7ljVy4u+w9fjZ3Csfat1/t9JBRx7U2i/7k8pDbFMEj1hGy1hLYG3I4urpCIunP01xUUI2VC1PyTKxjLlJBhiSsnEGE1Nb78v8Zx8ESeh52oJ5se1h8vGTQIWG679Q1xO1yPINkMN4+wZXq3VsaJNaQ8PfzLn1j0kN0LP7h9SNpddwXQfxaZgAM64qxpzX15yZpAtNDAfv/R9+uTh4M32bipQSPOl0P7PUqNIDxRfKMe8u50tGzTUVjF/XgJB5TZkW0oU6lYLrTuFDeHS2NS4lR5BWRfiUY3Kf6sGC5PbZtaqrkK5zQw1slwNPHWDt3kMlVqrpawAdeBzoOtOn3csjr/wRMe4UNoAI/sVZWW+ha5HbfcHh3MUwQjzdmeTg1uBK76sOLvA==";
// 解密data // 解密data
byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dataString), dataSecret.getBytes(), dataSecretIV.getBytes()); byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dataString), dataSecret.getBytes(), dataSecretIV.getBytes());
String dataStr = new String(plainText, StandardCharsets.UTF_8); String dataStr = new String(plainText, StandardCharsets.UTF_8);
@@ -631,11 +632,11 @@ public class LianLianServiceImpl implements LianLianService {
// 拼装对应的数据并返回 // 拼装对应的数据并返回
QueryStartChargeVO vo = QueryStartChargeVO.builder() QueryStartChargeVO vo = QueryStartChargeVO.builder()
.StartChargeSeq(orderCode) .startChargeSeq(orderCode)
.StartChargeSeqStat(1) // 1-启动中 .startChargeSeqStat(2) // 1启动中 2、充电中3、停止中4、已结束5、未知
.ConnectorID(pileConnectorCode) .connectorID(pileConnectorCode)
.SuccStat(0) .succStat(0)
.FailReason(0) .failReason(0)
.build(); .build();
@@ -673,49 +674,68 @@ public class LianLianServiceImpl implements LianLianService {
* @return * @return
*/ */
public Map<String, String> query_equip_charge_status(QueryEquipChargeStatusDTO dto) { public Map<String, String> query_equip_charge_status(QueryEquipChargeStatusDTO dto) {
String operatorID = dto.getOperatorID();
String type = ThirdPartyOperatorIdEnum.getTypeByOperatorId(operatorID);
String operatorName = ThirdPlatformTypeEnum.getLabelByCode(type);
// 通过订单号查询订单信息 // 通过订单号查询订单信息
OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByOrderCode(dto.getStartChargeSeq()); OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByOrderCode(dto.getStartChargeSeq());
// 通过订单号查询实时数据 logger.info(operatorName + "查询订单信息 orderInfo:{}", orderInfo);
if (orderInfo == null) { if (orderInfo == null) {
return null; return null;
} }
ThirdPartyPlatformConfig configInfo = thirdPartyPlatformConfigService.getInfoByOperatorId(dto.getOperatorID()); ThirdPartyPlatformConfig configInfo = thirdPartyPlatformConfigService.getInfoByOperatorId(operatorID);
logger.info(operatorName + "查询密钥信息 configInfo:{}", configInfo);
if (configInfo == null) { if (configInfo == null) {
return null; return null;
} }
OrderDetail orderDetail = orderBasicInfoService.getOrderDetailByOrderCode(orderInfo.getOrderCode()); OrderDetail orderDetail = orderBasicInfoService.getOrderDetailByOrderCode(orderInfo.getOrderCode());
// 通过订单号查询实时数据
List<RealTimeMonitorData> realTimeData = orderBasicInfoService.getChargingRealTimeData(orderInfo.getTransactionCode()); List<RealTimeMonitorData> realTimeData = orderBasicInfoService.getChargingRealTimeData(orderInfo.getTransactionCode());
RealTimeMonitorData data = realTimeData.get(0); QueryChargingStatusVO vo;
String orderStatus = orderInfo.getOrderStatus(); if (CollectionUtils.isEmpty(realTimeData)) {
if (StringUtils.equals(orderStatus, OrderStatusEnum.IN_THE_CHARGING.getValue())) { vo = new QueryChargingStatusVO();
// 充电中
orderStatus = "2";
}
if (StringUtils.equals(orderStatus, OrderStatusEnum.ORDER_COMPLETE.getValue())) {
// 充电完成
orderStatus = "4";
} else { } else {
// 直接给 5-未知 RealTimeMonitorData data = realTimeData.get(0);
orderStatus = "5"; String orderStatus = orderInfo.getOrderStatus();
if (StringUtils.equals(orderStatus, OrderStatusEnum.IN_THE_CHARGING.getValue())) {
// 充电中
orderStatus = "2";
}else if (StringUtils.equals(orderStatus, OrderStatusEnum.ORDER_COMPLETE.getValue())) {
// 充电完成
orderStatus = "4";
} else {
// 直接给 5-未知
orderStatus = "5";
}
String status = data.getConnectorStatus();
int connectorStatus = 0;
if (StringUtils.isBlank(status)) {
// 查询当前枪口状态
PileConnectorInfoVO connectorInfoVO = pileConnectorInfoService.getPileConnectorInfoByConnectorCode(orderInfo.getPileConnectorCode());
connectorStatus = connectorInfoVO.getStatus();
}else {
connectorStatus = Integer.parseInt(status);
}
BigDecimal totalElectricityAmount = orderDetail.getTotalElectricityAmount() == null ? BigDecimal.ZERO : orderDetail.getTotalElectricityAmount();
BigDecimal totalServiceAmount = orderDetail.getTotalServiceAmount() == null ? BigDecimal.ZERO : orderDetail.getTotalServiceAmount();
// 拼装联联平台数据
vo = QueryChargingStatusVO.builder()
.startChargeSeq(dto.getStartChargeSeq()) // 订单号
.startChargeSeqStat(Integer.parseInt(orderStatus)) // 订单状态
.connectorID(orderInfo.getPileConnectorCode()) // 枪口编码
.connectorStatus(connectorStatus) // 枪口状态
.currentA(new BigDecimal(data.getOutputCurrent())) // 电流
.voltageA(new BigDecimal(data.getOutputVoltage())) // 电压
.soc(new BigDecimal(data.getSOC()))
.startTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, orderInfo.getChargeStartTime())) // 开始时间
.endTime(DateUtils.getDateTime()) // 本次采样时间
.totalPower(new BigDecimal(data.getChargingDegree()).setScale(2, BigDecimal.ROUND_HALF_UP)) // 累计充电量
.elecMoney(totalElectricityAmount.setScale(2, BigDecimal.ROUND_HALF_UP)) // 累计电费
.seviceMoney(totalServiceAmount.setScale(2, BigDecimal.ROUND_HALF_UP)) // 累计服务费
.totalMoney(new BigDecimal(data.getChargingAmount())) // 已充金额
.build();
} }
// 拼装联联平台数据
QueryChargingStatusVO vo = QueryChargingStatusVO.builder()
.StartChargeSeq(dto.getStartChargeSeq()) // 订单号
.StartChargeSeqStat(Integer.parseInt(orderStatus)) // 订单状态
.ConnectorID(orderInfo.getPileConnectorCode()) // 枪口编码
.ConnectorStatus(Integer.parseInt(data.getConnectorStatus())) // 枪口状态
.CurrentA(new BigDecimal(data.getOutputCurrent())) // 电流
.VoltageA(new BigDecimal(data.getOutputVoltage())) // 电压
.Soc(new BigDecimal(data.getSOC()))
.StartTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, orderInfo.getChargeStartTime())) // 开始时间
.EndTime(DateUtils.getDateTime()) // 本次采样时间
.TotalPower(new BigDecimal(data.getChargingDegree())) // 累计充电量
.ElecMoney(orderDetail.getTotalElectricityAmount()) // 累计电费
.SeviceMoney(orderDetail.getTotalServiceAmount()) // 累计服务费
.TotalMoney(new BigDecimal(data.getChargingAmount())) // 已充金额
.build();
// 加密 // 加密
Map<String, String> resultMap = Maps.newLinkedHashMap(); Map<String, String> resultMap = Maps.newLinkedHashMap();
@@ -762,7 +782,7 @@ public class LianLianServiceImpl implements LianLianService {
.build(); .build();
ykcPushCommandService.pushStopChargingCommand(command); ykcPushCommandService.pushStopChargingCommand(command);
vo.setStartChargeSeq(orderCode); vo.setStartChargeSeq(orderCode);
vo.setStartChargeSeqStat(3); // 3-停止中 vo.setStartChargeSeqStat(4); // 1、启动中 2、充电中3、停止中4、已结束5、未知
} }
vo.setSuccStat(0); vo.setSuccStat(0);
vo.setFailReason(0); vo.setFailReason(0);
@@ -1123,26 +1143,30 @@ public class LianLianServiceImpl implements LianLianService {
String dataSecret = relationInfo.getDataSecret(); String dataSecret = relationInfo.getDataSecret();
String dataSecretIv = relationInfo.getDataSecretIv(); String dataSecretIv = relationInfo.getDataSecretIv();
String urlAddress = relationInfo.getUrlAddress(); String urlAddress = relationInfo.getUrlAddress();
String thirdPartyType = relation.getThirdPartyType(); String thirdPartyType = relationInfo.getThirdPartyType();
// 调用 查询充电状态方法 // 调用 查询充电状态方法
QueryEquipChargeStatusDTO dto = new QueryEquipChargeStatusDTO(); QueryEquipChargeStatusDTO dto = new QueryEquipChargeStatusDTO();
dto.setStartChargeSeq(orderCode); dto.setStartChargeSeq(orderCode);
// 根据type获取operatorId
String operatorIdByType = ThirdPartyOperatorIdEnum.getOperatorIdByType(thirdPartyType);
dto.setOperatorID(operatorIdByType);
Map<String, String> map = query_equip_charge_status(dto); Map<String, String> map = query_equip_charge_status(dto);
if (map == null) { if (map == null) {
return null; return null;
} }
String data = map.get("Data"); String data = map.get("Data");
// 解密data // 解密data (此处解密需用 thirdparty_platform_config 的密钥配置)
ThirdPartyPlatformConfig configInfo = thirdPartyPlatformConfigService.getInfoByOperatorId(operatorIdByType);
byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(data), byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(data),
dataSecret.getBytes(), dataSecretIv.getBytes()); configInfo.getDataSecret().getBytes(), configInfo.getDataSecretIv().getBytes());
String dataStr = new String(plainText, StandardCharsets.UTF_8); String dataStr = new String(plainText, StandardCharsets.UTF_8);
// 转成对应的对象 // 转成对应的对象
QueryEquipChargeStatusDTO queryEquipChargeStatusDTO = JSONObject.parseObject(dataStr, QueryEquipChargeStatusDTO.class); QueryChargingStatusVO vo = JSONObject.parseObject(dataStr, QueryChargingStatusVO.class);
String url = urlAddress + "notification_equip_charge_status"; String url = urlAddress + "notification_equip_charge_status";
// 调用联联平台接口 // 调用联联平台接口
String jsonString = JSONObject.toJSONString(queryEquipChargeStatusDTO); String jsonString = JSONObject.toJSONString(vo);
// 获取令牌 // 获取令牌
String token = ""; String token = "";
@@ -1166,7 +1190,7 @@ public class LianLianServiceImpl implements LianLianService {
} }
/** /**
* 推送停止充电结果(仅在 交易记录的帧类型中调用) * 推送停止充电结果(仅在 充电结束Handler的 0x19 帧类型中调用)
* *
* @param orderCode * @param orderCode
* @return * @return
@@ -1193,7 +1217,7 @@ public class LianLianServiceImpl implements LianLianService {
String dataSecret = relationInfo.getDataSecret(); String dataSecret = relationInfo.getDataSecret();
String dataSecretIv = relationInfo.getDataSecretIv(); String dataSecretIv = relationInfo.getDataSecretIv();
String urlAddress = relationInfo.getUrlAddress(); String urlAddress = relationInfo.getUrlAddress();
String thirdPartyType = relation.getThirdPartyType(); String thirdPartyType = relationInfo.getThirdPartyType();
String url = urlAddress + "notification_stop_charge_result"; String url = urlAddress + "notification_stop_charge_result";
@@ -1267,7 +1291,7 @@ public class LianLianServiceImpl implements LianLianService {
String dataSecret = relationInfo.getDataSecret(); String dataSecret = relationInfo.getDataSecret();
String dataSecretIv = relationInfo.getDataSecretIv(); String dataSecretIv = relationInfo.getDataSecretIv();
String urlAddress = relationInfo.getUrlAddress(); String urlAddress = relationInfo.getUrlAddress();
String thirdPartyType = relation.getThirdPartyType(); String thirdPartyType = relationInfo.getThirdPartyType();
String url = urlAddress + "notification_charge_order_info"; String url = urlAddress + "notification_charge_order_info";

View File

@@ -1,5 +1,7 @@
package com.jsowell.thirdparty.lianlian.vo; package com.jsowell.thirdparty.lianlian.vo;
import com.alibaba.fastjson2.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@@ -21,19 +23,22 @@ public class EquipmentAuthVO {
* 设备认证流水号 * 设备认证流水号
* 格式“运营商 ID+yyyyMMddHHmmss+4 位随机数” * 格式“运营商 ID+yyyyMMddHHmmss+4 位随机数”
*/ */
private String EquipAuthSeq; @JSONField(name = "EquipAuthSeq")
private String equipAuthSeq;
/** /**
* 充电设备接口编码 * 充电设备接口编码
*/ */
private String ConnectorID; @JSONField(name = "ConnectorID")
private String connectorID;
/** /**
* 成功状态 * 成功状态
* 0:成功; * 0:成功;
* 1:失败 * 1:失败
*/ */
private int SuccStat; @JSONField(name = "SuccStat")
private int succStat;
/** /**
* 失败原因 * 失败原因
@@ -42,11 +47,13 @@ public class EquipmentAuthVO {
* 2:设备检测失败: * 2:设备检测失败:
* 399:自定义 * 399:自定义
*/ */
private int FailReason; @JSONField(name = "FailReason")
private int failReason;
/** /**
* 失败原因描述 * 失败原因描述
* 如果设备认证失败则必传,描述力求简单明了,用户一看即懂 * 如果设备认证失败则必传,描述力求简单明了,用户一看即懂
*/ */
private String FailReasonMsg; @JSONField(name = "FailReasonMsg")
private String failReasonMsg;
} }

View File

@@ -1,5 +1,6 @@
package com.jsowell.thirdparty.lianlian.vo; package com.jsowell.thirdparty.lianlian.vo;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@@ -23,107 +24,128 @@ public class QueryChargingStatusVO {
/** /**
* 充电订单号 * 充电订单号
*/ */
private String StartChargeSeq; @JSONField(name = "StartChargeSeq")
private String startChargeSeq;
/** /**
* 充电订单状态 * 充电订单状态
*/ */
private int StartChargeSeqStat; @JSONField(name = "StartChargeSeqStat")
private int startChargeSeqStat;
/** /**
* 充电设备接口编码 * 充电设备接口编码
*/ */
private String ConnectorID; @JSONField(name = "ConnectorID")
private String connectorID;
/** /**
* 充电设备接口状态 * 充电设备接口状态
*/ */
private int ConnectorStatus; @JSONField(name = "ConnectorStatus")
private int connectorStatus;
/** /**
* 车辆识别码 * 车辆识别码
*/ */
private String Vin; @JSONField(name = "Vin")
private String vin;
/** /**
* A 相电流 * A 相电流
*/ */
private BigDecimal CurrentA; @JSONField(name = "CurrentA")
private BigDecimal currentA;
/** /**
* B 相电流 * B 相电流
*/ */
private BigDecimal CurrentB; @JSONField(name = "CurrentB")
private BigDecimal currentB;
/** /**
* C 相电流 * C 相电流
*/ */
private BigDecimal CurrentC; @JSONField(name = "CurrentC")
private BigDecimal currentC;
/** /**
* A 相电压 * A 相电压
*/ */
private BigDecimal VoltageA; @JSONField(name = "VoltageA")
private BigDecimal voltageA;
/** /**
* B 相电压 * B 相电压
*/ */
private BigDecimal VoltageB; @JSONField(name = "VoltageB")
private BigDecimal voltageB;
/** /**
* C 相电压 * C 相电压
*/ */
private BigDecimal VoltageC; @JSONField(name = "VoltageC")
private BigDecimal voltageC;
/** /**
* 电池剩余电量 * 电池剩余电量
*/ */
private BigDecimal Soc; @JSONField(name = "Soc")
private BigDecimal soc;
/** /**
* 开始充电时间 * 开始充电时间
*/ */
private String StartTime; @JSONField(name = "StartTime")
private String startTime;
/** /**
* 本次采样时间 * 本次采样时间
*/ */
private String EndTime; @JSONField(name = "EndTime")
private String endTime;
/** /**
* 累计充电量 * 累计充电量
*/ */
private BigDecimal TotalPower; @JSONField(name = "TotalPower")
private BigDecimal totalPower;
/** /**
* 累计电费 * 累计电费
*/ */
private BigDecimal ElecMoney; @JSONField(name = "ElecMoney")
private BigDecimal elecMoney;
/** /**
* 累计服务费 * 累计服务费
*/ */
private BigDecimal SeviceMoney; @JSONField(name = "SeviceMoney")
private BigDecimal seviceMoney;
/** /**
* 累计总金额 * 累计总金额
*/ */
private BigDecimal TotalMoney; @JSONField(name = "TotalMoney")
private BigDecimal totalMoney;
/** /**
* 是否可申请停车费减免 * 是否可申请停车费减免
*/ */
private int ParkingFeeDiscount; // @JSONField(name = "ParkingFeeDiscount")
// private int parkingFeeDiscount;
/** /**
* 时段数 N 范围032 * 时段数 N 范围032
*/ */
private int SumPeriod; // @JSONField(name = "SumPeriod")
// private int sumPeriod;
/** /**
* 充电明细信息 * 充电明细信息
*/ */
private List<ChargeDetail> ChargeDetails; @JSONField(name = "ChargeDetails")
private List<ChargeDetail> chargeDetails;
/** /**
* 充电明细信息体 * 充电明细信息体
@@ -133,36 +155,43 @@ public class QueryChargingStatusVO {
/** /**
* 开始时间 * 开始时间
*/ */
private String DetailStartTime; @JSONField(name = "DetailStartTime")
private String detailStartTime;
/** /**
* 结束时间 * 结束时间
*/ */
private String DetailEndTime; @JSONField(name = "DetailEndTime")
private String detailEndTime;
/** /**
* 时段电价 * 时段电价
*/ */
private BigDecimal ElecPrice; @JSONField(name = "ElecPrice")
private BigDecimal elecPrice;
/** /**
* 时段服务费价格 * 时段服务费价格
*/ */
private BigDecimal SevicePrice; @JSONField(name = "SevicePrice")
private BigDecimal sevicePrice;
/** /**
* 时段充电量 * 时段充电量
*/ */
private BigDecimal DetailPower; @JSONField(name = "DetailPower")
private BigDecimal detailPower;
/** /**
* 时段电费 * 时段电费
*/ */
private BigDecimal DetailElecMoney; @JSONField(name = "DetailElecMoney")
private BigDecimal detailElecMoney;
/** /**
* 时段服务费 * 时段服务费
*/ */
private BigDecimal DetailSeviceMoney; @JSONField(name = "DetailSeviceMoney")
private BigDecimal detailSeviceMoney;
} }
} }

View File

@@ -1,5 +1,6 @@
package com.jsowell.thirdparty.lianlian.vo; package com.jsowell.thirdparty.lianlian.vo;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@@ -19,25 +20,30 @@ public class QueryStartChargeVO {
/** /**
* 充电订单号 * 充电订单号
*/ */
private String StartChargeSeq; @JSONField(name = "StartChargeSeq")
private String startChargeSeq;
/** /**
* 充电订单状态 * 充电订单状态
*/ */
private int StartChargeSeqStat; @JSONField(name = "StartChargeSeqStat")
private int startChargeSeqStat;
/** /**
* 充电设备接口编码 * 充电设备接口编码
*/ */
private String ConnectorID; @JSONField(name = "ConnectorID")
private String connectorID;
/** /**
* 成功状态 * 成功状态
*/ */
private int SuccStat; @JSONField(name = "SuccStat")
private int succStat;
/** /**
* 失败原因 * 失败原因
*/ */
private int FailReason; @JSONField(name = "FailReason")
private int failReason;
} }

View File

@@ -1,5 +1,6 @@
package com.jsowell.thirdparty.lianlian.vo; package com.jsowell.thirdparty.lianlian.vo;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data; import lombok.Data;
/** /**
@@ -14,17 +15,20 @@ public class QueryStopChargeVO {
/** /**
* 充电订单号 * 充电订单号
*/ */
private String StartChargeSeq; @JSONField(name = "StartChargeSeq")
private String startChargeSeq;
/** /**
* 充电订单状态 1、启动中 2、充电中3、停止中4、已结束5、未知 * 充电订单状态 1、启动中 2、充电中3、停止中4、已结束5、未知
*/ */
private int StartChargeSeqStat; @JSONField(name = "StartChargeSeqStat")
private int startChargeSeqStat;
/** /**
* 成功状态 0:成功; 1:失败 * 成功状态 0:成功; 1:失败
*/ */
private int SuccStat; @JSONField(name = "SuccStat")
private int succStat;
/** /**
* 失败原因 * 失败原因
@@ -34,5 +38,6 @@ public class QueryStopChargeVO {
* 3:设备已停止充电; * 3:设备已停止充电;
* 499:自定义 * 499:自定义
*/ */
private int FailReason; @JSONField(name = "FailReason")
private int failReason;
} }