ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/TCECClient.java
@@ -22,7 +22,7 @@ * @param id * @return */ @PostMapping("/evcs/v1.0/supervise_notification_station_info") @PostMapping("/evcs/v2.0/supervise_notification_station_info") R superviseNotificationStationInfo(@RequestParam("id") Integer id); /** ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java
@@ -226,6 +226,8 @@ } this.updateById(site); tcecClient.superviseNotificationStationInfo(site.getId()); return AjaxResult.success(); } ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java
@@ -155,7 +155,6 @@ sendMessageClient.qrCodeDelivery(qrCodeDelivery); Site site = siteMapper.selectById(chargingPile.getSiteId()); // 推送充换电站信息 tcecClient.superviseNotificationStationInfo(site.getId()); return AjaxResult.success(); } @@ -194,6 +193,8 @@ qrCodeDelivery.setCode_prefix(code_prefix); qrCodeDelivery.setQr_code(code_prefix + chargingPile.getCode() + dto.getCode()); sendMessageClient.qrCodeDelivery(qrCodeDelivery); tcecClient.superviseNotificationStationInfo(one.getSiteId()); return AjaxResult.success(); } ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
@@ -323,6 +323,7 @@ qrCodeDelivery.setQr_code(code_prefix + chargingPile.getCode() + chargingGun.getCode()); sendMessageClient.qrCodeDelivery(qrCodeDelivery); } tcecClient.superviseNotificationStationInfo(chargingPile.getSiteId()); return AjaxResult.success(); } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECPushUtil.java
@@ -6,7 +6,6 @@ import com.ruoyi.chargingPile.api.model.*; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.dto.ChargingPercentProvinceDto; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; import com.ruoyi.integration.api.vo.StartChargeResult; @@ -28,6 +27,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -157,14 +157,12 @@ break; } supEquipChargeStatus.setCurrentA(chargingOrder.getCurrent()); supEquipChargeStatus.setSOC(new BigDecimal(chargingOrder.getEndSoc())); supEquipChargeStatus.setSOC(StringUtils.hasLength(chargingOrder.getEndSoc())?new BigDecimal(chargingOrder.getEndSoc()):new BigDecimal("1")); supEquipChargeStatus.setStartTime(chargingOrder.getStartTime() != null ? chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : ""); supEquipChargeStatus.setEndTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); supEquipChargeStatus.setTotalPower(chargingOrder.getElectrovalence()); List<Operator> operators = operatorClient.getAllOperator().getData(); for (Operator operator : operators) { tcecSuperviseUtil.notificationSupEquipChargeStatus(operator, supEquipChargeStatus); } tcecSuperviseUtil.notificationSupEquipChargeStatus(new Operator(), supEquipChargeStatus); return R.ok(); } /** @@ -208,10 +206,7 @@ break; } List<Operator> operators = operatorClient.getAllOperator().getData(); for (Operator operator : operators) { tcecSuperviseUtil.notificationChargeOrderInfo(operator, supChargeOrderInfo); } tcecSuperviseUtil.notificationChargeOrderInfo(new Operator(), supChargeOrderInfo); return R.ok(); } } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECSuperviseUtil.java
@@ -22,6 +22,7 @@ import org.springframework.util.StringUtils; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.util.List; import java.util.concurrent.TimeUnit; @@ -37,11 +38,23 @@ @Component public class TCECSuperviseUtil { // 测试环境 // private static final String OperatorID = "MA01H3BQ2"; // private static final String OperatorSecret = "f1331ef0b37c2d1b"; // private static final String SigSecret = "a6fedf0e1b27d6f7"; // private static final String DataSecret = "50a61b93919c9604"; // private static final String DataSecretIV = "7c8ac6861661d584"; // private final static String url = "https://dev-gov-hlht-sc.unievbj.com/evcs/v1.0.0"; // 正式环境 private static final String OperatorID = "MA01H3BQ2"; private static final String OperatorSecret = "f1331ef0b37c2d1b"; private static final String SigSecret = "a6fedf0e1b27d6f7"; private static final String DataSecret = "50a61b93919c9604"; private static final String DataSecretIV = "7c8ac6861661d584"; private static final String OperatorSecret = "a762796b2a8989b8"; private static final String SigSecret = "52cd107eb677c004"; private static final String DataSecret = "98f46ab6481d87c4"; private static final String DataSecretIV = "978170fd1c11a70e"; private final static String url = "https://hlht-dipper-sc.unievbj.com/evcs/v1.0.0"; private static final String OurDataSecret = "50a61b93919c9605"; @@ -52,7 +65,6 @@ @Autowired private RedisService redisService; public static final String TOKEN_KEY = "charge_token:"; private final static String url = "https://dev-gov-hlht-sc.unievbj.com/evcs/v1.0.0/"; /** * 获取token */ @@ -72,43 +84,118 @@ private final static String supervise_notification_operation_stats_info = "/supervise_notification_operation_stats_info"; private final static String supervise_notification_realtime_power_info = "/supervise_notification_realtime_power_info"; private final static String supervise_notification_station_info = "/supervise_notification_station_info"; /** 获取token */ // public String queryToken(){ // String token = redisService.getCacheObject(TOKEN_KEY); // if(StringUtils.hasLength(token)){ // return token; // } // JSONObject jsonObject = new JSONObject(); // jsonObject.put("OperatorID", OperatorID); // jsonObject.put("OperatorSecret", OperatorSecret); // String params = jsonObject.toJSONString(); // // 参数加密 // String data = AesEncryption.encrypt(DataSecret, DataSecretIV, params); // // 获取签名 // String timeStamp = System.currentTimeMillis() + ""; // SequenceGenerator generator = new SequenceGenerator(); // String nextSequence = generator.getNextSequence(); // String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,SigSecret); // jsonObject = new JSONObject(); // jsonObject.put("OperatorID", OperatorID); // jsonObject.put("Data", data); // jsonObject.put("TimeStamp", timeStamp); // jsonObject.put("Seq", nextSequence); // jsonObject.put("Sig", hmacMD5); // String result = HttpUtils.sendPost(url+query_token, jsonObject.toJSONString()); // String string = JSONObject.parseObject(result).getString("Data"); // String decrypt = AesEncryption.decrypt(DataSecret, DataSecretIV, string); // JSONObject tokenResult = JSONObject.parseObject(decrypt); // token = tokenResult.getString("AccessToken"); // Integer TokenAvailableTime = tokenResult.getInteger("TokenAvailableTime"); // redisService.setCacheObject(TOKEN_KEY,token, (long) (TokenAvailableTime - 60), TimeUnit.SECONDS); // return token; // } public String queryToken(){ HttpRequest post = HttpUtil.createPost(url + query_token); JSONObject info = new JSONObject(); info.put("OperatorID", "906171535"); info.put("OperatorSecret", OperatorSecret); Long timeStamp = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); post.contentType("application/json;charset=utf-8"); BaseRequestJianGuan baseRequest = new BaseRequestJianGuan(); baseRequest.setOperatorID("906171535"); baseRequest.setTimeStamp(timeStamp+""); baseRequest.setSeq("0001"); String jsonString = JacksonUtils.toJson(info); SequenceGenerator generator = new SequenceGenerator(); String nextSequence = generator.getNextSequence(); String data = AesEncryption.encrypt(DataSecret, DataSecretIV,jsonString); String hmacMD5 = HMacMD5Util.getHMacMD5("906171535",timeStamp+"", data,nextSequence,SigSecret); baseRequest.setData(data); baseRequest.setSig(hmacMD5); String request_json = JacksonUtils.toJson(baseRequest); log.info("获取三方平台授权token请求地址:" + post.getUrl()); log.info("获取三方平台授权token请求参数:" + request_json); log.info("获取三方平台授权token请求Data:" + jsonString); post.body(request_json); HttpResponse execute = post.execute(); if(200 != execute.getStatus()){ log.error("获取三方平台授权token失败:" + execute.body()); return null; } log.info("获取三方平台授权token响应参数:" + execute.body()); BaseResult baseResult = JSON.parseObject(execute.body(), BaseResult.class); Integer Ret = baseResult.getRet(); if(0 != Ret){ log.error("获取三方平台授权token失败:" + baseResult.getMsg()); return null; } //解密参数 String decrypt = AESUtil.decrypt(baseResult.getData(), DataSecret, DataSecretIV); log.info("获取三方平台授权token响应Data:" + decrypt); QueryTokenResult queryTokenResult = JSON.parseObject(decrypt, QueryTokenResult.class); String token = queryTokenResult.getAccessToken(); // Long tokenAvailableTime = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC) + queryTokenResult.getTokenAvailab return token; } /** * 获取token */ public String queryToken(){ String token = redisService.getCacheObject(TOKEN_KEY); if(StringUtils.hasLength(token)){ return token; } JSONObject jsonObject = new JSONObject(); jsonObject.put("OperatorID", OperatorID); jsonObject.put("OperatorSecret", OperatorSecret); String params = jsonObject.toJSONString(); // 参数加密 String data = AesEncryption.encrypt(DataSecret, DataSecretIV, params); // 获取签名 String timeStamp = System.currentTimeMillis() + ""; SequenceGenerator generator = new SequenceGenerator(); String nextSequence = generator.getNextSequence(); String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,SigSecret); jsonObject = new JSONObject(); jsonObject.put("OperatorID", OperatorID); jsonObject.put("Data", data); jsonObject.put("TimeStamp", timeStamp); jsonObject.put("Seq", nextSequence); jsonObject.put("Sig", hmacMD5); String result = HttpUtils.sendPost(url+query_token, jsonObject.toJSONString()); String string = JSONObject.parseObject(result).getString("Data"); String decrypt = AesEncryption.decrypt(DataSecret, DataSecretIV, string); JSONObject tokenResult = JSONObject.parseObject(decrypt); token = tokenResult.getString("AccessToken"); Integer TokenAvailableTime = tokenResult.getInteger("TokenAvailableTime"); redisService.setCacheObject(TOKEN_KEY,token, (long) (TokenAvailableTime - 60), TimeUnit.SECONDS); return token; } // public String queryToken(){ // String token = redisService.getCacheObject(TOKEN_KEY); // if(StringUtils.hasLength(token)){ // return token; // } // JSONObject jsonObject = new JSONObject(); // jsonObject.put("OperatorID", OperatorID); // jsonObject.put("OperatorSecret", OperatorSecret); // String params = jsonObject.toJSONString(); // // 参数加密 // String data = AesEncryption.encrypt(DataSecret, DataSecretIV, params); // // 获取签名 // String timeStamp = System.currentTimeMillis() + ""; // SequenceGenerator generator = new SequenceGenerator(); // String nextSequence = generator.getNextSequence(); // String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,SigSecret); // jsonObject = new JSONObject(); // jsonObject.put("OperatorID", "906171535"); // jsonObject.put("OperatorSecret", OperatorSecret); // jsonObject.put("Data", data); // jsonObject.put("TimeStamp", timeStamp); // jsonObject.put("Seq", nextSequence); // jsonObject.put("Sig", hmacMD5); // String result = HttpUtils.sendPost(url+query_token, jsonObject.toJSONString()); // String string = JSONObject.parseObject(result).getString("Data"); // String decrypt = AesEncryption.decrypt(DataSecret, DataSecretIV, string); // JSONObject tokenResult = JSONObject.parseObject(decrypt); // token = tokenResult.getString("AccessToken"); // Integer TokenAvailableTime = tokenResult.getInteger("TokenAvailableTime"); // redisService.setCacheObject(TOKEN_KEY,token, (long) (TokenAvailableTime - 60), TimeUnit.SECONDS); // return token; // } /** @@ -173,6 +260,34 @@ */ public NotificationChargeOrderInfoResult notificationChargeOrderInfo(Operator operator, SupChargeOrderInfo info){ HttpRequest post = HttpUtil.createPost(url+supervise_notification_charge_order_info); if (info.getOrderStatus()!=null){ switch (info.getOrderStatus()){ case -1: info.setOrderStatus(7); break; case 0: info.setOrderStatus(7); break; case 1: info.setOrderStatus(1); break; case 2: info.setOrderStatus(1); break; case 3: info.setOrderStatus(2); break; case 4: info.setOrderStatus(3); break; case 5: info.setOrderStatus(4); break; } }else{ info.setOrderStatus(5); } buildBody(post, info, operator); HttpResponse execute = post.execute(); if(200 != execute.getStatus()){ @@ -197,15 +312,15 @@ /** * 构建请求参数和消息头 * @param post * @param o * @param */ public void buildBody(HttpRequest post, Object o, Operator operator){ Long timeStamp = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); post.contentType("application/json;charset=utf-8"); post.header("Authorization", "Bearer " + queryToken()); BaseRequest baseRequest = new BaseRequest(); baseRequest.setOperatorID(operator.getOurOperatorId()); baseRequest.setTimeStamp(timeStamp); BaseRequestJianGuan baseRequest = new BaseRequestJianGuan(); baseRequest.setOperatorID("906171535"); baseRequest.setTimeStamp(timeStamp+""); baseRequest.setSeq("0001"); // 使用 Jackson 转换为 JSON ObjectMapper objectMapper = new ObjectMapper(); @@ -216,18 +331,56 @@ } catch (Exception e) { e.printStackTrace(); } String encrypt = AesEncryption.encrypt(jsonString, DataSecret, DataSecretIV); String encrypt = AesEncryption.encrypt(DataSecret, DataSecretIV,jsonString); // String encrypt = AesEncryption.encrypt(DataSecret, DataSecretIV,jsonString); baseRequest.setData(encrypt); baseRequest.setOperator(operator); SequenceGenerator generator = new SequenceGenerator(); String nextSequence = generator.getNextSequence(); String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp+"", encrypt,nextSequence,SigSecret); String hmacMD5 = HMacMD5Util.getHMacMD5("906171535",timeStamp+"", encrypt,nextSequence,SigSecret); // String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,OurSigSecret); baseRequest.setSig(hmacMD5); String request_json = JacksonUtils.toJson(baseRequest); post.body(request_json); log.info("推送三方平台请求地址:" + post.getUrl()); log.info("推送三方平台请求参数:" + request_json); log.info("推送三方平台请求Data:" + jsonString); } /** * 构建请求参数和消息头 * @param post * @param */ public void buildBodyStatus(HttpRequest post, SupStationPowerInfoResult info, Operator operator){ Long timeStamp = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); post.contentType("application/json;charset=utf-8"); post.header("Authorization", "Bearer " + queryToken()); BaseRequestJianGuan baseRequest = new BaseRequestJianGuan(); baseRequest.setOperatorID("906171535"); baseRequest.setTimeStamp(timeStamp+""); baseRequest.setSeq("0001"); String request_json1 = JacksonUtils.toJson(info); String encrypt = AesEncryption.encrypt(DataSecret, DataSecretIV,request_json1); // String encrypt = AesEncryption.encrypt(DataSecret, DataSecretIV,jsonString); baseRequest.setData(encrypt); baseRequest.setOperator(operator); SequenceGenerator generator = new SequenceGenerator(); String nextSequence = generator.getNextSequence(); String hmacMD5 = HMacMD5Util.getHMacMD5("906171535",timeStamp+"", encrypt,nextSequence,SigSecret); // String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,OurSigSecret); baseRequest.setSig(hmacMD5); String request_json = JacksonUtils.toJson(baseRequest); post.body(request_json); log.info("推送三方平台请求地址:" + post.getUrl()); log.info("推送三方平台请求参数:" + request_json); log.info("推送三方平台请求Data:" + request_json1); } /** @@ -289,7 +442,7 @@ public void superviseNotificationRealtimePowerInfo(SupStationPowerInfoResult info){ Operator operator = new Operator(); HttpRequest post = HttpUtil.createPost(url+supervise_notification_realtime_power_info); buildBody(post, info, operator); buildBodyStatus(post, info, operator); HttpResponse execute = post.execute(); if(200 != execute.getStatus()){ log.error("推送充换电站实时功率失败:" + execute.body()); ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/BaseModelJianGuan.java
New file @@ -0,0 +1,47 @@ package com.ruoyi.integration.drainage.model; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import com.ruoyi.other.api.domain.Operator; import lombok.Data; import javax.validation.constraints.NotNull; /** * @author zhibing.pu * @Date 2025/1/23 18:33 */ @Data public class BaseModelJianGuan { /** * 运营商标识 */ @NotNull @JsonProperty("OperatorID") private String operatorID; /** * 参数内容 */ @NotNull @JsonProperty("Data") private String data; /** * 时间戳 * yyyyMMddHHmmss */ @NotNull @JsonProperty("TimeStamp") private String timeStamp; /** * 自增序列 * 4位自增序列取自时间戳,同一秒内按序列自增长,新秒重计。如 0001 */ @NotNull @JsonProperty("Seq") private String seq; /** * 运营商对象 */ @JsonIgnore private Operator operator; } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/BaseRequestJianGuan.java
New file @@ -0,0 +1,21 @@ package com.ruoyi.integration.drainage.model; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import javax.validation.constraints.NotNull; /** * 公共请求 * @author zhibing.pu * @Date 2025/1/21 17:08 */ @Data public class BaseRequestJianGuan extends BaseModelJianGuan { /** * 数字签名 */ @NotNull @JsonProperty("Sig") private String sig; } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/ConnectorStatsInfo.java
@@ -1,6 +1,7 @@ package com.ruoyi.integration.drainage.model; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.models.auth.In; import lombok.Data; import javax.validation.constraints.NotNull; @@ -25,4 +26,25 @@ @NotNull @JsonProperty("ConnectorElectricity") private BigDecimal connectorElectricity; /** * 充电设备接口累 * 计充电时长 */ @NotNull @JsonProperty("ConnectorTotalChargeTime") private Integer ConnectorTotalChargeTime; /** * 充电设备接口累 * 计充电次数 */ @NotNull @JsonProperty("ConnectorTotalChargeNum") private Integer ConnectorTotalChargeNum; /** * 充电设备接口累 * 计告警数量 */ @NotNull @JsonProperty("ConnectorTotalWarningNum") private Integer ConnectorTotalWarningNum; } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupEquipmentPowerInfo.java
@@ -23,7 +23,6 @@ @JsonProperty("EquipRealTimePower") private BigDecimal EquipRealTimePower; @JsonProperty("DataTime") @JsonProperty("ConnectorPowerInfos") private List<SupConnectorPowerInfo> ConnectorPowerInfos; } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationInfoResult.java
@@ -12,6 +12,7 @@ */ @Data public class SupStationInfoResult { @JsonProperty("SupStationInfo") private StationInfo SupStationInfo; ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationPowerInfoResult.java
@@ -1,13 +1,17 @@ package com.ruoyi.integration.drainage.model; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.io.Serializable; import java.util.List; /** * 推送充换电站实时功率 */ @Data public class SupStationPowerInfoResult { private List<SupStationPowerInfo> stationStatsInfos; public class SupStationPowerInfoResult implements Serializable { @JsonProperty("SupStationPowerInfos") private List<SupStationPowerInfo> SupStationPowerInfos; } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java
@@ -303,7 +303,9 @@ stationInfo.setBusineHours(datum.getStartServiceTime()); stationInfo.setRoundTheClock(datum.getRoundTheClock()); stationInfo.setParkType(datum.getParkType()); stationInfo.setElectricityFee("{"+datum.getElectricityFee()+"}"); if (org.springframework.util.StringUtils.hasLength(datum.getElectricityFee())){ stationInfo.setElectricityFee("{"+datum.getElectricityFee()+"}"); } stationInfo.setServiceFee("{"+datum.getServiceFee()+"}"); stationInfo.setParkFee("{\"rules\":"+datum.getParkFee()+","+"\"freeDuration\":"+datum.getParkFeeFree()+"}"); stationInfo.setElectricityType(datum.getElectricityType()); @@ -1814,13 +1816,17 @@ } stationInfo.setRoundTheClock(stationInfo.getRoundTheClock()==null?1:stationInfo.getRoundTheClock()); stationInfo.setParkType(stationInfo.getParkType()==null?1:stationInfo.getParkType()); stationInfo.setElectricityFee("{\"00:00:00-00:30:00\":\"0.4901\",\"00:00:30-01:00:00\":\"0.1234\"}"); stationInfo.setServiceFee("{"+"\"00:00:00-00:30:00\":\"0.4901\",\"00:00:30-01:00:00\":\"0.1234\""+"}"); if (!org.springframework.util.StringUtils.hasLength(stationInfo.getElectricityFee())){ stationInfo.setElectricityFee("{\"00:00:00-00:30:00\":\"0.4901\",\"00:00:30-01:00:00\":\"0.1234\"}"); } if (!org.springframework.util.StringUtils.hasLength(stationInfo.getServiceFee())){ stationInfo.setServiceFee("{"+"\"00:00:00-00:30:00\":\"0.4901\",\"00:00:30-01:00:00\":\"0.1234\""+"}"); } stationInfo.setElectricityType(stationInfo.getElectricityType()==null?1:stationInfo.getElectricityType()); stationInfo.setBusinessExpandType(stationInfo.getBusinessExpandType()==null?1:stationInfo.getBusinessExpandType()); stationInfo.setCapacity(stationInfo.getCapacity()==null?new BigDecimal("1.0000"):stationInfo.getCapacity()); stationInfo.setRatedPower(stationInfo.getCapacity()==null?new BigDecimal("40.0000"):stationInfo.getCapacity()); stationInfo.setPeriodFee(1); stationInfo.setPeriodFee(stationInfo.getPeriodFee()==null?1:stationInfo.getPeriodFee()); stationInfo.setOfficialRunTime(org.springframework.util.StringUtils.hasLength(stationInfo.getOfficialRunTime())?stationInfo.getOfficialRunTime():"2025-01-01"); stationInfo.setVideoMonitor(stationInfo.getVideoMonitor()==null?1:stationInfo.getVideoMonitor()); int i = 0; @@ -1847,14 +1853,22 @@ } stationInfo.setEquipmentOwnerName("明星新能源"); stationInfo.setResidentNo("A1234"); if (org.springframework.util.StringUtils.hasLength(stationInfo.getResidentNo())){ stationInfo.setResidentNo(stationInfo.getResidentNo()); }else{ stationInfo.setResidentNo("A1234"); } stationInfo.setSupplyType(stationInfo.getSupplyType()==null?1:stationInfo.getSupplyType()); stationInfo.setWattHourMeterNo(org.springframework.util.StringUtils.hasLength(stationInfo.getWattHourMeterNo())?stationInfo.getWattHourMeterNo():UUID.randomUUID().toString().replaceAll("-", "")); stationInfo.setForwardPower(stationInfo.getForwardPower()==null?"1.3654":stationInfo.getForwardPower()); String uuid = UUID.randomUUID().toString(); String randomString = uuid.replaceAll("-", ""); // 去除'-' stationInfo.setRecordUniqueNo(randomString); if (org.springframework.util.StringUtils.hasLength(stationInfo.getRecordUniqueNo())){ stationInfo.setRecordUniqueNo(stationInfo.getRecordUniqueNo()); }else{ stationInfo.setRecordUniqueNo(randomString); } } String timeStamp = System.currentTimeMillis() + ""; SequenceGenerator generator = new SequenceGenerator(); @@ -2104,10 +2118,8 @@ supEquipChargeStatus.setStartTime(chargingOrder.getStartTime() != null ? chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : ""); supEquipChargeStatus.setEndTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); supEquipChargeStatus.setTotalPower(chargingOrder.getElectrovalence()); List<Operator> operators = operatorClient.getAllOperator().getData(); for (Operator operator : operators) { tcecSuperviseUtil.notificationSupEquipChargeStatus(operator, supEquipChargeStatus); } tcecSuperviseUtil.notificationSupEquipChargeStatus(new Operator(), supEquipChargeStatus); return R.ok(); } /** @@ -2150,11 +2162,7 @@ supChargeOrderInfo.setStopDesc("费用不足中止"); break; } List<Operator> operators = operatorClient.getAllOperator().getData(); for (Operator operator : operators) { tcecSuperviseUtil.notificationChargeOrderInfo(operator, supChargeOrderInfo); } tcecSuperviseUtil.notificationChargeOrderInfo(new Operator(), supChargeOrderInfo); return R.ok(); } @@ -2184,9 +2192,18 @@ stationInfo.setConstruction(255); } stationInfo.setRoundTheClock(stationInfo.getRoundTheClock()==null?1:stationInfo.getRoundTheClock()); stationInfo.setRoundTheClock(0); stationInfo.setParkType(stationInfo.getParkType()==null?1:stationInfo.getParkType()); stationInfo.setElectricityFee("{\"00:00:00-00:30:00\":\"0.4901\",\"00:00:30-01:00:00\":\"0.1234\"}"); stationInfo.setServiceFee("{"+"\"00:00:00-00:30:00\":\"0.4901\",\"00:00:30-01:00:00\":\"0.1234\""+"}"); if (org.springframework.util.StringUtils.hasLength(site.getElectricityFee())){ stationInfo.setElectricityFee("{"+site.getElectricityFee()+"}"); }else{ stationInfo.setElectricityFee("{\"00:00:00-00:30:00\":\"0.4901\",\"00:00:30-01:00:00\":\"0.1234\"}"); } if (org.springframework.util.StringUtils.hasLength(site.getServiceFee())){ stationInfo.setServiceFee("{"+site.getServiceFee()+"}"); }else{ stationInfo.setServiceFee("{"+"\"00:00:00-00:30:00\":\"0.4901\",\"00:00:30-01:00:00\":\"0.1234\""+"}"); } stationInfo.setElectricityType(stationInfo.getElectricityType()==null?1:stationInfo.getElectricityType()); stationInfo.setBusinessExpandType(stationInfo.getBusinessExpandType()==null?1:stationInfo.getBusinessExpandType()); stationInfo.setCapacity(stationInfo.getCapacity()==null?new BigDecimal("1.0000"):stationInfo.getCapacity()); ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TaskUtil.java
@@ -53,25 +53,17 @@ @Resource private ChargingPileClient chargingPileClient; // 每天凌晨12点30执行 推送充电用能统计 @Scheduled(cron = "0 30 0 * * ?") public void superviseNotificationOperationStatsInfo() { StationStatsInfoResult res = new StationStatsInfoResult(); int dayOfMonth1 = LocalDateTime.now().getYear(); int dayOfMonth2 = LocalDateTime.now().getMonthValue(); int dayOfMonth3 = LocalDateTime.now().getDayOfMonth(); 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); LocalDateTime startLocalDateTime = LocalDateTime.of(dayOfMonth1, dayOfMonth2, dayOfMonth3, 0, 0, 0); LocalDateTime endLocalDateTime = LocalDateTime.of(dayOfMonth1, dayOfMonth2, dayOfMonth3, 23, 59, 59); 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); @@ -172,10 +164,9 @@ 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); supStationPowerInfoResult.setSupStationPowerInfos(stationStatsInfos); tcecSuperviseUtil.superviseNotificationRealtimePowerInfo(supStationPowerInfoResult); } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java
@@ -254,7 +254,7 @@ UploadRealTimeMonitoringDataQuery query = new UploadRealTimeMonitoringDataQuery(); BeanUtils.copyProperties(uploadRealTimeMonitoringData, query); chargingOrderClient.chargeMonitoring(query); chargingOrder.setEndSoc(uploadRealTimeMonitoringDataMessage.getSoc()+""); tcecPushUtil.pushSuperviseNotificationEquipChargeStatus(chargingOrder); } catch (Exception e) { ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/util/JianGuanTask.java
@@ -1,44 +1,44 @@ package com.ruoyi.integration.util; import com.ruoyi.integration.mongodb.service.PingService; import com.ruoyi.integration.mongodb.service.PongService; import com.ruoyi.integration.rocket.produce.ChargingMessageListener; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; /** * @author zhibing.pu * @date 2023/7/11 8:39 */ @Component public class JianGuanTask { @Resource private ChargingMessageListener chargingMessageListener; @Resource private PingService pingService; @Resource private PongService pongService; /** * 5分钟执行的定时任务 */ @Scheduled(fixedRate = 300000) public void taskMonth() { chargingMessageListener.transactionRecord(); } @Scheduled(cron = "0 0 3 * * ?") public void task2() { // pingService.delPing(); // pongService.delPong(); } } //package com.ruoyi.integration.util; // //import com.ruoyi.integration.mongodb.service.PingService; //import com.ruoyi.integration.mongodb.service.PongService; //import com.ruoyi.integration.rocket.produce.ChargingMessageListener; //import org.springframework.scheduling.annotation.Scheduled; //import org.springframework.stereotype.Component; // //import javax.annotation.Resource; // // ///** // * @author zhibing.pu // * @date 2023/7/11 8:39 // */ //@Component //public class JianGuanTask { // // @Resource // private ChargingMessageListener chargingMessageListener; // // @Resource // private PingService pingService; // // @Resource // private PongService pongService; // // // /** // * 5分钟执行的定时任务 // */ // @Scheduled(fixedRate = 300000) // public void taskMonth() { // chargingMessageListener.transactionRecord(); // } // // // // @Scheduled(cron = "0 0 3 * * ?") // public void task2() { //// pingService.delPing(); //// pongService.delPong(); // } //} ruoyi-service/ruoyi-integration/src/test/java/com/ruoyi/integration/RuoYiIntegrationApplicationTests.java
@@ -1,16 +1,42 @@ package com.ruoyi.integration; import com.alibaba.fastjson2.JSON; import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient; import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient; import com.ruoyi.chargingPile.api.feignClient.SiteClient; 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.domain.R; import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; import com.ruoyi.integration.barrierGate.model.CloudParkingOrder; import com.ruoyi.integration.barrierGate.server.ParkingOrderService; import com.ruoyi.integration.drainage.TCECSuperviseUtil; import com.ruoyi.integration.drainage.model.*; import com.ruoyi.integration.mongodb.service.UploadRealTimeMonitoringDataService; import com.ruoyi.order.api.dto.ChargingStatisticeDTO; import com.ruoyi.order.api.feignClient.ChargingOrderClient; import com.ruoyi.order.api.model.TChargingOrder; import com.ruoyi.other.api.domain.Operator; import com.ruoyi.other.api.feignClient.OperatorClient; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.cglib.core.Local; import org.springframework.util.StringUtils; import javax.annotation.Resource; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = RuoYiIntegrationApplication.class) public class RuoYiIntegrationApplicationTests { @@ -21,14 +47,339 @@ private ParkingOrderService parkingOrderService; @Resource private SiteClient siteClient; // @Test // public void test(){ // String json = "{\"appkey\":\"842ae0c027e64b3590af9eea6\",\"enterChannel\":\"001\",\"enterChannelName\":\"进口\",\"enterDateTime\":\"2024-11-01T11:25:15.677Z\",\"id\":\"17B51DA0983C11EFA99CA979A8A8386B\",\"kind\":\"临时卡\",\"name\":\"临时识别\",\"plate\":\"川JD34056\",\"plateColor\":\"绿色\",\"sign\":\"29A902820C2657C51FBE90235152534F\"}"; // CloudParkingOrder order = JSON.parseObject(json, CloudParkingOrder.class); // parkingOrderService.cloudParkingInOrder(order); // } @Resource private ChargingGunClient chargingGunClient; @Resource private ChargingOrderClient chargingOrderClient; @Resource private OperatorClient operatorClient; @Test public void test(){ /** * 推送充电设备接口状态信息 * @param chargingGun * @return */ List<TChargingGun> data = chargingGunClient.getAllGun().getData(); TChargingGun chargingGun = data.stream().filter(e -> e.getId() == 61).findFirst().orElse(new TChargingGun()); ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo(); connectorStatusInfo.setOperatorID("906171535"); connectorStatusInfo.setEquipmentOwnerID("906171535"); connectorStatusInfo.setStationID(String.valueOf(chargingGun.getSiteId())); connectorStatusInfo.setEquipmentID(String.valueOf(chargingGun.getChargingPileId())); connectorStatusInfo.setConnectorID(chargingGun.getFullNumber()); connectorStatusInfo.setEquipmentClassification(1); 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.setUpdateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); // List<Operator> operators = operatorClient.getAllOperator().getData(); // for (Operator operator : operators) { tcecSuperviseUtil.notificationStationStatus(new Operator(), connectorStatusInfo); // } } @Autowired private TCECSuperviseUtil tcecSuperviseUtil; private final static String operatorId = "906171535"; @Test public void test1(){ TChargingOrder chargingOrder = chargingOrderClient.orderDetail(1884874763556048898L).getData(); SupEquipChargeStatus supEquipChargeStatus = new SupEquipChargeStatus(); supEquipChargeStatus.setOperatorID(operatorId); supEquipChargeStatus.setEquipmentOwnerID(operatorId); supEquipChargeStatus.setStationID(String.valueOf(chargingOrder.getSiteId())); supEquipChargeStatus.setEquipmentID(String.valueOf(chargingOrder.getChargingPileId())); supEquipChargeStatus.setOrderNo(operatorId+chargingOrder.getCode()); switch (chargingOrder.getStatus()){ case 2: supEquipChargeStatus.setConnectorStatus(1); break; case 3: supEquipChargeStatus.setConnectorStatus(2); break; case 4: supEquipChargeStatus.setConnectorStatus(3); break; case 5: supEquipChargeStatus.setConnectorStatus(4); break; } TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); supEquipChargeStatus.setConnectorID(chargingGun.getFullNumber()); supEquipChargeStatus.setEquipmentClassification(1); supEquipChargeStatus.setPushTimeStamp(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); switch (chargingGun.getStatus()){ case 1: supEquipChargeStatus.setConnectorStatus(0); break; case 2: supEquipChargeStatus.setConnectorStatus(1); break; case 3: supEquipChargeStatus.setConnectorStatus(2); break; case 4: supEquipChargeStatus.setConnectorStatus(3); break; case 5: supEquipChargeStatus.setConnectorStatus(3); break; case 6: supEquipChargeStatus.setConnectorStatus(4); break; case 7: supEquipChargeStatus.setConnectorStatus(255); break; } supEquipChargeStatus.setCurrentA(chargingOrder.getCurrent()); supEquipChargeStatus.setSOC(StringUtils.hasLength(chargingOrder.getEndSoc())?new BigDecimal(chargingOrder.getEndSoc()):new BigDecimal("1")); supEquipChargeStatus.setStartTime(chargingOrder.getStartTime() != null ? chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : ""); supEquipChargeStatus.setEndTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); supEquipChargeStatus.setTotalPower(chargingOrder.getElectrovalence()); tcecSuperviseUtil.notificationSupEquipChargeStatus(new Operator(), supEquipChargeStatus); } @Test public void test2(){ TChargingOrder chargingOrder = chargingOrderClient.orderDetail(1884874763556048898L).getData(); SupChargeOrderInfo supChargeOrderInfo = new SupChargeOrderInfo(); supChargeOrderInfo.setOperatorID(operatorId); supChargeOrderInfo.setEquipmentOwnerID(operatorId); supChargeOrderInfo.setStationID(String.valueOf(chargingOrder.getSiteId())); supChargeOrderInfo.setEquipmentID(String.valueOf(chargingOrder.getChargingPileId())); supChargeOrderInfo.setOrderNo(operatorId+chargingOrder.getCode()); TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); supChargeOrderInfo.setConnectorID(chargingGun.getFullNumber()); supChargeOrderInfo.setEquipmentClassification(1); supChargeOrderInfo.setPushTimeStamp(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); supChargeOrderInfo.setStartTime(chargingOrder.getStartTime() != null ? chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : ""); supChargeOrderInfo.setEndTime(chargingOrder.getEndTime() != null ? chargingOrder.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : ""); supChargeOrderInfo.setTotalPower(chargingOrder.getElectrovalence()); supChargeOrderInfo.setTotalElecMoney(chargingOrder.getElectrovalence()); supChargeOrderInfo.setTotalServiceMoney(chargingOrder.getServiceCharge()); supChargeOrderInfo.setTotalMoney(chargingOrder.getOrderAmount()); supChargeOrderInfo.setOrderStatus(chargingOrder.getStatus()); switch (chargingOrder.getEndMode()){ case 0: supChargeOrderInfo.setStopReason(5); supChargeOrderInfo.setStopDesc("异常终止"); break; case 1: supChargeOrderInfo.setStopReason(0); supChargeOrderInfo.setStopDesc("用户手动停止充电"); break; case 2: supChargeOrderInfo.setStopReason(1); supChargeOrderInfo.setStopDesc("客户归属地运营商平台停止充电"); break; case 3: supChargeOrderInfo.setStopReason(1); supChargeOrderInfo.setStopDesc("费用不足中止"); break; } tcecSuperviseUtil.notificationChargeOrderInfo(new Operator(), supChargeOrderInfo); } @Test public void test3(){ StationStatsInfoResult res = new StationStatsInfoResult(); List<Site> data = siteClient.getSiteAll().getData(); LocalDateTime now = LocalDateTime.now(); LocalDateTime startLocalDateTime = now.minusDays(1); LocalDateTime endLocalDateTime = now.minusDays(1); LocalDateTime localDateTime1 = LocalDateTime.of(2025, 2, 3, 0, 0, 0); LocalDateTime localDateTime2 = LocalDateTime.of(2025, 2, 3, 23, 59, 59); // 获取今天凌晨 startLocalDateTime.withHour(0); startLocalDateTime.withMinute(0); startLocalDateTime.withSecond(0); startLocalDateTime.withMonth(1); startLocalDateTime.withDayOfMonth(28); String start = DateUtils.localDateTimeToString(startLocalDateTime); endLocalDateTime.withHour(23); endLocalDateTime.withMinute(59); endLocalDateTime.withSecond(59); startLocalDateTime.withMonth(1); startLocalDateTime.withDayOfMonth(28); String end = DateUtils.localDateTimeToString(endLocalDateTime); ChargingStatisticeDTO chargingStatisticeDTO = new ChargingStatisticeDTO(); chargingStatisticeDTO.setStartTime(localDateTime1); chargingStatisticeDTO.setEndTime(localDateTime2); List<TChargingOrder> data1 = chargingOrderClient.getChargingStatistics(chargingStatisticeDTO).getData(); List<StationStatsInfo> stationStatsInfos = new ArrayList<>(); String start1 = DateUtils.localDateTimeToString(localDateTime1); String start2 = DateUtils.localDateTimeToString(localDateTime2); for (Site datum : data) { StationStatsInfo stationStatsInfo = new StationStatsInfo(); stationStatsInfo.setStationID(datum.getId().toString()); stationStatsInfo.setEquipmentOwnerID("906171535"); stationStatsInfo.setOperatorID("906171535"); stationStatsInfo.setStationClassification(1); stationStatsInfo.setStartTime(start1); stationStatsInfo.setEndTime(start2); 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"),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); long chargingTime1 = 0L; for (TChargingOrder chargingOrder : tChargingOrders1) { // 累加充电时长 LocalDateTime startTime = chargingOrder.getStartTime(); LocalDateTime endTime = chargingOrder.getEndTime(); // 计算时间差 单位分钟 chargingTime += ChronoUnit.SECONDS.between(startTime, endTime)/60; } TChargingGun chargingGun = chargingGunClient.getChargingGunById(integer1).getData(); ConnectorStatsInfo connectorStatsInfo = new ConnectorStatsInfo(); connectorStatsInfo.setConnectorID(chargingGun.getFullNumber()); connectorStatsInfo.setConnectorElectricity(reduce2); connectorStatsInfo.setConnectorTotalChargeTime(Integer.valueOf(chargingTime+"")); connectorStatsInfo.setConnectorTotalChargeNum(tChargingOrders1.size()); connectorStatsInfo.setConnectorTotalWarningNum(0); ConnectorStatsInfos.add(connectorStatsInfo); } equipmentStatsInfo.setConnectorStatsInfos(ConnectorStatsInfos); EquipmentStatsInfos.add(equipmentStatsInfo); } stationStatsInfo.setEquipmentStatsInfos(EquipmentStatsInfos); stationStatsInfos.add(stationStatsInfo); } res.setStationStatsInfos(stationStatsInfos); tcecSuperviseUtil.superviseNotificationOperationStatsInfo(res); } @Resource private ChargingPileClient chargingPileClient; @Test public void test4(){ 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.of(2025, 2, 3, 23, 30, 0); LocalDateTime startLocalDateTime = LocalDateTime.of(2025, 2, 3, 20, 0, 0); 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())); if (collect.isEmpty()){ supStationPowerInfo.setStationRealTimePower(new BigDecimal("0")); }else{ BigDecimal divide = collect.stream().map(TChargingOrder::getChargingPower).reduce(BigDecimal.ZERO,BigDecimal::add).divide(new BigDecimal(collect.size()),4,BigDecimal.ROUND_DOWN); supStationPowerInfo.setStationRealTimePower(divide); } supStationPowerInfo.setEquipmentPowerInfos(buildEquipmentPowerInfo(datum.getId(), tChargingPiles, chargingGunList)); stationStatsInfos.add(supStationPowerInfo); } supStationPowerInfoResult.setSupStationPowerInfos(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; } 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; } }