diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/huawei/HuaweiServiceV2.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/huawei/HuaweiServiceV2.java index da8a68a18..e289693f6 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/huawei/HuaweiServiceV2.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/huawei/HuaweiServiceV2.java @@ -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 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 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 queryStationStatus(List 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 list = JSON.parseArray(dataStr, StationStatusInfo.class); + return list; + + } + + + public Map receiveNotificationStationStatus(ConnectorStatusInfo connectorStatusInfo) { + return null; + } + /** + * 向华为发送请求 + * @param strData 加密后的Data + * @param signSecret 签名密钥 + * @param requestUrl 请求url + * @return 请求结果 + */ + private String sendRequest2HuaWei(String strData, String signSecret, String requestUrl) { + Map 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 getPileList(String stationId) { + List equipmentLogicInfos = new ArrayList<>(); + HWStationInfo + .EquipmentLogicInfo equipmentLogicInfo = null; + + List 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 connectorInfoList = getConnectorInfoList(pileSn); + if (CollectionUtils.isEmpty(connectorInfoList)) { + continue; + } + equipmentLogicInfo.setConnectorInfoNum(connectorInfoList.size()); + equipmentLogicInfo.setConnectorInfos(connectorInfoList); + + equipmentLogicInfos.add(equipmentLogicInfo); + } + return equipmentLogicInfos; + } + + private List getConnectorInfoList(String pileSn) { + List connectorInfoList = new ArrayList<>(); + HWStationInfo.EquipmentLogicInfo + .ConnectorInfo connectorInfo = null; + + List 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; + } } diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/huawei/impl/HuaWeiServiceImpl.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/huawei/impl/HuaWeiServiceImpl.java index d9b28e024..71ec9c52d 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/huawei/impl/HuaWeiServiceImpl.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/huawei/impl/HuaWeiServiceImpl.java @@ -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 equipmentLogicInfos = new ArrayList<>();