package com.ruoyi.chargingPile.util; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.ruoyi.chargingPile.api.model.*; import com.ruoyi.chargingPile.service.*; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.integration.api.elutong.model.*; import com.ruoyi.integration.api.feignClient.ELuTongClient; import com.ruoyi.integration.api.feignClient.IntegrationClient; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.web.context.WebServerInitializedEvent; import org.springframework.context.ApplicationListener; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; import java.util.Set;import java.util.stream.Collectors; /** * 定时任务工具类 */ @Slf4j @Component public class TaskUtil implements ApplicationListener { @Resource private TChargingPileService chargingPileService; private Integer port = null; @Resource private ELuTongClient eLuTongClient; @Resource private ISiteService siteService; @Resource private TChargingGunService chargingGunService; @Resource private TAccountingStrategyDetailService accountingStrategyDetailService; @Resource private IntegrationClient integrationClient; @Override public void onApplicationEvent(WebServerInitializedEvent event) { port = event.getWebServer().getPort(); System.out.println("端口号:" + port); } /** * 每隔1分钟去处理的定时任务 */ @Scheduled(fixedRate = 60000) public void taskMinute(){ if(null != port && port == 5300){ chargingPileService.updateStatus(); pushStationsStatus(); } } /** * 主动下发计费策略 */ @Scheduled(cron = "0 0 6 * * ?") public void taskMonth() { if(null != port && port == 5300){ //主动下发计费策略 //下发桩独立的 log.info("主动下发计费策略开始"); List tChargingGuns = chargingGunService.list(new QueryWrapper().eq("del_flag", 0).isNotNull("accounting_strategy_id")); Set collect = tChargingGuns.stream().map(TChargingGun::getChargingPileId).collect(Collectors.toSet()); List tChargingPiles = chargingPileService.listByIds(collect); for (TChargingPile chargingPile : tChargingPiles) { TChargingGun tChargingGun = tChargingGuns.stream().filter(s->s.getChargingPileId().equals(chargingPile.getId())).findFirst().orElse(null); Integer accountingStrategyId = tChargingGun.getAccountingStrategyId(); List accountingStrategyDetails = accountingStrategyDetailService.list(new LambdaQueryWrapper() .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategyId).orderByAsc(TAccountingStrategyDetail::getStartTime)); integrationClient.setupBillingModel1(chargingPile.getCode(), JSON.toJSONString(accountingStrategyDetails)); } //下发场站统一的计费策略 List tChargingGuns1 = chargingGunService.list(new QueryWrapper().eq("del_flag", 0).isNull("accounting_strategy_id")); if(!tChargingGuns1.isEmpty()){ Set collect2 = tChargingGuns1.stream().map(TChargingGun::getSiteId).collect(Collectors.toSet()); List sites = siteService.listByIds(collect2); Set collect1 = tChargingGuns1.stream().map(TChargingGun::getChargingPileId).collect(Collectors.toSet()); List tChargingPiles1 = chargingPileService.listByIds(collect1); for (TChargingPile chargingPile : tChargingPiles1) { Site site = sites.stream().filter(s->s.getId().equals(chargingPile.getSiteId())).findFirst().orElse(null); Integer accountingStrategyId = site.getAccountingStrategyId(); List accountingStrategyDetails = accountingStrategyDetailService.list(new LambdaQueryWrapper() .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategyId).orderByAsc(TAccountingStrategyDetail::getStartTime)); integrationClient.setupBillingModel1(chargingPile.getCode(), JSON.toJSONString(accountingStrategyDetails)); } } log.info("主动下发计费策略结束"); } } /** * 1分钟定时推送设备状态E路通 */ private void pushStationsStatus(){ List list = siteService.list(new LambdaQueryWrapper().eq(Site::getDelFlag, 0).isNotNull(Site::getSerAreaCode)); for (Site site : list) { if(StringUtils.isEmpty(site.getSerAreaCode())){ continue; } StationsStatusReq stationsStatusReq = new StationsStatusReq(); stationsStatusReq.setOperatorId("91510903906171535D"); stationsStatusReq.setSerAreaCode(site.getSerAreaCode()); stationsStatusReq.setStationId(site.getCode()); List stationStausInfos = new ArrayList<>(); stationStausInfos.add(buildStationStaus(site)); stationsStatusReq.setItemSize(stationStausInfos.size()); stationsStatusReq.setStationStatusInfos(stationStausInfos); R r = eLuTongClient.pushStationsStatus(stationsStatusReq); if(200 != r.getCode()){ log.error(r.getMsg()); } } } private StationStatusInfo buildStationStaus(Site site){ StationStatusInfo stationStausInfo = new StationStatusInfo(); stationStausInfo.setStationId(site.getCode()); stationStausInfo.setConnectorStatusInfos(buildConnectorStatus(site)); return stationStausInfo; } private List buildConnectorStatus(Site site){ List list = chargingGunService.list(new LambdaQueryWrapper().eq(TChargingGun::getDelFlag, 0) .eq(TChargingGun::getSiteId, site.getId())); return new ArrayList(){{ for (TChargingGun chargingGun : list) { ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo(); connectorStatusInfo.setConnectorId(chargingGun.getFullNumber()); switch (chargingGun.getStatus()){ case 1: connectorStatusInfo.setStatus(0); break; case 2: connectorStatusInfo.setStatus(1); break; case 3: connectorStatusInfo.setStatus(2); break; case 4: connectorStatusInfo.setStatus(3); break; case 5: connectorStatusInfo.setStatus(3); break; case 6: connectorStatusInfo.setStatus(4); break; case 7: connectorStatusInfo.setStatus(255); break; } connectorStatusInfo.setSoc(0D); connectorStatusInfo.setRemainingTime(0); add(connectorStatusInfo); } }}; } }