无关风月
2025-04-07 422b10242d0e1c3164eb96a10379b9d638b169ee
监管平台
2 文件已重命名
11个文件已修改
871 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/SiteFallbackFactory.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/SiteClient.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/TCECClient.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/RuoYiIntegrationApplication.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECSuperviseUtil.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java 578 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/util/JianGuanTask.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/test/java/com/ruoyi/integration/RuoYiIntegrationApplicationTests.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/RuoYiOrderApplication.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/RuoYiOtherApplication.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/SiteFallbackFactory.java
@@ -64,6 +64,11 @@
            public PageInfo<Site> getSiteListPaging(Integer PageNo, Integer PageSize, List<String> ids) {
                return null;
            }
            @Override
            public PageInfo<Site> getSiteListPagingJianGuan(Integer PageNo, Integer PageSize, List<String> ids) {
                return null;
            }
        };
    }
}
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/SiteClient.java
@@ -55,4 +55,14 @@
    PageInfo<Site> getSiteListPaging(@RequestParam("PageNo") Integer PageNo,
                                     @RequestParam("PageSize") Integer PageSize,
                                     @RequestParam("ids") List<String> ids);
    /**
     * 分页查询站电数据
     * @param PageNo
     * @param PageSize
     * @return
     */
    @PostMapping("/site/getSiteListPagingJianGuan")
    PageInfo<Site> getSiteListPagingJianGuan(@RequestParam("PageNo") Integer PageNo,
                                     @RequestParam("PageSize") Integer PageSize,
                                     @RequestParam("ids") List<String> ids);
}
ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/TCECClient.java
@@ -23,7 +23,7 @@
     * @return
     */
    @PostMapping("/evcs/v1.0/supervise_notification_station_info")
    R  superviseNotificationStationInfo(@RequestParam Integer id);
    R  superviseNotificationStationInfo(@RequestParam("id") Integer id);
    /**
     * 接口状态变化后推送给第三方
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
@@ -625,4 +625,17 @@
        PageInfo<Site> page = siteService.lambdaQuery().eq(Site::getStatus, 1).in(ids.size() > 0, Site::getId, ids).page(pageInfo);
        return page;
    }
    /**
     * 分页查询站电数据
     * @param PageNo
     * @param PageSize
     * @return
     */
    @PostMapping("/getSiteListPagingJianGuan")
    public PageInfo<Site> getSiteListPagingJianGuan(@RequestParam("PageNo") Integer PageNo, @RequestParam("PageSize") Integer PageSize,
                                            @RequestParam("ids") List<String> ids){
        PageInfo<Site> pageInfo = new PageInfo<>(PageNo, PageSize);
        PageInfo<Site> page = siteService.lambdaQuery().eq(Site::getStatus, 1).in(ids.size() > 0, Site::getId, ids).page(pageInfo);
        return page;
    }
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/RuoYiIntegrationApplication.java
@@ -27,7 +27,11 @@
@EnableBinding({ Source.class, Sink.class })
public class RuoYiIntegrationApplication {
    public static void main(String[] args) {
        SpringApplication.run(RuoYiIntegrationApplication.class, args);
        try{
            SpringApplication.run(RuoYiIntegrationApplication.class, args);
        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println("(♥◠‿◠)ノ゙  硬件集成模块启动成功   ლ(´ڡ`ლ)゙  \n" +
                " .-------.       ____     __        \n" +
                " |  _ _   \\      \\   \\   /  /    \n" +
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java
@@ -1,6 +1,7 @@
package com.ruoyi.integration.drainage;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.common.utils.JacksonUtils;
import com.ruoyi.chargingPile.api.feignClient.*;
import com.ruoyi.chargingPile.api.model.*;
@@ -13,6 +14,9 @@
import com.ruoyi.integration.drainage.kuaidian.model.*;
import com.ruoyi.integration.drainage.model.*;
import com.ruoyi.integration.drainage.model.enu.*;
import com.ruoyi.integration.drainage.util.AesEncryption;
import com.ruoyi.integration.drainage.util.HMacMD5Util;
import com.ruoyi.integration.drainage.util.SequenceGenerator;
import com.ruoyi.integration.mongodb.service.UploadRealTimeMonitoringDataService;
import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient;
import com.ruoyi.order.api.feignClient.ChargingOrderClient;
@@ -103,19 +107,22 @@
        Long mapKey = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
        baseResult.setTimeStamp(mapKey);
        baseResult.setSeq("0001");
        //校验token和签名
        String operatorID = baseRequest.getOperatorID();
        String sig = baseRequest.getSig();
        Long timeStamp = baseRequest.getTimeStamp();
        String data = baseRequest.getData();
        String seq = baseRequest.getSeq();
        if(StringUtils.isEmpty(operatorID) || StringUtils.isEmpty(sig) || StringUtils.isEmpty(data) || StringUtils.isEmpty(seq) || null == timeStamp){
            baseResult.setRet(4003);
            baseResult.setMsg("参数异常");
            return baseResult;
        }
        R<Operator> r = operatorClient.getOperator(operatorID);
        if(200 != r.getCode()){
            baseResult.setRet(500);
            baseResult.setMsg("系统异常");
@@ -139,6 +146,30 @@
        if(!sign.equals(sig)){
            baseResult.setRet(4001);
            baseResult.setMsg("签名校验失败");
            return baseResult;
        }
        return baseResult;
    }
    public BaseResult requestCheckJianGuan(Boolean tokenCheck, BaseRequest baseRequest, HttpServletRequest request){
        Operator operator = new Operator();
        BaseResult baseResult = new BaseResult();
        baseResult.setRet(0);
        baseResult.setMsg("成功");
        baseResult.setOperatorID(baseRequest.getOperatorID());
        operator.setOperatorId(baseRequest.getOperatorID());
        Long mapKey = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
        baseResult.setTimeStamp(mapKey);
        baseResult.setSeq("0001");
        //校验token和签名
        String operatorID = baseRequest.getOperatorID();
        String sig = baseRequest.getSig();
        Long timeStamp = baseRequest.getTimeStamp();
        String data = baseRequest.getData();
        String seq = baseRequest.getSeq();
        baseResult.setOperator(operator);
        if(StringUtils.isEmpty(operatorID) || StringUtils.isEmpty(sig) || StringUtils.isEmpty(data) || StringUtils.isEmpty(seq) || null == timeStamp){
            baseResult.setRet(4003);
            baseResult.setMsg("参数异常");
            return baseResult;
        }
        return baseResult;
@@ -214,6 +245,48 @@
        log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult));
        return baseResult;
    }
    /**
     * 获取token
     * @return
     */
    @PostMapping("/query_token_jianguan")
    public BaseResult queryTokenJianguan(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
        log.info("三方平台获取token请求参数:" + JacksonUtils.toJson(baseRequest));
        BaseResult baseResult = requestCheckJianGuan(false, baseRequest, request);
        if(0 != baseResult.getRet()){
            log.info("三方平台获取token响应Data:");
            baseResult.setData("");
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult));
            return baseResult;
        }
        QueryTokenResult queryTokenResult = new QueryTokenResult();
        //生成token
        Operator operator = baseResult.getOperator();
        Map<String, Object> token = tokenUtil.createToken(operator);
        String access_token = token.get("access_token").toString();
        Long expires_in = Long.valueOf(token.get("expires_in").toString());
        queryTokenResult.setOperatorID("906171535");
        queryTokenResult.setSuccStat(0);
        queryTokenResult.setFailReason(0);
        queryTokenResult.setAccessToken(access_token);
        queryTokenResult.setTokenAvailableTime(expires_in * 60);
        //参数加密
        String jsonString = JacksonUtils.toJson(queryTokenResult);
        log.info("三方平台获取token响应Data:" + jsonString);
//        String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
//        baseResult.setData(encrypt);
        String timeStamp = System.currentTimeMillis() + "";
        SequenceGenerator generator = new SequenceGenerator();
        String nextSequence = generator.getNextSequence();
        String data = AesEncryption.encrypt(OurDataSecret, OurDataSecretIV,jsonString);
        String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,OurSigSecret);
        baseResult.setData(data);
        baseResult.setSig(hmacMD5);
        log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult));
        return baseResult;
    }
    
    
    
