mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-20 11:05:18 +08:00
update
This commit is contained in:
@@ -938,104 +938,109 @@ public class SiChuanPlatformServiceImpl implements ThirdPartyPlatformService {
|
||||
*/
|
||||
@Override
|
||||
public String notificationPowerInfo(List<String> stationIds) {
|
||||
List<SupStationPowerInfo> supStationPowerInfoList = new ArrayList<>();
|
||||
stationIds.forEach(stationId -> {
|
||||
PileMerchantInfoVO pileMerchantInfoVO = pileMerchantInfoService.queryMerchantInfoByStationId(stationId);
|
||||
String dateTimeNow = DateUtils.getDateTime();
|
||||
List<SupStationPowerInfo> list = new ArrayList<>();
|
||||
String dateTimeNow = DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD_HH_MM_SS);
|
||||
|
||||
for (String stationId : stationIds) {
|
||||
BigDecimal stationPower = BigDecimal.ZERO;
|
||||
SupStationPowerInfo supStationPowerInfo = new SupStationPowerInfo();
|
||||
// 根据站点id查询桩列表
|
||||
List<PileBasicInfo> pileList = pileBasicInfoService.getPileListByStationId(stationId);
|
||||
SupStationPowerInfo.EquipmentPowerInfo equipmentPowerInfo = null;
|
||||
List<SupStationPowerInfo.EquipmentPowerInfo> equipmentPowerInfoList = new ArrayList<>();
|
||||
//充换电站实时功率 初始化,指定精度保留4位小数
|
||||
BigDecimal stationInstantPower = BigDecimal.ZERO.setScale(4, RoundingMode.HALF_UP);
|
||||
|
||||
supStationPowerInfo.setOperatorId(Constants.OPERATORID_JIANG_SU);
|
||||
String equipmentOwnerID = ThirdPartyPlatformUtils.extractEquipmentOwnerID(pileMerchantInfoVO.getOrganizationCode());
|
||||
supStationPowerInfo.setEquipmentOwnerID(equipmentOwnerID);
|
||||
supStationPowerInfo.setStationId(stationId);
|
||||
supStationPowerInfo.setStationClassification(Constants.one); //站点分类
|
||||
supStationPowerInfo.setDataTime(dateTimeNow);
|
||||
|
||||
|
||||
for (PileBasicInfo pileBasicInfo : pileList) {
|
||||
equipmentPowerInfo = new SupStationPowerInfo.EquipmentPowerInfo();
|
||||
equipmentPowerInfo.setEquipmentID(pileBasicInfo.getSn());
|
||||
equipmentPowerInfo.setEquipmentClassification(Constants.one);
|
||||
equipmentPowerInfo.setDataTime(dateTimeNow);
|
||||
|
||||
// 根据桩sn查询枪口列表
|
||||
List<PileConnectorInfo> pileConnectorInfos = pileConnectorInfoService.selectPileConnectorInfoList(pileBasicInfo.getSn());
|
||||
// 如果枪口状态为充电中,则查询枪口功率等信息
|
||||
SupStationPowerInfo.EquipmentPowerInfo.ConnectorPowerInfo connectorPowerInfo = null;
|
||||
List<SupStationPowerInfo.EquipmentPowerInfo.ConnectorPowerInfo> connectorPowerInfoList = new ArrayList<>();
|
||||
// 初始化桩功率
|
||||
BigDecimal pileInstantPower = BigDecimal.ZERO.setScale(4, RoundingMode.HALF_UP);
|
||||
for (PileConnectorInfo pileConnectorInfo : pileConnectorInfos) {
|
||||
if (StringUtils.equals(PileConnectorDataBaseStatusEnum.OCCUPIED_CHARGING.getValue(), pileConnectorInfo.getStatus())) {
|
||||
// 查询充电枪口状态
|
||||
PileConnectorInfoVO connectorInfo = pileConnectorInfoService.getPileConnectorInfoByConnectorCode(pileConnectorInfo.getPileConnectorCode());
|
||||
if (Objects.isNull(connectorInfo)) {
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_CONNECTOR_INFO_NULL_ERROR);
|
||||
}
|
||||
//获取该枪充电中的订单信息
|
||||
OrderBasicInfo orderBasicInfo = orderBasicInfoService.queryChargingByPileConnectorCode(pileConnectorInfo.getPileConnectorCode());
|
||||
if(Objects.isNull(orderBasicInfo)){
|
||||
throw new BusinessException(ReturnCodeEnum.valueOf("枪口订单查询失败"));
|
||||
}
|
||||
//获取到实时数据
|
||||
List<RealTimeMonitorData> chargingRealTimeData = orderBasicInfoService.getChargingRealTimeData(orderBasicInfo.getTransactionCode());
|
||||
if(CollectionUtils.isEmpty(chargingRealTimeData)){
|
||||
throw new BusinessException(ReturnCodeEnum.valueOf("枪口实时数据查询失败"));
|
||||
}
|
||||
RealTimeMonitorData realTimeMonitorData = chargingRealTimeData.get(0);
|
||||
//获取到实时功率
|
||||
BigDecimal instantPower = realTimeMonitorData.getOutputPower() == null ? BigDecimal.ZERO.setScale(4, RoundingMode.HALF_UP) :
|
||||
new BigDecimal(realTimeMonitorData.getOutputPower()).setScale(4, RoundingMode.HALF_UP);
|
||||
|
||||
//计算桩的功率 = 枪的功率之和
|
||||
pileInstantPower = pileInstantPower.add(instantPower);
|
||||
|
||||
connectorPowerInfo = new SupStationPowerInfo.EquipmentPowerInfo.ConnectorPowerInfo();
|
||||
connectorPowerInfo.setConnectorID(connectorInfo.getPileConnectorCode());
|
||||
connectorPowerInfo.setEquipmentClassification(Constants.one);
|
||||
connectorPowerInfo.setDataTime(dateTimeNow);
|
||||
connectorPowerInfo.setConnectorRealTimePower(instantPower);
|
||||
|
||||
connectorPowerInfoList.add(connectorPowerInfo);
|
||||
}
|
||||
// 计算桩的功率(枪口功率之和)
|
||||
equipmentPowerInfo.setEquipRealTimePower(pileInstantPower);
|
||||
// 汇总站点功率
|
||||
stationInstantPower = stationInstantPower.add(pileInstantPower);
|
||||
|
||||
equipmentPowerInfo.setConnectorPowerInfos(connectorPowerInfoList);
|
||||
equipmentPowerInfoList.add(equipmentPowerInfo);
|
||||
}
|
||||
// 查询运营商基本信息
|
||||
PileMerchantInfoVO pileMerchantInfoVO = pileMerchantInfoService.queryMerchantInfoByStationId(stationId);
|
||||
String organizationCode = pileMerchantInfoVO.getOrganizationCode();
|
||||
if (StringUtils.isNotBlank(organizationCode) && organizationCode.length() == 18) {
|
||||
supStationPowerInfo.setEquipmentOwnerID(ThirdPartyPlatformUtils.extractEquipmentOwnerID(organizationCode));
|
||||
}
|
||||
supStationPowerInfo.setStationRealTimePower(stationInstantPower);
|
||||
supStationPowerInfo.setEquipmentPowerInfos(equipmentPowerInfoList);
|
||||
supStationPowerInfoList.add(supStationPowerInfo);
|
||||
});
|
||||
// 发送请求
|
||||
ThirdPartySecretInfoVO zheJiangPlatformSecretInfo = getSiChuanSecretInfo();
|
||||
supStationPowerInfo.setStationId(stationId);
|
||||
supStationPowerInfo.setStationClassification(Constants.one);
|
||||
supStationPowerInfo.setDataTime(dateTimeNow);
|
||||
supStationPowerInfo.setStationRealTimePower(stationPower);
|
||||
|
||||
|
||||
// 根据站点id查询桩信息
|
||||
List<PileBasicInfo> pileList = pileBasicInfoService.getPileListByStationId(stationId);
|
||||
if (CollectionUtils.isEmpty(pileList)) {
|
||||
log.error("推送充换电站实时功率 error, 查询桩列表信息为空");
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_SELECT_INFO_IS_NULL);
|
||||
}
|
||||
|
||||
// 将桩id筛选出来用于批量查询枪口数据
|
||||
List<Long> pileIds = pileList.stream()
|
||||
.map(PileBasicInfo::getId)
|
||||
.collect(Collectors.toList());
|
||||
QueryConnectorListDTO dto = new QueryConnectorListDTO();
|
||||
dto.setPileIds(pileIds);
|
||||
dto.setRequestSource("thirdPartyPlatform");
|
||||
List<PileConnectorInfoVO> connectorList = pileConnectorInfoService.getConnectorInfoListByParams(dto);
|
||||
|
||||
if (CollectionUtils.isEmpty(connectorList)) {
|
||||
log.error("推送充换电站实时功率 error, 查询枪口列表信息为空");
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_SELECT_INFO_IS_NULL);
|
||||
}
|
||||
|
||||
List<SupStationPowerInfo.EquipmentPowerInfo> supPileInfoList = new ArrayList<>();
|
||||
for (PileBasicInfo pileBasicInfo : pileList) {
|
||||
SupStationPowerInfo.EquipmentPowerInfo supPileInfo = new SupStationPowerInfo.EquipmentPowerInfo();
|
||||
supPileInfo.setEquipmentID(pileBasicInfo.getSn());
|
||||
supPileInfo.setEquipmentClassification(Constants.one);
|
||||
supPileInfo.setDataTime(dateTimeNow);
|
||||
supPileInfo.setEquipRealTimePower(BigDecimal.ZERO);
|
||||
BigDecimal pileInstantPower = BigDecimal.ZERO;
|
||||
List<SupStationPowerInfo
|
||||
.EquipmentPowerInfo
|
||||
.ConnectorPowerInfo> connectorPowerInfoList = new ArrayList<>();
|
||||
for (PileConnectorInfoVO pileConnectorInfoVO : connectorList) {
|
||||
if (!StringUtils.equals(pileBasicInfo.getSn(), pileConnectorInfoVO.getPileSn())) {
|
||||
continue;
|
||||
}
|
||||
BigDecimal instantPower = pileConnectorInfoVO.getInstantPower() == null ? BigDecimal.ZERO : pileConnectorInfoVO.getInstantPower();
|
||||
SupStationPowerInfo.
|
||||
EquipmentPowerInfo.
|
||||
ConnectorPowerInfo connectorPowerInfo = new SupStationPowerInfo.EquipmentPowerInfo.ConnectorPowerInfo();
|
||||
connectorPowerInfo.setConnectorID(pileConnectorInfoVO.getPileConnectorCode());
|
||||
connectorPowerInfo.setEquipmentClassification(Constants.one);
|
||||
connectorPowerInfo.setDataTime(dateTimeNow);
|
||||
BigDecimal InstantPower = instantPower.setScale(4, BigDecimal.ROUND_HALF_UP);
|
||||
connectorPowerInfo.setConnectorRealTimePower(InstantPower);
|
||||
// 计算桩此时实时功率
|
||||
pileInstantPower = pileInstantPower.add(InstantPower);
|
||||
|
||||
connectorPowerInfoList.add(connectorPowerInfo);
|
||||
}
|
||||
supPileInfo.setConnectorPowerInfos(connectorPowerInfoList);
|
||||
// 桩实时功率
|
||||
supPileInfo.setEquipRealTimePower(pileInstantPower.setScale(4, RoundingMode.HALF_UP));
|
||||
stationPower = stationPower.add(pileInstantPower);
|
||||
supPileInfoList.add(supPileInfo);
|
||||
}
|
||||
supStationPowerInfo.setEquipmentPowerInfos(supPileInfoList);
|
||||
supStationPowerInfo.setStationRealTimePower(stationPower.setScale(4, RoundingMode.HALF_UP));
|
||||
list.add(supStationPowerInfo);
|
||||
}
|
||||
|
||||
log.info("推送充电站实时功率信息:{}", JSON.toJSONString(list));
|
||||
|
||||
// 获取推送配置密钥信息
|
||||
ThirdPartySecretInfoVO guiZhouPlatformSecretInfo = getSiChuanSecretInfo();
|
||||
|
||||
String operatorId = Constants.OPERATORID_JIANG_SU;
|
||||
String operatorSecret = guiZhouPlatformSecretInfo.getTheirOperatorSecret();
|
||||
String signSecret = guiZhouPlatformSecretInfo.getTheirSigSecret();
|
||||
String dataSecret = guiZhouPlatformSecretInfo.getTheirDataSecret();
|
||||
String dataSecretIv = guiZhouPlatformSecretInfo.getTheirDataSecretIv();
|
||||
String urlAddress = guiZhouPlatformSecretInfo.getTheirUrlPrefix();
|
||||
|
||||
String operatorId = zheJiangPlatformSecretInfo.getOurOperatorId();
|
||||
String operatorSecret = zheJiangPlatformSecretInfo.getTheirOperatorSecret();
|
||||
String signSecret = zheJiangPlatformSecretInfo.getTheirSigSecret();
|
||||
String dataSecret = zheJiangPlatformSecretInfo.getTheirDataSecret();
|
||||
String dataSecretIv = zheJiangPlatformSecretInfo.getTheirDataSecretIv();
|
||||
String urlAddress = zheJiangPlatformSecretInfo.getTheirUrlPrefix();
|
||||
String url = urlAddress + "supervise_notification_realtime_power_info";
|
||||
// 获取令牌
|
||||
String token = getToken(urlAddress, operatorId, operatorSecret, dataSecretIv, signSecret, dataSecret);
|
||||
if (StringUtils.isBlank(token)) {
|
||||
return null;
|
||||
}
|
||||
// 调用平台接口
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("SupStationPowerInfos", supStationPowerInfoList);
|
||||
json.put("SupStationPowerInfos", list);
|
||||
String jsonString = JSON.toJSONString(json);
|
||||
// 发送请求
|
||||
String result = HttpRequestUtil.sendPost(token, jsonString, url, dataSecret, dataSecretIv, operatorId, signSecret);
|
||||
return result;
|
||||
|
||||
@@ -1057,7 +1062,6 @@ public class SiChuanPlatformServiceImpl implements ThirdPartyPlatformService {
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 订单推送数据封装
|
||||
* @param orderBasicInfo
|
||||
@@ -1103,87 +1107,6 @@ public class SiChuanPlatformServiceImpl implements ThirdPartyPlatformService {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 转换时段充电明细
|
||||
*
|
||||
* @param orderDetail
|
||||
* @param billingList
|
||||
* @return
|
||||
*/
|
||||
private List<SupChargeDetails> transformSupChargeDetails(OrderDetail orderDetail, List<BillingPriceVO> billingList) {
|
||||
List<SupChargeDetails> resultList = Lists.newArrayList();
|
||||
SupChargeDetails detail;
|
||||
for (BillingPriceVO billingPriceVO : billingList) {
|
||||
detail = new SupChargeDetails();
|
||||
|
||||
String startTime = convertTime(billingPriceVO.getStartTime());
|
||||
String endTime = convertTime(billingPriceVO.getEndTime());
|
||||
|
||||
if (StringUtils.equals(billingPriceVO.getTimeType(), BillingTimeTypeEnum.SHARP.getValue())) {
|
||||
// 尖时段
|
||||
detail.setDetailStartTime(startTime);
|
||||
detail.setDetailEndTime(endTime);
|
||||
detail.setElecPrice(new BigDecimal(billingPriceVO.getElectricityPrice()).setScale(4, BigDecimal.ROUND_HALF_UP));
|
||||
detail.setSevicePrice(new BigDecimal(billingPriceVO.getServicePrice()).setScale(4, BigDecimal.ROUND_HALF_UP));
|
||||
detail.setDetailPower(orderDetail.getSharpUsedElectricity());
|
||||
detail.setDetailElecMoney(orderDetail.getSharpElectricityPrice());
|
||||
detail.setDetailSeviceMoney(orderDetail.getSharpServicePrice());
|
||||
} else if (StringUtils.equals(billingPriceVO.getTimeType(), BillingTimeTypeEnum.PEAK.getValue())) {
|
||||
// 峰时段
|
||||
detail.setDetailStartTime(startTime);
|
||||
detail.setDetailEndTime(endTime);
|
||||
detail.setElecPrice(new BigDecimal(billingPriceVO.getElectricityPrice()).setScale(4, BigDecimal.ROUND_HALF_UP));
|
||||
detail.setSevicePrice(new BigDecimal(billingPriceVO.getServicePrice()).setScale(4, BigDecimal.ROUND_HALF_UP));
|
||||
detail.setDetailPower(orderDetail.getPeakUsedElectricity());
|
||||
detail.setDetailElecMoney(orderDetail.getPeakElectricityPrice());
|
||||
detail.setDetailSeviceMoney(orderDetail.getPeakServicePrice());
|
||||
} else if (StringUtils.equals(billingPriceVO.getTimeType(), BillingTimeTypeEnum.FLAT.getValue())) {
|
||||
// 平时段
|
||||
detail.setDetailStartTime(startTime);
|
||||
detail.setDetailEndTime(endTime);
|
||||
detail.setElecPrice(new BigDecimal(billingPriceVO.getElectricityPrice()).setScale(4, BigDecimal.ROUND_HALF_UP));
|
||||
detail.setSevicePrice(new BigDecimal(billingPriceVO.getServicePrice()).setScale(4, BigDecimal.ROUND_HALF_UP));
|
||||
detail.setDetailPower(orderDetail.getFlatUsedElectricity());
|
||||
detail.setDetailElecMoney(orderDetail.getFlatElectricityPrice());
|
||||
detail.setDetailSeviceMoney(orderDetail.getFlatServicePrice());
|
||||
} else if (StringUtils.equals(billingPriceVO.getTimeType(), BillingTimeTypeEnum.VALLEY.getValue())) {
|
||||
// 谷时段
|
||||
detail.setDetailStartTime(startTime);
|
||||
detail.setDetailEndTime(endTime);
|
||||
detail.setElecPrice(new BigDecimal(billingPriceVO.getElectricityPrice()).setScale(4, BigDecimal.ROUND_HALF_UP));
|
||||
detail.setSevicePrice(new BigDecimal(billingPriceVO.getServicePrice()).setScale(4, BigDecimal.ROUND_HALF_UP));
|
||||
detail.setDetailPower(orderDetail.getValleyUsedElectricity());
|
||||
detail.setDetailElecMoney(orderDetail.getValleyElectricityPrice());
|
||||
detail.setDetailSeviceMoney(orderDetail.getValleyServicePrice());
|
||||
}
|
||||
resultList.add(detail);
|
||||
}
|
||||
return resultList;
|
||||
}
|
||||
|
||||
|
||||
public static String convertTime(String timeStr) {
|
||||
try {
|
||||
// 1. 解析输入的 HH:mm 为 LocalTime
|
||||
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm");
|
||||
LocalTime localTime = LocalTime.parse(timeStr, timeFormatter);
|
||||
|
||||
// 2. 获取当前日期(年、月、日)
|
||||
LocalDate currentDate = LocalDate.now();
|
||||
|
||||
// 3. 合并日期和时间为 LocalDateTime
|
||||
LocalDateTime dateTime = LocalDateTime.of(currentDate, localTime);
|
||||
|
||||
// 4. 格式化为目标格式 yyyy-MM-dd HH:mm:ss
|
||||
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
return dateTime.format(outputFormatter);
|
||||
|
||||
} catch (Exception e) {
|
||||
throw new IllegalArgumentException("时间格式错误,应为 HH:mm", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 获取配置密钥信息
|
||||
|
||||
Reference in New Issue
Block a user