From 792cbb986fb8c32f6bbc1638c4ae264372e7a28f Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期四, 23 一月 2025 19:31:36 +0800 Subject: [PATCH] 新增引流接口及业务逻辑 --- ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java | 198 +++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 172 insertions(+), 26 deletions(-) diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java index 428a49e..0cadb76 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java @@ -2,8 +2,15 @@ import cn.hutool.http.*; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.ruoyi.integration.drainage.model.*; import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.Map; /** * 中电联TCEC标准 @@ -12,6 +19,63 @@ */ @Slf4j public class TCECUtil { + /** + * 运营商标识 + */ + private static final String OperatorID = ""; + /** + * 运营商秘钥 + */ + private static final String OperatorSecret = ""; + /** + * tokne + */ + private static String token = ""; + /** + * token过期时间,秒 + */ + private static Long TokenAvailableTime = 0L; + + private static Map<Long, Integer> map = new HashMap<>(); + + + /** + * 获取token + */ + public static void queryToken(){ + HttpRequest post = HttpUtil.createPost(""); + post.contentType("application/json;charset=utf-8"); + JSONObject body = new JSONObject(); + body.put("OperatorID", OperatorID); + body.put("OperatorSecret", OperatorSecret); + post.body(body.toJSONString()); + HttpResponse execute = post.execute(); + if(200 != execute.getStatus()){ + log.error("获取token失败:" + execute.body()); + return; + } + JSONObject jsonObject = JSON.parseObject(execute.body()); + Integer succStat = jsonObject.getInteger("SuccStat"); + if(0 != succStat){ + log.error("获取token失败:" + jsonObject.getString("FailReason")); + return; + } + token = jsonObject.getString("AccessToken"); + TokenAvailableTime = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC) + jsonObject.getLong("TokenAvailableTime"); + } + + + /** + * 获取token + * @return + */ + public static String getToken(){ + long second = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC); + if(second >= TokenAvailableTime){ + queryToken(); + } + return token; + } @@ -21,8 +85,7 @@ */ public static NotificationStationStatusResult notificationStationStatus(ConnectorStatusInfo info) { HttpRequest post = HttpUtil.createPost(""); - post.contentType(ContentType.JSON.toString()); - post.body(JSON.toJSONString(info)); + buildBody(post, info); HttpResponse execute = post.execute(); if(200 != execute.getStatus()){ log.error("设备状态变化推送失败:" + execute.body()); @@ -32,32 +95,32 @@ } - - /** - * 查询统计信息 - * @param query + * 推送启动充电结果 + * @param info * @return */ - public QueryStationStatsResult queryStationStats(QueryStationStats query){ - } - - /** - * 查询业务策略信息 - * @param query - * @return - */ - public BaseResult<QueryEquipBusinessPolicyResult> queryEquipBusinessPolicy(QueryEquipBusinessPolicy query){ + public static NotificationStartChargeResult notificationStartChargeResult(NotificationStartCharge info){ + HttpRequest post = HttpUtil.createPost(""); + buildBody(post, info); + HttpResponse execute = post.execute(); + if(200 != execute.getStatus()){ + log.error("启动充电结果推送失败:" + execute.body()); + return null; + } + JSONObject jsonObject = JSON.parseObject(execute.body()); + Integer ret = jsonObject.getInteger("Ret"); + if(0 != ret){ + log.error("启动充电结果推送失败:" + execute.body()); + return null; + } + return jsonObject.getObject("Data", NotificationStartChargeResult.class); } - /** - * 查询充电状态 - * @param query - * @return - */ - public BaseResult<QueryEquipChargeStatusResult> queryEquipChargeStatus(QueryEquipChargeStatus query){ - } + + + /** @@ -65,18 +128,101 @@ * @param info * @return */ - public BaseResult<NotificationEquipChargeStatusResult> notificationEquipChargeStatus(QueryEquipChargeStatusResult info){ + public static NotificationEquipChargeStatusResult notificationEquipChargeStatus(QueryEquipChargeStatusResult info){ + HttpRequest post = HttpUtil.createPost(""); + buildBody(post, info); + HttpResponse execute = post.execute(); + if(200 != execute.getStatus()){ + log.error("推送充电状态失败:" + execute.body()); + return null; + } + JSONObject jsonObject = JSON.parseObject(execute.body()); + Integer ret = jsonObject.getInteger("Ret"); + if(0 != ret){ + log.error("推送充电状态失败:" + execute.body()); + return null; + } + return jsonObject.getObject("Data", NotificationEquipChargeStatusResult.class); } /** - * 推送充电订单信息 - * @param indo + * 推送停止充电结果 + * @param info * @return */ - public BaseResult<NotificationChargeOrderInfoResult> notificationChargeOrderInfo(NotificationChargeOrderInfo indo){ + public static NotificationStopCharge notificationStopChargeResult(NotificationStopChargeResult info){ + HttpRequest post = HttpUtil.createPost(""); + buildBody(post, info); + HttpResponse execute = post.execute(); + if(200 != execute.getStatus()){ + log.error("推送停止充电结果失败:" + execute.body()); + return null; + } + JSONObject jsonObject = JSON.parseObject(execute.body()); + Integer ret = jsonObject.getInteger("Ret"); + if(0 != ret){ + log.error("推送停止充电结果失败:" + execute.body()); + return null; + } + return jsonObject.getObject("Data", NotificationStopCharge.class); } + + /** + * 推送充电订单信息 + * @param info + * @return + */ + public static NotificationChargeOrderInfoResult notificationChargeOrderInfo(NotificationChargeOrderInfo info){ + HttpRequest post = HttpUtil.createPost(""); + buildBody(post, info); + HttpResponse execute = post.execute(); + if(200 != execute.getStatus()){ + log.error("推送充电订单信息失败:" + execute.body()); + return null; + } + JSONObject jsonObject = JSON.parseObject(execute.body()); + Integer ret = jsonObject.getInteger("Ret"); + if(0 != ret){ + log.error("推送充电订单信息失败:" + execute.body()); + return null; + } + return jsonObject.getObject("Data", NotificationChargeOrderInfoResult.class); + } + + + /** + * 构建请求参数和消息头 + * @param post + * @param o + */ + public static void buildBody(HttpRequest post, Object o){ + Long key = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + Integer integer = map.get(key); + if(null == integer){ + integer = 1; + }else{ + integer++; + } + map.put(key, integer); + post.contentType("application/json;charset=utf-8"); + post.header("Authorization", "Bearer " + getToken()); + JSONObject body = new JSONObject(); + body.put("OperatorID", OperatorID); + body.put("Data", AESUtil.encrypt(JSON.toJSONString(o))); + body.put("TimeStamp", key); + body.put("Seq", String.format("%04d", integer)); + body.put("Sig", ""); + post.body(body.toJSONString()); + + //清空小于当前时间的map中的无效数据 + for (Long k : map.keySet()) { + if(k <= (key - 10)){ + map.remove(k); + } + } + } } -- Gitblit v1.7.1