@@ -227,7 +300,7 @@
    public BaseResult queryStationsInfo(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
        log.info("三方平台查询充电站信息请求参数:" + JacksonUtils.toJson(baseRequest));
        //校验token和签名
        BaseResult baseResult = requestCheck(true, baseRequest, request);
        BaseResult baseResult = requestCheckJianGuan(true, baseRequest, request);
        if(0 != baseResult.getRet()){
            log.info("三方平台查询充电站信息响应Data:");
            baseResult.setData("");
@@ -1701,19 +1774,8 @@
     */
    @PostMapping("/supervise_query_operator_info")
    public BaseResult superviseQueryOperatorInfo(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
        log.info("监管平台查询充电站信息请求参数:" + JacksonUtils.toJson(baseRequest));
        //校验token和签名
        BaseResult baseResult = requestCheck(true, baseRequest, request);
        if(0 != baseResult.getRet()){
            log.info("监管平台查询充电站信息响应Data:");
            baseResult.setData("");
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            log.info("监管平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult));
            return baseResult;
        }
        Operator operator = baseResult.getOperator();
        //解密参数
        String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv());
        String decrypt = AESUtil.decrypt(baseRequest.getData(), OurDataSecret, OurDataSecretIV);
        log.info("监管平台查询充电站信息请求Data:" + decrypt);
        SuperviseQueryOperatorInfo superviseQueryOperatorInfo = JSON.parseObject(decrypt, SuperviseQueryOperatorInfo.class);
        Integer pageNo = superviseQueryOperatorInfo.getPageNo();
@@ -1740,12 +1802,17 @@
        // 将superviseQueryOperatorInfoResults转化为json数组
        superviseQueryOperatorInfoResultPage.setOperatorInfos(superviseQueryOperatorInfoResults);
        String jsonString = JacksonUtils.toJson(superviseQueryOperatorInfoResultPage);
        //参数加密
        log.info("监管平台查询充电站信息响应Data:" + jsonString);
        String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
        baseResult.setData(encrypt);
        baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
        log.info("监管平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult));
        String timeStamp = System.currentTimeMillis() + "";
        SequenceGenerator generator = new SequenceGenerator();
        String nextSequence = generator.getNextSequence();
        String data = AesEncryption.encrypt(OurDataSecret, OurDataSecretIV,JSONObject.toJSONString(superviseQueryOperatorInfoResultPage));
        String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,OurSigSecret);
        BaseResult baseResult = new BaseResult();
        baseResult.setData(data);
        baseResult.setSig(hmacMD5);
        baseResult.setRet(0);
        baseResult.setMsg("OK");
        baseResult.setOperatorID(OperatorID);
        return baseResult;
    }
@@ -1759,20 +1826,9 @@
     */
    @PostMapping("/supervise_query_stations_info")
    public BaseResult superviseQueryStationsInfo(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
        log.info("监管平台查询充电站信息请求参数:" + JacksonUtils.toJson(baseRequest));
        //校验token和签名
        BaseResult baseResult = requestCheck(true, baseRequest, request);
        if(0 != baseResult.getRet()){
            log.info("监管平台查询充电站信息响应Data:");
            baseResult.setData("");
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            log.info("监管平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult));
            return baseResult;
        }
        Operator operator = baseResult.getOperator();
        String decrypt = AESUtil.decrypt(baseRequest.getData(), OurDataSecret, OurDataSecretIV);
        log.info("监管平台supervise_query_stations_infoData:" + decrypt);
        //解密参数
        String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv());
        log.info("监管平台查询充电站信息请求Data:" + decrypt);
        QueryStationsInfo queryStationsInfo = JSON.parseObject(decrypt, QueryStationsInfo.class);
        Integer pageNo = queryStationsInfo.getPageNo();
        Integer pageSize = queryStationsInfo.getPageSize();
@@ -1790,13 +1846,17 @@
        queryStationsInfoResult.setPageCount((0 == (siteListPaging.getTotal() % pageSize) ? 0 : 1) + Double.valueOf(siteListPaging.getTotal() / pageSize).intValue());
        queryStationsInfoResult.setItemSize(Long.valueOf(siteListPaging.getTotal()).intValue());
        queryStationsInfoResult.setStationInfos(buildSite(parkingLots, siteListPaging.getRecords()));
        //参数加密
        String jsonString = JacksonUtils.toJson(queryStationsInfoResult);
        log.info("监管平台查询充电站信息响应Data:" + jsonString);
        String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
        baseResult.setData(encrypt);
        baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
        log.info("监管平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult));
        String timeStamp = System.currentTimeMillis() + "";
        SequenceGenerator generator = new SequenceGenerator();
        String nextSequence = generator.getNextSequence();
        String data = AesEncryption.encrypt(OurDataSecret, OurDataSecretIV,JSONObject.toJSONString(queryStationsInfoResult));
        String hmacMD5 = HMacMD5Util.getHMacMD5(OurOperatorID,timeStamp, data,nextSequence,OurSigSecret);
        BaseResult baseResult = new BaseResult();
        baseResult.setData(data);
        baseResult.setSig(hmacMD5);
        baseResult.setRet(0);
        baseResult.setMsg("OK");
        baseResult.setOperatorID(OurOperatorID);
        return baseResult;
    }
    /**
@@ -1808,18 +1868,9 @@
    @PostMapping("/supervise_query_station_status")
    public BaseResult superviseQueryStationStatus(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
        log.info("监管平台查询充换电站状态信息请求参数:" + JacksonUtils.toJson(baseRequest));
        //校验token和签名
        BaseResult baseResult = requestCheck(true, baseRequest, request);
        if(0 != baseResult.getRet()){
            log.info("监管平台查询充换电站状态信息响应Data:");
            baseResult.setData("");
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            log.info("监管平台查询充换电站状态信息响应参数:" + JacksonUtils.toJson(baseResult));
            return baseResult;
        }
        Operator operator = baseResult.getOperator();
        String decrypt = AESUtil.decrypt(baseRequest.getData(), OurDataSecret, OurDataSecretIV);
        log.info("监管平台supervise_query_station_statusData:" + decrypt);
        //解密参数
        String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv());
        log.info("监管平台查询充换电站状态信息请求Data:" + decrypt);
        QueryStationStatus queryStationStatus = JSON.parseObject(decrypt, QueryStationStatus.class);
        List<String> stationIDs = queryStationStatus.getStationIDs();
@@ -1885,15 +1936,34 @@
            }
            queryStationStatusResult.setStationStatusInfos(stationStatusInfos);
        }
        //参数加密
        String jsonString = JacksonUtils.toJson(queryStationStatusResult);
        log.info("监管平台查询充电站信息响应Data:" + jsonString);
        String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
        baseResult.setData(encrypt);
        baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
        log.info("监管平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult));
        String timeStamp = System.currentTimeMillis() + "";
        SequenceGenerator generator = new SequenceGenerator();
        String nextSequence = generator.getNextSequence();
        String data = AesEncryption.encrypt(OurDataSecret, OurDataSecretIV,JSONObject.toJSONString(queryStationStatusResult));
        String hmacMD5 = HMacMD5Util.getHMacMD5(OurOperatorID,timeStamp, data,nextSequence,OurSigSecret);
        BaseResult baseResult = new BaseResult();
        baseResult.setData(data);
        baseResult.setSig(hmacMD5);
        baseResult.setRet(0);
        baseResult.setMsg("OK");
        baseResult.setOperatorID(OurOperatorID);
        return baseResult;
    }
    // 测试环境
    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 OurDataSecret = "50a61b93919c9605";
    private static final String OurDataSecretIV = "7c8ac6861661d585";
    private static final String OurSigSecret = "a6fedf0e1b27d6f6";
    private static final String OurOperatorID = "MA01H3BQ3";
    private static final String OurOperatorSecret = "f1331ef0b37c2d1a";
    /**
@@ -2058,7 +2128,7 @@
     * @return
     */
    @PostMapping("/supervise_notification_station_info")
    public R superviseNotificationStationInfo(@RequestParam Integer id){
    public R superviseNotificationStationInfo(@RequestParam("id") Integer id){
        String serviceTel = systemConfigurationClient.getServerPhone().getData();
        Site site = siteClient.getSiteAll().getData().stream().filter(e -> e.getId().equals(id)).findFirst().orElse(new Site());
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECSuperviseUtil.java
@@ -40,6 +40,12 @@
    private static final String DataSecret = "50a61b93919c9604";
    private static final String DataSecretIV = "7c8ac6861661d584";
    private static final String OurDataSecret = "50a61b93919c9605";
    private static final String OurDataSecretIV = "7c8ac6861661d585";
    private static final String OurSigSecret = "a6fedf0e1b27d6f6";
    private static final String OurOperatorID = "MA01H3BQ3";
    private static final String OurOperatorSecret = "f1331ef0b37c2d1a";
    @Autowired
    private RedisService redisService;
    public static final String TOKEN_KEY = "charge_token:";
@@ -122,7 +128,7 @@
            return null;
        }
        //解密参数
        String decrypt = AESUtil.decrypt(baseResult.getData(), operator.getDataSecret(), operator.getDataSecretIv());
        String decrypt = AESUtil.decrypt(baseResult.getData(), DataSecret, DataSecretIV);
        log.info("推送三方平台设备状态Data:" + decrypt);
        NotificationStationStatusResult notificationStationStatusResult = JSON.parseObject(decrypt, NotificationStationStatusResult.class);
        return notificationStationStatusResult;
@@ -150,7 +156,7 @@
            return null;
        }
        //解密参数
        String decrypt = AESUtil.decrypt(baseResult.getData(), operator.getDataSecret(), operator.getDataSecretIv());
        String decrypt = AESUtil.decrypt(baseResult.getData(), DataSecret, DataSecretIV);
        log.info("推送三方平台充电状态Data:" + decrypt);
        NotificationEquipChargeStatusResult notificationEquipChargeStatusResult = JSON.parseObject(decrypt, NotificationEquipChargeStatusResult.class);
        return notificationEquipChargeStatusResult;
@@ -178,7 +184,7 @@
            return null;
        }
        //解密参数
        String decrypt = AESUtil.decrypt(baseResult.getData(), operator.getDataSecret(), operator.getDataSecretIv());
        String decrypt = AESUtil.decrypt(baseResult.getData(), DataSecret, DataSecretIV);
        log.info("推送三方平台充电订单信息Data:" + decrypt);
        NotificationChargeOrderInfoResult notificationChargeOrderInfoResult = JSON.parseObject(decrypt, NotificationChargeOrderInfoResult.class);
        return notificationChargeOrderInfoResult;
@@ -199,7 +205,7 @@
        baseRequest.setTimeStamp(timeStamp);
        baseRequest.setSeq("0001");
        String jsonString = JacksonUtils.toJson(o);
        String encrypt = AesEncryption.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
        String encrypt = AesEncryption.encrypt(jsonString, DataSecret, DataSecretIV);
        baseRequest.setData(encrypt);
        baseRequest.setOperator(operator);
//        baseRequest.setSig(buildSign(baseRequest));
@@ -232,7 +238,7 @@
            return ;
        }
        //解密参数
        String decrypt = AESUtil.decrypt(baseResult.getData(), operator.getDataSecret(), operator.getDataSecretIv());
        String decrypt = AESUtil.decrypt(baseResult.getData(), DataSecret, DataSecretIV);
        log.info("推送充电用能统计信息Data:" + decrypt);
    }
