Pu Zhibing
2025-02-05 bad2110204732e41ed5bc6e48b6e27fe4b6a2249
新增加互联互通扩展接口
5个文件已修改
275 ■■■■■ 已修改文件
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/Operator.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java 98 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/kuaidian/TCECKDUtil.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/enu/InterfaceUrlEnum.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/Operator.java
@@ -62,11 +62,6 @@
    @TableField("url")
    private String url;
    /**
     * 我方登录三方秘钥
     */
    @TableField("ourOperatorSecret")
    private String ourOperatorSecret;
    /**
     * 各平台登录token
     */
    @TableField("accessToken")
@@ -77,6 +72,36 @@
    @TableField("tokenAvailableTime")
    private LocalDateTime tokenAvailableTime;
    /**
     * 我方运营商唯一码
     */
    @TableField("ourOperatorId")
    private String ourOperatorId;
    /**
     * 我方运营商名称
     */
    @TableField("ourName")
    private String ourName;
    /**
     * 我方运营商秘钥
     */
    @TableField("ourOperatorSecret")
    private String ourOperatorSecret;
    /**
     * 我方数据加密秘钥
     */
    @TableField("ourDataSecret")
    private String ourDataSecret;
    /**
     * 我方初始化向量
     */
    @TableField("ourDataSecretIv")
    private String ourDataSecretIv;
    /**
     * 我方签名秘钥
     */
    @TableField("ourSigSecret")
    private String ourSigSecret;
    /**
     * token
     */
    @TableField(exist = false)
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java
@@ -161,7 +161,7 @@
        BaseResult baseResult = requestCheck(false, baseRequest, request);
        if(0 != baseResult.getRet()){
            baseResult.setData("");
            baseResult.setSig(TCECUtil.buildSign(baseResult));
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            return baseResult;
        }
        QueryTokenResult queryTokenResult = new QueryTokenResult();
@@ -171,9 +171,9 @@
            queryTokenResult.setFailReason(1);
            //参数加密
            String jsonString = JSON.toJSONString(queryTokenResult);
            String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
            String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
            baseResult.setData(encrypt);
            baseResult.setSig(TCECUtil.buildSign(baseResult));
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            return baseResult;
        }
        
@@ -185,9 +185,9 @@
            queryTokenResult.setFailReason(2);
            //参数加密
            String jsonString = JSON.toJSONString(queryTokenResult);
            String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
            String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
            baseResult.setData(encrypt);
            baseResult.setSig(TCECUtil.buildSign(baseResult));
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            return baseResult;
        }
        
@@ -202,9 +202,9 @@
        queryTokenResult.setTokenAvailableTime(expires_in * 60);
        //参数加密
        String jsonString = JSON.toJSONString(queryTokenResult);
        String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
        String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
        baseResult.setData(encrypt);
        baseResult.setSig(TCECUtil.buildSign(baseResult));
        baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
        return baseResult;
    }
    
@@ -222,7 +222,7 @@
        BaseResult baseResult = requestCheck(true, baseRequest, request);
        if(0 != baseResult.getRet()){
            baseResult.setData("");
            baseResult.setSig(TCECUtil.buildSign(baseResult));
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            return baseResult;
        }
        Operator operator = baseResult.getOperator();
@@ -246,9 +246,9 @@
        queryStationsInfoResult.setStationInfos(buildSite(parkingLots, siteListPaging.getRecords()));
        //参数加密
        String jsonString = JSON.toJSONString(queryStationsInfoResult);
        String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
        String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
        baseResult.setData(encrypt);
        baseResult.setSig(TCECUtil.buildSign(baseResult));
        baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
        return baseResult;
    }
    
@@ -493,7 +493,7 @@
        BaseResult baseResult = requestCheck(true, baseRequest, request);
        if(0 != baseResult.getRet()){
            baseResult.setData("");
            baseResult.setSig(TCECUtil.buildSign(baseResult));
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            return baseResult;
        }
        Operator operator = baseResult.getOperator();
