mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-05-17 16:28:41 +08:00
update 第三方平台设备认证、请求启动充电接口
This commit is contained in:
@@ -15,6 +15,7 @@ import com.jsowell.thirdparty.lianlian.service.LianLianService;
|
|||||||
import com.jsowell.thirdparty.lianlian.util.Cryptos;
|
import com.jsowell.thirdparty.lianlian.util.Cryptos;
|
||||||
import com.jsowell.thirdparty.lianlian.util.Encodes;
|
import com.jsowell.thirdparty.lianlian.util.Encodes;
|
||||||
import com.jsowell.thirdparty.yongchengboche.service.YCBCService;
|
import com.jsowell.thirdparty.yongchengboche.service.YCBCService;
|
||||||
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
@@ -312,7 +313,7 @@ public class YCBCController extends BaseController {
|
|||||||
QueryEquipChargeStatusDTO queryEquipChargeStatusDTO = JSONObject.parseObject(dataStr, QueryEquipChargeStatusDTO.class);
|
QueryEquipChargeStatusDTO queryEquipChargeStatusDTO = JSONObject.parseObject(dataStr, QueryEquipChargeStatusDTO.class);
|
||||||
queryEquipChargeStatusDTO.setOperatorID(dto.getOperatorID());
|
queryEquipChargeStatusDTO.setOperatorID(dto.getOperatorID());
|
||||||
Map<String, String> map = ycbcService.queryEquipChargeStatus(queryEquipChargeStatusDTO);
|
Map<String, String> map = ycbcService.queryEquipChargeStatus(queryEquipChargeStatusDTO);
|
||||||
|
|
||||||
return CommonResult.success(0, "查询充电状态成功!", map.get("Data"), map.get("Sig"));
|
return CommonResult.success(0, "查询充电状态成功!", map.get("Data"), map.get("Sig"));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("甬城泊车平台查询充电状态 error", e);
|
logger.error("甬城泊车平台查询充电状态 error", e);
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ public enum StartModeEnum {
|
|||||||
APP("1","用户app启动"),
|
APP("1","用户app启动"),
|
||||||
AUTH_CARD("2", "鉴权卡启动"),
|
AUTH_CARD("2", "鉴权卡启动"),
|
||||||
OFFLINE_CARD("3", "离线卡启动"),
|
OFFLINE_CARD("3", "离线卡启动"),
|
||||||
LIAN_LIAN("4", "联联平台启动"),
|
THIRD_PARTY_PLATFORM("4", "第三方平台启动"),
|
||||||
VIN_CODE("5", "车辆vin码启动"),
|
VIN_CODE("5", "车辆vin码启动"),
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ package com.jsowell.pile.dto;
|
|||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 请求启动充电DTO
|
* 请求启动充电DTO
|
||||||
*
|
*
|
||||||
@@ -43,4 +45,10 @@ public class QueryStartChargeDTO {
|
|||||||
|
|
||||||
@JsonProperty(value = "OperatorID")
|
@JsonProperty(value = "OperatorID")
|
||||||
private String operatorId;
|
private String operatorId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 可充电金额
|
||||||
|
*/
|
||||||
|
@JsonProperty(value = "AccountBalance")
|
||||||
|
private BigDecimal accountBalance;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2485,7 +2485,13 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
|||||||
String connectorCode = StringUtils.substring(pileConnectorCode, 14, 16);
|
String connectorCode = StringUtils.substring(pileConnectorCode, 14, 16);
|
||||||
|
|
||||||
String transactionCode = IdUtils.generateTransactionCode(pileSn, connectorCode);
|
String transactionCode = IdUtils.generateTransactionCode(pileSn, connectorCode);
|
||||||
|
// 校验充电桩信息
|
||||||
|
GenerateOrderDTO generateOrderDTO = new GenerateOrderDTO();
|
||||||
|
generateOrderDTO.setPileSn(pileSn);
|
||||||
|
generateOrderDTO.setConnectorCode(connectorCode);
|
||||||
|
generateOrderDTO.setStartMode(StartModeEnum.THIRD_PARTY_PLATFORM.getValue());
|
||||||
|
|
||||||
|
checkPileInfo(generateOrderDTO);
|
||||||
// 通过桩号查询所属站点
|
// 通过桩号查询所属站点
|
||||||
PileBasicInfo pileBasicInfo = pileBasicInfoService.selectPileBasicInfoBySN(pileSn);
|
PileBasicInfo pileBasicInfo = pileBasicInfoService.selectPileBasicInfoBySN(pileSn);
|
||||||
Long stationId = pileBasicInfo.getStationId();
|
Long stationId = pileBasicInfo.getStationId();
|
||||||
@@ -2504,9 +2510,9 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
|||||||
.connectorCode(connectorCode)
|
.connectorCode(connectorCode)
|
||||||
.pileConnectorCode(pileConnectorCode)
|
.pileConnectorCode(pileConnectorCode)
|
||||||
// .logicCard(pileAuthCardInfo.getLogicCard()) // 卡号
|
// .logicCard(pileAuthCardInfo.getLogicCard()) // 卡号
|
||||||
.startMode(StartModeEnum.LIAN_LIAN.getValue())
|
.startMode(StartModeEnum.THIRD_PARTY_PLATFORM.getValue())
|
||||||
.payStatus(Constants.ONE)
|
.payStatus(Constants.ONE)
|
||||||
.payAmount(new BigDecimal("500")) // 支付金额 2023.05.31:联联平台不会传金额,所以先给500,默认是直到充满
|
.payAmount(dto.getAccountBalance()) // 支付金额
|
||||||
.payTime(new Date())
|
.payTime(new Date())
|
||||||
// .payMode(PayModeEnum.PAYMENT_OF_BALANCE.getValue()) // 支付方式
|
// .payMode(PayModeEnum.PAYMENT_OF_BALANCE.getValue()) // 支付方式
|
||||||
.orderAmount(BigDecimal.ZERO)
|
.orderAmount(BigDecimal.ZERO)
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import com.jsowell.common.util.JWTUtils;
|
|||||||
import com.jsowell.common.util.PageUtils;
|
import com.jsowell.common.util.PageUtils;
|
||||||
import com.jsowell.common.util.StringUtils;
|
import com.jsowell.common.util.StringUtils;
|
||||||
import com.jsowell.pile.domain.*;
|
import com.jsowell.pile.domain.*;
|
||||||
|
import com.jsowell.pile.domain.ykcCommond.IssueQRCodeCommand;
|
||||||
import com.jsowell.pile.domain.ykcCommond.StartChargingCommand;
|
import com.jsowell.pile.domain.ykcCommond.StartChargingCommand;
|
||||||
import com.jsowell.pile.domain.ykcCommond.StopChargingCommand;
|
import com.jsowell.pile.domain.ykcCommond.StopChargingCommand;
|
||||||
import com.jsowell.pile.dto.*;
|
import com.jsowell.pile.dto.*;
|
||||||
@@ -56,6 +57,7 @@ import java.io.UnsupportedEncodingException;
|
|||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@@ -223,10 +225,10 @@ public class LianLianServiceImpl implements LianLianService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) throws UnsupportedEncodingException {
|
public static void main(String[] args) throws UnsupportedEncodingException {
|
||||||
String dataSecret = "SPBNJ1Z5EQNmpK08"; // SPBNJ1Z5EQNmpK08
|
String dataSecret = "VTAEKDPVN9CUS7WO"; // SPBNJ1Z5EQNmpK08
|
||||||
String dataSecretIV = "peRoTcb2C7zqKeII"; // peRoTcb2C7zqKeII
|
String dataSecretIV = "83UZFFRRZDYNF5CR"; // peRoTcb2C7zqKeII
|
||||||
String signSecret = "sRjCDeokckFGpYpA"; // sRjCDeokckFGpYpA
|
String signSecret = "sRjCDeokckFGpYpA"; // sRjCDeokckFGpYpA
|
||||||
String dataString = "DLYTJz/I1OkVfqHDPEyF6g==";
|
String dataString = "G1bRJULwSjloSpIrYO4fBIiNfQPxWKxtY3WZjdru78xkr6A2zggaIecRj4nxfGHyqbOx1mzmDR3nj4tTSfmlwFtdDTi38fdodI4AoPpf4naeOBvHzVzTapvnpGDU3txZxlyNx4axEWanyicO2y1EGSeP6d3oCdhK1N6ghfaEGPYVG2c/Y/cOqhrQ+xlwAB41";
|
||||||
// 解密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);
|
||||||
@@ -544,45 +546,41 @@ public class LianLianServiceImpl implements LianLianService {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Map<String, String> query_equip_auth(QueryEquipmentDTO dto) {
|
public Map<String, String> query_equip_auth(QueryEquipmentDTO dto) {
|
||||||
|
Map<String, String> resultMap = Maps.newLinkedHashMap();
|
||||||
EquipmentAuthVO vo = new EquipmentAuthVO();
|
EquipmentAuthVO vo = new EquipmentAuthVO();
|
||||||
|
|
||||||
String equipAuthSeq = dto.getEquipAuthSeq();
|
String equipAuthSeq = dto.getEquipAuthSeq(); // MA1X78KH5202311071202015732
|
||||||
String pileConnectorCode = dto.getConnectorID();
|
String pileConnectorCode = dto.getConnectorID();
|
||||||
// 通过运营商id + 枪口编码查询数据
|
// 先查询配置密钥相关信息
|
||||||
String merchantId = StringUtils.substring(equipAuthSeq, 0, 9);
|
|
||||||
String pileSn = StringUtils.substring(pileConnectorCode, 0, 14);
|
|
||||||
// 能查到为成功
|
|
||||||
vo.setSuccStat(1); // 1-失败 0-成功
|
|
||||||
PileBasicInfo pileBasicInfo = pileBasicInfoService.selectPileBasicInfoBySN(pileSn);
|
|
||||||
if (pileBasicInfo == null) {
|
|
||||||
vo.setFailReason(2); // 设备检测失败
|
|
||||||
vo.setFailReasonMsg("未查到该桩的数据");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
ThirdPartyPlatformConfig configInfo = thirdPartyPlatformConfigService.getInfoByOperatorId(dto.getOperatorID());
|
ThirdPartyPlatformConfig configInfo = thirdPartyPlatformConfigService.getInfoByOperatorId(dto.getOperatorID());
|
||||||
if (configInfo == null) {
|
if (configInfo == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (pileBasicInfo.getMerchantId() == Long.parseLong(merchantId)) {
|
// 根据桩编号查询数据
|
||||||
vo.setSuccStat(0);
|
// String merchantId = StringUtils.substring(equipAuthSeq, 0, 9);
|
||||||
// 查询当前数据
|
String pileSn = StringUtils.substring(pileConnectorCode, 0, 14);
|
||||||
|
vo.setSuccStat(1); // 1-失败 0-成功 默认失败
|
||||||
|
PileBasicInfo pileBasicInfo = pileBasicInfoService.selectPileBasicInfoBySN(pileSn);
|
||||||
|
if (pileBasicInfo != null) {
|
||||||
|
// 查询当前枪口数据
|
||||||
PileConnectorInfoVO connectorInfo = pileConnectorInfoService.getPileConnectorInfoByConnectorCode(pileConnectorCode);
|
PileConnectorInfoVO connectorInfo = pileConnectorInfoService.getPileConnectorInfoByConnectorCode(pileConnectorCode);
|
||||||
if (StringUtils.equals(PileConnectorDataBaseStatusEnum.OCCUPIED_NOT_CHARGED.getValue(), String.valueOf(connectorInfo.getStatus()))
|
if (StringUtils.equals(PileConnectorDataBaseStatusEnum.OCCUPIED_NOT_CHARGED.getValue(), String.valueOf(connectorInfo.getStatus()))
|
||||||
|| StringUtils.equals(PileConnectorDataBaseStatusEnum.OCCUPIED_CHARGING.getValue(), String.valueOf(connectorInfo.getStatus()))
|
|| StringUtils.equals(PileConnectorDataBaseStatusEnum.OCCUPIED_CHARGING.getValue(), String.valueOf(connectorInfo.getStatus()))
|
||||||
|| StringUtils.equals(PileConnectorDataBaseStatusEnum.OCCUPIED_APPOINTMENT_LOCK.getValue(), String.valueOf(connectorInfo.getStatus()))
|
|| StringUtils.equals(PileConnectorDataBaseStatusEnum.OCCUPIED_APPOINTMENT_LOCK.getValue(), String.valueOf(connectorInfo.getStatus()))
|
||||||
) {
|
) {
|
||||||
|
vo.setSuccStat(0);
|
||||||
vo.setFailReason(0);
|
vo.setFailReason(0);
|
||||||
} else {
|
} else {
|
||||||
|
vo.setSuccStat(1);
|
||||||
vo.setFailReason(1); // 1- 此设备尚未插枪;
|
vo.setFailReason(1); // 1- 此设备尚未插枪;
|
||||||
}
|
}
|
||||||
vo.setFailReasonMsg("");
|
vo.setFailReasonMsg("");
|
||||||
|
vo.setEquipAuthSeq(equipAuthSeq);
|
||||||
|
vo.setConnectorID(pileConnectorCode);
|
||||||
|
} else {
|
||||||
|
vo.setFailReason(2); // 设备检测失败
|
||||||
|
vo.setFailReasonMsg("未查到该桩的数据");
|
||||||
}
|
}
|
||||||
|
|
||||||
vo.setEquipAuthSeq(equipAuthSeq);
|
|
||||||
vo.setConnectorID(pileConnectorCode);
|
|
||||||
|
|
||||||
// 加密
|
|
||||||
Map<String, String> resultMap = Maps.newLinkedHashMap();
|
|
||||||
// 加密数据
|
// 加密数据
|
||||||
byte[] encryptText = Cryptos.aesEncrypt(JSONObject.toJSONString(vo).getBytes(),
|
byte[] encryptText = Cryptos.aesEncrypt(JSONObject.toJSONString(vo).getBytes(),
|
||||||
configInfo.getDataSecret().getBytes(), configInfo.getDataSecretIv().getBytes());
|
configInfo.getDataSecret().getBytes(), configInfo.getDataSecretIv().getBytes());
|
||||||
@@ -604,7 +602,6 @@ public class LianLianServiceImpl implements LianLianService {
|
|||||||
*/
|
*/
|
||||||
public Map<String, String> query_start_charge(QueryStartChargeDTO dto) {
|
public Map<String, String> query_start_charge(QueryStartChargeDTO dto) {
|
||||||
// 通过传过来的订单号和枪口号生成订单
|
// 通过传过来的订单号和枪口号生成订单
|
||||||
// String orderCode = dto.getStartChargeSeq();
|
|
||||||
String pileConnectorCode = dto.getConnectorID();
|
String pileConnectorCode = dto.getConnectorID();
|
||||||
OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByOrderCode(dto.getStartChargeSeq());
|
OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByOrderCode(dto.getStartChargeSeq());
|
||||||
if (orderInfo != null) {
|
if (orderInfo != null) {
|
||||||
@@ -615,6 +612,7 @@ public class LianLianServiceImpl implements LianLianService {
|
|||||||
if (configInfo == null) {
|
if (configInfo == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
// 生成订单
|
||||||
Map<String, Object> map = orderBasicInfoService.generateOrderForLianLian(dto);
|
Map<String, Object> map = orderBasicInfoService.generateOrderForLianLian(dto);
|
||||||
String orderCode = (String) map.get("orderCode");
|
String orderCode = (String) map.get("orderCode");
|
||||||
String transactionCode = (String) map.get("transactionCode");
|
String transactionCode = (String) map.get("transactionCode");
|
||||||
@@ -640,8 +638,16 @@ public class LianLianServiceImpl implements LianLianService {
|
|||||||
.FailReason(0)
|
.FailReason(0)
|
||||||
|
|
||||||
.build();
|
.build();
|
||||||
// 推送启动充电结果
|
|
||||||
pushStartChargeResult(orderCode);
|
// 异步推送启动充电结果
|
||||||
|
CompletableFuture.runAsync(() -> {
|
||||||
|
try {
|
||||||
|
Thread.sleep(200);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
pushStartChargeResult(orderCode);
|
||||||
|
});
|
||||||
|
|
||||||
// 加密
|
// 加密
|
||||||
Map<String, String> resultMap = Maps.newLinkedHashMap();
|
Map<String, String> resultMap = Maps.newLinkedHashMap();
|
||||||
@@ -1047,7 +1053,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();
|
||||||
|
|
||||||
// 推送启动充电结果(调用接口 notification_start_charge_result)
|
// 推送启动充电结果(调用接口 notification_start_charge_result)
|
||||||
String url = urlAddress + "notification_start_charge_result";
|
String url = urlAddress + "notification_start_charge_result";
|
||||||
|
|||||||
Reference in New Issue
Block a user