@@ -258,7 +264,7 @@
            return ;
        }
        //解密参数
        String decrypt = AESUtil.decrypt(baseResult.getData(), operator.getDataSecret(), operator.getDataSecretIv());
        String decrypt = AESUtil.decrypt(baseResult.getData(), DataSecret, DataSecretIV);
        log.info("推送充换电站信息信息Data:" + decrypt);
    }
    /**
@@ -283,13 +289,13 @@
            return ;
        }
        //解密参数
        String decrypt = AESUtil.decrypt(baseResult.getData(), operator.getDataSecret(), operator.getDataSecretIv());
        String decrypt = AESUtil.decrypt(baseResult.getData(), DataSecret, DataSecretIV);
        log.info("推送充换电站实时功率信息Data:" + decrypt);
    }
    public static void main(String[] args) {
        BaseModel model = new BaseModel();
        model.setOperatorID("MA25CNM38");
        model.setOperatorID("MA01H3BQ2");
        model.setData("AoArdDDcmHcmOMkCLHodTpY1xLtt9yhLqxvKPyfdlmEOBj1LJnQM+Z4JOZllt3Pj9rubfgxJ51zMAfzquQegJzHGAT9Y7JrKFzFe6jGtXo0=");
        model.setTimeStamp(20250205120800L);
        model.setSeq("0001");
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java
@@ -337,6 +337,20 @@
        }
        return sign;
    }
    public static String ourBuildSignJianGuan(BaseModel model){
        Operator operator = model.getOperator();
        if(null == operator){
            return "";
        }
        //签名秘钥SigSecret
        String key = operator.getOurSigSecret();
        String sign = "";
        //进行字符串拼接、计算
        String m1 = new StringBuilder(model.getOperatorID()).append(model.getData()).append(model.getTimeStamp()).append(model.getSeq()).toString();
        sign = SignUtil.hmacSign(m1, key);
        return sign;
    }
    
    
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java
File was renamed from ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController1.java
@@ -1,26 +1,25 @@
package com.ruoyi.integration.drainage;
package com.ruoyi.integration.drainage.util;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.common.utils.JacksonUtils;
import com.ruoyi.chargingPile.api.feignClient.*;
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.DateUtils;
import com.ruoyi.common.core.utils.HttpUtils;
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;
import com.ruoyi.integration.drainage.AESUtil;
import com.ruoyi.integration.drainage.TCECSuperviseUtil;
import com.ruoyi.integration.drainage.TCECUtil;
import com.ruoyi.integration.drainage.TokenUtil;
import com.ruoyi.integration.drainage.kuaidian.TCECKDUtil;
import com.ruoyi.integration.drainage.kuaidian.model.*;
import com.ruoyi.integration.drainage.model.*;
import com.ruoyi.integration.drainage.model.enu.*;
import com.ruoyi.integration.mongodb.service.UploadRealTimeMonitoringDataService;
import com.ruoyi.order.api.dto.ChargingStatisticeDTO;
import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient;
import com.ruoyi.order.api.feignClient.ChargingOrderClient;
import com.ruoyi.order.api.model.AddTripartitePlatformOrder;
@@ -32,16 +31,17 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.concurrent.*;
import java.util.stream.Collectors;
@@ -52,13 +52,12 @@
 */