@@ -550,9 +550,9 @@
        result.setStationStatusInfos(StationStatusInfos);
        //参数加密
        String jsonString = JSON.toJSONString(result);
        String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
        String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
        baseResult.setData(encrypt);
        baseResult.setSig(TCECUtil.buildSign(baseResult));
        baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
        return baseResult;
    }
    
@@ -570,7 +570,7 @@
        BaseResult baseResult = requestCheck(true, baseRequest, request);
        if(0 != baseResult.getRet()){
            baseResult.setData("");
            baseResult.setSig(TCECUtil.buildSign(baseResult));
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            return baseResult;
        }
        Operator operator = baseResult.getOperator();
@@ -620,9 +620,9 @@
        result.setStationStats(stationStats);
        //参数加密
        String jsonString = JSON.toJSONString(result);
        String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
        String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
        baseResult.setData(encrypt);
        baseResult.setSig(TCECUtil.buildSign(baseResult));
        baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
        return baseResult;
    }
    
@@ -637,7 +637,7 @@
        BaseResult baseResult = requestCheck(true, baseRequest, request);
        if(0 != baseResult.getRet()){
            baseResult.setData("");
            baseResult.setSig(TCECUtil.buildSign(baseResult));
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            return baseResult;
        }
        Operator operator = baseResult.getOperator();
@@ -687,9 +687,9 @@
        }
        //参数加密
        String jsonString = JSON.toJSONString(queryEquipAuthResult);
        String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
        String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
        baseResult.setData(encrypt);
        baseResult.setSig(TCECUtil.buildSign(baseResult));
        baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
        return baseResult;
    }
    
@@ -705,7 +705,7 @@
        BaseResult baseResult = requestCheck(true, baseRequest, request);
        if(0 != baseResult.getRet()){
            baseResult.setData("");
            baseResult.setSig(TCECUtil.buildSign(baseResult));
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            return baseResult;
        }
        Operator operator = baseResult.getOperator();
@@ -726,9 +726,9 @@
            baseResult.setMsg("connectorID 参数无效");
            //参数加密
            String jsonString = JSON.toJSONString(queryEquipBusinessPolicyResult);
            String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
            String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
            baseResult.setData(encrypt);
            baseResult.setSig(TCECUtil.buildSign(baseResult));
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            return baseResult;
        }
        Integer accountingStrategyId = tChargingGun.getAccountingStrategyId();
@@ -743,9 +743,9 @@
            queryEquipBusinessPolicyResult.setSumPeriod(0);
            //参数加密
            String jsonString = JSON.toJSONString(queryEquipBusinessPolicyResult);
            String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
            String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
            baseResult.setData(encrypt);
            baseResult.setSig(TCECUtil.buildSign(baseResult));
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            return baseResult;
        }
        List<PolicyInfo> PolicyInfos = new ArrayList<>();
@@ -760,9 +760,9 @@
        queryEquipBusinessPolicyResult.setPolicyInfos(PolicyInfos);
        //参数加密
        String jsonString = JSON.toJSONString(queryEquipBusinessPolicyResult);
        String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
        String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
        baseResult.setData(encrypt);
        baseResult.setSig(TCECUtil.buildSign(baseResult));
        baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
        return baseResult;
    }
    
@@ -820,7 +820,7 @@
        BaseResult baseResult = requestCheck(true, baseRequest, request);
        if(0 != baseResult.getRet()){
            baseResult.setData("");
            baseResult.setSig(TCECUtil.buildSign(baseResult));
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            return baseResult;
        }
        Operator operator = baseResult.getOperator();
@@ -843,9 +843,9 @@
            result.setStartChargeSeqStat(5);
            //参数加密
            String jsonString = JSON.toJSONString(result);
            String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
            String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
            baseResult.setData(encrypt);
            baseResult.setSig(TCECUtil.buildSign(baseResult));
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            return baseResult;
        }
        //设备离线
