mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-20 11:05:18 +08:00
Merge branch 'dev' of http://192.168.2.2:8099/jsowell/jsowell-charger-web into dev
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
package com.jsowell.thirdparty.platform.domain;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 充电站充电统计信息
|
||||
*
|
||||
* @author Lemon
|
||||
* @Date 2024/5/18 14:36:30
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public class StationChargeStatsInfo {
|
||||
/**
|
||||
* 充电站id
|
||||
*/
|
||||
@JSONField(name = "StationID")
|
||||
private String stationId;
|
||||
|
||||
/**
|
||||
* 统计的开始时间
|
||||
*/
|
||||
@JSONField(name = "StartTime")
|
||||
private String startTime;
|
||||
|
||||
/**
|
||||
* 统计结束时间
|
||||
*/
|
||||
@JSONField(name = "EndTime")
|
||||
private String endTime;
|
||||
|
||||
/**
|
||||
* 充电站累计充电量
|
||||
*/
|
||||
@JSONField(name = "StationChargeElectricity")
|
||||
private BigDecimal stationChargeElectricity;
|
||||
|
||||
/**
|
||||
* 充电设备统计信息列表
|
||||
*/
|
||||
@JSONField(name = "EquipmentChargeStatsInfos")
|
||||
private List<EquipmentChargeStatsInfo> equipmentChargeStatsInfos;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
public static class EquipmentChargeStatsInfo{
|
||||
|
||||
/**
|
||||
* 设备编码
|
||||
*/
|
||||
@JSONField(name = "EquipmentID")
|
||||
private String equipmentId;
|
||||
|
||||
/**
|
||||
* 充电设备累计充电量
|
||||
*/
|
||||
@JSONField(name = "EquipmentChargeElectricity")
|
||||
private BigDecimal equipmentChargeElectricity;
|
||||
|
||||
/**
|
||||
* 充电设备接口统计信息列表
|
||||
*/
|
||||
@JSONField(name = "ConnectorChargeStatsInfos")
|
||||
private List<ConnectorChargeStatsInfo> connectorChargeStatsInfos;
|
||||
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
public static class ConnectorChargeStatsInfo{
|
||||
|
||||
/**
|
||||
* 充电设备接口编码
|
||||
*/
|
||||
@JSONField(name = "ConnectorID")
|
||||
private String connectorId;
|
||||
|
||||
/**
|
||||
* 充电设备接口累计充电量
|
||||
*/
|
||||
@JSONField(name = "ConnectorChargeElectricity")
|
||||
private BigDecimal connectorChargeElectricity;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,35 +1,41 @@
|
||||
package com.jsowell.thirdparty.platform.service.impl;
|
||||
|
||||
import cn.hutool.core.util.PageUtil;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.jsowell.common.constant.Constants;
|
||||
import com.jsowell.common.core.domain.ykc.RealTimeMonitorData;
|
||||
import com.jsowell.common.enums.thirdparty.BusinessInformationExchangeEnum;
|
||||
import com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum;
|
||||
import com.jsowell.common.enums.ykc.PileConnectorDataBaseStatusEnum;
|
||||
import com.jsowell.common.enums.ykc.ReturnCodeEnum;
|
||||
import com.jsowell.common.exception.BusinessException;
|
||||
import com.jsowell.common.util.DateUtils;
|
||||
import com.jsowell.common.util.JWTUtils;
|
||||
import com.jsowell.common.util.PageUtils;
|
||||
import com.jsowell.common.util.StringUtils;
|
||||
import com.jsowell.pile.domain.OrderBasicInfo;
|
||||
import com.jsowell.pile.domain.ThirdPartyPlatformConfig;
|
||||
import com.jsowell.pile.domain.ThirdPartyStationRelation;
|
||||
import com.jsowell.pile.dto.PushRealTimeInfoDTO;
|
||||
import com.jsowell.pile.dto.QueryStationInfoDTO;
|
||||
import com.jsowell.pile.service.PileBasicInfoService;
|
||||
import com.jsowell.pile.service.PileStationInfoService;
|
||||
import com.jsowell.pile.service.ThirdPartyStationRelationService;
|
||||
import com.jsowell.pile.service.*;
|
||||
import com.jsowell.pile.thirdparty.CommonParamsDTO;
|
||||
import com.jsowell.pile.thirdparty.EquipmentInfo;
|
||||
import com.jsowell.pile.thirdparty.ZDLStationInfo;
|
||||
import com.jsowell.pile.vo.ThirdPartySecretInfoVO;
|
||||
import com.jsowell.pile.vo.base.ConnectorInfoVO;
|
||||
import com.jsowell.pile.vo.base.ThirdPartyStationInfoVO;
|
||||
import com.jsowell.pile.vo.base.ThirdPartyStationRelationVO;
|
||||
import com.jsowell.pile.vo.lianlian.AccumulativeInfoVO;
|
||||
import com.jsowell.pile.vo.web.PileStationVO;
|
||||
import com.jsowell.thirdparty.lianlian.domain.ConnectorStatusInfo;
|
||||
import com.jsowell.thirdparty.lianlian.domain.*;
|
||||
import com.jsowell.thirdparty.lianlian.vo.AccessTokenVO;
|
||||
import com.jsowell.thirdparty.platform.common.StationInfo;
|
||||
import com.jsowell.thirdparty.platform.domain.StationChargeStatsInfo;
|
||||
import com.jsowell.thirdparty.platform.factory.ThirdPartyPlatformFactory;
|
||||
import com.jsowell.thirdparty.platform.service.ThirdPartyPlatformService;
|
||||
import com.jsowell.thirdparty.platform.util.*;
|
||||
@@ -42,6 +48,7 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
@@ -61,6 +68,12 @@ public class ShenZhenPlatformServiceImpl implements ThirdPartyPlatformService {
|
||||
@Autowired
|
||||
private ThirdpartySecretInfoService thirdpartySecretInfoService;
|
||||
|
||||
@Autowired
|
||||
private PileConnectorInfoService pileConnectorInfoService;
|
||||
|
||||
@Autowired
|
||||
private OrderBasicInfoService orderBasicInfoService;
|
||||
|
||||
@Autowired
|
||||
private ThirdPartyStationRelationService thirdPartyStationRelationService;
|
||||
|
||||
@@ -290,7 +303,179 @@ public class ShenZhenPlatformServiceImpl implements ThirdPartyPlatformService {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 设备接口状态查询 query_stations_status
|
||||
* @param dto 查询站点信息dto
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Map<String, String> queryStationStatus(QueryStationInfoDTO dto) {
|
||||
List<String> stationIds = dto.getStationIds();
|
||||
List<StationStatusInfo> StationStatusInfos = new ArrayList<>();
|
||||
List<Object> ConnectorStatusInfos = new ArrayList<>();
|
||||
ThirdPartySecretInfoVO shenZhenSecretInfo = getShenZhenSecretInfo();
|
||||
|
||||
ConnectorStatusInfo connectorStatusInfo;
|
||||
for (String stationId : stationIds) {
|
||||
StationStatusInfo stationStatusInfo = new StationStatusInfo();
|
||||
stationStatusInfo.setStationId(stationId);
|
||||
// 根据站点id查询
|
||||
List<ConnectorInfoVO> list = pileConnectorInfoService.getConnectorListForLianLian(Long.parseLong(stationId));
|
||||
for (ConnectorInfoVO connectorInfoVO : list) {
|
||||
|
||||
String connectorStatus = connectorInfoVO.getConnectorStatus();
|
||||
if (StringUtils.equals(connectorStatus, PileConnectorDataBaseStatusEnum.OCCUPIED_CHARGING.getValue())) {
|
||||
// 充电中
|
||||
ConnectorChargeStatusInfo info = new ConnectorChargeStatusInfo();
|
||||
OrderBasicInfo orderBasicInfo = orderBasicInfoService.queryChargingByPileConnectorCode(connectorInfoVO.getPileConnectorCode());
|
||||
if (orderBasicInfo == null) {
|
||||
continue;
|
||||
}
|
||||
List<RealTimeMonitorData> chargingRealTimeData = orderBasicInfoService.getChargingRealTimeData(orderBasicInfo.getTransactionCode());
|
||||
if (CollectionUtils.isNotEmpty(chargingRealTimeData)) {
|
||||
RealTimeMonitorData realTimeMonitorData = chargingRealTimeData.get(0);
|
||||
|
||||
info.setStartChargeSeq(orderBasicInfo.getOrderCode());
|
||||
info.setConnectorID(orderBasicInfo.getPileConnectorCode());
|
||||
info.setConnectorStatus(Integer.valueOf(connectorInfoVO.getConnectorStatus()));
|
||||
info.setCurrentA(new BigDecimal(realTimeMonitorData.getOutputCurrent()));
|
||||
info.setVoltageA(new BigDecimal(realTimeMonitorData.getOutputVoltage()));
|
||||
info.setSoc(new BigDecimal(realTimeMonitorData.getSOC()));
|
||||
info.setStartTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, orderBasicInfo.getChargeStartTime()));
|
||||
info.setEndTime(DateUtils.getDateTime()); // 本次采样时间
|
||||
info.setTotalPower(new BigDecimal(realTimeMonitorData.getChargingDegree())); // 累计充电量
|
||||
// info.setElecMoney(); // 累计电费
|
||||
// info.setSeviceMoney(); // 累计服务费
|
||||
info.setTotalMoney(new BigDecimal(realTimeMonitorData.getChargingAmount()));
|
||||
|
||||
ConnectorStatusInfos.add(info);
|
||||
}
|
||||
} else {
|
||||
// 其他
|
||||
connectorStatusInfo = new ConnectorStatusInfo();
|
||||
connectorStatusInfo.setConnectorID(connectorInfoVO.getPileConnectorCode());
|
||||
connectorStatusInfo.setStatus(Integer.parseInt(connectorInfoVO.getConnectorStatus()));
|
||||
|
||||
ConnectorStatusInfos.add(connectorStatusInfo);
|
||||
}
|
||||
}
|
||||
stationStatusInfo.setConnectorStatusInfos(ConnectorStatusInfos);
|
||||
StationStatusInfos.add(stationStatusInfo);
|
||||
}
|
||||
// 将 StationStatusInfos 分页
|
||||
int pageNum = 1;
|
||||
int pageSize = 10;
|
||||
List<StationStatusInfo> collect = StationStatusInfos.stream()
|
||||
.skip((pageNum - 1) * pageSize)
|
||||
.limit(pageSize)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
int total = StationStatusInfos.size();
|
||||
int pages = PageUtil.totalPage(total, pageSize);
|
||||
|
||||
Map<String, Object> map = new LinkedHashMap<>();
|
||||
map.put("Total", total);
|
||||
map.put("StationStatusInfos", collect);
|
||||
|
||||
Map<String, String> resultMap = ThirdPartyPlatformUtils.generateResultMap(map, shenZhenSecretInfo);
|
||||
return resultMap;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询充电统计信息 query_station_charge_stats
|
||||
* @param dto 查询站点信息dto
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Map<String, String> queryStationStats(QueryStationInfoDTO dto) {
|
||||
// 根据 operatorId 查出配置密钥信息
|
||||
ThirdPartySecretInfoVO secretInfoVO = thirdpartySecretInfoService.queryByOperatorId(dto.getOperatorId());
|
||||
if (secretInfoVO == null) {
|
||||
return null;
|
||||
}
|
||||
// 根据站点id 查出这段时间的充电量
|
||||
List<AccumulativeInfoVO> list = orderBasicInfoService.getAccumulativeInfoForLianLian(dto);
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// 根据充电桩编号分组 key=充电桩编号
|
||||
Map<String, List<AccumulativeInfoVO>> pileMap = list.stream()
|
||||
.collect(Collectors.groupingBy(AccumulativeInfoVO::getPileSn));
|
||||
|
||||
// 存放所有充电桩设备
|
||||
List<StationChargeStatsInfo
|
||||
.EquipmentChargeStatsInfo> equipmentStatsInfoList = Lists.newArrayList();
|
||||
// 站点用电量
|
||||
BigDecimal stationElectricity = BigDecimal.ZERO;
|
||||
// 用于记录枪口用电量 在循环每个枪口的时候初始化
|
||||
BigDecimal pileElec;
|
||||
for (String pileSn : pileMap.keySet()) {
|
||||
// 该充电桩下 所有枪口的用电数据
|
||||
List<AccumulativeInfoVO> accumulativeInfoVOS = pileMap.get(pileSn);
|
||||
if (CollectionUtils.isEmpty(accumulativeInfoVOS)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 存放充电桩用电量
|
||||
pileElec = BigDecimal.ZERO;
|
||||
|
||||
// key=枪口编号 value 该枪口的用电数据
|
||||
Map<String, List<AccumulativeInfoVO>> collect = accumulativeInfoVOS.stream()
|
||||
.collect(Collectors.groupingBy(AccumulativeInfoVO::getPileConnectorCode));
|
||||
|
||||
List<StationChargeStatsInfo
|
||||
.EquipmentChargeStatsInfo
|
||||
.ConnectorChargeStatsInfo> connectorStatsInfos = Lists.newArrayList();
|
||||
for (Map.Entry<String, List<AccumulativeInfoVO>> entry : collect.entrySet()) {
|
||||
String pileConnectorCode = entry.getKey();
|
||||
List<AccumulativeInfoVO> value = entry.getValue();
|
||||
// 枪口用电量求和
|
||||
BigDecimal connectorElec = value.stream()
|
||||
.map(AccumulativeInfoVO::getConnectorElectricity)
|
||||
.map(BigDecimal::new)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
|
||||
connectorStatsInfos.add(
|
||||
StationChargeStatsInfo
|
||||
.EquipmentChargeStatsInfo
|
||||
.ConnectorChargeStatsInfo.builder()
|
||||
.connectorId(pileConnectorCode)
|
||||
.connectorChargeElectricity(connectorElec)
|
||||
.build()
|
||||
);
|
||||
// 充电桩电量为枪口用电量累计
|
||||
pileElec = pileElec.add(connectorElec);
|
||||
}
|
||||
|
||||
StationChargeStatsInfo
|
||||
.EquipmentChargeStatsInfo build = StationChargeStatsInfo.EquipmentChargeStatsInfo.builder()
|
||||
.equipmentId(pileSn)
|
||||
.equipmentChargeElectricity(pileElec)
|
||||
.connectorChargeStatsInfos(connectorStatsInfos)
|
||||
.build();
|
||||
equipmentStatsInfoList.add(build);
|
||||
|
||||
// 所有充电桩用电量之和
|
||||
stationElectricity = stationElectricity.add(pileElec);
|
||||
}
|
||||
|
||||
StationChargeStatsInfo stationChargeStatsInfo = StationChargeStatsInfo.builder()
|
||||
.stationId(dto.getStationID())
|
||||
.startTime(dto.getStartTime())
|
||||
.endTime(dto.getEndTime())
|
||||
.stationChargeElectricity(stationElectricity)
|
||||
.equipmentChargeStatsInfos(equipmentStatsInfoList) // 设备列表
|
||||
.build();
|
||||
|
||||
Map<String, Object> map = new LinkedHashMap<>();
|
||||
map.put("StationStats", stationChargeStatsInfo);
|
||||
|
||||
Map<String, String> resultMap = ThirdPartyPlatformUtils.generateResultMap(map, secretInfoVO);
|
||||
return resultMap;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取深圳平台相关密钥信息
|
||||
|
||||
Reference in New Issue
Block a user