@Slf4j
@RestController
@RequestMapping("/evcs/v1.0")
public class TCECController1 {
@RequestMapping("/evcs/v2.0")
public class TCECCJianGuanontroller {
    
    @Resource
    private SiteClient siteClient;
    @Autowired
    private TCECSuperviseUtil tcecSuperviseUtil;
    @Resource
    private ChargingPileClient chargingPileClient;
    
@@ -91,15 +90,9 @@
    
    @Resource
    private SystemConfigurationClient systemConfigurationClient;
    // 监管平台密钥 向量 地址
    private static String ourDataSecret = "";
    private static String ourDataSecretIv = "";
    private static String url = "https://dev-gov-hlht-sc.unievbj.com/evcs/v1.0.0/";// 测试
//    private static String url = "https://hlht-dipper-sc.unievbj.com/evcs/v1.0.0/";// 正式
    private static String operatorSecret = "f1331ef0b37c2d1b";// 测试
//    private static String operatorSecret = "a762796b2a8989b8";// 正式
    @Autowired
    private TCECSuperviseUtil tcecSuperviseUtil;
    private final static String operatorId = "906171535";
    
    /**
     * 请求校验
@@ -115,19 +108,22 @@
        Long mapKey = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
        baseResult.setTimeStamp(mapKey);
        baseResult.setSeq("0001");
        //校验token和签名
        String operatorID = baseRequest.getOperatorID();
        String sig = baseRequest.getSig();
        Long timeStamp = baseRequest.getTimeStamp();
        String data = baseRequest.getData();
        String seq = baseRequest.getSeq();
        if(StringUtils.isEmpty(operatorID) || StringUtils.isEmpty(sig) || StringUtils.isEmpty(data) || StringUtils.isEmpty(seq) || null == timeStamp){
            baseResult.setRet(4003);
            baseResult.setMsg("参数异常");
            return baseResult;
        }
        R<Operator> r = operatorClient.getOperator(operatorID);
        if(200 != r.getCode()){
            baseResult.setRet(500);
            baseResult.setMsg("系统异常");
@@ -155,11 +151,36 @@
        }
        return baseResult;
    }
    public BaseResult requestCheckJianGuan(Boolean tokenCheck, BaseRequest baseRequest, HttpServletRequest request){
        Operator operator = new Operator();
        BaseResult baseResult = new BaseResult();
        baseResult.setRet(0);
        baseResult.setMsg("成功");
        baseResult.setOperatorID(baseRequest.getOperatorID());
        operator.setOperatorId(baseRequest.getOperatorID());
        Long mapKey = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
        baseResult.setTimeStamp(mapKey);
        baseResult.setSeq("0001");
        //校验token和签名
        String operatorID = baseRequest.getOperatorID();
        String sig = baseRequest.getSig();
        Long timeStamp = baseRequest.getTimeStamp();
        String data = baseRequest.getData();
        String seq = baseRequest.getSeq();
        baseResult.setOperator(operator);
        if(StringUtils.isEmpty(operatorID) || StringUtils.isEmpty(sig) || StringUtils.isEmpty(data) || StringUtils.isEmpty(seq) || null == timeStamp){
            baseResult.setRet(4003);
            baseResult.setMsg("参数异常");
            return baseResult;
        }
        return baseResult;
    }
    
    
    
    
    
    /**
     * 获取token
     * @return
@@ -167,7 +188,7 @@
    @PostMapping("/query_token")
    public BaseResult queryToken(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
        log.info("三方平台获取token请求参数:" + JacksonUtils.toJson(baseRequest));
        BaseResult baseResult = requestCheck(false, baseRequest, request);
        BaseResult baseResult = requestCheckJianGuan(false, baseRequest, request);
        if(0 != baseResult.getRet()){
            log.info("三方平台获取token响应Data:");
            baseResult.setData("");
@@ -176,38 +197,8 @@
            return baseResult;
        }
        QueryTokenResult queryTokenResult = new QueryTokenResult();
        Operator operator = baseResult.getOperator();
        if(null == operator){
            queryTokenResult.setSuccStat(1);
            queryTokenResult.setFailReason(1);
            //参数加密
            String jsonString = JacksonUtils.toJson(queryTokenResult);
            log.info("三方平台获取token响应Data:" + jsonString);
            String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
            baseResult.setData(encrypt);
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult));
            return baseResult;
        }
        //解密参数
        String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv());
        log.info("三方平台获取token请求Data:" + decrypt);
        QueryToken queryToken = JSON.parseObject(decrypt, QueryToken.class);
        if(!queryToken.getOperatorSecret().equals(operator.getOurOperatorSecret())){
            queryTokenResult.setSuccStat(1);
            queryTokenResult.setFailReason(2);
            //参数加密
            String jsonString = JacksonUtils.toJson(queryTokenResult);
            log.info("三方平台获取token响应Data:" + jsonString);
            String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
            baseResult.setData(encrypt);
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult));
            return baseResult;
        }
        //生成token
        Operator operator = baseResult.getOperator();
        Map<String, Object> token = tokenUtil.createToken(operator);
        String access_token = token.get("access_token").toString();
        Long expires_in = Long.valueOf(token.get("expires_in").toString());
@@ -220,9 +211,15 @@
        //参数加密
        String jsonString = JacksonUtils.toJson(queryTokenResult);
        log.info("三方平台获取token响应Data:" + jsonString);
        String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
        baseResult.setData(encrypt);
        baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
//        String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
//        baseResult.setData(encrypt);
        String timeStamp = System.currentTimeMillis() + "";
        SequenceGenerator generator = new SequenceGenerator();
        String nextSequence = generator.getNextSequence();
        String data = AesEncryption.encrypt(OurDataSecret, OurDataSecretIV,jsonString);
        String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,OurSigSecret);
        baseResult.setData(data);
        baseResult.setSig(hmacMD5);
        log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult));
        return baseResult;
    }
@@ -239,7 +236,7 @@
    public BaseResult queryStationsInfo(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
        log.info("三方平台查询充电站信息请求参数:" + JacksonUtils.toJson(baseRequest));
        //校验token和签名
        BaseResult baseResult = requestCheck(true, baseRequest, request);
        BaseResult baseResult = requestCheckJianGuan(true, baseRequest, request);
        if(0 != baseResult.getRet()){
            log.info("三方平台查询充电站信息响应Data:");
            baseResult.setData("");
@@ -292,12 +289,14 @@
        List<StationInfo> StationInfos = new ArrayList<>();
        for (Site datum : sites) {
            StationInfo stationInfo = new StationInfo();
            stationInfo.setAreaCodeCountryside(datum.getAreaCodeCountryside());
            stationInfo.setStationUniqueNumber(datum.getCode());
            stationInfo.setAreaCodeCountryside(datum.getCountryCode());
            stationInfo.setStationClassification(datum.getStationClassification());
            stationInfo.setGeneralApplicationType(datum.getGeneralApplicationType());
            if (org.springframework.util.StringUtils.hasLength(datum.getSwapMatchCars())){
                stationInfo.setSwapMatchCars(Arrays.asList(datum.getSwapMatchCars().split(",")));
            }
            stationInfo.setSiteGuide(datum.getGuide());
            stationInfo.setBusineHours(datum.getStartServiceTime());
            stationInfo.setRoundTheClock(datum.getRoundTheClock());
            stationInfo.setParkType(datum.getParkType());
@@ -431,6 +430,7 @@
            EquipmentInfo equipmentInfo = new EquipmentInfo();
            equipmentInfo.setEquipmentID(tChargingPile.getId().toString());
            equipmentInfo.setManufacturerID(tChargingPile.getManufacturerCode());
            equipmentInfo.setEquipmentName(tChargingPile.getName());
            equipmentInfo.setManufacturerName(tChargingPile.getManufacturer());
            equipmentInfo.setEquipmentModel(tChargingPile.getEquipmentType());
            equipmentInfo.setEquipmentUniqueNumber(tChargingPile.getEquipmentUniqueNumber());
@@ -1713,19 +1713,8 @@
     */
    @PostMapping("/supervise_query_operator_info")
    public BaseResult superviseQueryOperatorInfo(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
        log.info("监管平台查询充电站信息请求参数:" + JacksonUtils.toJson(baseRequest));
        //校验token和签名
        BaseResult baseResult = requestCheck(true, baseRequest, request);
        if(0 != baseResult.getRet()){
            log.info("监管平台查询充电站信息响应Data:");
            baseResult.setData("");
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            log.info("监管平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult));
            return baseResult;
        }
        Operator operator = baseResult.getOperator();
        //解密参数
        String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv());
        String decrypt = AESUtil.decrypt(baseRequest.getData(), OurDataSecret, OurDataSecretIV);
        log.info("监管平台查询充电站信息请求Data:" + decrypt);
        SuperviseQueryOperatorInfo superviseQueryOperatorInfo = JSON.parseObject(decrypt, SuperviseQueryOperatorInfo.class);
        Integer pageNo = superviseQueryOperatorInfo.getPageNo();
@@ -1752,12 +1741,17 @@
        // 将superviseQueryOperatorInfoResults转化为json数组
        superviseQueryOperatorInfoResultPage.setOperatorInfos(superviseQueryOperatorInfoResults);
        String jsonString = JacksonUtils.toJson(superviseQueryOperatorInfoResultPage);
        //参数加密
        log.info("监管平台查询充电站信息响应Data:" + jsonString);
        String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
        baseResult.setData(encrypt);
        baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
        log.info("监管平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult));
        String timeStamp = System.currentTimeMillis() + "";
        SequenceGenerator generator = new SequenceGenerator();
        String nextSequence = generator.getNextSequence();
        String data = AesEncryption.encrypt(OurDataSecret, OurDataSecretIV,JSONObject.toJSONString(superviseQueryOperatorInfoResultPage));
        String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,OurSigSecret);
        BaseResult baseResult = new BaseResult();
        baseResult.setData(data);
        baseResult.setSig(hmacMD5);
        baseResult.setRet(0);
        baseResult.setMsg("OK");
        baseResult.setOperatorID(OperatorID);
        return baseResult;
    }
@@ -1771,20 +1765,9 @@
     */
    @PostMapping("/supervise_query_stations_info")
    public BaseResult superviseQueryStationsInfo(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
        log.info("监管平台查询充电站信息请求参数:" + JacksonUtils.toJson(baseRequest));
        //校验token和签名
        BaseResult baseResult = requestCheck(true, baseRequest, request);
        if(0 != baseResult.getRet()){
            log.info("监管平台查询充电站信息响应Data:");
            baseResult.setData("");
            baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
            log.info("监管平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult));
            return baseResult;
        }
        Operator operator = baseResult.getOperator();
        String decrypt = AESUtil.decrypt(baseRequest.getData(), OurDataSecret, OurDataSecretIV);
        log.info("监管平台supervise_query_stations_infoData:" + decrypt);
        //解密参数
        String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv());
        log.info("监管平台查询充电站信息请求Data:" + decrypt);
        QueryStationsInfo queryStationsInfo = JSON.parseObject(decrypt, QueryStationsInfo.class);
        Integer pageNo = queryStationsInfo.getPageNo();
        Integer pageSize = queryStationsInfo.getPageSize();
@@ -1795,6 +1778,9 @@
        if(null == pageSize){
            pageSize = 50;
        }
        if(stationIDs==null){
            stationIDs = new ArrayList<String>();
        }
        PageInfo<Site> siteListPaging = siteClient.getSiteListPaging(pageNo, pageSize, stationIDs);
        List<TParkingLot> parkingLots = parkingLotClient.getAllParkingLot().getData();
        QueryStationsInfoResult queryStationsInfoResult = new QueryStationsInfoResult();
@@ -1802,18 +1788,416 @@
        queryStationsInfoResult.setPageCount((0 == (siteListPaging.getTotal() % pageSize) ? 0 : 1) + Double.valueOf(siteListPaging.getTotal() / pageSize).intValue());
        queryStationsInfoResult.setItemSize(Long.valueOf(siteListPaging.getTotal()).intValue());
        queryStationsInfoResult.setStationInfos(buildSite(parkingLots, siteListPaging.getRecords()));
        //参数加密
        String jsonString = JacksonUtils.toJson(queryStationsInfoResult);
        log.info("监管平台查询充电站信息响应Data:" + jsonString);
        String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
        baseResult.setData(encrypt);
        baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
        log.info("监管平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult));
        for (StationInfo stationInfo : queryStationsInfoResult.getStationInfos()) {
            stationInfo.setStationClassification(stationInfo.getStationClassification()==null?1:stationInfo.getStationClassification());
            stationInfo.setGeneralApplicationType(stationInfo.getGeneralApplicationType()==null?1:stationInfo.getGeneralApplicationType());
            stationInfo.setSiteGuide(org.springframework.util.StringUtils.hasLength(stationInfo.getSiteGuide()) ?stationInfo.getSiteGuide():"站点引导");
            if (stationInfo.getConstruction()!=null){
                stationInfo.setConstruction(stationInfo.getConstruction() == 0 ? ConstructionEnum.OTHER.getType() : stationInfo.getConstruction());
            }else{
                stationInfo.setConstruction(255);
            }
            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\""+"}");
            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.setOfficialRunTime(org.springframework.util.StringUtils.hasLength(stationInfo.getOfficialRunTime())?stationInfo.getOfficialRunTime():"2025-01-01");
            stationInfo.setVideoMonitor(stationInfo.getVideoMonitor()==null?1:stationInfo.getVideoMonitor());
            int i = 0;
            for (EquipmentInfo equipmentInfo : stationInfo.getEquipmentInfos()) {
                i++;
                equipmentInfo.setManufacturerID("906171534");
                equipmentInfo.setEquipmentUniqueNumber(org.springframework.util.StringUtils.hasLength(equipmentInfo.getEquipmentUniqueNumber())?equipmentInfo.getEquipmentUniqueNumber():"OIX123"+i);
                equipmentInfo.setManufacturerName(org.springframework.util.StringUtils.hasLength(equipmentInfo.getManufacturerName())?equipmentInfo.getManufacturerName():"生产商");
                equipmentInfo.setEquipmentModel(org.springframework.util.StringUtils.hasLength(equipmentInfo.getEquipmentModel())?equipmentInfo.getEquipmentModel():"DEVICE"+i);
                equipmentInfo.setProductionDate(org.springframework.util.StringUtils.hasLength(equipmentInfo.getProductionDate())?equipmentInfo.getProductionDate():"2024-01-01");
                equipmentInfo.setEquipmentType(equipmentInfo.getEquipmentType()==null?1:equipmentInfo.getEquipmentType());
                for (ConnectorInfo connectorInfo : equipmentInfo.getConnectorInfos()) {
                    connectorInfo.setEquipmentClassification(connectorInfo.getEquipmentClassification()==null?1:connectorInfo.getEquipmentClassification());
                    connectorInfo.setVoltageUpperLimits(connectorInfo.getConstantVoltageUpperLimits()==null?new BigDecimal("1.0000"):connectorInfo.getConstantVoltageUpperLimits());
                    connectorInfo.setVoltageLowerLimits(connectorInfo.getConstantVoltageLowerLimits()==null?new BigDecimal("1.0000"):connectorInfo.getConstantVoltageLowerLimits());
                    connectorInfo.setCurrent(connectorInfo.getCurrent()==null?1:connectorInfo.getCurrent());
                    connectorInfo.setPower(connectorInfo.getPower()==null?new BigDecimal("1.0000"):connectorInfo.getPower());
                    connectorInfo.setNationalStandard(connectorInfo.getNationalStandard()==null?1:connectorInfo.getNationalStandard());
                    connectorInfo.setAuxPower(connectorInfo.getAuxPower()==null?1:connectorInfo.getAuxPower());
                    connectorInfo.setOpreateStatus(connectorInfo.getOpreateStatus()==null?50:connectorInfo.getOpreateStatus());
                }
                equipmentInfo.setPower(equipmentInfo.getPower()==null?new BigDecimal("1.0000"):equipmentInfo.getPower());
                equipmentInfo.setEquipmentClassification(equipmentInfo.getEquipmentClassification()==null?1:equipmentInfo.getEquipmentClassification());
            }
            stationInfo.setEquipmentOwnerName("明星新能源");
            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);
        }
        String timeStamp = System.currentTimeMillis() + "";
        SequenceGenerator generator = new SequenceGenerator();
        String nextSequence = generator.getNextSequence();
        String data = AesEncryption.encrypt(OurDataSecret, OurDataSecretIV,JSONObject.toJSONString(queryStationsInfoResult));
        String hmacMD5 = HMacMD5Util.getHMacMD5(OurOperatorID,timeStamp, data,nextSequence,OurSigSecret);
        BaseResult baseResult = new BaseResult();
        baseResult.setData(data);
        baseResult.setSig(hmacMD5);
        baseResult.setRet(0);
        baseResult.setMsg("OK");
        baseResult.setOperatorID("906171535");
        return baseResult;
    }
    /**
     * 查询充换电站状态信息
     * @param baseRequest
     * @param request
     * @return
     */
    @PostMapping("/supervise_query_station_status")
    public BaseResult superviseQueryStationStatus(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
        log.info("监管平台查询充换电站状态信息请求参数:" + JacksonUtils.toJson(baseRequest));
        String decrypt = AESUtil.decrypt(baseRequest.getData(), OurDataSecret, OurDataSecretIV);
        log.info("监管平台supervise_query_station_statusData:" + decrypt);
        //解密参数
        log.info("监管平台查询充换电站状态信息请求Data:" + decrypt);
        QueryStationStatus queryStationStatus = JSON.parseObject(decrypt, QueryStationStatus.class);
        List<String> stationIDs = queryStationStatus.getStationIDs();
        String operatorID = queryStationStatus.getOperatorID();
        List<Integer> stationIDList = new ArrayList<>();
        for (String stationID : stationIDs) {
            stationIDList.add(Integer.valueOf(stationID));
        }
        QueryStationStatusResult queryStationStatusResult = new QueryStationStatusResult();
        List<StationStatusInfo> stationStatusInfos = new ArrayList<>();
        // 查询站点下的桩信息状态
        List<TChargingPile> chargingPiles = chargingPileClient.getChargingPileBySiteIds(stationIDList).getData();
        if(!CollectionUtils.isEmpty(chargingPiles)){
            List<Integer> pileIds = chargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList());
            List<TChargingGun> chargingGuns = chargingGunClient.getChargingGunByChargingPileIds(pileIds).getData();
            if(!CollectionUtils.isEmpty(chargingGuns)){
                for (Integer stationID : stationIDList) {
                    StationStatusInfo stationStatusInfo = new StationStatusInfo();
                    stationStatusInfo.setOperatorID(operatorID);
                    stationStatusInfo.setEquipmentOwnerID(operatorId);
                    stationStatusInfo.setStationID(String.valueOf(stationID));
                    List<ConnectorStatusInfo> connectorStatusInfos = new ArrayList<>();
                    for (TChargingGun chargingGun : chargingGuns) {
                        ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo();
                        connectorStatusInfo.setOperatorID(operatorId);
                        connectorStatusInfo.setEquipmentOwnerID(operatorId);
                        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()));
                        connectorStatusInfos.add(connectorStatusInfo);
                    }
                    stationStatusInfo.setConnectorStatusInfos(connectorStatusInfos);
                    stationStatusInfos.add(stationStatusInfo);
                }
            }
            queryStationStatusResult.setStationStatusInfos(stationStatusInfos);
        }
        String timeStamp = System.currentTimeMillis() + "";
        SequenceGenerator generator = new SequenceGenerator();
        String nextSequence = generator.getNextSequence();
        String data = AesEncryption.encrypt(OurDataSecret, OurDataSecretIV,JSONObject.toJSONString(queryStationStatusResult));
        String hmacMD5 = HMacMD5Util.getHMacMD5(OurOperatorID,timeStamp, data,nextSequence,OurSigSecret);
        BaseResult baseResult = new BaseResult();
        baseResult.setData(data);
        baseResult.setSig(hmacMD5);
        baseResult.setRet(0);
        baseResult.setMsg("OK");
        baseResult.setOperatorID("906171535");
        return baseResult;
    }
    // 测试环境
    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 OurDataSecret = "50a61b93919c9605";
    private static final String OurDataSecretIV = "7c8ac6861661d585";
    private static final String OurSigSecret = "a6fedf0e1b27d6f6";
    private static final String OurOperatorID = "MA01H3BQ3";
    private static final String OurOperatorSecret = "f1331ef0b37c2d1a";
    /**
     * 推送充电设备接口状态信息
     * @param chargingGun
     * @return
     */
    public R pushSuperviseNotificationStationStatus(TChargingGun chargingGun){
        ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo();
        connectorStatusInfo.setOperatorID(operatorId);
        connectorStatusInfo.setEquipmentOwnerID(operatorId);
        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(operator, connectorStatusInfo);
        }
        return R.ok();
    }
    /**
     * 推送充电状态信息
     * @param chargingOrder
     * @return
     */
    public R pushSuperviseNotificationEquipChargeStatus(TChargingOrder chargingOrder){
        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(new BigDecimal(chargingOrder.getEndSoc()));
        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);
        }
        return R.ok();
    }
    /**
     * 推送充电订单信息
     * @param chargingOrder
     * @return
     */
    public R pushSuperviseNotificationChargeOrderInfo(TChargingOrder chargingOrder){
        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());
        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;
        }
        List<Operator> operators = operatorClient.getAllOperator().getData();
        for (Operator operator : operators) {
            tcecSuperviseUtil.notificationChargeOrderInfo(operator, supChargeOrderInfo);
        }
        return R.ok();
    }
    /**
     * 推送充换电站信息
     * @param id
     * @return
     */
    @PostMapping("/supervise_notification_station_info")
    public R superviseNotificationStationInfo(@RequestParam("id") Integer id){
        String serviceTel = systemConfigurationClient.getServerPhone().getData();
        Site site = siteClient.getSiteAll().getData().stream().filter(e -> e.getId().equals(id)).findFirst().orElse(new Site());
        List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(Collections.singletonList(site.getId())).getData();
        List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList());
        List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData();
        SupStationInfo supStationInfo = new SupStationInfo();
        supStationInfo.setStationID(site.getId().toString());
        supStationInfo.setStationUniqueNumber(site.getDistrictsCode() + "906171535" + site.getId());
        supStationInfo.setOperatorID("906171535");
        supStationInfo.setEquipmentOwnerID("906171535");
        supStationInfo.setStationName(site.getName());
        supStationInfo.setCountryCode(site.getCountryCode());
        supStationInfo.setAreaCode(site.getCityCode());
        supStationInfo.setAddress(site.getAddress());
        supStationInfo.setAreaCodeCountryside(site.getAreaCodeCountryside());
        supStationInfo.setStationTel(site.getPhone());
        supStationInfo.setServiceTel(serviceTel);
        supStationInfo.setStationClassification(site.getStationClassification());
        supStationInfo.setGeneralApplicationType(site.getGeneralApplicationType());
        supStationInfo.setStationType(site.getSiteType());
        supStationInfo.setStationStatus(site.getStatus());
        supStationInfo.setParkNums(site.getParkingSpace());
        supStationInfo.setStationLat(new BigDecimal(site.getLat()).setScale(6, RoundingMode.DOWN));
        supStationInfo.setStationLng(new BigDecimal(site.getLon()).setScale(6, RoundingMode.DOWN));
        supStationInfo.setSiteGuide(site.getGuide());
        supStationInfo.setConstruction(site.getConstructionSite() == 0 ? ConstructionEnum.OTHER.getType() : site.getConstructionSite());
        supStationInfo.setPictures(StringUtils.isNotEmpty(site.getImgUrl()) ? Arrays.asList(site.getImgUrl().split(",")) : new ArrayList<>());
        supStationInfo.setMatchCars(site.getVehicleDescription());
        if (org.springframework.util.StringUtils.hasLength(site.getSwapMatchCars())){
            supStationInfo.setSwapMatchCars(Arrays.asList(site.getSwapMatchCars().split(",")));
        }
        supStationInfo.setBusineHours(site.getStartServiceTime());
        supStationInfo.setRoundTheClock(site.getRoundTheClock());
        supStationInfo.setParkType(site.getParkType());
        supStationInfo.setParkFee("{\"rules\":"+site.getParkFee()+","+"\"freeDuration\":"+site.getParkFeeFree()+"}");
        supStationInfo.setElectricityType(site.getElectricityType());
        supStationInfo.setBusinessExpandType(site.getBusinessExpandType());
        supStationInfo.setCapacity(site.getCapacity());
        supStationInfo.setRatedPower(site.getRatedPower());
        supStationInfo.setPeriodFee(site.getPeriodFee());
        supStationInfo.setOfficialRunTime(site.getOfficialRunTime());
        supStationInfo.setStationOrientation(site.getStationOrientation());
        supStationInfo.setStationArea(site.getStationArea());
        supStationInfo.setHavePerson(site.getHavePerson());
        supStationInfo.setVideoMonitor(site.getVideoMonitor());
        if (StringUtils.isNotEmpty(site.getSupportingFacilities())){
            String[] split = site.getSupportingFacilities().split(",");
            List<Integer> collect = Arrays.stream(split).map(Integer::parseInt).collect(Collectors.toList());
            supStationInfo.setSupportingFacilities(collect);
        }
        supStationInfo.setPrinterFlag(site.getPrinterFlag());
        supStationInfo.setBarrierFlag(site.getBarrierFlag());
        supStationInfo.setParkingLockFlag(site.getParkingLockFlag());
        supStationInfo.setEquipmentInfos(buildEquipmentInfo(site.getId(), tChargingPiles, chargingGunList));
