mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-21 03:25:12 +08:00
新增 华为 平台设备编码同步接口
This commit is contained in:
@@ -8,21 +8,31 @@ import com.jsowell.common.core.redis.RedisCache;
|
||||
import com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum;
|
||||
import com.jsowell.common.util.DateUtils;
|
||||
import com.jsowell.common.util.StringUtils;
|
||||
import com.jsowell.pile.domain.PileBasicInfo;
|
||||
import com.jsowell.pile.domain.PileConnectorInfo;
|
||||
import com.jsowell.pile.domain.ThirdPartySettingInfo;
|
||||
import com.jsowell.pile.domain.huawei.HWStationInfo;
|
||||
import com.jsowell.pile.dto.PushStationInfoDTO;
|
||||
import com.jsowell.pile.service.PileBasicInfoService;
|
||||
import com.jsowell.pile.service.PileConnectorInfoService;
|
||||
import com.jsowell.pile.service.PileStationInfoService;
|
||||
import com.jsowell.pile.service.ThirdPartySettingInfoService;
|
||||
import com.jsowell.pile.vo.web.PileStationVO;
|
||||
import com.jsowell.thirdparty.lianlian.common.CommonResult;
|
||||
import com.jsowell.thirdparty.lianlian.domain.ConnectorStatusInfo;
|
||||
import com.jsowell.thirdparty.lianlian.domain.StationStatusInfo;
|
||||
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.zhongdianlian.dto.ZDLGetTokenDTO;
|
||||
import com.jsowell.thirdparty.lianlian.util.HttpRequestUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Date;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
@@ -32,8 +42,18 @@ import java.util.concurrent.TimeUnit;
|
||||
* @Date 2024/1/19 14:10:02
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class HuaweiServiceV2 {
|
||||
|
||||
@Autowired
|
||||
private PileStationInfoService pileStationInfoService;
|
||||
|
||||
@Autowired
|
||||
private PileConnectorInfoService pileConnectorInfoService;
|
||||
|
||||
@Autowired
|
||||
private PileBasicInfoService pileBasicInfoService;
|
||||
|
||||
@Autowired
|
||||
private ThirdPartySettingInfoService thirdPartySettingInfoService;
|
||||
|
||||
@@ -75,18 +95,8 @@ public class HuaweiServiceV2 {
|
||||
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 = JSONObject.toJSONString(request);
|
||||
String response = HttpUtil.post(requestUrl, tokenRequest);
|
||||
// 向华为发送请求
|
||||
String response = sendRequest2HuaWei(strData, signSecret, requestUrl);
|
||||
|
||||
CommonResult<?> commonResult = JSONObject.parseObject(response, CommonResult.class);
|
||||
if (commonResult.getRet() != 0) {
|
||||
@@ -108,9 +118,191 @@ public class HuaweiServiceV2 {
|
||||
return token;
|
||||
}
|
||||
|
||||
/**
|
||||
* 平台充电设备编码同步
|
||||
*
|
||||
* notification_operation_system_info
|
||||
*
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
public String notificationOperationSystemInfo(PushStationInfoDTO dto) {
|
||||
Long stationId = dto.getStationId();
|
||||
String type = dto.getThirdPartyType();
|
||||
|
||||
// 通过第三方配置类型查询相关配置信息
|
||||
ThirdPartySettingInfo settingInfo = new ThirdPartySettingInfo();
|
||||
settingInfo.setType(type);
|
||||
ThirdPartySettingInfo thirdPartySettingInfo = thirdPartySettingInfoService.selectSettingInfo(settingInfo);
|
||||
String operatorId = thirdPartySettingInfo.getOperatorId();
|
||||
String operatorSecret = thirdPartySettingInfo.getOperatorSecret();
|
||||
String signSecret = thirdPartySettingInfo.getSignSecret();
|
||||
String dataSecret = thirdPartySettingInfo.getDataSecret();
|
||||
String dataSecretIv = thirdPartySettingInfo.getDataSecretIv();
|
||||
String urlAddress = thirdPartySettingInfo.getUrlAddress();
|
||||
|
||||
List<HWStationInfo
|
||||
.EquipmentLogicInfo> equipmentLogicInfos = new ArrayList<>();
|
||||
|
||||
// 通过站点id查询站点信息
|
||||
PileStationVO stationInfo = pileStationInfoService.getStationInfo(String.valueOf(stationId));
|
||||
if (stationInfo == null) {
|
||||
return null;
|
||||
}
|
||||
HWStationInfo hwStationInfo = HWStationInfo.builder()
|
||||
.stationId(stationInfo.getId())
|
||||
.stationName(stationInfo.getStationName())
|
||||
|
||||
.build();
|
||||
// 查询桩列表
|
||||
equipmentLogicInfos = getPileList(String.valueOf(stationId));
|
||||
|
||||
hwStationInfo.setEquipmentInfoNum(equipmentLogicInfos.size());
|
||||
hwStationInfo.setEquipmentLogicInfos(equipmentLogicInfos);
|
||||
|
||||
String jsonString = JSONObject.toJSONString(hwStationInfo);
|
||||
|
||||
String url = urlAddress + "notification_operation_system_info";
|
||||
// 获取令牌
|
||||
String token = getHuaWeiToken();
|
||||
// 发送请求
|
||||
String result = HttpRequestUtil.sendPost(token, jsonString, url, dataSecret, dataSecretIv, operatorId, signSecret);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设备接口状态查询
|
||||
*
|
||||
* query_station_status
|
||||
*
|
||||
* @param stationIds
|
||||
* @return
|
||||
*/
|
||||
public List<StationStatusInfo> queryStationStatus(List<String> stationIds) {
|
||||
// 通过华为的type查询出密钥配置
|
||||
ThirdPartySettingInfo info = new ThirdPartySettingInfo();
|
||||
info.setType(ThirdPlatformTypeEnum.HUA_WEI.getCode());
|
||||
ThirdPartySettingInfo settingInfo = thirdPartySettingInfoService.selectSettingInfo(info);
|
||||
|
||||
String operatorSecret = settingInfo.getOperatorSecret();
|
||||
String dataSecret = settingInfo.getDataSecret();
|
||||
String dataSecretIv = settingInfo.getDataSecretIv();
|
||||
String signSecret = settingInfo.getSignSecret();
|
||||
String urlAddress = settingInfo.getUrlAddress();
|
||||
|
||||
String requestUrl = urlAddress + "query_station_status";
|
||||
|
||||
// 拼装参数
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("StationIDs", stationIds);
|
||||
|
||||
// 加密
|
||||
byte[] encryptText = Cryptos.aesEncrypt(jsonObject.toJSONString().getBytes(StandardCharsets.UTF_8),
|
||||
dataSecret.getBytes(), dataSecretIv.getBytes());
|
||||
String strData = Encodes.encodeBase64(encryptText);
|
||||
|
||||
// 向华为发送请求
|
||||
String response = sendRequest2HuaWei(strData, signSecret, requestUrl);
|
||||
|
||||
CommonResult<?> commonResult = JSONObject.parseObject(response, CommonResult.class);
|
||||
if (commonResult.getRet() != 0) {
|
||||
log.error("查询华为设备接口状态 error:{}, ", commonResult.getMsg());
|
||||
return new ArrayList<>();
|
||||
}
|
||||
// 解密data
|
||||
byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64((String) commonResult.getData()),
|
||||
dataSecret.getBytes(), dataSecretIv.getBytes());
|
||||
String dataStr = new String(plainText, StandardCharsets.UTF_8);
|
||||
|
||||
// 转换成 StationStatus 对象
|
||||
List<StationStatusInfo> list = JSON.parseArray(dataStr, StationStatusInfo.class);
|
||||
return list;
|
||||
|
||||
}
|
||||
|
||||
|
||||
public Map<String, String> receiveNotificationStationStatus(ConnectorStatusInfo connectorStatusInfo) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 向华为发送请求
|
||||
* @param strData 加密后的Data
|
||||
* @param signSecret 签名密钥
|
||||
* @param requestUrl 请求url
|
||||
* @return 请求结果
|
||||
*/
|
||||
private String sendRequest2HuaWei(String strData, String signSecret, String requestUrl) {
|
||||
Map<String, String> request = new LinkedHashMap<>();
|
||||
request.put("OperatorID", Constants.OPERATORID_JIANG_SU);
|
||||
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 = JSONObject.toJSONString(request);
|
||||
String response = HttpUtil.post(requestUrl, tokenRequest);
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private List<HWStationInfo.EquipmentLogicInfo> getPileList(String stationId) {
|
||||
List<HWStationInfo
|
||||
.EquipmentLogicInfo> equipmentLogicInfos = new ArrayList<>();
|
||||
HWStationInfo
|
||||
.EquipmentLogicInfo equipmentLogicInfo = null;
|
||||
|
||||
List<PileBasicInfo> pileBasicInfos = pileBasicInfoService.getPileListByStationId(stationId);
|
||||
if (CollectionUtils.isEmpty(pileBasicInfos)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
for (PileBasicInfo pileBasicInfo : pileBasicInfos) {
|
||||
String pileSn = pileBasicInfo.getSn();
|
||||
equipmentLogicInfo = HWStationInfo.EquipmentLogicInfo.builder()
|
||||
.equipmentId(pileSn)
|
||||
// .equipmentType()
|
||||
.chargeHostESN(pileSn)
|
||||
.build();
|
||||
// 获取枪口信息
|
||||
List<HWStationInfo.EquipmentLogicInfo
|
||||
.ConnectorInfo> connectorInfoList = getConnectorInfoList(pileSn);
|
||||
if (CollectionUtils.isEmpty(connectorInfoList)) {
|
||||
continue;
|
||||
}
|
||||
equipmentLogicInfo.setConnectorInfoNum(connectorInfoList.size());
|
||||
equipmentLogicInfo.setConnectorInfos(connectorInfoList);
|
||||
|
||||
equipmentLogicInfos.add(equipmentLogicInfo);
|
||||
}
|
||||
return equipmentLogicInfos;
|
||||
}
|
||||
|
||||
private List<HWStationInfo.EquipmentLogicInfo.ConnectorInfo> getConnectorInfoList(String pileSn) {
|
||||
List<HWStationInfo.EquipmentLogicInfo
|
||||
.ConnectorInfo> connectorInfoList = new ArrayList<>();
|
||||
HWStationInfo.EquipmentLogicInfo
|
||||
.ConnectorInfo connectorInfo = null;
|
||||
|
||||
List<PileConnectorInfo> pileConnectorInfos = pileConnectorInfoService.selectPileConnectorInfoList(pileSn);
|
||||
if (CollectionUtils.isEmpty(pileConnectorInfos)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
for (PileConnectorInfo pileConnectorInfo : pileConnectorInfos) {
|
||||
connectorInfo = HWStationInfo.EquipmentLogicInfo.ConnectorInfo.builder()
|
||||
.connectorID(pileConnectorInfo.getPileConnectorCode())
|
||||
.connectorNumber(pileConnectorInfo.getId())
|
||||
|
||||
.build();
|
||||
connectorInfoList.add(connectorInfo);
|
||||
}
|
||||
return connectorInfoList;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -67,6 +67,9 @@ public class HuaWeiServiceImpl implements HuaWeiService {
|
||||
@Autowired
|
||||
private ThirdPartyStationRelationService thirdPartyStationRelationService;
|
||||
|
||||
@Autowired
|
||||
private ThirdPartySettingInfoService thirdPartySettingInfoService;
|
||||
|
||||
@Autowired
|
||||
private PileMerchantInfoService pileMerchantInfoService;
|
||||
|
||||
@@ -545,24 +548,16 @@ public class HuaWeiServiceImpl implements HuaWeiService {
|
||||
*/
|
||||
@Override
|
||||
public String notificationOperationSystemInfo(PushStationInfoDTO dto) {
|
||||
// 通过站点id查询配置密钥等
|
||||
ThirdPartyStationRelation relation = new ThirdPartyStationRelation();
|
||||
relation.setStationId(dto.getStationId());
|
||||
ThirdPartyStationRelationVO relationInfo = thirdPartyStationRelationService.selectRelationInfo(relation);
|
||||
if (relationInfo == null) {
|
||||
// 新增
|
||||
relation.setThirdPartyType(dto.getThirdPartyType());
|
||||
thirdPartyStationRelationService.insertThirdPartyStationRelation(relation);
|
||||
|
||||
relationInfo = thirdPartyStationRelationService.selectRelationInfo(relation);
|
||||
}
|
||||
String operatorId = relationInfo.getOperatorId();
|
||||
String operatorSecret = relationInfo.getOperatorSecret();
|
||||
String signSecret = relationInfo.getSignSecret();
|
||||
String dataSecret = relationInfo.getDataSecret();
|
||||
String dataSecretIv = relationInfo.getDataSecretIv();
|
||||
String urlAddress = relationInfo.getUrlAddress();
|
||||
String thirdPartyType = relation.getThirdPartyType();
|
||||
// 通过第三方配置类型查询相关配置信息
|
||||
ThirdPartySettingInfo settingInfo = new ThirdPartySettingInfo();
|
||||
settingInfo.setType(dto.getThirdPartyType());
|
||||
ThirdPartySettingInfo thirdPartySettingInfo = thirdPartySettingInfoService.selectSettingInfo(settingInfo);
|
||||
String operatorId = thirdPartySettingInfo.getOperatorId();
|
||||
String operatorSecret = thirdPartySettingInfo.getOperatorSecret();
|
||||
String signSecret = thirdPartySettingInfo.getSignSecret();
|
||||
String dataSecret = thirdPartySettingInfo.getDataSecret();
|
||||
String dataSecretIv = thirdPartySettingInfo.getDataSecretIv();
|
||||
String urlAddress = thirdPartySettingInfo.getUrlAddress();
|
||||
|
||||
List<HWStationInfo
|
||||
.EquipmentLogicInfo> equipmentLogicInfos = new ArrayList<>();
|
||||
|
||||
Reference in New Issue
Block a user