package com.ruoyi.integration.drainage.util;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.ruoyi.chargingPile.api.feignClient.*;
|
import com.ruoyi.chargingPile.api.model.Site;
|
import com.ruoyi.chargingPile.api.model.TChargingGun;
|
import com.ruoyi.chargingPile.api.model.TChargingPile;
|
import com.ruoyi.common.core.utils.DateUtils;
|
import com.ruoyi.integration.drainage.TCECSuperviseUtil;
|
import com.ruoyi.integration.drainage.TokenUtil;
|
import com.ruoyi.integration.drainage.model.*;
|
import com.ruoyi.integration.drainage.model.enu.ConnectorTypeEnum;
|
import com.ruoyi.integration.drainage.model.enu.EquipmentTypeEnum;
|
import com.ruoyi.integration.mongodb.service.UploadRealTimeMonitoringDataService;
|
import com.ruoyi.order.api.dto.ChargingStatisticeDTO;
|
import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient;
|
import com.ruoyi.order.api.feignClient.ChargingOrderClient;
|
import com.ruoyi.order.api.model.TChargingBill;
|
import com.ruoyi.order.api.model.TChargingOrder;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.time.LocalDate;
|
import java.time.LocalDateTime;
|
import java.time.ZoneId;
|
import java.time.format.DateTimeFormatter;
|
import java.time.temporal.ChronoUnit;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* @author zhibing.pu
|
* @date 2023/7/11 8:39
|
*/
|
@Component
|
public class TaskUtil {
|
|
|
@Resource
|
private SiteClient siteClient;
|
@Autowired
|
private TCECSuperviseUtil tcecSuperviseUtil;
|
|
@Resource
|
private ChargingGunClient chargingGunClient;
|
|
@Resource
|
private ChargingOrderClient chargingOrderClient;
|
|
@Resource
|
private ChargingPileClient chargingPileClient;
|
|
|
|
// 每天凌晨12点30执行 推送充电用能统计
|
@Scheduled(cron = "0 30 0 * * ?")
|
public void superviseNotificationOperationStatsInfo() {
|
StationStatsInfoResult res = new StationStatsInfoResult();
|
|
List<Site> data = siteClient.getSiteAll().getData();
|
LocalDateTime now = LocalDateTime.now();
|
LocalDateTime startLocalDateTime = now.minusDays(1);
|
LocalDateTime endLocalDateTime = now.minusDays(1);
|
// 获取今天凌晨
|
startLocalDateTime.withHour(0);
|
startLocalDateTime.withMinute(0);
|
startLocalDateTime.withSecond(0);
|
String start = DateUtils.localDateTimeToString(startLocalDateTime);
|
endLocalDateTime.withHour(23);
|
endLocalDateTime.withMinute(59);
|
endLocalDateTime.withSecond(59);
|
String end = DateUtils.localDateTimeToString(endLocalDateTime);
|
ChargingStatisticeDTO chargingStatisticeDTO = new ChargingStatisticeDTO();
|
chargingStatisticeDTO.setStartTime(startLocalDateTime);
|
chargingStatisticeDTO.setEndTime(endLocalDateTime);
|
List<TChargingOrder> data1 = chargingOrderClient.getChargingStatistics(chargingStatisticeDTO).getData();
|
List<StationStatsInfo> stationStatsInfos = new ArrayList<>();
|
for (Site datum : data) {
|
StationStatsInfo stationStatsInfo = new StationStatsInfo();
|
stationStatsInfo.setStationID(datum.getId().toString());
|
stationStatsInfo.setEquipmentOwnerID("906171535");
|
stationStatsInfo.setOperatorID("906171535");
|
stationStatsInfo.setStationClassification(1);
|
stationStatsInfo.setStartTime(start);
|
stationStatsInfo.setEndTime(end);
|
List<TChargingOrder> chargingOrders = data1.stream().filter(e -> e.getSiteId().equals(datum.getId())).collect(Collectors.toList());
|
// 充电电量
|
BigDecimal electricity = new BigDecimal("0");
|
int chargingCount = 0;
|
for (TChargingOrder chargingOrder : chargingOrders) {
|
if (chargingOrder.getElectricity()!=null){
|
electricity = electricity.add(chargingOrder.getElectricity());
|
chargingCount++;
|
}
|
}
|
stationStatsInfo.setStationElectricity(electricity.divide(new BigDecimal("24")).setScale(4, BigDecimal.ROUND_DOWN));
|
stationStatsInfo.setStationTotalChargeEnergy(electricity.setScale(4, BigDecimal.ROUND_DOWN));
|
stationStatsInfo.setStationTotalWarningNum(0);
|
stationStatsInfo.setStationTotalOtherEnergy(new BigDecimal("0"));
|
stationStatsInfo.setStationTotalChargeNum(chargingCount);
|
//构建设备统计数据
|
List<EquipmentStatsInfo> EquipmentStatsInfos = new ArrayList<>();
|
Map<Integer, List<TChargingOrder>> collect = chargingOrders.stream().collect(Collectors.groupingBy(TChargingOrder::getChargingPileId));
|
for (Integer integer : collect.keySet()) {
|
List<TChargingOrder> tChargingOrders = collect.get(integer);
|
BigDecimal reduce1 = tChargingOrders.stream().map(TChargingOrder::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
|
EquipmentStatsInfo equipmentStatsInfo = new EquipmentStatsInfo();
|
equipmentStatsInfo.setEquipmentClassification(1);
|
long chargingTime = 0L;
|
for (TChargingOrder tChargingOrder : tChargingOrders) {
|
// 累加充电时长
|
LocalDateTime startTime = tChargingOrder.getStartTime();
|
LocalDateTime endTime = tChargingOrder.getEndTime();
|
// 计算时间差 单位分钟
|
chargingTime += ChronoUnit.SECONDS.between(startTime, endTime)/60;
|
}
|
equipmentStatsInfo.setEquipmentTotalChargeTime(chargingTime);
|
equipmentStatsInfo.setEquipmentTotalChargeNum(tChargingOrders.size());
|
equipmentStatsInfo.setEquipmentTotalWarningNum(0);
|
equipmentStatsInfo.setEquipmentID(integer.toString());
|
equipmentStatsInfo.setEquipmentElectricity(reduce1);
|
//构建设备接口统计数据
|
Map<Integer, List<TChargingOrder>> collect2 = tChargingOrders.stream().collect(Collectors.groupingBy(TChargingOrder::getChargingGunId));
|
List<ConnectorStatsInfo> ConnectorStatsInfos = new ArrayList<>();
|
for (Integer integer1 : collect2.keySet()) {
|
List<TChargingOrder> tChargingOrders1 = collect2.get(integer1);
|
BigDecimal reduce2 = tChargingOrders1.stream().map(TChargingOrder::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
TChargingGun chargingGun = chargingGunClient.getChargingGunById(integer1).getData();
|
ConnectorStatsInfo connectorStatsInfo = new ConnectorStatsInfo();
|
connectorStatsInfo.setConnectorID(chargingGun.getFullNumber());
|
connectorStatsInfo.setConnectorElectricity(reduce2);
|
ConnectorStatsInfos.add(connectorStatsInfo);
|
}
|
equipmentStatsInfo.setConnectorStatsInfos(ConnectorStatsInfos);
|
EquipmentStatsInfos.add(equipmentStatsInfo);
|
}
|
stationStatsInfo.setEquipmentStatsInfos(EquipmentStatsInfos);
|
stationStatsInfos.add(stationStatsInfo);
|
}
|
res.setStationStatsInfos(stationStatsInfos);
|
tcecSuperviseUtil.superviseNotificationOperationStatsInfo(res);
|
}
|
// 每15分钟执行一次的定时任务
|
@Scheduled(cron = "0 0/15 * * * ?")
|
public void supervise_notification_realtime_power_info() {
|
List<Site> data = siteClient.getSiteAll().getData();
|
List<Integer> siteIds = data.stream().map(Site::getId).collect(Collectors.toList());
|
List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(siteIds).getData();
|
List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList());
|
List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData();
|
SupStationPowerInfoResult supStationPowerInfoResult = new SupStationPowerInfoResult();
|
List<SupStationPowerInfo> stationStatsInfos = new ArrayList<>();
|
LocalDateTime now = LocalDateTime.now();
|
LocalDateTime startLocalDateTime = now.minusMinutes(15);
|
ChargingStatisticeDTO chargingStatisticeDTO = new ChargingStatisticeDTO();
|
chargingStatisticeDTO.setStartTime(startLocalDateTime);
|
chargingStatisticeDTO.setEndTime(now);
|
List<TChargingOrder> data1 = chargingOrderClient.getChargingStatistics(chargingStatisticeDTO).getData();
|
for (Site datum : data) {
|
List<TChargingOrder> collect = data1.stream().filter(e -> e.getSiteId().equals(datum.getId())
|
&&e.getChargingPower()!=null).collect(Collectors.toList());
|
SupStationPowerInfo supStationPowerInfo = new SupStationPowerInfo();
|
supStationPowerInfo.setOperatorID("906171535");
|
supStationPowerInfo.setEquipmentOwnerID("906171535");
|
supStationPowerInfo.setStationID(datum.getId().toString());
|
supStationPowerInfo.setStationClassification(1);
|
supStationPowerInfo.setDataTime(DateUtils.localDateTimeToString(LocalDateTime.now()));
|
BigDecimal divide = collect.stream().map(TChargingOrder::getChargingPower).reduce(BigDecimal::add).get().divide(new BigDecimal(collect.size()).setScale(4, BigDecimal.ROUND_DOWN));
|
supStationPowerInfo.setStationRealTimePower(divide);
|
supStationPowerInfo.setEquipmentPowerInfos(buildEquipmentPowerInfo(datum.getId(), tChargingPiles, chargingGunList));
|
|
stationStatsInfos.add(supStationPowerInfo);
|
}
|
supStationPowerInfoResult.setStationStatsInfos(stationStatsInfos);
|
tcecSuperviseUtil.superviseNotificationRealtimePowerInfo(supStationPowerInfoResult);
|
|
}
|
/**
|
* 构建桩数据
|
* @param tChargingPiles
|
* @return
|
*/
|
public List<SupEquipmentPowerInfo> buildEquipmentPowerInfo(Integer siteId, List<TChargingPile> tChargingPiles, List<TChargingGun> chargingGunList){
|
List<SupEquipmentPowerInfo> equipmentInfos = new ArrayList<>();
|
List<TChargingPile> collect = tChargingPiles.stream().filter(s -> s.getSiteId().equals(siteId)).collect(Collectors.toList());
|
for (TChargingPile tChargingPile : collect) {
|
SupEquipmentPowerInfo equipmentInfo = new SupEquipmentPowerInfo();
|
equipmentInfo.setEquipmentID(tChargingPile.getId().toString());
|
equipmentInfo.setEquipmentClassification(1);
|
equipmentInfo.setDataTime(DateUtils.localDateTimeToString(LocalDateTime.now()));
|
equipmentInfo.setEquipRealTimePower(tChargingPile.getRatedPower());
|
//构建设备接口信息
|
equipmentInfo.setConnectorPowerInfos(buildConnectorPowerInfos(tChargingPile.getId(), tChargingPile.getCode(), chargingGunList));
|
equipmentInfos.add(equipmentInfo);
|
}
|
return equipmentInfos;
|
}
|
/**
|
* 构建接口数据
|
* @param chargingGunList
|
* @return
|
*/
|
public List<SupConnectorPowerInfo> buildConnectorPowerInfos(Integer chargingPileId, String code, List<TChargingGun> chargingGunList){
|
List<SupConnectorPowerInfo> connectorInfos = new ArrayList<>();
|
List<TChargingGun> collect = chargingGunList.stream().filter(s -> s.getChargingPileId().equals(chargingPileId)).collect(Collectors.toList());
|
for (TChargingGun chargingGun : collect) {
|
SupConnectorPowerInfo connectorInfo = new SupConnectorPowerInfo();
|
connectorInfo.setConnectorID(chargingGun.getFullNumber());
|
connectorInfo.setEquipmentClassification(chargingGun.getEquipmentClassification());
|
connectorInfo.setDataTime(DateUtils.localDateTimeToString(LocalDateTime.now()));
|
connectorInfo.setConnectorRealTimePower(chargingGun.getChargingPower());
|
connectorInfos.add(connectorInfo);
|
}
|
return connectorInfos;
|
}
|
}
|