@@ -855,9 +855,9 @@
            result.setStartChargeSeqStat(5);
            //参数加密
            String jsonString = JSON.toJSONString(result);
            String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
            String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
            baseResult.setData(encrypt);
            baseResult.setSig(TCECUtil.buildSign(baseResult));
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            return baseResult;
        }
        //调用充电接口
@@ -876,9 +876,9 @@
            result.setStartChargeSeqStat(2);
            //参数加密
            String jsonString = JSON.toJSONString(result);
            String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
            String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
            baseResult.setData(encrypt);
            baseResult.setSig(TCECUtil.buildSign(baseResult));
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            return baseResult;
        }
        result.setStartChargeSeqStat(1);
@@ -886,9 +886,9 @@
        result.setFailReason(0);
        //参数加密
        String jsonString = JSON.toJSONString(result);
        String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
        String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
        baseResult.setData(encrypt);
        baseResult.setSig(TCECUtil.buildSign(baseResult));
        baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
        return baseResult;
    }
    
@@ -948,7 +948,7 @@
        BaseResult baseResult = requestCheck(true, baseRequest, request);
        if(0 != baseResult.getRet()){
            baseResult.setData("");
            baseResult.setSig(TCECUtil.buildSign(baseResult));
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            return baseResult;
        }
        Operator operator = baseResult.getOperator();
@@ -959,9 +959,9 @@
        QueryEquipChargeStatusResult queryEquipChargeStatusResult = buildQueryEquipChargeStatusResult(queryEquipChargeStatus.getStartChargeSeq());
        //参数加密
        String jsonString = JSON.toJSONString(queryEquipChargeStatusResult);
        String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
        String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
        baseResult.setData(encrypt);
        baseResult.setSig(TCECUtil.buildSign(baseResult));
        baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
        return baseResult;
    }
    
@@ -1123,7 +1123,7 @@
        BaseResult baseResult = requestCheck(true, baseRequest, request);
        if(0 != baseResult.getRet()){
            baseResult.setData("");
            baseResult.setSig(TCECUtil.buildSign(baseResult));
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            return baseResult;
        }
        Operator operator = baseResult.getOperator();
@@ -1143,16 +1143,16 @@
            queryStopChargeResult.setFailReason(3);
            //参数加密
            String jsonString = JSON.toJSONString(queryStopChargeResult);
            String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
            String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
            baseResult.setData(encrypt);
            baseResult.setSig(TCECUtil.buildSign(baseResult));
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            return baseResult;
        }
        //参数加密
        String jsonString = JSON.toJSONString(queryStopChargeResult);
        String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
        String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
        baseResult.setData(encrypt);
        baseResult.setSig(TCECUtil.buildSign(baseResult));
        baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
        return baseResult;
    }
    
@@ -1338,7 +1338,7 @@
        BaseResult baseResult = requestCheck(true, baseRequest, request);
        if(0 != baseResult.getRet()){
            baseResult.setData("");
            baseResult.setSig(TCECUtil.buildSign(baseResult));
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            return baseResult;
        }
        Operator operator = baseResult.getOperator();
@@ -1352,9 +1352,9 @@
        
        //参数加密
        String jsonString = JSON.toJSONString(queryTerminalCodeResult);
        String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
        String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
        baseResult.setData(encrypt);
        baseResult.setSig(TCECUtil.buildSign(baseResult));
        baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
        return baseResult;
    }
    
@@ -1412,7 +1412,7 @@
        BaseResult baseResult = requestCheck(true, baseRequest, request);
        if(0 != baseResult.getRet()){
            baseResult.setData("");
            baseResult.setSig(TCECUtil.buildSign(baseResult));
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            return baseResult;
        }
        Operator operator = baseResult.getOperator();
