This commit is contained in:
2024-01-23 15:12:07 +08:00
parent e4c91d54e7
commit 33fbc33c88
8 changed files with 549 additions and 63 deletions

View File

@@ -1,32 +1,44 @@
package com.jsowell.thirdparty.platform;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.google.common.collect.Maps;
import com.jsowell.common.util.DateUtils;
import com.jsowell.common.util.JWTUtils;
import com.jsowell.common.util.StringUtils;
import com.jsowell.pile.domain.PileBasicInfo;
import com.jsowell.pile.domain.PileConnectorInfo;
import com.jsowell.pile.domain.PileStationInfo;
import com.jsowell.pile.domain.ThirdPartyPlatformConfig;
import com.jsowell.pile.dto.QueryStationInfoDTO;
import com.jsowell.pile.service.PileBillingTemplateService;
import com.jsowell.pile.service.PileStationInfoService;
import com.jsowell.pile.service.ThirdPartyPlatformConfigService;
import com.jsowell.pile.service.*;
import com.jsowell.pile.vo.web.PileModelInfoVO;
import com.jsowell.thirdparty.lianlian.dto.CommonParamsDTO;
import com.jsowell.thirdparty.lianlian.util.Cryptos;
import com.jsowell.thirdparty.lianlian.util.Encodes;
import com.jsowell.thirdparty.lianlian.util.GBSignUtils;
import com.jsowell.thirdparty.lianlian.vo.AccessTokenVO;
import com.jsowell.thirdparty.lianlian.vo.LianLianResultVO;
import com.jsowell.thirdparty.zhongdianlian.domain.ZDLConnectorInfo;
import com.jsowell.thirdparty.zhongdianlian.domain.ZDLEquipmentInfo;
import com.jsowell.thirdparty.zhongdianlian.service.ZDLService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.*;
/**
* 对接第三方平台抽象类
*/
public abstract class AbsInterfaceWithPlatformLogic implements InitializingBean {
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
protected PileStationInfoService pileStationInfoService;
@@ -36,6 +48,21 @@ public abstract class AbsInterfaceWithPlatformLogic implements InitializingBean
@Autowired
protected PileBillingTemplateService pileBillingTemplateService;
@Autowired
protected PileBasicInfoService pileBasicInfoService;
@Autowired
protected PileConnectorInfoService pileConnectorInfoService;
@Autowired
protected PileModelInfoService pileModelInfoService;
@Autowired
protected OrderBasicInfoService orderBasicInfoService;
@Autowired
protected ThirdPartyStationRelationService thirdPartyStationRelationService;
@Autowired
protected ZDLService zdlService;
@@ -64,10 +91,70 @@ public abstract class AbsInterfaceWithPlatformLogic implements InitializingBean
*/
public abstract Map<String, String> queryStationStats(QueryStationInfoDTO dto);
////////////////////////////////////// 以下是公用方法 ////////////////////////////////////////////
/**
* 从联联平台获取令牌
*
* @param operatorId
* @param operatorSecret
* @return
*/
protected String getToken(String urlAddress, String operatorId, String operatorSecret,
String dataSecretIv, String signSecret, String dataSecret) {
String token = "";
try {
// 请求地址
String requestUrl = urlAddress + "query_token";
// 请求data
Map<String, String> data = new HashMap<>();
data.put("OperatorID", operatorId);
data.put("OperatorSecret", operatorSecret);
data.put("DataSecretIV", dataSecretIv);
String dataJson = JSONUtil.toJsonStr(data);
// 加密
byte[] encryptText = Cryptos.aesEncrypt(dataJson.getBytes(StandardCharsets.UTF_8),
dataSecret.getBytes(), dataSecretIv.getBytes());
String strData = Encodes.encodeBase64(encryptText);
Map<String, String> request = new LinkedHashMap<>();
request.put("OperatorID", operatorId);
request.put("Data", strData);
request.put("TimeStamp", DateUtils.parseDateToStr(DateUtils.YYYYMMDDHHMMSS, new Date()));
request.put("Seq", "0001");
// 生成签名
String sig = GBSignUtils.sign(request, signSecret);
request.put("Sig", sig);
String tokenRequest = JSONUtil.toJsonStr(request);
String response = HttpUtil.post(requestUrl, tokenRequest);
LianLianResultVO result = JSON.parseObject(response, LianLianResultVO.class);
// logger.info("获取令牌 result:{}", result);
if (result.getRet() == 0) {
// 解密data
byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64((String) result.getData()),
dataSecret.getBytes(), dataSecretIv.getBytes());
String dataStr = new String(plainText, StandardCharsets.UTF_8);
Map<String, String> resultMap = (Map<String, String>) JSON.parse(dataStr);
token = resultMap.get("AccessToken");
// logger.info("token: {}", token);
}
logger.info("获取令牌 result:{}, token: {}", result, token);
} catch (Exception e) {
return token;
}
return token;
}
/**
* 身份认证
*/
public Map<String, String> generateToken(CommonParamsDTO dto) {
protected Map<String, String> generateToken(CommonParamsDTO dto) {
String operatorID = dto.getOperatorID();
// 通过operatorID 查出 operatorSecret
ThirdPartyPlatformConfig platformConfig = thirdPartyPlatformConfigService.getInfoByOperatorId(operatorID);
@@ -125,7 +212,7 @@ public abstract class AbsInterfaceWithPlatformLogic implements InitializingBean
return resultMap;
}
public Map<String, String> checkoutSign(CommonParamsDTO dto){
protected Map<String, String> checkoutSign(CommonParamsDTO dto){
String operatorID = dto.getOperatorID();
// 通过operatorID 查出 operatorSecret
ThirdPartyPlatformConfig platformConfig = thirdPartyPlatformConfigService.getInfoByOperatorId(operatorID);
@@ -162,4 +249,75 @@ public abstract class AbsInterfaceWithPlatformLogic implements InitializingBean
resultMap.put("DataSecretIV", platformConfig.getDataSecretIv());
return resultMap;
}
/**
* 获取桩列表信息
*
* @param pileStationInfo
* @return
*/
protected List<ZDLEquipmentInfo> getPileList(PileStationInfo pileStationInfo) {
List<ZDLEquipmentInfo> resultList = new ArrayList<>();
// 通过站点id查询桩基本信息
List<PileBasicInfo> list = pileBasicInfoService.getPileListByStationId(String.valueOf(pileStationInfo.getId()));
// 封装成中电联平台对象
for (PileBasicInfo pileBasicInfo : list) {
ZDLEquipmentInfo equipmentInfo = new ZDLEquipmentInfo();
String pileSn = pileBasicInfo.getSn();
equipmentInfo.setEquipmentId(pileSn);
PileModelInfoVO modelInfo = pileModelInfoService.getPileModelInfoByPileSn(pileSn);
equipmentInfo.setEquipmentType(Integer.parseInt(modelInfo.getSpeedType()));
equipmentInfo.setPower(new BigDecimal(modelInfo.getRatedPower()).setScale(1, BigDecimal.ROUND_HALF_UP));
List<ZDLConnectorInfo> connectorList = getConnectorList(pileBasicInfo);
equipmentInfo.setConnectorInfos(connectorList);
resultList.add(equipmentInfo);
}
return resultList;
}
/**
* 获取枪口列表
*
* @param pileBasicInfo
* @return
*/
protected List<ZDLConnectorInfo> getConnectorList(PileBasicInfo pileBasicInfo) {
List<ZDLConnectorInfo> resultList = new ArrayList<>();
List<PileConnectorInfo> list = pileConnectorInfoService.selectPileConnectorInfoList(pileBasicInfo.getSn());
for (PileConnectorInfo pileConnectorInfo : list) {
ZDLConnectorInfo connectorInfo = new ZDLConnectorInfo();
connectorInfo.setConnectorId(pileConnectorInfo.getPileConnectorCode());
String pileSn = pileConnectorInfo.getPileSn();
PileModelInfoVO modelInfo = pileModelInfoService.getPileModelInfoByPileSn(pileSn);
int connectorType = StringUtils.equals("1", modelInfo.getSpeedType()) ? 4 : 3;
connectorInfo.setConnectorType(connectorType);
// 车位号
if (StringUtils.isNotBlank(pileConnectorInfo.getParkNo())) {
connectorInfo.setParkNo(pileConnectorInfo.getParkNo());
}
connectorInfo.setVoltageUpperLimits(Integer.valueOf(modelInfo.getRatedVoltage()));
connectorInfo.setVoltageLowerLimits(Integer.valueOf(modelInfo.getRatedVoltage()));
connectorInfo.setCurrent(Integer.valueOf(modelInfo.getRatedCurrent()));
connectorInfo.setNationalStandard(2);
// if (!StringUtils.equals(modelInfo.getConnectorNum(), "1")) {
// // 如果不是单枪,则枪口功率需要除以枪口数量
// String ratedPowerStr = modelInfo.getRatedPower();
// BigDecimal ratedPower = new BigDecimal(ratedPowerStr);
// connectorInfo.setPower(ratedPower.divide(new BigDecimal(modelInfo.getConnectorNum()), 1, BigDecimal.ROUND_HALF_UP));
// }else {
// }
connectorInfo.setPower(new BigDecimal(modelInfo.getRatedPower()).setScale(1, BigDecimal.ROUND_HALF_UP));
resultList.add(connectorInfo);
}
return resultList;
}
}