From 2e44b182b43fecaf6a2510c9226f18ffd2cee6c9 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期二, 15 四月 2025 17:33:46 +0800 Subject: [PATCH] 监管平台调试完毕 --- ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TaskUtil.java | 21 - ruoyi-service/ruoyi-integration/src/test/java/com/ruoyi/integration/RuoYiIntegrationApplicationTests.java | 365 +++++++++++++++++++++++ ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/util/JianGuanTask.java | 88 ++-- ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java | 1 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/ConnectorStatsInfo.java | 22 + ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupEquipmentPowerInfo.java | 3 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/BaseRequestJianGuan.java | 21 + ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationPowerInfoResult.java | 8 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECPushUtil.java | 15 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java | 3 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/BaseModelJianGuan.java | 47 +++ ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java | 2 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/TCECClient.java | 2 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java | 53 ++- ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java | 2 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECSuperviseUtil.java | 243 +++++++++++++--- ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationInfoResult.java | 1 17 files changed, 751 insertions(+), 146 deletions(-) diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/TCECClient.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/TCECClient.java index e260cce..be1d542 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/TCECClient.java +++ b/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); /** diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java index 60e93b3..ed2cadc 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java +++ b/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(); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java index 43815e0..3e0bc3c 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java +++ b/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(); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java index 59f7d37..1548517 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java +++ b/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(); } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECPushUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECPushUtil.java index 05d84e2..9cfdc7c 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECPushUtil.java +++ b/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(); } } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECSuperviseUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECSuperviseUtil.java index 0ed8892..27ad97f 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECSuperviseUtil.java +++ b/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()); diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/BaseModelJianGuan.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/BaseModelJianGuan.java new file mode 100644 index 0000000..b9626d0 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/BaseModelJianGuan.java @@ -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; +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/BaseRequestJianGuan.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/BaseRequestJianGuan.java new file mode 100644 index 0000000..5a580a1 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/BaseRequestJianGuan.java @@ -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; +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/ConnectorStatsInfo.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/ConnectorStatsInfo.java index 74431bf..2af5097 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/ConnectorStatsInfo.java +++ b/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; } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupEquipmentPowerInfo.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupEquipmentPowerInfo.java index 9df1b09..43ee464 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupEquipmentPowerInfo.java +++ b/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; } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationInfoResult.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationInfoResult.java index 634bef4..6cb8297 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationInfoResult.java +++ b/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; diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationPowerInfoResult.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationPowerInfoResult.java index d009e4b..4b66b99 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationPowerInfoResult.java +++ b/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; } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java index e2425a7..49cfba5 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java +++ b/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()); diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TaskUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TaskUtil.java index 84dfe16..3df2601 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TaskUtil.java +++ b/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); } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java index b3c6646..112bc2a 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java +++ b/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) { diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/util/JianGuanTask.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/util/JianGuanTask.java index f373c89..5ddedce 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/util/JianGuanTask.java +++ b/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(); +// } +//} diff --git a/ruoyi-service/ruoyi-integration/src/test/java/com/ruoyi/integration/RuoYiIntegrationApplicationTests.java b/ruoyi-service/ruoyi-integration/src/test/java/com/ruoyi/integration/RuoYiIntegrationApplicationTests.java index dfd7b64..e069794 100644 --- a/ruoyi-service/ruoyi-integration/src/test/java/com/ruoyi/integration/RuoYiIntegrationApplicationTests.java +++ b/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; + } + } -- Gitblit v1.7.1