@@ -1423,9 +1423,9 @@
        QueryChargeOrderInfoResult result = buildQueryChargeOrderInfoResult(queryChargeOrderInfo);
        //参数加密
        String jsonString = JSON.toJSONString(result);
        String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
        String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
        baseResult.setData(encrypt);
        baseResult.setSig(TCECUtil.buildSign(baseResult));
        baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
        return baseResult;
    }
    
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java
@@ -35,17 +35,17 @@
    
    private static OperatorClient operatorClient = SpringUtils.getBean(OperatorClient.class);
    
    private static Map<Long, Integer> map = new HashMap<>();
    public static Map<Long, Integer> map = new HashMap<>();
    
    
    /**
     * 获取token
     */
    public static String queryToken(Operator operator){
        HttpRequest post = HttpUtil.createPost("");
        HttpRequest post = HttpUtil.createPost(operator.getTestUrl() + InterfaceUrlEnum.QUERY_TOKEN.getUrl());
        post.contentType("application/json;charset=utf-8");
        JSONObject body = new JSONObject();
        body.put("OperatorID", OperatorID);
        body.put("OperatorID", operator.getOurOperatorId());
        body.put("OperatorSecret", operator.getOurOperatorSecret());
        post.body(body.toJSONString());
        HttpResponse execute = post.execute();
@@ -241,14 +241,14 @@
        post.contentType("application/json;charset=utf-8");
        post.header("Authorization", "Bearer " + getToken(operator));
        BaseRequest baseRequest = new BaseRequest();
        baseRequest.setOperatorID(OperatorID);
        baseRequest.setOperatorID(operator.getOurOperatorId());
        baseRequest.setTimeStamp(timeStamp);
        baseRequest.setSeq(String.format("%04d", integer));
        String jsonString = JSON.toJSONString(o);
        String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
        String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
        baseRequest.setData(encrypt);
        baseRequest.setOperator(operator);
        baseRequest.setSig(buildSign(baseRequest));
        baseRequest.setSig(ourBuildSign(baseRequest));
        post.body(JSON.toJSONString(baseRequest));
        //清空小于当前时间的map中的无效数据
        for (Long k : map.keySet()) {
@@ -284,4 +284,32 @@
        return sign;
    }
    
    /**
     * 构建签名字符串
     * @param model
     * @return
     */
    public static String ourBuildSign(BaseModel model){
        Operator operator = model.getOperator();
        //签名秘钥SigSecret
        String key = operator.getOurSigSecret();
        String sign = "";
        switch (operator.getName()){
            case "XinDianTu":
                //进行字符串拼接、计算
                String m = new StringBuilder(operator.getOurOperatorId()).append(model.getData()).append(model.getTimeStamp()).append(model.getSeq()).toString();
                byte[] hmacMd5 = SignUtil.getHMacMD5Bytes(key.getBytes(), m.getBytes());
                // 打印计算得到的签名Sig
                sign = SignUtil.bytesToHexString(hmacMd5);
                break;
            case "KuaiDian":
                sign = SignUtil.hmacSign(model.getData(), key);
                break;
        }
        return sign;
    }
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/kuaidian/TCECKDUtil.java
@@ -8,6 +8,7 @@
import com.ruoyi.common.core.utils.SpringUtils;
import com.ruoyi.integration.drainage.AESUtil;
import com.ruoyi.integration.drainage.SignUtil;
import com.ruoyi.integration.drainage.TCECUtil;
import com.ruoyi.integration.drainage.kuaidian.model.NotificationStationChangeResult;
import com.ruoyi.integration.drainage.kuaidian.model.StationChange;
import com.ruoyi.integration.drainage.model.*;
@@ -31,59 +32,7 @@
 * @Date 2025/1/21 11:48
 */
@Slf4j
public class TCECKDUtil {
    /**
     * 运营商标识
     */
    private static final String OperatorID = "";
    private static OperatorClient operatorClient = SpringUtils.getBean(OperatorClient.class);
    private static Map<Long, Integer> map = new HashMap<>();
    /**
     * 获取token
     */
    public static String queryToken(Operator operator){
        HttpRequest post = HttpUtil.createPost("");
        post.contentType("application/json;charset=utf-8");
        JSONObject body = new JSONObject();
        body.put("OperatorID", OperatorID);
        body.put("OperatorSecret", operator.getOurOperatorSecret());
        post.body(body.toJSONString());
        HttpResponse execute = post.execute();
        if(200 != execute.getStatus()){
            log.error("获取三方token失败:" + execute.body());
            return null;
        }
        JSONObject jsonObject = JSON.parseObject(execute.body());
        Integer succStat = jsonObject.getInteger("SuccStat");
        if(0 != succStat){
            log.error("获取三方token失败:" + jsonObject.getString("FailReason"));
            return null;
        }
        String token = jsonObject.getString("AccessToken");
        Long tokenAvailableTime = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC) + jsonObject.getLong("TokenAvailableTime");
        LocalDateTime localDateTime = Instant.ofEpochSecond(tokenAvailableTime).atOffset(ZoneOffset.UTC).toLocalDateTime();
        operator.setAccessToken(token);
        operator.setTokenAvailableTime(localDateTime);
        operatorClient.editOperator(operator);
        return token;
    }
    /**
     * 获取token
     * @return
     */
    public static String getToken(Operator operator){
        if(null != operator.getTokenAvailableTime() && operator.getTokenAvailableTime().isBefore(LocalDateTime.now())){
            return operator.getAccessToken();
        }else{
            return queryToken(operator);
        }
    }
public class TCECKDUtil extends TCECUtil {
    
    
    
@@ -97,7 +46,7 @@
     */
    public static NotificationStationChangeResult notificationStationChange(Operator operator, Integer type, List<Integer> siteIds) {
        StationChange stationChange = new StationChange();
        stationChange.setOperatorId(OperatorID);
        stationChange.setOperatorId(operator.getOurOperatorId());
        stationChange.setType(type);
        List<String> collect = siteIds.stream().map(String::valueOf).collect(Collectors.toList());
        stationChange.setStationIds(collect);
@@ -111,49 +60,7 @@
        return JSON.parseObject(execute.body(), NotificationStationChangeResult.class);
    }
    
    
    /**
     * 构建请求参数和消息头
     * @param post
     * @param o
     */
    public static void buildBody(HttpRequest post, Object o, Operator operator){
        Long timeStamp = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
        Integer integer = map.get(timeStamp);
        if(null == integer){
            integer = 1;
        }else{
            integer++;
        }
        map.put(timeStamp, integer);
        post.contentType("application/json;charset=utf-8");
        post.header("Authorization", "Bearer " + getToken(operator));
        BaseRequest baseRequest = new BaseRequest();
        baseRequest.setOperatorID(OperatorID);
        baseRequest.setTimeStamp(timeStamp);
        baseRequest.setSeq(String.format("%04d", integer));
        String jsonString = JSON.toJSONString(o);
        String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
        baseRequest.setData(encrypt);
        baseRequest.setOperator(operator);
        baseRequest.setSig(buildSign(baseRequest));
        post.body(JSON.toJSONString(baseRequest));
        //清空小于当前时间的map中的无效数据
        for (Long k : map.keySet()) {
            if(k <= (timeStamp - 10)){
                map.remove(k);
            }
        }
    }
    public static String buildSign(BaseModel model){
        Operator operator = model.getOperator();
        //签名秘钥SigSecret
        String key = operator.getSigSecret();
        String sign = SignUtil.hmacSign(model.getData(), key);
        return sign;
    }
    
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/enu/InterfaceUrlEnum.java
@@ -6,6 +6,7 @@
 * @Date 2025/1/21 14:38
 */
public enum InterfaceUrlEnum {
    QUERY_TOKEN("/query_token", "获取权限token"),
    NOTIFICATION_STATION_STATUS("/notification_station_status", "设备状态变化推送"),
    NOTIFICATION_STATION_CHANGE("/notification_station_change", "站点计费策略变更推送"),
    NOTIFICATION_START_CHARGE_RESULT("/notification_start_charge_result", "推送启动充电结果"),