This commit is contained in:
2024-03-25 11:22:32 +08:00
5 changed files with 114 additions and 41 deletions

View File

@@ -4,12 +4,15 @@ import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.jsowell.common.annotation.Anonymous;
import com.jsowell.common.core.controller.BaseController;
import com.jsowell.common.exception.BusinessException;
import com.jsowell.common.response.RestApiResponse;
import com.jsowell.common.util.JWTUtils;
import com.jsowell.pile.dto.ThirdPartyCommonStartChargeDTO;
import com.jsowell.pile.dto.huawei.*;
import com.jsowell.pile.vo.huawei.QueryChargeStatusVO;
import com.jsowell.pile.vo.huawei.QueryEquipAuthVO;
import com.jsowell.pile.vo.huawei.QueryStartChargeVO;
import com.jsowell.thirdparty.common.CommonService;
import com.jsowell.thirdparty.huawei.HuaweiServiceV2;
import com.jsowell.thirdparty.lianlian.common.CommonResult;
import com.jsowell.thirdparty.lianlian.domain.ConnectorStatusInfo;
@@ -40,6 +43,9 @@ public class HuaWeiControllerV2 extends BaseController {
@Autowired
private HuaweiServiceV2 huaweiServiceV2;
@Autowired
private CommonService commonService;
/**
* 获取token接口
* http://localhost:8080/huawei/v1/query_token
@@ -184,12 +190,12 @@ public class HuaWeiControllerV2 extends BaseController {
Map<String, String> resultMap = null;
try {
resultMap = huaweiServiceV2.vinStartCharge(vinStartChargeDTO);
logger.info("华为vin启动充电 result:{}", resultMap);
}catch (Exception e) {
} catch (Exception e) {
logger.error("华为vin启动充电 error", e);
}
logger.info("华为vin启动充电 resultMap:{}", resultMap);
if (resultMap != null) {
return CommonResult.success(0, "vin启动充电成功!", resultMap.get("Data"), resultMap.get("Sig"));
return CommonResult.success(0, "vin启动充电结果", resultMap.get("Data"), resultMap.get("Sig"));
}else {
return CommonResult.failed("vin启动充电 error");
}
@@ -342,6 +348,21 @@ public class HuaWeiControllerV2 extends BaseController {
@PostMapping("/commonStartCharge")
public RestApiResponse<?> commonStartCharge(@RequestBody ThirdPartyCommonStartChargeDTO dto) {
RestApiResponse<?> response = null;
try {
String result = commonService.commonQueryStartCharge(dto);
response = new RestApiResponse<>(result);
} catch (Exception e) {
logger.error("统一启动充电接口 error", e);
}
logger.info("统一启动充电接口 params:{}, result:{}", JSON.toJSONString(dto), response);
return response;
}
/**

View File

@@ -0,0 +1,40 @@
package com.jsowell.pile.dto;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* 通用第三方站点启动充电dto
*
* @author Lemon
* @Date 2024/3/25 8:37:19
*/
@Data
public class ThirdPartyCommonStartChargeDTO {
/**
* 第三方平台类型
*/
private String thirdPartyType;
/**
* 站点id列表
*/
private List<String> stationIds;
/**
* 枪口号
*/
private String pileConnectorCode;
/**
* 充电金额
*/
private BigDecimal chargeAmount;
/**
* 支付方式
*/
private String payMode;
}

View File

@@ -21,6 +21,7 @@ import com.jsowell.pile.domain.PileBasicInfo;
import com.jsowell.pile.domain.ThirdPartyStationRelation;
import com.jsowell.pile.domain.ThirdpartyParkingConfig;
import com.jsowell.pile.dto.PushStationInfoDTO;
import com.jsowell.pile.dto.ThirdPartyCommonStartChargeDTO;
import com.jsowell.pile.dto.huawei.HWQueryStartChargeDTO;
import com.jsowell.pile.dto.lutongyunting.BindCouponDTO;
import com.jsowell.pile.dto.ruanjie.UseCouponDTO;
@@ -501,36 +502,41 @@ public class CommonService {
/**
* 统一请求启动充电,目前给华为平台用
* @param thirdPartyType
* @param stationIds
* @param pileConnectorCode
* @param dto
* @return
*/
public String commonQueryStartCharge(String thirdPartyType, List<String> stationIds, String pileConnectorCode, BigDecimal chargeAmount, String payMode) {
public String commonQueryStartCharge(ThirdPartyCommonStartChargeDTO dto) {
String thirdPartyType = dto.getThirdPartyType();
List<String> stationIds = dto.getStationIds();
String pileConnectorCode = dto.getPileConnectorCode();
BigDecimal chargeAmount = dto.getChargeAmount();
String payMode = dto.getPayMode();
// 判断平台类型
if (StringUtils.equals(ThirdPlatformTypeEnum.HUA_WEI.getCode(), thirdPartyType)) {
// 华为平台
String label = ThirdPlatformTypeEnum.getLabelByCode(thirdPartyType);
// query_station_status 查询站点枪口详情
Map<String, String> map = huaweiServiceV2.queryStationStatus(stationIds);
String status = map.get(pileConnectorCode);
// 判断枪口状态
if (!StringUtils.equals(PileConnectorDataBaseStatusEnum.OCCUPIED_NOT_CHARGED.getValue(), status)) {
log.error(thirdPartyType + "判断枪口状态 error, 枪口状态为:{}", status);
log.error(label + "判断枪口状态 error, 枪口状态为:{}", status);
}
// query_equip_auth 请求设备认证
QueryEquipAuthVO vo = huaweiServiceV2.queryEquipAuth(pileConnectorCode);
Integer succStat = vo.getSuccStat();
if (succStat != Constants.zero) {
log.error(thirdPartyType + "请求设备认证 error, {}", vo.getFailReason());
log.error(label + "请求设备认证 error, {}", vo.getFailReason());
}
// query_start_charge 请求启动充电
HWQueryStartChargeDTO dto = new HWQueryStartChargeDTO();
dto.setConnectorID(pileConnectorCode);
dto.setMoneyLimit(chargeAmount);
dto.setPayMode(payMode);
QueryStartChargeVO startChargeVO = huaweiServiceV2.queryStartCharge(dto);
HWQueryStartChargeDTO chargeDTO = new HWQueryStartChargeDTO();
chargeDTO.setConnectorID(pileConnectorCode);
chargeDTO.setMoneyLimit(chargeAmount);
chargeDTO.setPayMode(payMode);
QueryStartChargeVO startChargeVO = huaweiServiceV2.queryStartCharge(chargeDTO);
if (startChargeVO.getSuccStat() != Constants.zero) {
log.error(thirdPartyType + "请求启动充电 error, {}", startChargeVO.getFailReason());
log.error(label + "请求启动充电 error, {}", startChargeVO.getFailReason());
}
String startChargeSeq = startChargeVO.getStartChargeSeq(); // 充电订单号

View File

@@ -761,7 +761,7 @@ public class HuaweiServiceV2 {
// 将交易记录中的交易标识 05 传入实时数据对象,用于结算订单后解锁 vin 状态
data.setTransactionIdentifier("05");
}
String mode = pileMerchantInfoService.getDelayModeByMerchantId(orderBasicInfo.getMerchantId());
AbstractProgramLogic orderLogic = ProgramLogicFactory.getProgramLogic(mode);
orderLogic.settleOrderForThirdParty(data, orderBasicInfo);
@@ -817,6 +817,9 @@ public class HuaweiServiceV2 {
if (configInfo == null) {
return null;
}
int succStat = Constants.one; // 操作结果
int failReason = Constants.one; // 失败原因
JSONObject jsonObject = new JSONObject();
String vinCode = dto.getVin();
String pileConnectorCode = dto.getConnectorID();
@@ -827,32 +830,35 @@ public class HuaweiServiceV2 {
MemberPlateNumberRelation basicInfo = memberPlateNumberRelationService.getMemberPlateInfoByVinCode(vinCode);
if (basicInfo == null) {
// 该用户未注册
throw new BusinessException(ReturnCodeEnum.CODE_GENERATE_ORDER_ERROR);
jsonObject.put("SuccStat", succStat);
jsonObject.put("FailReason", failReason);
Map<String, String> resultMap = getResultMap(jsonObject);
return resultMap;
}else {
// 生成订单,并启动充电
GenerateOrderDTO generateOrderDTO = new GenerateOrderDTO();
generateOrderDTO.setMemberPlateNumberRelation(basicInfo);
generateOrderDTO.setPileSn(pileSn);
generateOrderDTO.setConnectorCode(connectorCode);
generateOrderDTO.setStartMode(StartModeEnum.VIN_CODE.getValue());
generateOrderDTO.setMemberId(basicInfo.getMemberId());
generateOrderDTO.setStartSoc(String.valueOf(dto.getSoc()));
Map<String, Object> map = orderBasicInfoService.generateOrderByCard(generateOrderDTO);
if (map != null) {
// 鉴权成功
succStat = Constants.zero;
failReason = Constants.zero;
}
jsonObject.put("SuccStat", succStat);
jsonObject.put("FailReason", failReason);
Map<String, String> resultMap = getResultMap(jsonObject);
return resultMap;
}
// 生成订单,并启动充电
GenerateOrderDTO generateOrderDTO = new GenerateOrderDTO();
generateOrderDTO.setMemberPlateNumberRelation(basicInfo);
generateOrderDTO.setPileSn(pileSn);
generateOrderDTO.setConnectorCode(connectorCode);
generateOrderDTO.setStartMode(StartModeEnum.VIN_CODE.getValue());
generateOrderDTO.setMemberId(basicInfo.getMemberId());
generateOrderDTO.setStartSoc(String.valueOf(dto.getSoc()));
int succStat = Constants.one; // 操作结果
int failReason = Constants.one; // 失败原因
Map<String, Object> map = orderBasicInfoService.generateOrderByCard(generateOrderDTO);
if (map != null) {
// 鉴权成功
succStat = Constants.zero;
failReason = Constants.zero;
}
JSONObject jsonObject = new JSONObject();
jsonObject.put("SuccStat", succStat);
jsonObject.put("FailReason", failReason);
Map<String, String> resultMap = getResultMap(jsonObject);
return resultMap;
}

View File

@@ -385,7 +385,7 @@ public class LianLianServiceImpl implements LianLianService {
String dataSecret = "E6gnWuz0QzBW75CR"; // SPBNJ1Z5EQNmpK08 VTAEKDPVN9CUS7WO huawei: zd4NrLWJ38XCTaqP E6gnWuz0QzBW75CR
String dataSecretIV = "SXejaSUx5yud8UHm"; // peRoTcb2C7zqKeII 83UZFFRRZDYNF5CR huawei: RJJecvNTJ48SGMG7 SXejaSUx5yud8UHm
String signSecret = "sRjCDeokckFGpYpA"; // sRjCDeokckFGpYpA
String dataString = "o1tqVesDkPUXBNdUmE10Z7FWjAf/KFO3Iq4NWNCcFeq0h8wBcdWcZwojkdv2TNFpS0Qftv1HWDTdm+8Pjj0AIw==";
String dataString = "GZlmSIZOVzT+Yvpc2PmvNmwKXhaqSnsNdCUS61pq9BxES7v9FWNrUvqk3OsAUMPvjCwmYeskIglHXw0OFfYGZ1bXxAzHymzsqfehZ10WoNs=";
// 解密data
byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dataString), dataSecret.getBytes(), dataSecretIV.getBytes());