//        supStationInfo.setSwapEquipmentInfos();
        supStationInfo.setElectricityFee("{"+site.getElectricityFee()+"}");
        supStationInfo.setEquipmentOwnerName(site.getEquipmentOwnerName());
        supStationInfo.setResidentNo(site.getResidentNo());
        supStationInfo.setSupplyType(site.getSupplyType());
        supStationInfo.setWattHourMeterNo(site.getWattHourMeterNo());
        supStationInfo.setForwardPower(site.getForwardPower());
        supStationInfo.setServiceFee("{"+site.getServiceFee()+"}");
        supStationInfo.setRecordUniqueNo(site.getRecordUniqueNo());
        BaseResult baseResult = new BaseResult();
        SupStationInfoResult supStationInfoResult = new SupStationInfoResult();
        supStationInfoResult.setSupStationInfo(supStationInfo);
        tcecSuperviseUtil.superviseNotificationStationInfo(supStationInfoResult);
        return R.ok(baseResult);
    }
//
//
//    /**
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/util/JianGuanTask.java
File was renamed from ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/util/TaskUtil.java
@@ -14,7 +14,7 @@
 * @date 2023/7/11 8:39
 */
@Component
public class TaskUtil {
public class JianGuanTask {
    @Resource
    private ChargingMessageListener chargingMessageListener;
ruoyi-service/ruoyi-integration/src/test/java/com/ruoyi/integration/RuoYiIntegrationApplicationTests.java
@@ -1,6 +1,7 @@
package com.ruoyi.integration;
import com.alibaba.fastjson2.JSON;
import com.ruoyi.chargingPile.api.feignClient.SiteClient;
import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
import com.ruoyi.integration.barrierGate.model.CloudParkingOrder;
import com.ruoyi.integration.barrierGate.server.ParkingOrderService;
@@ -18,10 +19,16 @@
    
    @Resource
    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);
//    }
    @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);
    public void test1(){
    }
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/RuoYiOrderApplication.java
@@ -24,7 +24,12 @@
@EnableTransactionManagement//开启事务
public class RuoYiOrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(RuoYiOrderApplication.class, args);
        try {
            SpringApplication.run(RuoYiOrderApplication.class, args);
        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println("(♥◠‿◠)ノ゙  订单模块启动成功   ლ(´ڡ`ლ)゙  \n" +
                " .-------.       ____     __        \n" +
                " |  _ _   \\      \\   \\   /  /    \n" +
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/RuoYiOtherApplication.java
@@ -25,8 +25,13 @@
@EnableTransactionManagement//开启事务
public class RuoYiOtherApplication {
    public static void main(String[] args) {
        SpringApplication.run(RuoYiOtherApplication.class, args);
        new NettyServer().bind();
        try {
            SpringApplication.run(RuoYiOtherApplication.class, args);
            new NettyServer().bind();
        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println("(♥◠‿◠)ノ゙  基础模块启动成功   ლ(´ڡ`ლ)゙  \n" +
                " .-------.       ____     __        \n" +
                " |  _ _   \\      \\   \\   /  /    \n" +