Pu Zhibing
3 天以前 b4bfd886af0460ae84b2d70233c2a77866930a46
修改bug和将roacktmq连接方式切换为直连方式
29个文件已修改
1个文件已删除
1个文件已添加
1975 ■■■■ 已修改文件
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TaskUtil.java 214 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java 310 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/AcquisitionBillingModeReplyService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/AcquisitionBillingModeService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/BillingModeVerifyReplyService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/BillingModeVerifyService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/BmsAbortService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/BmsDemandAndChargerExportationService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/BmsInformationService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/ChargingHandshakeService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/AcquisitionBillingModeReplyServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/AcquisitionBillingModeServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/BillingModeVerifyReplyServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/BillingModeVerifyServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/BmsAbortServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/BmsDemandAndChargerExportationServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/BmsInformationServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/ChargingHandshakeServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/BmsAbortMessage.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/MotorAbortMessage.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageUtil.java 1010 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/util/RocketMQEnhanceTemplate.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/util/JianGuanTask.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/util/TaskUtil.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java
@@ -170,7 +170,7 @@
            // 查询是否有下级审核中的策略
            TAccountingStrategy children = accountingStrategyService.getOne(Wrappers.lambdaQuery(TAccountingStrategy.class)
                    .eq(TAccountingStrategy::getParentId, dto.getId())
                    .ne(TAccountingStrategy::getAuditStatus, Arrays.asList(3,4)));
                    .notIn(TAccountingStrategy::getAuditStatus, Arrays.asList(3,4)));
            if(Objects.nonNull(children)){
                // 删除计费策略明细信息
                accountingStrategyDetailService.remove(Wrappers.lambdaQuery(TAccountingStrategyDetail.class)
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
@@ -249,7 +249,7 @@
        Integer status = vo.getStatus();
        Long time = (Long) redisTemplate.opsForHash().get("charging_gun_online", (pile_code + gun_code));
        //小于1分钟才处理数据,防止频繁查询数据
        if(null != time && (System.currentTimeMillis() - time) < 60000){
        if(null != time && (System.currentTimeMillis() - time) < 30000){
            return;
        }
        TChargingGun tChargingGun = chargingGunService.getOne(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getFullNumber, (pile_code + gun_code)).eq(TChargingGun::getDelFlag, 0));
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
@@ -705,8 +705,8 @@
        List<TChargingGun> list = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getDelFlag, 0));
        for (TChargingGun chargingGun : list) {
            Long time = (Long) redisTemplate.opsForHash().get("charging_gun_online", chargingGun.getFullNumber());
            //判断设备是否真的离线3分钟(2分钟+代码中的60秒间隔处理存储)
            if(null != time && System.currentTimeMillis() - time > 180000){
            //判断设备是否真的离线5分钟
            if(null != time && System.currentTimeMillis() - time > 300000){
                TChargingGun chargingGun1 = new TChargingGun();
                chargingGun1.setId(chargingGun.getId());
                chargingGun1.setStatus(1);
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java
@@ -1245,6 +1245,7 @@
        queryEquipChargeStatusResult.setEndTime((null == chargingOrder.getEndTime() ? LocalDateTime.now() : chargingOrder.getEndTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        queryEquipChargeStatusResult.setTotalPower(chargingOrder.getElectricity());
        
        List<TChargingOrderAccountingStrategy> data = chargingOrderAccountingStrategyClient.getChargingOrderAccountingStrategyByOrderId(chargingOrder.getId()).getData();
        if(data.size() > 0){
            BigDecimal totalElectricity = data.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -1252,10 +1253,14 @@
            queryEquipChargeStatusResult.setElecMoney(totalElectricity);
            queryEquipChargeStatusResult.setSeviceMoney(serviceCharge);
            queryEquipChargeStatusResult.setTotalMoney(chargingOrder.getPaymentAmount());
        }else{
        }else if(null != chargingOrder.getRechargeAmount() && null != chargingOrder.getResidualAmount()){
            queryEquipChargeStatusResult.setElecMoney(chargingOrder.getRechargeAmount().subtract(chargingOrder.getResidualAmount()));
            queryEquipChargeStatusResult.setSeviceMoney(BigDecimal.ZERO);
            queryEquipChargeStatusResult.setTotalMoney(chargingOrder.getRechargeAmount().subtract(chargingOrder.getResidualAmount()));
        }else{
            queryEquipChargeStatusResult.setElecMoney(BigDecimal.ZERO);
            queryEquipChargeStatusResult.setSeviceMoney(BigDecimal.ZERO);
            queryEquipChargeStatusResult.setTotalMoney(BigDecimal.ZERO);
        }
        
        //构建充电明细
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TaskUtil.java
@@ -56,119 +56,123 @@
    // 每天凌晨12点30执行 推送充电用能统计
    @Scheduled(cron = "0 30 0 * * ?")
    public void superviseNotificationOperationStatsInfo() {
        StationStatsInfoResult res = new StationStatsInfoResult();
        int dayOfMonth1 = LocalDateTime.now().getYear();
        int dayOfMonth2 = LocalDateTime.now().getMonthValue();
        int dayOfMonth3 = LocalDateTime.now().getDayOfMonth();
        List<Site> data = siteClient.getSiteAll().getData();
        LocalDateTime startLocalDateTime = LocalDateTime.of(dayOfMonth1, dayOfMonth2, dayOfMonth3, 0, 0, 0);
        LocalDateTime endLocalDateTime = LocalDateTime.of(dayOfMonth1, dayOfMonth2, dayOfMonth3, 23, 59, 59);
        String start = DateUtils.localDateTimeToString(startLocalDateTime);
        String end = DateUtils.localDateTimeToString(endLocalDateTime);
        ChargingStatisticeDTO chargingStatisticeDTO = new ChargingStatisticeDTO();
        chargingStatisticeDTO.setStartTime(startLocalDateTime);
        chargingStatisticeDTO.setEndTime(endLocalDateTime);
        List<TChargingOrder> data1 = chargingOrderClient.getChargingStatistics(chargingStatisticeDTO).getData();
        List<StationStatsInfo> stationStatsInfos = new ArrayList<>();
        for (Site datum : data) {
            StationStatsInfo stationStatsInfo = new StationStatsInfo();
            stationStatsInfo.setStationID(datum.getId().toString());
            stationStatsInfo.setEquipmentOwnerID("906171535");
            stationStatsInfo.setOperatorID("906171535");
            stationStatsInfo.setStationClassification(1);
            stationStatsInfo.setStartTime(start);
            stationStatsInfo.setEndTime(end);
            List<TChargingOrder> chargingOrders = data1.stream().filter(e -> e.getSiteId().equals(datum.getId())).collect(Collectors.toList());
            // 充电电量
            BigDecimal electricity = new BigDecimal("0");
            int chargingCount = 0;
            for (TChargingOrder chargingOrder : chargingOrders) {
                if (chargingOrder.getElectricity()!=null){
                    electricity = electricity.add(chargingOrder.getElectricity());
                    chargingCount++;
        String port = System.getProperty("server.port");
        if("5071".equals(port)){
            StationStatsInfoResult res = new StationStatsInfoResult();
            int dayOfMonth1 = LocalDateTime.now().getYear();
            int dayOfMonth2 = LocalDateTime.now().getMonthValue();
            int dayOfMonth3 = LocalDateTime.now().getDayOfMonth();
            List<Site> data = siteClient.getSiteAll().getData();
            LocalDateTime startLocalDateTime = LocalDateTime.of(dayOfMonth1, dayOfMonth2, dayOfMonth3, 0, 0, 0);
            LocalDateTime endLocalDateTime = LocalDateTime.of(dayOfMonth1, dayOfMonth2, dayOfMonth3, 23, 59, 59);
            String start = DateUtils.localDateTimeToString(startLocalDateTime);
            String end = DateUtils.localDateTimeToString(endLocalDateTime);
            ChargingStatisticeDTO chargingStatisticeDTO = new ChargingStatisticeDTO();
            chargingStatisticeDTO.setStartTime(startLocalDateTime);
            chargingStatisticeDTO.setEndTime(endLocalDateTime);
            List<TChargingOrder> data1 = chargingOrderClient.getChargingStatistics(chargingStatisticeDTO).getData();
            List<StationStatsInfo> stationStatsInfos = new ArrayList<>();
            for (Site datum : data) {
                StationStatsInfo stationStatsInfo = new StationStatsInfo();
                stationStatsInfo.setStationID(datum.getId().toString());
                stationStatsInfo.setEquipmentOwnerID("906171535");
                stationStatsInfo.setOperatorID("906171535");
                stationStatsInfo.setStationClassification(1);
                stationStatsInfo.setStartTime(start);
                stationStatsInfo.setEndTime(end);
                List<TChargingOrder> chargingOrders = data1.stream().filter(e -> e.getSiteId().equals(datum.getId())).collect(Collectors.toList());
                // 充电电量
                BigDecimal electricity = new BigDecimal("0");
                int chargingCount = 0;
                for (TChargingOrder chargingOrder : chargingOrders) {
                    if (chargingOrder.getElectricity()!=null){
                        electricity = electricity.add(chargingOrder.getElectricity());
                        chargingCount++;
                    }
                }
                stationStatsInfo.setStationElectricity(electricity.divide(new BigDecimal("24")).setScale(4, BigDecimal.ROUND_DOWN));
                stationStatsInfo.setStationTotalChargeEnergy(electricity.setScale(4, BigDecimal.ROUND_DOWN));
                stationStatsInfo.setStationTotalWarningNum(0);
                stationStatsInfo.setStationTotalOtherEnergy(new BigDecimal("0"));
                stationStatsInfo.setStationTotalChargeNum(chargingCount);
                //构建设备统计数据
                List<EquipmentStatsInfo> EquipmentStatsInfos = new ArrayList<>();
                Map<Integer, List<TChargingOrder>> collect = chargingOrders.stream().collect(Collectors.groupingBy(TChargingOrder::getChargingPileId));
                for (Integer integer : collect.keySet()) {
                    List<TChargingOrder> tChargingOrders = collect.get(integer);
                    BigDecimal reduce1 = tChargingOrders.stream().map(TChargingOrder::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
                    EquipmentStatsInfo equipmentStatsInfo = new EquipmentStatsInfo();
                    equipmentStatsInfo.setEquipmentClassification(1);
                    long chargingTime = 0L;
                    for (TChargingOrder tChargingOrder : tChargingOrders) {
                        // 累加充电时长
                        LocalDateTime startTime = tChargingOrder.getStartTime();
                        LocalDateTime endTime = tChargingOrder.getEndTime();
                        // 计算时间差 单位分钟
                        chargingTime += ChronoUnit.SECONDS.between(startTime, endTime)/60;
                    }
                    equipmentStatsInfo.setEquipmentTotalChargeTime(chargingTime);
                    equipmentStatsInfo.setEquipmentTotalChargeNum(tChargingOrders.size());
                    equipmentStatsInfo.setEquipmentTotalWarningNum(0);
                    equipmentStatsInfo.setEquipmentID(integer.toString());
                    equipmentStatsInfo.setEquipmentElectricity(reduce1);
                    //构建设备接口统计数据
                    Map<Integer, List<TChargingOrder>> collect2 = tChargingOrders.stream().collect(Collectors.groupingBy(TChargingOrder::getChargingGunId));
                    List<ConnectorStatsInfo> ConnectorStatsInfos = new ArrayList<>();
                    for (Integer integer1 : collect2.keySet()) {
                        List<TChargingOrder> tChargingOrders1 = collect2.get(integer1);
                        BigDecimal reduce2 = tChargingOrders1.stream().map(TChargingOrder::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
                        TChargingGun chargingGun = chargingGunClient.getChargingGunById(integer1).getData();
                        ConnectorStatsInfo connectorStatsInfo = new ConnectorStatsInfo();
                        connectorStatsInfo.setConnectorID(chargingGun.getFullNumber());
                        connectorStatsInfo.setConnectorElectricity(reduce2);
                        ConnectorStatsInfos.add(connectorStatsInfo);
                    }
                    equipmentStatsInfo.setConnectorStatsInfos(ConnectorStatsInfos);
                    EquipmentStatsInfos.add(equipmentStatsInfo);
                }
                stationStatsInfo.setEquipmentStatsInfos(EquipmentStatsInfos);
                stationStatsInfos.add(stationStatsInfo);
            }
            stationStatsInfo.setStationElectricity(electricity.divide(new BigDecimal("24")).setScale(4, BigDecimal.ROUND_DOWN));
            stationStatsInfo.setStationTotalChargeEnergy(electricity.setScale(4, BigDecimal.ROUND_DOWN));
            stationStatsInfo.setStationTotalWarningNum(0);
            stationStatsInfo.setStationTotalOtherEnergy(new BigDecimal("0"));
            stationStatsInfo.setStationTotalChargeNum(chargingCount);
            //构建设备统计数据
            List<EquipmentStatsInfo> EquipmentStatsInfos = new ArrayList<>();
            Map<Integer, List<TChargingOrder>> collect = chargingOrders.stream().collect(Collectors.groupingBy(TChargingOrder::getChargingPileId));
            for (Integer integer : collect.keySet()) {
                List<TChargingOrder> tChargingOrders = collect.get(integer);
                BigDecimal reduce1 = tChargingOrders.stream().map(TChargingOrder::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
                EquipmentStatsInfo equipmentStatsInfo = new EquipmentStatsInfo();
                equipmentStatsInfo.setEquipmentClassification(1);
                long chargingTime = 0L;
                for (TChargingOrder tChargingOrder : tChargingOrders) {
                    // 累加充电时长
                    LocalDateTime startTime = tChargingOrder.getStartTime();
                    LocalDateTime endTime = tChargingOrder.getEndTime();
                    // 计算时间差 单位分钟
                    chargingTime += ChronoUnit.SECONDS.between(startTime, endTime)/60;
                }
                equipmentStatsInfo.setEquipmentTotalChargeTime(chargingTime);
                equipmentStatsInfo.setEquipmentTotalChargeNum(tChargingOrders.size());
                equipmentStatsInfo.setEquipmentTotalWarningNum(0);
                equipmentStatsInfo.setEquipmentID(integer.toString());
                equipmentStatsInfo.setEquipmentElectricity(reduce1);
                //构建设备接口统计数据
                Map<Integer, List<TChargingOrder>> collect2 = tChargingOrders.stream().collect(Collectors.groupingBy(TChargingOrder::getChargingGunId));
                List<ConnectorStatsInfo> ConnectorStatsInfos = new ArrayList<>();
                for (Integer integer1 : collect2.keySet()) {
                    List<TChargingOrder> tChargingOrders1 = collect2.get(integer1);
                    BigDecimal reduce2 = tChargingOrders1.stream().map(TChargingOrder::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
                    TChargingGun chargingGun = chargingGunClient.getChargingGunById(integer1).getData();
                    ConnectorStatsInfo connectorStatsInfo = new ConnectorStatsInfo();
                    connectorStatsInfo.setConnectorID(chargingGun.getFullNumber());
                    connectorStatsInfo.setConnectorElectricity(reduce2);
                    ConnectorStatsInfos.add(connectorStatsInfo);
                }
                equipmentStatsInfo.setConnectorStatsInfos(ConnectorStatsInfos);
                EquipmentStatsInfos.add(equipmentStatsInfo);
            }
            stationStatsInfo.setEquipmentStatsInfos(EquipmentStatsInfos);
            stationStatsInfos.add(stationStatsInfo);
            res.setStationStatsInfos(stationStatsInfos);
            tcecSuperviseUtil.superviseNotificationOperationStatsInfo(res);
        }
        res.setStationStatsInfos(stationStatsInfos);
        tcecSuperviseUtil.superviseNotificationOperationStatsInfo(res);
    }
    // 每15分钟执行一次的定时任务
    @Scheduled(cron = "0 0/15 * * * ?")
    public void supervise_notification_realtime_power_info() {
        List<Site> data = siteClient.getSiteAll().getData();
        List<Integer> siteIds = data.stream().map(Site::getId).collect(Collectors.toList());
        List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(siteIds).getData();
        List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList());
        List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData();
        SupStationPowerInfoResult supStationPowerInfoResult = new SupStationPowerInfoResult();
        List<SupStationPowerInfo> stationStatsInfos = new ArrayList<>();
        LocalDateTime now = LocalDateTime.now();
        LocalDateTime startLocalDateTime = now.minusMinutes(15);
        ChargingStatisticeDTO chargingStatisticeDTO = new ChargingStatisticeDTO();
        chargingStatisticeDTO.setStartTime(startLocalDateTime);
        chargingStatisticeDTO.setEndTime(now);
        List<TChargingOrder> data1 = chargingOrderClient.getChargingStatistics(chargingStatisticeDTO).getData();
        for (Site datum : data) {
            List<TChargingOrder> collect = data1.stream().filter(e -> e.getSiteId().equals(datum.getId())
            &&e.getChargingPower()!=null).collect(Collectors.toList());
            SupStationPowerInfo supStationPowerInfo = new SupStationPowerInfo();
            supStationPowerInfo.setOperatorID("906171535");
            supStationPowerInfo.setEquipmentOwnerID("906171535");
            supStationPowerInfo.setStationID(datum.getId().toString());
            supStationPowerInfo.setStationClassification(1);
            supStationPowerInfo.setDataTime(DateUtils.localDateTimeToString(LocalDateTime.now()));
            BigDecimal divide = collect.stream().map(TChargingOrder::getChargingPower).reduce(BigDecimal::add).get().divide(new BigDecimal(collect.size()).setScale(4, BigDecimal.ROUND_DOWN));
            supStationPowerInfo.setStationRealTimePower(divide);
            supStationPowerInfo.setEquipmentPowerInfos(buildEquipmentPowerInfo(datum.getId(), tChargingPiles, chargingGunList));
            stationStatsInfos.add(supStationPowerInfo);
        String port = System.getProperty("server.port");
        if("5071".equals(port)){
            List<Site> data = siteClient.getSiteAll().getData();
            List<Integer> siteIds = data.stream().filter(s->s.getStatus() == 1).map(Site::getId).collect(Collectors.toList());
            List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(siteIds).getData();
            List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList());
            List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData();
            SupStationPowerInfoResult supStationPowerInfoResult = new SupStationPowerInfoResult();
            List<SupStationPowerInfo> stationStatsInfos = new ArrayList<>();
            LocalDateTime now = LocalDateTime.now();
            LocalDateTime startLocalDateTime = now.minusMinutes(15);
            ChargingStatisticeDTO chargingStatisticeDTO = new ChargingStatisticeDTO();
            chargingStatisticeDTO.setStartTime(startLocalDateTime);
            chargingStatisticeDTO.setEndTime(now);
            List<TChargingOrder> data1 = chargingOrderClient.getChargingStatistics(chargingStatisticeDTO).getData();
            for (Site datum : data) {
                List<TChargingOrder> collect = data1.stream().filter(e -> e.getSiteId().equals(datum.getId()) && e.getChargingPower()!=null).collect(Collectors.toList());
                SupStationPowerInfo supStationPowerInfo = new SupStationPowerInfo();
                supStationPowerInfo.setOperatorID("906171535");
                supStationPowerInfo.setEquipmentOwnerID("906171535");
                supStationPowerInfo.setStationID(datum.getId().toString());
                supStationPowerInfo.setStationClassification(1);
                supStationPowerInfo.setDataTime(DateUtils.localDateTimeToString(LocalDateTime.now()));
                BigDecimal divide = collect.stream().map(TChargingOrder::getChargingPower).reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal(collect.size()).setScale(4, BigDecimal.ROUND_DOWN));
                supStationPowerInfo.setStationRealTimePower(divide);
                supStationPowerInfo.setEquipmentPowerInfos(buildEquipmentPowerInfo(datum.getId(), tChargingPiles, chargingGunList));
                stationStatsInfos.add(supStationPowerInfo);
            }
            supStationPowerInfoResult.setSupStationPowerInfos(stationStatsInfos);
            tcecSuperviseUtil.superviseNotificationRealtimePowerInfo(supStationPowerInfoResult);
        }
        supStationPowerInfoResult.setSupStationPowerInfos(stationStatsInfos);
        tcecSuperviseUtil.superviseNotificationRealtimePowerInfo(supStationPowerInfoResult);
    }
    /**
     * 构建桩数据
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java
@@ -17,6 +17,7 @@
import com.ruoyi.integration.iotda.utils.tools.MessageUtil;
import com.ruoyi.integration.iotda.utils.tools.StrategyUtil;
import com.ruoyi.integration.rocket.model.*;
import com.ruoyi.integration.rocket.produce.ChargingMessageUtil;
import com.ruoyi.integration.rocket.produce.EnhanceProduce;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@@ -58,6 +59,9 @@
    @Resource
    private ChargingPileClient chargingPileClient;
    
    @Resource
    private ChargingMessageUtil chargingMessageUtil;
    
    
    
@@ -70,19 +74,26 @@
    @PostMapping(value = "/message")
    public AjaxResult<String> message(@RequestBody JSONObject jsonObject) throws IOException {
        log.info("接收到消息中转:{}",jsonObject);
        JSONObject content = jsonObject.getJSONObject("notify_data").getJSONObject("body").getJSONObject("content");
        JSONObject body = jsonObject.getJSONObject("notify_data").getJSONObject("body");
        JSONObject content = null;
        try {
            content = body.getJSONObject("content");
        }catch (Exception e){
            String content1 = body.getString("content");
            String substring = content1.substring(content1.length() - 1);
            if(!"}".equals(substring)){
                content1 = content1.substring(0, content1.length() - 1) + "}";
            }
            System.out.println("content1:"+content1);
            content = JSON.parseObject(content1);
        }
        JSONObject header = jsonObject.getJSONObject("notify_data").getJSONObject("header");
        String deviceId = header.getString("device_id"); // 设备id
        String nodeId = header.getString("node_id"); // 设备编号
        String productId = header.getString("product_id"); // 产品id
        String service_id = content.getString("service_id");
        log.info("服务id:{}",service_id);
        // 写入文件
//        FileWriter writer = new FileWriter("D:/sample.txt",true);
//        writer.write("接收到消息中转:"+jsonObject+"\n");
//        writer.write("服务id:"+service_id+"\n");
//        writer.close();
        SendResult sendResult;
        SendResult sendResult = null;
        ChargingMessage chargingMessage = new ChargingMessage();
        chargingMessage.setServiceId(service_id);
        // 设备消息下发
@@ -90,9 +101,11 @@
        switch (service_id){
            case SendTagConstant.ONLINE:
                OnlineMessage onlineMessage = JSON.parseObject(content.toJSONString(),OnlineMessage.class);
                sendResult = enhanceProduce.onlineMessage(onlineMessage);
//                chargingMessage.setOnlineMessage(onlineMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
                //走rocketmq
//                sendResult = enhanceProduce.onlineMessage(onlineMessage);
                //直连
                chargingMessage.setOnlineMessage(onlineMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                // 响应硬件
                // 业务处理 登录认证应答
                OnlineReply onlineReply = new OnlineReply();
@@ -105,23 +118,18 @@
                timingSettingReplyOnline.setCharging_pile_code(onlineMessage.getCharging_pile_code());
                timingSettingReplyOnline.setCurrent_time(CP56Time2aConverter.convertToCP56Time2a(new Date()));
                iotMessageProduce.sendMessage(timingSettingReplyOnline.getCharging_pile_code(), ServiceIdMenu.TIMING_SETTING_REPLY.getKey(),messageUtil.timingSettingReply(timingSettingReplyOnline));
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                break;
            case SendTagConstant.PING:
                PingMessage pingMessage = JSON.parseObject(content.toJSONString(),PingMessage.class);
                //存储缓存中,5分钟有效
                redisTemplate.opsForValue().set("ping:" + pingMessage.getCharging_pile_code() + pingMessage.getCharging_gun_code(), pingMessage, 5, TimeUnit.MINUTES);
                sendResult = null;
//                sendResult = enhanceProduce.pingMessage(pingMessage);
//                chargingMessage.setPingMessage(pingMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
                // 响应硬件
                Pong pong = new Pong();
                pong.setCharging_pile_code(pingMessage.getCharging_pile_code());
                pong.setCharging_gun_code(pingMessage.getCharging_gun_code());
                pong.setCharging_gun_status(0);
                iotMessageProduce.sendMessage(pong.getCharging_pile_code(), ServiceIdMenu.PONG.getKey(), messageUtil.pong(pong));
                //检查修改设备状态
                UpdateChargingPileStatusVo vo1 = new UpdateChargingPileStatusVo();
                vo1.setGun_code(pingMessage.getCharging_gun_code());
                vo1.setPile_code(pingMessage.getCharging_pile_code());
@@ -135,31 +143,30 @@
                gunStatusMessage.setFullNumber(gunCode);
                chargingMessage1.setGunStatusMessage(gunStatusMessage);
                sendResult = enhanceProduce.gunStatusMessage(chargingMessage1);
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                break;
            case SendTagConstant.END_CHARGE:
                EndChargeMessage endChargeMessage = JSON.parseObject(content.toJSONString(),EndChargeMessage.class);
                sendResult = enhanceProduce.endChargeMessage(endChargeMessage);
//                chargingMessage.setEndChargeMessage(endChargeMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                // 响应硬件
                //走rocketmq
//                sendResult = enhanceProduce.endChargeMessage(endChargeMessage);
                //直连
                chargingMessage.setEndChargeMessage(endChargeMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                break;
            case SendTagConstant.ERROR_MESSAGE:
                ErrorMessageMessage errorMessageMessage = JSON.parseObject(content.toJSONString(),ErrorMessageMessage.class);
                sendResult = enhanceProduce.errorMessageMessage(errorMessageMessage);
//                chargingMessage.setErrorMessageMessage(errorMessageMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                // 响应硬件
                //走rocketmq
//                sendResult = enhanceProduce.errorMessageMessage(errorMessageMessage);
                //直连
                chargingMessage.setErrorMessageMessage(errorMessageMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                break;
            case SendTagConstant.BILLING_MODE_VERIFY:
                BillingModeVerifyMessage billingModeVerifyMessage = JSON.parseObject(content.toJSONString(),BillingModeVerifyMessage.class);
                sendResult = enhanceProduce.billingModeVerifyMessage(billingModeVerifyMessage);
//                chargingMessage.setBillingModeVerifyMessage(billingModeVerifyMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
                //走rocketmq
//                sendResult = enhanceProduce.billingModeVerifyMessage(billingModeVerifyMessage);
                //直连
                chargingMessage.setBillingModeVerifyMessage(billingModeVerifyMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                // 响应硬件
                BillingModeVerifyReply billingModeVerifyReply = new BillingModeVerifyReply();
                if(billingModeVerifyMessage.getBilling_model_code().equals("0")){
@@ -183,13 +190,14 @@
                    }
                }
                iotMessageProduce.sendMessage(billingModeVerifyReply.getCharging_pile_code(), ServiceIdMenu.BILLING_MODE_VERIFY_REPLY.getKey(),messageUtil.billingModeVerifyReply(billingModeVerifyReply));
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                break;
            case SendTagConstant.ACQUISITION_BILLING_MODE:
                AcquisitionBillingModeMessage acquisitionBillingModeMessage = JSON.parseObject(content.toJSONString(),AcquisitionBillingModeMessage.class);
                sendResult = enhanceProduce.acquisitionBillingModeMessage(acquisitionBillingModeMessage);
//                chargingMessage.setAcquisitionBillingModeMessage(acquisitionBillingModeMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
                //走rocketmq
//                sendResult = enhanceProduce.acquisitionBillingModeMessage(acquisitionBillingModeMessage);
                //直连
                chargingMessage.setAcquisitionBillingModeMessage(acquisitionBillingModeMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                // 响应硬件   计费模型请求应答  1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段
                List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailClient.getDetailListByCode(acquisitionBillingModeMessage.getCharging_pile_code()).getData();
                Map<Integer, TAccountingStrategyDetail> strategyPrice = StrategyUtil.getStrategyPrice(accountingStrategyDetails);
@@ -203,68 +211,71 @@
                acquisitionBillingModeReply.setCharging_pile_code(acquisitionBillingModeMessage.getCharging_pile_code());
                acquisitionBillingModeReply.setLoss_ratio(BigDecimal.ZERO);
                iotMessageProduce.sendMessage(acquisitionBillingModeReply.getCharging_pile_code(), ServiceIdMenu.ACQUISITION_BILLING_MODE_REPLY.getKey(),messageUtil.acquisitionBillingModeReply(acquisitionBillingModeReply));
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                break;
            case SendTagConstant.UPLOAD_REAL_TIME_MONITORING_DATA:
                log.info("充电实时数据上传");
                UploadRealTimeMonitoringDataMessage uploadRealTimeMonitoringDataMessage = JSON.parseObject(content.toJSONString(),UploadRealTimeMonitoringDataMessage.class);
                sendResult = enhanceProduce.uploadRealTimeMonitoringDataMessage(uploadRealTimeMonitoringDataMessage);
//                chargingMessage.setUploadRealTimeMonitoringDataMessage(uploadRealTimeMonitoringDataMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                // 响应硬件
                //走rocketmq
//                sendResult = enhanceProduce.uploadRealTimeMonitoringDataMessage(uploadRealTimeMonitoringDataMessage);
                //直连
                chargingMessage.setUploadRealTimeMonitoringDataMessage(uploadRealTimeMonitoringDataMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                break;
            case SendTagConstant.CHARGING_HANDSHAKE:
                ChargingHandshakeMessage chargingHandshakeMessage = JSON.parseObject(content.toJSONString(),ChargingHandshakeMessage.class);
                sendResult = enhanceProduce.chargingHandshakeMessage(chargingHandshakeMessage);
//                chargingMessage.setChargingHandshakeMessage(chargingHandshakeMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                // 响应硬件
                //走rocketmq
//                sendResult = enhanceProduce.chargingHandshakeMessage(chargingHandshakeMessage);
                //直连
                chargingMessage.setChargingHandshakeMessage(chargingHandshakeMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                break;
            case SendTagConstant.PARAMETER_SETTING:
                ParameterSettingMessage parameterSettingMessage = JSON.parseObject(content.toJSONString(),ParameterSettingMessage.class);
                sendResult = enhanceProduce.parameterSettingMessage(parameterSettingMessage);
//                chargingMessage.setParameterSettingMessage(parameterSettingMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                //走rocketmq
//                sendResult = enhanceProduce.parameterSettingMessage(parameterSettingMessage);
                //直连
                chargingMessage.setParameterSettingMessage(parameterSettingMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                break;
            case SendTagConstant.BMS_ABORT:
                BmsAbortMessage bmsAbortMessage = JSON.parseObject(content.toJSONString(),BmsAbortMessage.class);
                sendResult = enhanceProduce.bmsAbortMessage(bmsAbortMessage);
//                chargingMessage.setBmsAbortMessage(bmsAbortMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                // 响应硬件
                //走rocketmq
//                sendResult = enhanceProduce.bmsAbortMessage(bmsAbortMessage);
                //直连
                chargingMessage.setBmsAbortMessage(bmsAbortMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                break;
            case SendTagConstant.MOTOR_ABORT:
                MotorAbortMessage motorAbortMessage = JSON.parseObject(content.toJSONString(),MotorAbortMessage.class);
                sendResult = enhanceProduce.motorAbortMessage(motorAbortMessage);
//                chargingMessage.setMotorAbortMessage(motorAbortMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                //走rocketmq
//                sendResult = enhanceProduce.motorAbortMessage(motorAbortMessage);
                //直连
                chargingMessage.setMotorAbortMessage(motorAbortMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                break;
            case SendTagConstant.BMS_DEMAND_AND_CHARGER_EXPORTATION:
                BmsDemandAndChargerExportationMessage bmsDemandAndChargerExportationMessage = JSON.parseObject(content.toJSONString(),BmsDemandAndChargerExportationMessage.class);
                sendResult = enhanceProduce.bmsDemandAndChargerExportationMessage(bmsDemandAndChargerExportationMessage);
//                chargingMessage.setBmsDemandAndChargerExportationMessage(bmsDemandAndChargerExportationMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                // 响应硬件
                //走rocketmq
//                sendResult = enhanceProduce.bmsDemandAndChargerExportationMessage(bmsDemandAndChargerExportationMessage);
                //直连
                chargingMessage.setBmsDemandAndChargerExportationMessage(bmsDemandAndChargerExportationMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                break;
            case SendTagConstant.BMS_INFORMATION:
                BmsInformationMessage bmsInformationMessage = JSON.parseObject(content.toJSONString(),BmsInformationMessage.class);
                sendResult = enhanceProduce.bmsInformationMessage(bmsInformationMessage);
//                chargingMessage.setBmsInformationMessage(bmsInformationMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                // 响应硬件
                //走rocketmq
//                sendResult = enhanceProduce.bmsInformationMessage(bmsInformationMessage);
                //直连
                chargingMessage.setBmsInformationMessage(bmsInformationMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                break;
            case SendTagConstant.CHARGING_PILE_STARTS_CHARGING:
                ChargingPileStartsChargingMessage chargingPileStartsChargingMessage = JSON.parseObject(content.toJSONString(),ChargingPileStartsChargingMessage.class);
                sendResult = enhanceProduce.chargingPileStartsChargingMessage(chargingPileStartsChargingMessage);
//                chargingMessage.setChargingPileStartsChargingMessage(chargingPileStartsChargingMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
                //走rocketmq
//                sendResult = enhanceProduce.chargingPileStartsChargingMessage(chargingPileStartsChargingMessage);
                //直连
                chargingMessage.setChargingPileStartsChargingMessage(chargingPileStartsChargingMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                // 响应硬件
                PlatformConfirmationCharging platformConfirmationCharging = new PlatformConfirmationCharging();
                platformConfirmationCharging.setCharging_pile_code(chargingPileStartsChargingMessage.getCharging_pile_code());
@@ -274,136 +285,137 @@
                platformConfirmationCharging.setAuthentication(1);
                // TODO 若是失败,给出失败原因
                iotMessageProduce.sendMessage(platformConfirmationCharging.getCharging_pile_code(), ServiceIdMenu.PLATFORM_CONFIRMATION_CHARGING.getKey(),messageUtil.platformConfirmationCharging(platformConfirmationCharging));
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                break;
            case SendTagConstant.PLATFORM_START_CHARGING_REPLY:
                PlatformStartChargingReplyMessage platformStartChargingReplyMessage = JSON.parseObject(content.toJSONString(),PlatformStartChargingReplyMessage.class);
                sendResult = enhanceProduce.platformStartChargingReplyMessage(platformStartChargingReplyMessage);
//                chargingMessage.setPlatformStartChargingReplyMessage(platformStartChargingReplyMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                // 响应硬件
                //走rocketmq
//                sendResult = enhanceProduce.platformStartChargingReplyMessage(platformStartChargingReplyMessage);
                //直连
                chargingMessage.setPlatformStartChargingReplyMessage(platformStartChargingReplyMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                break;
            case SendTagConstant.PLATFORM_STOP_CHARGING_REPLY:
                PlatformStopChargingReplyMessage platformStopChargingReplyMessage = JSON.parseObject(content.toJSONString(),PlatformStopChargingReplyMessage.class);
                sendResult = enhanceProduce.platformStopChargingReplyMessage(platformStopChargingReplyMessage);
//                chargingMessage.setPlatformStopChargingReplyMessage(platformStopChargingReplyMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                // 响应硬件
                //走rocketmq
//                sendResult = enhanceProduce.platformStopChargingReplyMessage(platformStopChargingReplyMessage);
                //直连
                chargingMessage.setPlatformStopChargingReplyMessage(platformStopChargingReplyMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                break;
            case SendTagConstant.TRANSACTION_RECORD:
                TransactionRecordMessage transactionRecordMessage = JSON.parseObject(content.toJSONString(),TransactionRecordMessage.class);
                transactionRecordMessage.setResult(content.toJSONString());
                sendResult = enhanceProduce.transactionRecordMessage(transactionRecordMessage);
//                chargingMessage.setTransactionRecordMessage(transactionRecordMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
                //走rocketmq
//                sendResult = enhanceProduce.transactionRecordMessage(transactionRecordMessage);
                //直连
                chargingMessage.setTransactionRecordMessage(transactionRecordMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                // 响应硬件
                ConfirmTransactionRecord confirmTransactionRecord = new ConfirmTransactionRecord();
                confirmTransactionRecord.setTransaction_serial_number(transactionRecordMessage.getTransaction_serial_number());
                confirmTransactionRecord.setConfirm_result(0);
                iotMessageProduce.sendMessage(transactionRecordMessage.getCharging_pile_code(), ServiceIdMenu.CONFIRM_TRANSACTION_RECORD.getKey(),messageUtil.confirmTransactionRecord(confirmTransactionRecord));
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                break;
            case SendTagConstant.UPDATE_BALANCE_REPLY:
                UpdateBalanceReplyMessage updateBalanceReplyMessage = JSON.parseObject(content.toJSONString(),UpdateBalanceReplyMessage.class);
                sendResult = enhanceProduce.updateBalanceReplyMessage(updateBalanceReplyMessage);
//                chargingMessage.setUpdateBalanceReplyMessage(updateBalanceReplyMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                // 响应硬件
                //走rocketmq
//                sendResult = enhanceProduce.updateBalanceReplyMessage(updateBalanceReplyMessage);
                //直连
                chargingMessage.setUpdateBalanceReplyMessage(updateBalanceReplyMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                break;
            case SendTagConstant.SYNCHRONIZE_OFFLINE_CARD_REPLY:
                SynchronizeOfflineCardReplyMessage synchronizeOfflineCardReplyMessage = JSON.parseObject(content.toJSONString(),SynchronizeOfflineCardReplyMessage.class);
                sendResult = enhanceProduce.synchronizeOfflineCardReplyMessage(synchronizeOfflineCardReplyMessage);
//                chargingMessage.setSynchronizeOfflineCardReplyMessage(synchronizeOfflineCardReplyMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                // 响应硬件
                //走rocketmq
//                sendResult = enhanceProduce.synchronizeOfflineCardReplyMessage(synchronizeOfflineCardReplyMessage);
                //直连
                chargingMessage.setSynchronizeOfflineCardReplyMessage(synchronizeOfflineCardReplyMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                break;
            case SendTagConstant.CLEAR_OFFLINE_CARD_REPLY:
                ClearOfflineCardReplyMessage clearOfflineCardReplyMessage = JSON.parseObject(content.toJSONString(),ClearOfflineCardReplyMessage.class);
                sendResult = enhanceProduce.clearOfflineCardReplyMessage(clearOfflineCardReplyMessage);
//                chargingMessage.setClearOfflineCardReplyMessage(clearOfflineCardReplyMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                // 响应硬件
                //走rocketmq
//                sendResult = enhanceProduce.clearOfflineCardReplyMessage(clearOfflineCardReplyMessage);
                //直连
                chargingMessage.setClearOfflineCardReplyMessage(clearOfflineCardReplyMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                break;
            case SendTagConstant.WORKING_PARAMETER_SETTING_REPLY:
                WorkingParameterSettingReplyMessage workingParameterSettingReplyMessage = JSON.parseObject(content.toJSONString(),WorkingParameterSettingReplyMessage.class);
                sendResult = enhanceProduce.workingParameterSettingReplyMessage(workingParameterSettingReplyMessage);
//                chargingMessage.setWorkingParameterSettingReplyMessage(workingParameterSettingReplyMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                // 响应硬件
                //走rocketmq
//                sendResult = enhanceProduce.workingParameterSettingReplyMessage(workingParameterSettingReplyMessage);
                //直连
                chargingMessage.setWorkingParameterSettingReplyMessage(workingParameterSettingReplyMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                break;
            case SendTagConstant.TIMING_SETTING:
                TimingSettingMessage timingSettingMessage = JSON.parseObject(content.toJSONString(),TimingSettingMessage.class);
                sendResult = enhanceProduce.timingSettingMessage(timingSettingMessage);
//                chargingMessage.setTimingSettingMessage(timingSettingMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
                //走rocketmq
//                sendResult = enhanceProduce.timingSettingMessage(timingSettingMessage);
                //直连
                chargingMessage.setTimingSettingMessage(timingSettingMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                // 响应硬件 对时设置应答
                TimingSettingReply timingSettingReply = new TimingSettingReply();
                timingSettingReply.setCharging_pile_code(timingSettingMessage.getCharging_pile_code());
                timingSettingReply.setCurrent_time(CP56Time2aConverter.convertToCP56Time2a(new Date()));
                iotMessageProduce.sendMessage(timingSettingReply.getCharging_pile_code(), ServiceIdMenu.TIMING_SETTING_REPLY.getKey(),messageUtil.timingSettingReply(timingSettingReply));
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                break;
            case SendTagConstant.SETUP_BILLING_MODEL_REPLY:
                SetupBillingModelReplyMessage setupBillingModelReplyMessage = JSON.parseObject(content.toJSONString(),SetupBillingModelReplyMessage.class);
                sendResult = enhanceProduce.setupBillingModelReplyMessage(setupBillingModelReplyMessage);
//                chargingMessage.setSetupBillingModelReplyMessage(setupBillingModelReplyMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                // 响应硬件
                //走rocketmq
//                sendResult = enhanceProduce.setupBillingModelReplyMessage(setupBillingModelReplyMessage);
                //直连
                chargingMessage.setSetupBillingModelReplyMessage(setupBillingModelReplyMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                break;
            case SendTagConstant.GROUND_LOCK_REAL_TIME_DATA:
                GroundLockRealTimeDataMessage groundLockRealTimeDataMessage = JSON.parseObject(content.toJSONString(),GroundLockRealTimeDataMessage.class);
                sendResult = enhanceProduce.groundLockRealTimeDataMessage(groundLockRealTimeDataMessage);
//                chargingMessage.setGroundLockRealTimeDataMessage(groundLockRealTimeDataMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                // 响应硬件
                //走rocketmq
//                sendResult = enhanceProduce.groundLockRealTimeDataMessage(groundLockRealTimeDataMessage);
                //直连
                chargingMessage.setGroundLockRealTimeDataMessage(groundLockRealTimeDataMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                break;
            case SendTagConstant.CHARGING_PILE_RETURNS_GROUND_LOCK_DATA:
                ChargingPileReturnsGroundLockDataMessage chargingPileReturnsGroundLockDataMessage = JSON.parseObject(content.toJSONString(),ChargingPileReturnsGroundLockDataMessage.class);
                sendResult = enhanceProduce.chargingPileReturnsGroundLockDataMessage(chargingPileReturnsGroundLockDataMessage);
//                chargingMessage.setChargingPileReturnsGroundLockDataMessage(chargingPileReturnsGroundLockDataMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                // 响应硬件
                //走rocketmq
//                sendResult = enhanceProduce.chargingPileReturnsGroundLockDataMessage(chargingPileReturnsGroundLockDataMessage);
                //直连
                chargingMessage.setChargingPileReturnsGroundLockDataMessage(chargingPileReturnsGroundLockDataMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                break;
            case SendTagConstant.PLATFORM_RESTART_REPLY:
                PlatformRestartReplyMessage platformRestartReplyMessage = JSON.parseObject(content.toJSONString(),PlatformRestartReplyMessage.class);
                sendResult = enhanceProduce.platformRestartReplyMessage(platformRestartReplyMessage);
//                chargingMessage.setPlatformRestartReplyMessage(platformRestartReplyMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                // 响应硬件
                //走rocketmq
//                sendResult = enhanceProduce.platformRestartReplyMessage(platformRestartReplyMessage);
                //直连
                chargingMessage.setPlatformRestartReplyMessage(platformRestartReplyMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                break;
            case SendTagConstant.QR_CODE_DELIVERY_REPLY:
                QrCodeDeliveryReplyMessage qrCodeDeliveryReplyMessage = JSON.parseObject(content.toJSONString(),QrCodeDeliveryReplyMessage.class);
                sendResult = enhanceProduce.qrCodeDeliveryReplyMessage(qrCodeDeliveryReplyMessage);
//                chargingMessage.setQrCodeDeliveryReplyMessage(qrCodeDeliveryReplyMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                // 响应硬件
                //走rocketmq
//                sendResult = enhanceProduce.qrCodeDeliveryReplyMessage(qrCodeDeliveryReplyMessage);
                //直连
                chargingMessage.setQrCodeDeliveryReplyMessage(qrCodeDeliveryReplyMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                break;
            case SendTagConstant.SECURITY_DETECTION:
                SecurityDetectionMessage securityDetectionMessage = JSON.parseObject(content.toJSONString(),SecurityDetectionMessage.class);
                sendResult = enhanceProduce.securityDetectionMessage(securityDetectionMessage);
//                chargingMessage.setSecurityDetectionMessage(securityDetectionMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                // 响应硬件
                //走rocketmq
//                sendResult = enhanceProduce.securityDetectionMessage(securityDetectionMessage);
                //直连
                chargingMessage.setSecurityDetectionMessage(securityDetectionMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                break;
            default:
                PlatformRemoteUpdateReplyMessage platformRemoteUpdateReplyMessage = JSON.parseObject(content.toJSONString(),PlatformRemoteUpdateReplyMessage.class);
                sendResult = enhanceProduce.platformRemoteUpdateReplyMessage(platformRemoteUpdateReplyMessage);
//                chargingMessage.setPlatformRemoteUpdateReplyMessage(platformRemoteUpdateReplyMessage);
//                chargingMessageUtil.handleMessage(chargingMessage);
//                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                // 响应硬件
                //走rocketmq
//                sendResult = enhanceProduce.platformRemoteUpdateReplyMessage(platformRemoteUpdateReplyMessage);
                //直连
                chargingMessage.setPlatformRemoteUpdateReplyMessage(platformRemoteUpdateReplyMessage);
                chargingMessageUtil.handleMessage(chargingMessage);
                break;
        }
        log.info("rocketmq消息下发结果:{}",sendResult);
@@ -553,5 +565,7 @@
        iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.ACQUISITION_BILLING_MODE_REPLY.getKey(),messageUtil.acquisitionBillingModeReply(acquisitionBillingModeReply));
        return R.ok();
    }
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/AcquisitionBillingModeReplyService.java
@@ -4,4 +4,10 @@
import com.ruoyi.integration.mongodb.base.BaseService;
public interface AcquisitionBillingModeReplyService extends BaseService<AcquisitionBillingModeReply> {
    /**
     * 定时任务删除超过6个月的数据
     */
    void taskDelete();
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/AcquisitionBillingModeService.java
@@ -4,4 +4,10 @@
import com.ruoyi.integration.mongodb.base.BaseService;
public interface AcquisitionBillingModeService extends BaseService<AcquisitionBillingMode> {
    /**
     * 定时任务删除超过6个月数据
     */
    void taskDelete();
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/BillingModeVerifyReplyService.java
@@ -5,4 +5,10 @@
import org.springframework.stereotype.Service;
public interface BillingModeVerifyReplyService extends BaseService<BillingModeVerifyReply> {
    /**
     * 定时任务删除超过6个月数据
     */
    void taskDelete();
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/BillingModeVerifyService.java
@@ -4,4 +4,10 @@
import com.ruoyi.integration.mongodb.base.BaseService;
public interface BillingModeVerifyService extends BaseService<BillingModeVerify> {
    /**
     * 定时任务删除6个月前的数据
     */
    void taskDelete();
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/BmsAbortService.java
@@ -4,4 +4,9 @@
import com.ruoyi.integration.mongodb.base.BaseService;
public interface BmsAbortService extends BaseService<BmsAbort> {
    /**
     * 定时任务删除6个月前的数据
     */
    void taskDelete();
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/BmsDemandAndChargerExportationService.java
@@ -16,4 +16,10 @@
     */
    List<BmsDemandAndChargerExportation> getBmsDemandAndChargerExportation(String orderCode);
    
    /**
     * 定时任务删除6个月前的数据
     */
    void taskDelete();
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/BmsInformationService.java
@@ -4,4 +4,10 @@
import com.ruoyi.integration.mongodb.base.BaseService;
public interface BmsInformationService extends BaseService<BmsInformation> {
    /**
     * 定时任务删除6个月前的数据
     */
    void taskDelete();
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/ChargingHandshakeService.java
@@ -7,5 +7,11 @@
    
    
    ChargingHandshake getDataByOrderCode(String code);
    /**
     * 定时任务删除6个月前的数据
     */
    void taskDelete();
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/AcquisitionBillingModeReplyServiceImpl.java
@@ -5,8 +5,11 @@
import com.ruoyi.integration.mongodb.service.AcquisitionBillingModeReplyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
@Service
public class AcquisitionBillingModeReplyServiceImpl implements AcquisitionBillingModeReplyService {
@@ -29,4 +32,15 @@
    public List<AcquisitionBillingModeReply> findAll() {
        return mongoTemplate.findAll(AcquisitionBillingModeReply.class);
    }
    /**
     * 定时任务删除超过6个月的数据
     */
    @Override
    public void taskDelete() {
        Query query = new Query();
        query.addCriteria(Criteria.where("create_time").lt(LocalDateTime.now().minusMonths(6)));
        mongoTemplate.remove(query, AcquisitionBillingModeReply.class);
    }
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/AcquisitionBillingModeServiceImpl.java
@@ -5,8 +5,11 @@
import com.ruoyi.integration.mongodb.service.AcquisitionBillingModeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
@Service
@@ -29,4 +32,15 @@
    public List<AcquisitionBillingMode> findAll() {
        return mongoTemplate.findAll(AcquisitionBillingMode.class);
    }
    /**
     * 定时任务删除超过6个月数据
     */
    @Override
    public void taskDelete() {
        Query query = new Query();
        query.addCriteria(Criteria.where("create_time").lt(LocalDateTime.now().minusMonths(6)));
        mongoTemplate.remove(query, AcquisitionBillingMode.class);
    }
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/BillingModeVerifyReplyServiceImpl.java
@@ -5,8 +5,11 @@
import com.ruoyi.integration.mongodb.service.BillingModeVerifyReplyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
@Service
public class BillingModeVerifyReplyServiceImpl implements BillingModeVerifyReplyService {
@@ -28,4 +31,15 @@
    public List<BillingModeVerifyReply> findAll() {
        return mongoTemplate.findAll(BillingModeVerifyReply.class);
    }
    /**
     * 定时任务删除6个月前的数据
     */
    @Override
    public void taskDelete() {
        Query query = new Query();
        query.addCriteria(Criteria.where("create_time").lt(LocalDateTime.now().minusMonths(6)));
        mongoTemplate.remove(query, BillingModeVerifyReply.class);
    }
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/BillingModeVerifyServiceImpl.java
@@ -5,8 +5,11 @@
import com.ruoyi.integration.mongodb.service.BillingModeVerifyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
@Service
@@ -28,4 +31,15 @@
    public List<BillingModeVerify> findAll() {
        return mongoTemplate.findAll(BillingModeVerify.class);
    }
    /**
     * 定时任务删除6个月前的数据
     */
    @Override
    public void taskDelete() {
        Query query = new Query();
        query.addCriteria(Criteria.where("create_time").lt(LocalDateTime.now().minusMonths(6)));
        mongoTemplate.remove(query, BillingModeVerify.class);
    }
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/BmsAbortServiceImpl.java
@@ -5,8 +5,11 @@
import com.ruoyi.integration.mongodb.service.BmsAbortService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
@Service
@@ -28,4 +31,15 @@
    public List<BmsAbort> findAll() {
        return mongoTemplate.findAll(BmsAbort.class);
    }
    /**
     * 定时任务删除6个月前的数据
     */
    @Override
    public void taskDelete() {
        Query query = new Query();
        query.addCriteria(Criteria.where("create_time").lt(LocalDateTime.now().minusMonths(6)));
        mongoTemplate.remove(query, BmsAbort.class);
    }
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/BmsDemandAndChargerExportationServiceImpl.java
@@ -11,6 +11,7 @@
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
@Service
@@ -45,4 +46,15 @@
                , BmsDemandAndChargerExportation.class);
        return uploadRealTimeMonitoringData;
    }
    /**
     * 定时任务删除6个月前的数据
     */
    @Override
    public void taskDelete() {
        Query query = new Query();
        query.addCriteria(Criteria.where("create_time").lt(LocalDateTime.now().minusMonths(6)));
        mongoTemplate.remove(query, BmsDemandAndChargerExportation.class);
    }
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/BmsInformationServiceImpl.java
@@ -5,8 +5,11 @@
import com.ruoyi.integration.mongodb.service.BmsInformationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
@Service
@@ -28,4 +31,14 @@
    public List<BmsInformation> findAll() {
        return mongoTemplate.findAll(BmsInformation.class);
    }
    /**
     * 定时任务删除6个月前的数据
     */
    @Override
    public void taskDelete() {
        Query query = new Query();
        query.addCriteria(Criteria.where("create_time").lt(LocalDateTime.now().minusMonths(6)));
        mongoTemplate.remove(query, BmsInformation.class);
    }
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/ChargingHandshakeServiceImpl.java
@@ -40,4 +40,14 @@
        List<ChargingHandshake> charging_gun_code = mongoTemplate.find(new Query().addCriteria(Criteria.where("transaction_serial_number").is(code)), ChargingHandshake.class);
        return charging_gun_code.size() > 0 ? charging_gun_code.get(0) : null;
    }
    /**
     * 定时任务删除6个月前的数据
     */
    @Override
    public void taskDelete() {
        Query query = new Query();
        query.addCriteria(Criteria.where("create_time").lt(LocalDateTime.now().minusMonths(6)));
        mongoTemplate.remove(query, ChargingHandshake.class);
    }
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/BmsAbortMessage.java
@@ -15,9 +15,9 @@
    private String transaction_serial_number; // 交易流水号
    private String charging_pile_code; // 桩编码
    private String charging_gun_code; // 抢号
    private Integer bms_stop_charging_reason; // BMS 中止充电原因(1-2 位——所需求的 SOC 目标值,3-4 位——达到总电压的设定值,5-6 位——达到单体电压设定值,7-8 位——充电机主动中止)
    private Integer bms_aborted_charging_fault_cause; // BMS 中止充电故障原因(1-2 位——绝缘故障,3-4 位——输出连接器过温故障,5-6 位——BMS 元件、输出连接器过温,7-8 位——充电连接器故障,9-10 位——电池组温度过高故障,11-12 位——高压继电器故障,13 位-14 位——检测点 2 电压检测故障,15-16 位——其他故障)
    private Integer bms_aborted_charging_error_cause; // BMS 中止充电错误原因(1-2 位——电流过大,3-4 位——电压异常,5-8 位——预留位)
    private String bms_stop_charging_reason; // BMS 中止充电原因(1-2 位——所需求的 SOC 目标值,3-4 位——达到总电压的设定值,5-6 位——达到单体电压设定值,7-8 位——充电机主动中止)
    private String bms_aborted_charging_fault_cause; // BMS 中止充电故障原因(1-2 位——绝缘故障,3-4 位——输出连接器过温故障,5-6 位——BMS 元件、输出连接器过温,7-8 位——充电连接器故障,9-10 位——电池组温度过高故障,11-12 位——高压继电器故障,13 位-14 位——检测点 2 电压检测故障,15-16 位——其他故障)
    private String bms_aborted_charging_error_cause; // BMS 中止充电错误原因(1-2 位——电流过大,3-4 位——电压异常,5-8 位——预留位)
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/MotorAbortMessage.java
@@ -15,9 +15,9 @@
    private String transaction_serial_number; // 交易流水号
    private String charging_pile_code; // 桩编码
    private String charging_gun_code; // 抢号
    private Integer charger_stops_charging_reason; // 充电机中止充电原因(1-2 位——达到充电机设定的条件中止,3-4 位——人工中止,5-6 位——异常中止)
    private Integer charging_failure_cause; // 充电机中止充电故障原因(1-2 位——充电机过温故障,3-4 位——充电连接器故障,5-6 位——充电机内部过温故障,7-8 位——所需电量不能传送,9-10 位——充电机急停故障,11-12 位——其他故障,13-16 位——预留位)
    private Integer charging_machine_stopped_charging_error_cause; // 充电机中止充电错误原因(1-2 位——电流不匹配,3-4 位——电压异常,5-8 位——预留位)
    private String charger_stops_charging_reason; // 充电机中止充电原因(1-2 位——达到充电机设定的条件中止,3-4 位——人工中止,5-6 位——异常中止)
    private String charging_failure_cause; // 充电机中止充电故障原因(1-2 位——充电机过温故障,3-4 位——充电连接器故障,5-6 位——充电机内部过温故障,7-8 位——所需电量不能传送,9-10 位——充电机急停故障,11-12 位——其他故障,13-16 位——预留位)
    private String charging_machine_stopped_charging_error_cause; // 充电机中止充电错误原因(1-2 位——电流不匹配,3-4 位——电压异常,5-8 位——预留位)
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageUtil.java
@@ -1,522 +1,488 @@
//package com.ruoyi.integration.rocket.produce;
//
//import com.alibaba.fastjson.JSONObject;
//import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyDetailClient;
//import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient;
//import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient;
//import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail;
//import com.ruoyi.chargingPile.api.model.TChargingGun;
//import com.ruoyi.chargingPile.api.vo.UpdateChargingPileStatusVo;
//import com.ruoyi.integration.api.model.*;
//import com.ruoyi.integration.drainage.TCECPushUtil;
//import com.ruoyi.integration.iotda.constant.SendTagConstant;
//import com.ruoyi.integration.mongodb.service.*;
//import com.ruoyi.integration.rocket.model.*;
//import com.ruoyi.order.api.feignClient.ChargingOrderClient;
//import com.ruoyi.order.api.model.TChargingOrder;
//import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery;
//import com.ruoyi.order.api.vo.PlatformStartChargingReplyMessageVO;
//import com.ruoyi.order.api.vo.PlatformStopChargingReplyVO;
//import com.ruoyi.order.api.vo.SecurityDetectionVO;
//import com.ruoyi.order.api.vo.TransactionRecordMessageVO;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.rocketmq.client.producer.SendResult;
//import org.springframework.beans.BeanUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.stereotype.Component;
//import org.springframework.util.StringUtils;
//
//import javax.annotation.Resource;
//import java.math.RoundingMode;
//import java.util.Objects;
//import java.util.Set;
//import java.util.concurrent.LinkedBlockingQueue;
//import java.util.concurrent.ThreadPoolExecutor;
//import java.util.concurrent.TimeUnit;
//
//
//@Slf4j
//@Component
//public class ChargingMessageUtil {
//
//    @Autowired
//    private AcquisitionBillingModeService acquisitionBillingModeService;
//    @Autowired
//    private BillingModeVerifyService billingModeVerifyService;
//    @Autowired
//    private BmsAbortService bmsAbortService;
//    @Resource
//    private ChargingOrderClient chargingOrderClient;
//    @Autowired
//    private BmsDemandAndChargerExportationService bmsDemandAndChargerExportationService;
//    @Autowired
//    private OnlineService onlineService;
//    @Autowired
//    private PingService pingService;
//    @Autowired
//    private EndChargeService endChargeService;
//    @Autowired
//    private ErrorMessageMessageService errorMessageMessageService;
//    @Autowired
//    private UploadRealTimeMonitoringDataService uploadRealTimeMonitoringDataService;
//    @Resource
//    private AccountingStrategyDetailClient accountingStrategyDetailClient;
//    @Autowired
//    private ChargingHandshakeService chargingHandshakeService;
//    @Autowired
//    private ParameterSettingService parameterSettingService;
//    @Autowired
//    private MotorAbortService motorAbortService;
//    @Autowired
//    private BmsInformationService bmsInformationService;
//    @Autowired
//    private ChargingPileStartsChargingService chargingPileStartsChargingService;
//    @Autowired
//    private PlatformStartChargingReplyService platformStartChargingReplyService;
//    @Autowired
//    private PlatformStopChargingReplyService platformStopChargingReplyService;
//    @Autowired
//    private TransactionRecordService transactionRecordService;
//    @Autowired
//    private UpdateBalanceReplyService updateBalanceReplyService;
//    @Autowired
//    private SynchronizeOfflineCardReplyService synchronizeOfflineCardReplyService;
//    @Autowired
//    private ClearOfflineCardReplyService clearOfflineCardReplyService;
//    @Autowired
//    private WorkingParameterSettingReplyService workingParameterSettingReplyService;
//    @Autowired
//    private TimingSettingService timingSettingService;
//    @Autowired
//    private SetupBillingModelReplyService setupBillingModelReplyService;
//    @Autowired
//    private GroundLockRealTimeDataService groundLockRealTimeDataService;
//    @Autowired
//    private ChargingPileReturnsGroundLockDataService chargingPileReturnsGroundLockDataService;
//    @Autowired
//    private PlatformRestartReplyService platformRestartReplyService;
//    @Autowired
//    private PlatformRemoteUpdateReplyService platformRemoteUpdateReplyService;
//    @Autowired
//    private QrCodeDeliveryReplyService qrCodeDeliveryReplyService;
//    @Autowired
//    private SecurityDetectionService securityDetectionService;
//    @Autowired
//    private TCECPushUtil tcecPushUtil;
//
//    @Resource
//    private ChargingPileClient chargingPileClient;
//    @Resource
//    private ChargingGunClient chargingGunClient;
//
//    @Resource
//    private RedisTemplate redisTemplate;
//    @Autowired
//    private EnhanceProduce enhanceProduce;
//
//
//
//
//
//    public void handleMessage(com.ruoyi.integration.rocket.model.ChargingMessage message){
//        log.info("rocket收到的消息内容:{}",message);
//        String serviceId = message.getServiceId();
//        if(!StringUtils.hasLength(serviceId)){
//            return;
//        }
//        log.info("rocket收到的消息内容:{}   {}", serviceId,message);
//        switch (serviceId){
//            case SendTagConstant.ONLINE:
//                OnlineMessage onlineMessage = message.getOnlineMessage();
//                log.info("充电桩登录认证业务消息处理:{}",onlineMessage);
//                // 持久化消息
//                Online online = new Online();
//                BeanUtils.copyProperties(onlineMessage,online);
//                onlineService.create(online);
//                break;
//            case SendTagConstant.PING:
//                PingMessage pingMessage = message.getPingMessage();
//                log.info("充电桩心跳包-业务消息处理:{}",pingMessage);
//                // 持久化消息
//                Ping ping = new Ping();
//                BeanUtils.copyProperties(pingMessage,ping);
//                pingService.save(ping);
//                //存储缓存中,5分钟有效
//                redisTemplate.opsForValue().set("ping:" + ping.getCharging_pile_code() + ping.getCharging_gun_code(), ping, 5, TimeUnit.MINUTES);
//
//                UpdateChargingPileStatusVo vo1 = new UpdateChargingPileStatusVo();
//                vo1.setGun_code(pingMessage.getCharging_gun_code());
//                vo1.setPile_code(pingMessage.getCharging_pile_code());
//                vo1.setStatus(pingMessage.getCharging_gun_status());
//                chargingPileClient.updateChargingPileStatus(vo1);
//                // 监管平台推送充电设备状态
//                SendResult sendResult;
//                String gunCode = pingMessage.getCharging_pile_code() + pingMessage.getCharging_gun_code();
//                ChargingMessage chargingMessage = new ChargingMessage();
//                chargingMessage.setServiceId(SendTagConstant.GUN_STATUS);
//                GunStatusMessage gunStatusMessage = new GunStatusMessage();
//                gunStatusMessage.setFullNumber(gunCode);
//                chargingMessage.setGunStatusMessage(gunStatusMessage);
//                sendResult = enhanceProduce.gunStatusMessage(chargingMessage);
//
//                break;
//            case SendTagConstant.END_CHARGE:
//                EndChargeMessage endChargeMessage = message.getEndChargeMessage();
//                log.info("充电结束-业务消息处理:{}",endChargeMessage);
//                // 持久化消息
//                EndCharge endCharge = new EndCharge();
//                BeanUtils.copyProperties(endChargeMessage,endCharge);
//                endChargeService.create(endCharge);
//                // 业务处理
//                chargingOrderClient.endCharge(endCharge.getTransaction_serial_number());
//                // 订单id
//                String transactionSerialNumber = endCharge.getTransaction_serial_number();
//                ChargingOrderMessage chargingOrderMessage = new ChargingOrderMessage();
//                chargingOrderMessage.setOrderNumber(transactionSerialNumber);
//                // 推送充电订单信息
//                ChargingMessage chargingMessage1 = new ChargingMessage();
//                chargingMessage1.setServiceId(SendTagConstant.ORDER_INFO);
//                chargingMessage1.setOrderMessage(chargingOrderMessage);
//                enhanceProduce.orderInfoMessage(chargingMessage1);
//                // 推送充电订单状态
//                ChargingMessage chargingMessage2 = new ChargingMessage();
//                chargingMessage2.setServiceId(SendTagConstant.ORDER_STATUS);
//                chargingMessage2.setOrderMessage(chargingOrderMessage);
//                enhanceProduce.orderStatusMessage(chargingMessage2);
////                ThreadPoolExecutor threadPoolExecutor1 = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
////                threadPoolExecutor1.execute(new Runnable() {
////                    @Override
////                    public void run() {
////                        try {
////                            TChargingOrder chargingOrder = chargingOrderClient.getOrderByCode(endCharge.getTransaction_serial_number()).getData();
////                            tcecPushUtil.pushSuperviseNotificationChargeOrderInfo(chargingOrder);
////                            tcecPushUtil.pushSuperviseNotificationEquipChargeStatus(chargingOrder);
////                        }catch (Exception e){
////                            e.printStackTrace();
////                            System.out.println("充电结束推送监管平台失败:"+e.getMessage());
////                        }
////                    }
////                });
//                break;
//            case SendTagConstant.ERROR_MESSAGE:
//                ErrorMessageMessage errorMessageMessage1 = message.getErrorMessageMessage();
//                log.info("错误报文-业务消息处理:{}",errorMessageMessage1);
//                // 持久化消息
//                ErrorMessageMessage errorMessageMessage = new ErrorMessageMessage();
//                BeanUtils.copyProperties(errorMessageMessage1,errorMessageMessage);
//                errorMessageMessageService.create(errorMessageMessage);
//                break;
//            case SendTagConstant.BILLING_MODE_VERIFY:
//                BillingModeVerifyMessage billingModeVerifyMessage = message.getBillingModeVerifyMessage();
//                log.info("计费模型验证请求-业务消息处理:{}",billingModeVerifyMessage);
//                // 持久化消息
//                BillingModeVerify billingModeVerify = new BillingModeVerify();
//                BeanUtils.copyProperties(billingModeVerifyMessage,billingModeVerify);
//                billingModeVerifyService.create(billingModeVerify);
//                break;
//            case SendTagConstant.ACQUISITION_BILLING_MODE:
//                AcquisitionBillingModeMessage acquisitionBillingModeMessage = message.getAcquisitionBillingModeMessage();
//                log.info("充电桩计费模型请求-业务消息处理:{}",acquisitionBillingModeMessage);
//                // 持久化消息
//                AcquisitionBillingMode acquisitionBillingMode = new AcquisitionBillingMode();
//                BeanUtils.copyProperties(acquisitionBillingModeMessage,acquisitionBillingMode);
//                acquisitionBillingModeService.create(acquisitionBillingMode);
//                break;
//            case SendTagConstant.UPLOAD_REAL_TIME_MONITORING_DATA:
//                try {
//                    UploadRealTimeMonitoringDataMessage uploadRealTimeMonitoringDataMessage = message.getUploadRealTimeMonitoringDataMessage();
//                    log.info("上传实时监测数据-业务消息处理:{}",uploadRealTimeMonitoringDataMessage);
//                    // 持久化消息
//                    UploadRealTimeMonitoringData uploadRealTimeMonitoringData = new UploadRealTimeMonitoringData();
//                    BeanUtils.copyProperties(uploadRealTimeMonitoringDataMessage,uploadRealTimeMonitoringData);
//                    // 查询mogondb上一条数据
//                    UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataService.getLastDataById(uploadRealTimeMonitoringDataMessage.getTransaction_serial_number());
//                    // 查询订单
//                    TChargingOrder chargingOrder = chargingOrderClient.getOrderByCode(uploadRealTimeMonitoringDataMessage.getTransaction_serial_number()).getData();
//                    // 查询当前时间段的计费策略
//                    TAccountingStrategyDetail accountingStrategyDetail = accountingStrategyDetailClient.getDetailBySiteId(chargingOrder.getSiteId()).getData();
//                    uploadRealTimeMonitoringData.setElectrovalence_all(accountingStrategyDetail.getElectrovalence());
//                    uploadRealTimeMonitoringData.setService_charge(accountingStrategyDetail.getServiceCharge());
//                    if (Objects.nonNull(data)) {
//                        uploadRealTimeMonitoringDataService.updateById(data.getId());
//                        uploadRealTimeMonitoringData.setPeriod_electric_price(uploadRealTimeMonitoringDataMessage.getPaid_amount().subtract(data.getPaid_amount()));
//                        uploadRealTimeMonitoringData.setPeriod_charging_degree(uploadRealTimeMonitoringDataMessage.getCharging_degree().subtract(data.getCharging_degree()));
//                        uploadRealTimeMonitoringData.setPeriod_service_price(uploadRealTimeMonitoringDataMessage.getCharging_degree().multiply(accountingStrategyDetail.getServiceCharge()).setScale(4, RoundingMode.HALF_UP));
//                    }else {
//                        log.info("首次上传实时监测数据");
//                        uploadRealTimeMonitoringData.setPeriod_electric_price(uploadRealTimeMonitoringDataMessage.getPaid_amount());
//                        uploadRealTimeMonitoringData.setPeriod_charging_degree(uploadRealTimeMonitoringDataMessage.getCharging_degree());
//                        uploadRealTimeMonitoringData.setPeriod_service_price(uploadRealTimeMonitoringDataMessage.getCharging_degree().multiply(accountingStrategyDetail.getServiceCharge()).setScale(4, RoundingMode.HALF_UP));
//                    }
//                    uploadRealTimeMonitoringData.setOrderType(chargingOrder.getOrderType());
//                    uploadRealTimeMonitoringData.setSiteId(chargingOrder.getSiteId());
//                    uploadRealTimeMonitoringData.setStatus(chargingOrder.getStatus());
////                    uploadRealTimeMonitoringData.setStartTime(chargingOrder.getStartTime());
////                    uploadRealTimeMonitoringData.setEndTime(chargingOrder.getEndTime());
//                    int i = uploadRealTimeMonitoringDataService.create(uploadRealTimeMonitoringData);
//                    if(i == 0){
//                        log.error("数据存储mongo失败");
//                    }
//
//                    // 业务处理
//                    UploadRealTimeMonitoringDataQuery query = new UploadRealTimeMonitoringDataQuery();
//                    BeanUtils.copyProperties(uploadRealTimeMonitoringData, query);
//                    chargingOrderClient.chargeMonitoring(query);
//                    // 订单id
//                    ChargingOrderMessage chargingOrderMessage3 = new ChargingOrderMessage();
//                    chargingOrderMessage3.setOrderNumber(chargingOrder.getCode());
//                    // 推送充电订单信息
//                    ChargingMessage chargingMessage4 = new ChargingMessage();
//                    chargingMessage4.setServiceId(SendTagConstant.ORDER_STATUS);
//                    chargingMessage4.setOrderMessage(chargingOrderMessage3);
//                    enhanceProduce.orderInfoMessage(chargingMessage4);
////                    ThreadPoolExecutor threadPoolExecutor2 = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
////                    threadPoolExecutor2.execute(new Runnable() {
////                        @Override
////                        public void run() {
////                            chargingOrder.setEndSoc(uploadRealTimeMonitoringDataMessage.getSoc()+"");
////
////                            tcecPushUtil.pushSuperviseNotificationEquipChargeStatus(chargingOrder);
////                        }
////                    });
//                } catch (Exception e) {
//                    e.printStackTrace();
//                }
//                break;
//            case SendTagConstant.CHARGING_HANDSHAKE:
//                ChargingHandshakeMessage chargingHandshakeMessage = message.getChargingHandshakeMessage();
//                log.info("充电握手-业务消息处理:{}",chargingHandshakeMessage);
//                // 持久化消息
//                ChargingHandshake chargingHandshake = new ChargingHandshake();
//                BeanUtils.copyProperties(chargingHandshakeMessage,chargingHandshake);
//                chargingHandshakeService.create(chargingHandshake);
//                break;
//            case SendTagConstant.PARAMETER_SETTING:
//                ParameterSettingMessage parameterSettingMessage = message.getParameterSettingMessage();
//                log.info("业务消息处理:{}",parameterSettingMessage);
//                // 持久化消息
//                ParameterSetting parameterSetting = new ParameterSetting();
//                BeanUtils.copyProperties(parameterSettingMessage,parameterSetting);
//                parameterSettingService.create(parameterSetting);
//                break;
//            case SendTagConstant.BMS_ABORT:
//                BmsAbortMessage bmsAbortMessage = message.getBmsAbortMessage();
//                log.info("充电阶段BMS中止-业务消息处理:{}",bmsAbortMessage);
//                // 持久化消息
//                BmsAbort bmsAbort = new BmsAbort();
//                BeanUtils.copyProperties(bmsAbortMessage,bmsAbort);
//                bmsAbortService.create(bmsAbort);
//
//                ThreadPoolExecutor threadPoolExecutor3 = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
//                threadPoolExecutor3.execute(new Runnable() {
//                    @Override
//                    public void run() {
//                        // 业务处理
//                        chargingOrderClient.excelEndCharge(bmsAbort.getTransaction_serial_number());
//                    }
//                });
//                break;
//            case SendTagConstant.MOTOR_ABORT:
//                MotorAbortMessage motorAbortMessage = message.getMotorAbortMessage();
//                log.info("充电阶段充电机中止-业务消息处理:{}",motorAbortMessage);
//                // 持久化消息
//                MotorAbort motorAbort = new MotorAbort();
//                BeanUtils.copyProperties(motorAbortMessage,motorAbort);
//                motorAbortService.create(motorAbort);
//                // 业务处理
//                chargingOrderClient.excelEndCharge(motorAbort.getTransaction_serial_number());
//                break;
//            case SendTagConstant.BMS_DEMAND_AND_CHARGER_EXPORTATION:
//                BmsDemandAndChargerExportationMessage bmsDemandAndChargerExportationMessage = message.getBmsDemandAndChargerExportationMessage();
//                log.info("充电过程BMS需求、充电机输出-业务消息处理:{}",bmsDemandAndChargerExportationMessage);
//                // 持久化消息
//                BmsDemandAndChargerExportation bmsDemandAndChargerExportation = new BmsDemandAndChargerExportation();
//                BeanUtils.copyProperties(bmsDemandAndChargerExportationMessage,bmsDemandAndChargerExportation);
//                bmsDemandAndChargerExportationService.create(bmsDemandAndChargerExportation);
//
//                // 业务处理
//                TChargingOrder chargingOrderBms = chargingOrderClient.getOrderByCode(bmsDemandAndChargerExportationMessage.getTransaction_serial_number()).getData();
//                if(Objects.nonNull(chargingOrderBms)){
//                    chargingOrderBms.setNeedElec(bmsDemandAndChargerExportationMessage.getBms_current_requirements());
//                    chargingOrderClient.updateChargingOrder(chargingOrderBms);
//                }
//                break;
//            case SendTagConstant.BMS_INFORMATION:
//                BmsInformationMessage bmsInformationMessage = message.getBmsInformationMessage();
//                log.info("充电过程BMS信息-业务消息处理:{}",bmsInformationMessage);
//                // 持久化消息
//                BmsInformation bmsInformation = new BmsInformation();
//                BeanUtils.copyProperties(bmsInformationMessage,bmsInformation);
//                bmsInformationService.create(bmsInformation);
//                break;
//            case SendTagConstant.CHARGING_PILE_STARTS_CHARGING:
//                ChargingPileStartsChargingMessage chargingPileStartsChargingMessage = message.getChargingPileStartsChargingMessage();
//                log.info("充电桩主动申请启动充电-业务消息处理:{}",chargingPileStartsChargingMessage);
//                // 持久化消息
//                ChargingPileStartsCharging chargingPileStartsCharging = new ChargingPileStartsCharging();
//                BeanUtils.copyProperties(chargingPileStartsChargingMessage,chargingPileStartsCharging);
//                chargingPileStartsChargingService.create(chargingPileStartsCharging);
//                break;
//            case SendTagConstant.PLATFORM_START_CHARGING_REPLY:
//                PlatformStartChargingReplyMessage platformStartChargingReplyMessage = message.getPlatformStartChargingReplyMessage();
//                log.info("远程启机命令回复-业务消息处理:{}",platformStartChargingReplyMessage);
//                // 持久化消息
//                PlatformStartChargingReply platformStartChargingReply = new PlatformStartChargingReply();
//                BeanUtils.copyProperties(platformStartChargingReplyMessage,platformStartChargingReply);
//                platformStartChargingReplyService.create(platformStartChargingReply);
//
//                // 业务处理
//                PlatformStartChargingReplyMessageVO message1 = new PlatformStartChargingReplyMessageVO();
//                BeanUtils.copyProperties(platformStartChargingReplyMessage, message1);
//                chargingOrderClient.startChargeSuccessfully(message1);
//                break;
//            case SendTagConstant.PLATFORM_STOP_CHARGING_REPLY:
//                PlatformStopChargingReplyMessage platformStopChargingReplyMessage = message.getPlatformStopChargingReplyMessage();
//                log.info("远程停机命令回复-业务消息处理:{}",platformStopChargingReplyMessage);
//                // 持久化消息
//                PlatformStopChargingReply platformStopChargingReply = new PlatformStopChargingReply();
//                BeanUtils.copyProperties(platformStopChargingReplyMessage,platformStopChargingReply);
//                platformStopChargingReplyService.create(platformStopChargingReply);
//
//                PlatformStopChargingReplyVO platformStopChargingReply1 = new PlatformStopChargingReplyVO();
//                BeanUtils.copyProperties(platformStopChargingReply, platformStopChargingReply1);
//                chargingOrderClient.terminateSuccessfulResponse(platformStopChargingReply1);
//                break;
//            case SendTagConstant.TRANSACTION_RECORD:
//                TransactionRecordMessage transactionRecordMessage = message.getTransactionRecordMessage();
//                log.info("交易记录-业务消息处理:{}",transactionRecordMessage);
//                transactionRecordMessage.setResult(JSONObject.toJSONString(message));
//                // 持久化消息
//                TransactionRecord transactionRecord = new TransactionRecord();
//                BeanUtils.copyProperties(transactionRecordMessage,transactionRecord);
//                transactionRecordService.create(transactionRecord);
//
//                // 业务处理
//                TChargingOrder chargingOrderRecord = chargingOrderClient.getOrderByCode(transactionRecordMessage.getTransaction_serial_number()).getData();
//                if(Objects.nonNull(chargingOrderRecord)){
//                    chargingOrderRecord.setTotalElectricity(transactionRecordMessage.getTotal_electricity());
//                    chargingOrderClient.updateChargingOrder(chargingOrderRecord);
//                }
//                //计算费用
//                TransactionRecordMessageVO vo = new TransactionRecordMessageVO();
//                BeanUtils.copyProperties(transactionRecordMessage,vo);
//                int code = chargingOrderClient.endChargeBillingCharge(vo).getCode();
//                if(200 != code){
//                    //失败后添加到队列中继续处理数据
//                    redisTemplate.opsForSet().add(SendTagConstant.TRANSACTION_RECORD, transactionRecordMessage.getTransaction_serial_number());
//                }
//
//
//                // 添加实时上传记录结束记录
//                // 查询mogondb上一条数据
//                UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataService.getLastDataById(transactionRecordMessage.getTransaction_serial_number());
//                if(Objects.nonNull(data) && data.getStatus() != 5){
//                    UploadRealTimeMonitoringData uploadRealTimeMonitoringData = new UploadRealTimeMonitoringData();
//                    BeanUtils.copyProperties(data,uploadRealTimeMonitoringData);
//                    uploadRealTimeMonitoringData.setStatus(5);
//                    uploadRealTimeMonitoringDataService.create(uploadRealTimeMonitoringData);
//                }
//                break;
//            case SendTagConstant.UPDATE_BALANCE_REPLY:
//                UpdateBalanceReplyMessage updateBalanceReplyMessage = message.getUpdateBalanceReplyMessage();
//                log.info("余额更新应答-业务消息处理:{}",updateBalanceReplyMessage);
//                // 持久化消息
//                UpdateBalanceReply updateBalanceReply = new UpdateBalanceReply();
//                BeanUtils.copyProperties(updateBalanceReplyMessage,updateBalanceReply);
//                updateBalanceReplyService.create(updateBalanceReply);
//                break;
//            case SendTagConstant.SYNCHRONIZE_OFFLINE_CARD_REPLY:
//                SynchronizeOfflineCardReplyMessage synchronizeOfflineCardReplyMessage = message.getSynchronizeOfflineCardReplyMessage();
//                log.info("卡数据同步应答-业务消息处理:{}",synchronizeOfflineCardReplyMessage);
//                // 持久化消息
//                SynchronizeOfflineCardReply synchronizeOfflineCardReply = new SynchronizeOfflineCardReply();
//                BeanUtils.copyProperties(synchronizeOfflineCardReplyMessage,synchronizeOfflineCardReply);
//                synchronizeOfflineCardReplyService.create(synchronizeOfflineCardReply);
//                break;
//            case SendTagConstant.CLEAR_OFFLINE_CARD_REPLY:
//                ClearOfflineCardReplyMessage clearOfflineCardReplyMessage = message.getClearOfflineCardReplyMessage();
//                log.info("离线卡数据清除应答-业务消息处理:{}",clearOfflineCardReplyMessage);
//                // 持久化消息
//                ClearOfflineCardReply clearOfflineCardReply = new ClearOfflineCardReply();
//                BeanUtils.copyProperties(clearOfflineCardReplyMessage,clearOfflineCardReply);
//                clearOfflineCardReplyService.create(clearOfflineCardReply);
//                break;
//            case SendTagConstant.WORKING_PARAMETER_SETTING_REPLY:
//                WorkingParameterSettingReplyMessage workingParameterSettingReplyMessage = message.getWorkingParameterSettingReplyMessage();
//                log.info("充电桩工作参数设置应答-业务消息处理:{}",workingParameterSettingReplyMessage);
//                // 持久化消息
//                WorkingParameterSettingReply workingParameterSettingReply = new WorkingParameterSettingReply();
//                BeanUtils.copyProperties(workingParameterSettingReplyMessage,workingParameterSettingReply);
//                workingParameterSettingReplyService.create(workingParameterSettingReply);
//                break;
//            case SendTagConstant.TIMING_SETTING:
//                TimingSettingMessage timingSettingMessage = message.getTimingSettingMessage();
//                log.info("对时设置-业务消息处理:{}",timingSettingMessage);
//                // 持久化消息
//                TimingSetting timingSetting = new TimingSetting();
//                BeanUtils.copyProperties(timingSettingMessage,timingSetting);
//                timingSettingService.create(timingSetting);
//                break;
//            case SendTagConstant.SETUP_BILLING_MODEL_REPLY:
//                SetupBillingModelReplyMessage setupBillingModelReplyMessage = message.getSetupBillingModelReplyMessage();
//                log.info("计费模型应答-业务消息处理:{}",setupBillingModelReplyMessage);
//                // 持久化消息
//                SetupBillingModelReply setupBillingModelReply = new SetupBillingModelReply();
//                BeanUtils.copyProperties(setupBillingModelReplyMessage,setupBillingModelReply);
//                setupBillingModelReplyService.create(setupBillingModelReply);
//                break;
//            case SendTagConstant.GROUND_LOCK_REAL_TIME_DATA:
//                GroundLockRealTimeDataMessage groundLockRealTimeDataMessage = message.getGroundLockRealTimeDataMessage();
//                log.info("地锁数据上送(充电桩上送)-业务消息处理:{}",groundLockRealTimeDataMessage);
//                // 持久化消息
//                GroundLockRealTimeData groundLockRealTimeData = new GroundLockRealTimeData();
//                BeanUtils.copyProperties(groundLockRealTimeDataMessage,groundLockRealTimeData);
//                groundLockRealTimeDataService.create(groundLockRealTimeData);
//                break;
//            case SendTagConstant.CHARGING_PILE_RETURNS_GROUND_LOCK_DATA:
//                ChargingPileReturnsGroundLockDataMessage chargingPileReturnsGroundLockDataMessage = message.getChargingPileReturnsGroundLockDataMessage();
//                log.info("充电桩返回数据(上行)-业务消息处理:{}",chargingPileReturnsGroundLockDataMessage);
//                // 持久化消息
//                ChargingPileReturnsGroundLockData chargingPileReturnsGroundLockData = new ChargingPileReturnsGroundLockData();
//                BeanUtils.copyProperties(chargingPileReturnsGroundLockDataMessage,chargingPileReturnsGroundLockData);
//                chargingPileReturnsGroundLockDataService.create(chargingPileReturnsGroundLockData);
//                break;
//            case SendTagConstant.PLATFORM_RESTART_REPLY:
//                PlatformRestartReplyMessage platformRestartReplyMessage = message.getPlatformRestartReplyMessage();
//                log.info("远程重启应答-业务消息处理:{}",platformRestartReplyMessage);
//                // 持久化消息
//                PlatformRestartReply platformRestartReply = new PlatformRestartReply();
//                BeanUtils.copyProperties(platformRestartReplyMessage,platformRestartReply);
//                platformRestartReplyService.create(platformRestartReply);
//                break;
//            case SendTagConstant.QR_CODE_DELIVERY_REPLY:
//                QrCodeDeliveryReplyMessage qrCodeDeliveryReplyMessage = message.getQrCodeDeliveryReplyMessage();
//                log.info("二维码下发应答-业务消息处理:{}",qrCodeDeliveryReplyMessage);
//                QrCodeDeliveryReply qrCodeDeliveryReply = new QrCodeDeliveryReply();
//                BeanUtils.copyProperties(qrCodeDeliveryReplyMessage,qrCodeDeliveryReply);
//                qrCodeDeliveryReplyService.create(qrCodeDeliveryReply);
//                break;
//            case SendTagConstant.SECURITY_DETECTION:
//                SecurityDetectionMessage securityDetectionMessage = message.getSecurityDetectionMessage();
//                log.info("安全监测-业务消息处理:{}",securityDetectionMessage);
//                SecurityDetection securityDetection = new SecurityDetection();
//                BeanUtils.copyProperties(securityDetectionMessage,securityDetection);
//                securityDetectionService.create(securityDetection);
//
//                SecurityDetectionVO securityDetection1 = new SecurityDetectionVO();
//                BeanUtils.copyProperties(securityDetection, securityDetection1);
//                chargingOrderClient.securityDetection(securityDetection1);
//                break;
//            default:
//                PlatformRemoteUpdateReplyMessage platformRemoteUpdateReplyMessage = message.getPlatformRemoteUpdateReplyMessage();
//                log.info("远程更新应答-业务消息处理:{}",platformRemoteUpdateReplyMessage);
//                PlatformRemoteUpdateReply platformRemoteUpdateReply = new PlatformRemoteUpdateReply();
//                BeanUtils.copyProperties(platformRemoteUpdateReplyMessage,platformRemoteUpdateReply);
//                platformRemoteUpdateReplyService.create(platformRemoteUpdateReply);
//                break;
//        }
//    }
//
//
//}
package com.ruoyi.integration.rocket.produce;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyDetailClient;
import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient;
import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient;
import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail;
import com.ruoyi.chargingPile.api.model.TChargingGun;
import com.ruoyi.chargingPile.api.vo.UpdateChargingPileStatusVo;
import com.ruoyi.integration.api.model.*;
import com.ruoyi.integration.drainage.TCECPushUtil;
import com.ruoyi.integration.iotda.constant.SendTagConstant;
import com.ruoyi.integration.mongodb.service.*;
import com.ruoyi.integration.rocket.model.*;
import com.ruoyi.order.api.feignClient.ChargingOrderClient;
import com.ruoyi.order.api.model.TChargingOrder;
import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery;
import com.ruoyi.order.api.vo.PlatformStartChargingReplyMessageVO;
import com.ruoyi.order.api.vo.PlatformStopChargingReplyVO;
import com.ruoyi.order.api.vo.SecurityDetectionVO;
import com.ruoyi.order.api.vo.TransactionRecordMessageVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.producer.SendResult;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.math.RoundingMode;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@Slf4j
@Component
public class ChargingMessageUtil {
    @Autowired
    private AcquisitionBillingModeService acquisitionBillingModeService;
    @Autowired
    private BillingModeVerifyService billingModeVerifyService;
    @Autowired
    private BmsAbortService bmsAbortService;
    @Resource
    private ChargingOrderClient chargingOrderClient;
    @Autowired
    private BmsDemandAndChargerExportationService bmsDemandAndChargerExportationService;
    @Autowired
    private OnlineService onlineService;
    @Autowired
    private PingService pingService;
    @Autowired
    private EndChargeService endChargeService;
    @Autowired
    private ErrorMessageMessageService errorMessageMessageService;
    @Autowired
    private UploadRealTimeMonitoringDataService uploadRealTimeMonitoringDataService;
    @Resource
    private AccountingStrategyDetailClient accountingStrategyDetailClient;
    @Autowired
    private ChargingHandshakeService chargingHandshakeService;
    @Autowired
    private ParameterSettingService parameterSettingService;
    @Autowired
    private MotorAbortService motorAbortService;
    @Autowired
    private BmsInformationService bmsInformationService;
    @Autowired
    private ChargingPileStartsChargingService chargingPileStartsChargingService;
    @Autowired
    private PlatformStartChargingReplyService platformStartChargingReplyService;
    @Autowired
    private PlatformStopChargingReplyService platformStopChargingReplyService;
    @Autowired
    private TransactionRecordService transactionRecordService;
    @Autowired
    private UpdateBalanceReplyService updateBalanceReplyService;
    @Autowired
    private SynchronizeOfflineCardReplyService synchronizeOfflineCardReplyService;
    @Autowired
    private ClearOfflineCardReplyService clearOfflineCardReplyService;
    @Autowired
    private WorkingParameterSettingReplyService workingParameterSettingReplyService;
    @Autowired
    private TimingSettingService timingSettingService;
    @Autowired
    private SetupBillingModelReplyService setupBillingModelReplyService;
    @Autowired
    private GroundLockRealTimeDataService groundLockRealTimeDataService;
    @Autowired
    private ChargingPileReturnsGroundLockDataService chargingPileReturnsGroundLockDataService;
    @Autowired
    private PlatformRestartReplyService platformRestartReplyService;
    @Autowired
    private PlatformRemoteUpdateReplyService platformRemoteUpdateReplyService;
    @Autowired
    private QrCodeDeliveryReplyService qrCodeDeliveryReplyService;
    @Autowired
    private SecurityDetectionService securityDetectionService;
    @Autowired
    private TCECPushUtil tcecPushUtil;
    @Resource
    private ChargingPileClient chargingPileClient;
    @Resource
    private ChargingGunClient chargingGunClient;
    @Resource
    private RedisTemplate redisTemplate;
    @Autowired
    private EnhanceProduce enhanceProduce;
    public void handleMessage(com.ruoyi.integration.rocket.model.ChargingMessage message){
        log.info("收到的消息内容:{}",message);
        String serviceId = message.getServiceId();
        if(!StringUtils.hasLength(serviceId)){
            return;
        }
        switch (serviceId){
            case SendTagConstant.ONLINE:
                OnlineMessage onlineMessage = message.getOnlineMessage();
                log.info("充电桩登录认证业务消息处理:{}",onlineMessage);
                // 持久化消息
                Online online = new Online();
                BeanUtils.copyProperties(onlineMessage,online);
                onlineService.create(online);
                break;
            case SendTagConstant.PING:
                PingMessage pingMessage = message.getPingMessage();
                log.info("充电桩心跳包-业务消息处理:{}",pingMessage);
                // 持久化消息
                Ping ping = new Ping();
                BeanUtils.copyProperties(pingMessage,ping);
                pingService.save(ping);
                //存储缓存中,5分钟有效
                redisTemplate.opsForValue().set("ping:" + ping.getCharging_pile_code() + ping.getCharging_gun_code(), ping, 5, TimeUnit.MINUTES);
                UpdateChargingPileStatusVo vo1 = new UpdateChargingPileStatusVo();
                vo1.setGun_code(pingMessage.getCharging_gun_code());
                vo1.setPile_code(pingMessage.getCharging_pile_code());
                vo1.setStatus(pingMessage.getCharging_gun_status());
                chargingPileClient.updateChargingPileStatus(vo1);
                // 监管平台推送充电设备状态
                String gunCode = pingMessage.getCharging_pile_code() + pingMessage.getCharging_gun_code();
                ChargingMessage chargingMessage = new ChargingMessage();
                chargingMessage.setServiceId(SendTagConstant.GUN_STATUS);
                GunStatusMessage gunStatusMessage = new GunStatusMessage();
                gunStatusMessage.setFullNumber(gunCode);
                chargingMessage.setGunStatusMessage(gunStatusMessage);
                SendResult sendResult = enhanceProduce.gunStatusMessage(chargingMessage);
                break;
            case SendTagConstant.END_CHARGE:
                EndChargeMessage endChargeMessage = message.getEndChargeMessage();
                log.info("充电结束-业务消息处理:{}",endChargeMessage);
                // 持久化消息
                EndCharge endCharge = new EndCharge();
                BeanUtils.copyProperties(endChargeMessage,endCharge);
                endChargeService.create(endCharge);
                // 业务处理
                chargingOrderClient.endCharge(endCharge.getTransaction_serial_number());
                // 订单id
                String transactionSerialNumber = endCharge.getTransaction_serial_number();
                ChargingOrderMessage chargingOrderMessage = new ChargingOrderMessage();
                chargingOrderMessage.setOrderNumber(transactionSerialNumber);
                // 推送充电订单信息
                ChargingMessage chargingMessage1 = new ChargingMessage();
                chargingMessage1.setServiceId(SendTagConstant.ORDER_INFO);
                chargingMessage1.setOrderMessage(chargingOrderMessage);
                enhanceProduce.orderInfoMessage(chargingMessage1);
                // 推送充电订单状态
                ChargingMessage chargingMessage2 = new ChargingMessage();
                chargingMessage2.setServiceId(SendTagConstant.ORDER_STATUS);
                chargingMessage2.setOrderMessage(chargingOrderMessage);
                enhanceProduce.orderStatusMessage(chargingMessage2);
                break;
            case SendTagConstant.ERROR_MESSAGE:
                ErrorMessageMessage errorMessageMessage1 = message.getErrorMessageMessage();
                log.info("错误报文-业务消息处理:{}",errorMessageMessage1);
                // 持久化消息
                ErrorMessageMessage errorMessageMessage = new ErrorMessageMessage();
                BeanUtils.copyProperties(errorMessageMessage1,errorMessageMessage);
                errorMessageMessageService.create(errorMessageMessage);
                break;
            case SendTagConstant.BILLING_MODE_VERIFY:
                BillingModeVerifyMessage billingModeVerifyMessage = message.getBillingModeVerifyMessage();
                log.info("计费模型验证请求-业务消息处理:{}",billingModeVerifyMessage);
                // 持久化消息
                BillingModeVerify billingModeVerify = new BillingModeVerify();
                BeanUtils.copyProperties(billingModeVerifyMessage,billingModeVerify);
                billingModeVerifyService.create(billingModeVerify);
                break;
            case SendTagConstant.ACQUISITION_BILLING_MODE:
                AcquisitionBillingModeMessage acquisitionBillingModeMessage = message.getAcquisitionBillingModeMessage();
                log.info("充电桩计费模型请求-业务消息处理:{}",acquisitionBillingModeMessage);
                // 持久化消息
                AcquisitionBillingMode acquisitionBillingMode = new AcquisitionBillingMode();
                BeanUtils.copyProperties(acquisitionBillingModeMessage,acquisitionBillingMode);
                acquisitionBillingModeService.create(acquisitionBillingMode);
                break;
            case SendTagConstant.UPLOAD_REAL_TIME_MONITORING_DATA:
                UploadRealTimeMonitoringDataMessage uploadRealTimeMonitoringDataMessage = message.getUploadRealTimeMonitoringDataMessage();
                try {
                    log.info("上传实时监测数据-业务消息处理:{}",uploadRealTimeMonitoringDataMessage);
                    // 持久化消息
                    UploadRealTimeMonitoringData uploadRealTimeMonitoringData = new UploadRealTimeMonitoringData();
                    BeanUtils.copyProperties(uploadRealTimeMonitoringDataMessage,uploadRealTimeMonitoringData);
                    // 查询mogondb上一条数据
                    UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataService.getLastDataById(uploadRealTimeMonitoringDataMessage.getTransaction_serial_number());
                    // 查询订单
                    TChargingOrder chargingOrder = chargingOrderClient.getOrderByCode(uploadRealTimeMonitoringDataMessage.getTransaction_serial_number()).getData();
                    // 查询当前时间段的计费策略
                    TAccountingStrategyDetail accountingStrategyDetail = accountingStrategyDetailClient.getDetailBySiteId(chargingOrder.getSiteId()).getData();
                    uploadRealTimeMonitoringData.setElectrovalence_all(accountingStrategyDetail.getElectrovalence());
                    uploadRealTimeMonitoringData.setService_charge(accountingStrategyDetail.getServiceCharge());
                    if (Objects.nonNull(data)) {
                        uploadRealTimeMonitoringDataService.updateById(data.getId());
                        uploadRealTimeMonitoringData.setPeriod_electric_price(uploadRealTimeMonitoringDataMessage.getPaid_amount().subtract(data.getPaid_amount()));
                        uploadRealTimeMonitoringData.setPeriod_charging_degree(uploadRealTimeMonitoringDataMessage.getCharging_degree().subtract(data.getCharging_degree()));
                        uploadRealTimeMonitoringData.setPeriod_service_price(uploadRealTimeMonitoringDataMessage.getCharging_degree().multiply(accountingStrategyDetail.getServiceCharge()).setScale(4, RoundingMode.HALF_UP));
                    }else {
                        log.info("首次上传实时监测数据");
                        uploadRealTimeMonitoringData.setPeriod_electric_price(uploadRealTimeMonitoringDataMessage.getPaid_amount());
                        uploadRealTimeMonitoringData.setPeriod_charging_degree(uploadRealTimeMonitoringDataMessage.getCharging_degree());
                        uploadRealTimeMonitoringData.setPeriod_service_price(uploadRealTimeMonitoringDataMessage.getCharging_degree().multiply(accountingStrategyDetail.getServiceCharge()).setScale(4, RoundingMode.HALF_UP));
                    }
                    uploadRealTimeMonitoringData.setOrderType(chargingOrder.getOrderType());
                    uploadRealTimeMonitoringData.setSiteId(chargingOrder.getSiteId());
                    uploadRealTimeMonitoringData.setStatus(chargingOrder.getStatus());
                    int i = uploadRealTimeMonitoringDataService.create(uploadRealTimeMonitoringData);
                    if(i == 0){
                        log.error("数据存储mongo失败");
                    }
                    // 业务处理
                    UploadRealTimeMonitoringDataQuery query = new UploadRealTimeMonitoringDataQuery();
                    BeanUtils.copyProperties(uploadRealTimeMonitoringData, query);
                    chargingOrderClient.chargeMonitoring(query);
                    // 订单id
                    ChargingOrderMessage chargingOrderMessage3 = new ChargingOrderMessage();
                    chargingOrderMessage3.setOrderNumber(chargingOrder.getCode());
                    // 推送充电订单信息
                    ChargingMessage chargingMessage4 = new ChargingMessage();
                    chargingMessage4.setServiceId(SendTagConstant.ORDER_STATUS);
                    chargingMessage4.setOrderMessage(chargingOrderMessage3);
                    enhanceProduce.orderInfoMessage(chargingMessage4);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                break;
            case SendTagConstant.CHARGING_HANDSHAKE:
                ChargingHandshakeMessage chargingHandshakeMessage = message.getChargingHandshakeMessage();
                log.info("充电握手-业务消息处理:{}",chargingHandshakeMessage);
                // 持久化消息
                ChargingHandshake chargingHandshake = new ChargingHandshake();
                BeanUtils.copyProperties(chargingHandshakeMessage,chargingHandshake);
                chargingHandshakeService.create(chargingHandshake);
                break;
            case SendTagConstant.PARAMETER_SETTING:
                ParameterSettingMessage parameterSettingMessage = message.getParameterSettingMessage();
                log.info("参数配置-业务消息处理:{}",parameterSettingMessage);
                // 持久化消息
                ParameterSetting parameterSetting = new ParameterSetting();
                BeanUtils.copyProperties(parameterSettingMessage,parameterSetting);
                parameterSettingService.create(parameterSetting);
                break;
            case SendTagConstant.BMS_ABORT:
                BmsAbortMessage bmsAbortMessage = message.getBmsAbortMessage();
                log.info("充电阶段BMS中止-业务消息处理:{}",bmsAbortMessage);
                // 持久化消息
                BmsAbort bmsAbort = new BmsAbort();
                BeanUtils.copyProperties(bmsAbortMessage,bmsAbort);
                bmsAbortService.create(bmsAbort);
                // 业务处理
                chargingOrderClient.excelEndCharge(bmsAbort.getTransaction_serial_number());
                break;
            case SendTagConstant.MOTOR_ABORT:
                MotorAbortMessage motorAbortMessage = message.getMotorAbortMessage();
                log.info("充电阶段充电机中止-业务消息处理:{}",motorAbortMessage);
                // 持久化消息
                MotorAbort motorAbort = new MotorAbort();
                BeanUtils.copyProperties(motorAbortMessage,motorAbort);
                motorAbortService.create(motorAbort);
                // 业务处理
                chargingOrderClient.excelEndCharge(motorAbort.getTransaction_serial_number());
                break;
            case SendTagConstant.BMS_DEMAND_AND_CHARGER_EXPORTATION:
                BmsDemandAndChargerExportationMessage bmsDemandAndChargerExportationMessage = message.getBmsDemandAndChargerExportationMessage();
                log.info("充电过程BMS需求、充电机输出-业务消息处理:{}",bmsDemandAndChargerExportationMessage);
                // 持久化消息
                BmsDemandAndChargerExportation bmsDemandAndChargerExportation = new BmsDemandAndChargerExportation();
                BeanUtils.copyProperties(bmsDemandAndChargerExportationMessage,bmsDemandAndChargerExportation);
                bmsDemandAndChargerExportationService.create(bmsDemandAndChargerExportation);
                // 业务处理
                TChargingOrder chargingOrderBms = chargingOrderClient.getOrderByCode(bmsDemandAndChargerExportationMessage.getTransaction_serial_number()).getData();
                if(Objects.nonNull(chargingOrderBms)){
                    chargingOrderBms.setNeedElec(bmsDemandAndChargerExportationMessage.getBms_current_requirements());
                    chargingOrderClient.updateChargingOrder(chargingOrderBms);
                }
                break;
            case SendTagConstant.BMS_INFORMATION:
                BmsInformationMessage bmsInformationMessage = message.getBmsInformationMessage();
                log.info("充电过程BMS信息-业务消息处理:{}",bmsInformationMessage);
                // 持久化消息
                BmsInformation bmsInformation = new BmsInformation();
                BeanUtils.copyProperties(bmsInformationMessage,bmsInformation);
                bmsInformationService.create(bmsInformation);
                break;
            case SendTagConstant.CHARGING_PILE_STARTS_CHARGING:
                ChargingPileStartsChargingMessage chargingPileStartsChargingMessage = message.getChargingPileStartsChargingMessage();
                log.info("充电桩主动申请启动充电-业务消息处理:{}",chargingPileStartsChargingMessage);
                // 持久化消息
                ChargingPileStartsCharging chargingPileStartsCharging = new ChargingPileStartsCharging();
                BeanUtils.copyProperties(chargingPileStartsChargingMessage,chargingPileStartsCharging);
                chargingPileStartsChargingService.create(chargingPileStartsCharging);
                break;
            case SendTagConstant.PLATFORM_START_CHARGING_REPLY:
                PlatformStartChargingReplyMessage platformStartChargingReplyMessage = message.getPlatformStartChargingReplyMessage();
                log.info("远程启机命令回复-业务消息处理:{}",platformStartChargingReplyMessage);
                // 持久化消息
                PlatformStartChargingReply platformStartChargingReply = new PlatformStartChargingReply();
                BeanUtils.copyProperties(platformStartChargingReplyMessage,platformStartChargingReply);
                platformStartChargingReplyService.create(platformStartChargingReply);
                // 业务处理
                PlatformStartChargingReplyMessageVO message1 = new PlatformStartChargingReplyMessageVO();
                BeanUtils.copyProperties(platformStartChargingReplyMessage, message1);
                chargingOrderClient.startChargeSuccessfully(message1);
                break;
            case SendTagConstant.PLATFORM_STOP_CHARGING_REPLY:
                PlatformStopChargingReplyMessage platformStopChargingReplyMessage = message.getPlatformStopChargingReplyMessage();
                log.info("远程停机命令回复-业务消息处理:{}",platformStopChargingReplyMessage);
                // 持久化消息
                PlatformStopChargingReply platformStopChargingReply = new PlatformStopChargingReply();
                BeanUtils.copyProperties(platformStopChargingReplyMessage,platformStopChargingReply);
                platformStopChargingReplyService.create(platformStopChargingReply);
                PlatformStopChargingReplyVO platformStopChargingReply1 = new PlatformStopChargingReplyVO();
                BeanUtils.copyProperties(platformStopChargingReply, platformStopChargingReply1);
                chargingOrderClient.terminateSuccessfulResponse(platformStopChargingReply1);
                break;
            case SendTagConstant.TRANSACTION_RECORD:
                TransactionRecordMessage transactionRecordMessage = message.getTransactionRecordMessage();
                log.info("交易记录-业务消息处理:{}",transactionRecordMessage);
                transactionRecordMessage.setResult(JSONObject.toJSONString(transactionRecordMessage));
                // 持久化消息
                TransactionRecord transactionRecord = new TransactionRecord();
                BeanUtils.copyProperties(transactionRecordMessage,transactionRecord);
                transactionRecord.setResult(transactionRecordMessage.getResult());
                transactionRecordService.create(transactionRecord);
                // 业务处理
                TChargingOrder chargingOrderRecord = chargingOrderClient.getOrderByCode(transactionRecordMessage.getTransaction_serial_number()).getData();
                if(Objects.nonNull(chargingOrderRecord)){
                    chargingOrderRecord.setTotalElectricity(transactionRecordMessage.getTotal_electricity());
                    chargingOrderClient.updateChargingOrder(chargingOrderRecord);
                }
                //计算费用
                TransactionRecordMessageVO vo = new TransactionRecordMessageVO();
                BeanUtils.copyProperties(transactionRecordMessage,vo);
                int code = chargingOrderClient.endChargeBillingCharge(vo).getCode();
                if(200 != code){
                    //失败后添加到队列中继续处理数据
                    redisTemplate.opsForSet().add(SendTagConstant.TRANSACTION_RECORD, transactionRecordMessage.getTransaction_serial_number());
                }
                // 添加实时上传记录结束记录
                // 查询mogondb上一条数据
                UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataService.getLastDataById(transactionRecordMessage.getTransaction_serial_number());
                if(Objects.nonNull(data) && data.getStatus() != 5){
                    UploadRealTimeMonitoringData uploadRealTimeMonitoringData = new UploadRealTimeMonitoringData();
                    BeanUtils.copyProperties(data,uploadRealTimeMonitoringData);
                    uploadRealTimeMonitoringData.setStatus(5);
                    uploadRealTimeMonitoringDataService.create(uploadRealTimeMonitoringData);
                }
                break;
            case SendTagConstant.UPDATE_BALANCE_REPLY:
                UpdateBalanceReplyMessage updateBalanceReplyMessage = message.getUpdateBalanceReplyMessage();
                log.info("余额更新应答-业务消息处理:{}",updateBalanceReplyMessage);
                // 持久化消息
                UpdateBalanceReply updateBalanceReply = new UpdateBalanceReply();
                BeanUtils.copyProperties(updateBalanceReplyMessage,updateBalanceReply);
                updateBalanceReplyService.create(updateBalanceReply);
                break;
            case SendTagConstant.SYNCHRONIZE_OFFLINE_CARD_REPLY:
                SynchronizeOfflineCardReplyMessage synchronizeOfflineCardReplyMessage = message.getSynchronizeOfflineCardReplyMessage();
                log.info("卡数据同步应答-业务消息处理:{}",synchronizeOfflineCardReplyMessage);
                // 持久化消息
                SynchronizeOfflineCardReply synchronizeOfflineCardReply = new SynchronizeOfflineCardReply();
                BeanUtils.copyProperties(synchronizeOfflineCardReplyMessage,synchronizeOfflineCardReply);
                synchronizeOfflineCardReplyService.create(synchronizeOfflineCardReply);
                break;
            case SendTagConstant.CLEAR_OFFLINE_CARD_REPLY:
                ClearOfflineCardReplyMessage clearOfflineCardReplyMessage = message.getClearOfflineCardReplyMessage();
                log.info("离线卡数据清除应答-业务消息处理:{}",clearOfflineCardReplyMessage);
                // 持久化消息
                ClearOfflineCardReply clearOfflineCardReply = new ClearOfflineCardReply();
                BeanUtils.copyProperties(clearOfflineCardReplyMessage,clearOfflineCardReply);
                clearOfflineCardReplyService.create(clearOfflineCardReply);
                break;
            case SendTagConstant.WORKING_PARAMETER_SETTING_REPLY:
                WorkingParameterSettingReplyMessage workingParameterSettingReplyMessage = message.getWorkingParameterSettingReplyMessage();
                log.info("充电桩工作参数设置应答-业务消息处理:{}",workingParameterSettingReplyMessage);
                // 持久化消息
                WorkingParameterSettingReply workingParameterSettingReply = new WorkingParameterSettingReply();
                BeanUtils.copyProperties(workingParameterSettingReplyMessage,workingParameterSettingReply);
                workingParameterSettingReplyService.create(workingParameterSettingReply);
                break;
            case SendTagConstant.TIMING_SETTING:
                TimingSettingMessage timingSettingMessage = message.getTimingSettingMessage();
                log.info("对时设置-业务消息处理:{}",timingSettingMessage);
                // 持久化消息
                TimingSetting timingSetting = new TimingSetting();
                BeanUtils.copyProperties(timingSettingMessage,timingSetting);
                timingSettingService.create(timingSetting);
                break;
            case SendTagConstant.SETUP_BILLING_MODEL_REPLY:
                SetupBillingModelReplyMessage setupBillingModelReplyMessage = message.getSetupBillingModelReplyMessage();
                log.info("计费模型应答-业务消息处理:{}",setupBillingModelReplyMessage);
                // 持久化消息
                SetupBillingModelReply setupBillingModelReply = new SetupBillingModelReply();
                BeanUtils.copyProperties(setupBillingModelReplyMessage,setupBillingModelReply);
                setupBillingModelReplyService.create(setupBillingModelReply);
                break;
            case SendTagConstant.GROUND_LOCK_REAL_TIME_DATA:
                GroundLockRealTimeDataMessage groundLockRealTimeDataMessage = message.getGroundLockRealTimeDataMessage();
                log.info("地锁数据上送(充电桩上送)-业务消息处理:{}",groundLockRealTimeDataMessage);
                // 持久化消息
                GroundLockRealTimeData groundLockRealTimeData = new GroundLockRealTimeData();
                BeanUtils.copyProperties(groundLockRealTimeDataMessage,groundLockRealTimeData);
                groundLockRealTimeDataService.create(groundLockRealTimeData);
                break;
            case SendTagConstant.CHARGING_PILE_RETURNS_GROUND_LOCK_DATA:
                ChargingPileReturnsGroundLockDataMessage chargingPileReturnsGroundLockDataMessage = message.getChargingPileReturnsGroundLockDataMessage();
                log.info("充电桩返回数据(上行)-业务消息处理:{}",chargingPileReturnsGroundLockDataMessage);
                // 持久化消息
                ChargingPileReturnsGroundLockData chargingPileReturnsGroundLockData = new ChargingPileReturnsGroundLockData();
                BeanUtils.copyProperties(chargingPileReturnsGroundLockDataMessage,chargingPileReturnsGroundLockData);
                chargingPileReturnsGroundLockDataService.create(chargingPileReturnsGroundLockData);
                break;
            case SendTagConstant.PLATFORM_RESTART_REPLY:
                PlatformRestartReplyMessage platformRestartReplyMessage = message.getPlatformRestartReplyMessage();
                log.info("远程重启应答-业务消息处理:{}",platformRestartReplyMessage);
                // 持久化消息
                PlatformRestartReply platformRestartReply = new PlatformRestartReply();
                BeanUtils.copyProperties(platformRestartReplyMessage,platformRestartReply);
                platformRestartReplyService.create(platformRestartReply);
                break;
            case SendTagConstant.QR_CODE_DELIVERY_REPLY:
                QrCodeDeliveryReplyMessage qrCodeDeliveryReplyMessage = message.getQrCodeDeliveryReplyMessage();
                log.info("二维码下发应答-业务消息处理:{}",qrCodeDeliveryReplyMessage);
                QrCodeDeliveryReply qrCodeDeliveryReply = new QrCodeDeliveryReply();
                BeanUtils.copyProperties(qrCodeDeliveryReplyMessage,qrCodeDeliveryReply);
                qrCodeDeliveryReplyService.create(qrCodeDeliveryReply);
                break;
            case SendTagConstant.SECURITY_DETECTION:
                SecurityDetectionMessage securityDetectionMessage = message.getSecurityDetectionMessage();
                log.info("安全监测-业务消息处理:{}",securityDetectionMessage);
                SecurityDetection securityDetection = new SecurityDetection();
                BeanUtils.copyProperties(securityDetectionMessage,securityDetection);
                securityDetectionService.create(securityDetection);
                SecurityDetectionVO securityDetection1 = new SecurityDetectionVO();
                BeanUtils.copyProperties(securityDetection, securityDetection1);
                chargingOrderClient.securityDetection(securityDetection1);
                break;
            default:
                PlatformRemoteUpdateReplyMessage platformRemoteUpdateReplyMessage = message.getPlatformRemoteUpdateReplyMessage();
                log.info("业务消息处理:{}",platformRemoteUpdateReplyMessage);
                // 持久化消息
                PlatformRemoteUpdateReply platformRemoteUpdateReply = new PlatformRemoteUpdateReply();
                BeanUtils.copyProperties(platformRemoteUpdateReplyMessage,platformRemoteUpdateReply);
                platformRemoteUpdateReplyService.create(platformRemoteUpdateReply);
                break;
        }
    }
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java
@@ -344,17 +344,17 @@
        return rocketMQEnhanceTemplate.send(TOPIC+SendTagConstant.SECURITY_DETECTION, SendTagConstant.SECURITY_DETECTION, message);
    }
    /**
     * 充电桩登录认证
     */
    public SendResult chargingMessage(ChargingMessage message) {
        // 设置业务key
        message.setKey(UUID.randomUUID().toString());
        // 设置消息来源,便于查询
        message.setSource(SendTagConstant.CHARGING_MESSAGE);
        return rocketMQEnhanceTemplate.send(TOPIC+SendTagConstant.CHARGING_MESSAGE, SendTagConstant.CHARGING_MESSAGE, message);
    }
//    /**
//     * 充电桩登录认证
//     */
//    public SendResult chargingMessage(ChargingMessage message) {
//        // 设置业务key
//        message.setKey(UUID.randomUUID().toString());
//        // 设置消息来源,便于查询
//        message.setSource(SendTagConstant.CHARGING_MESSAGE);
//
//        return rocketMQEnhanceTemplate.send(TOPIC+SendTagConstant.CHARGING_MESSAGE, SendTagConstant.CHARGING_MESSAGE, message);
//    }
    /**
     * 监管平台推送充电设备接口状态
     */
@@ -363,8 +363,8 @@
        message.setKey(UUID.randomUUID().toString());
        // 设置消息来源,便于查询
        message.setSource(SendTagConstant.GUN_STATUS);
        return rocketMQEnhanceTemplate.send(TOPIC_JIANGUAN+SendTagConstant.GUN_STATUS, SendTagConstant.GUN_STATUS, message);
        rocketMQEnhanceTemplate.sendAsynchronous(TOPIC_JIANGUAN+SendTagConstant.GUN_STATUS, SendTagConstant.GUN_STATUS, message);
        return null;
    }
    /**
     * 监管平台推送充电订单信息
@@ -374,8 +374,8 @@
        message.setKey(UUID.randomUUID().toString());
        // 设置消息来源,便于查询
        message.setSource(SendTagConstant.ORDER_INFO);
        return rocketMQEnhanceTemplate.send(TOPIC_JIANGUAN+SendTagConstant.ORDER_INFO, SendTagConstant.ORDER_INFO, message);
        rocketMQEnhanceTemplate.sendAsynchronous(TOPIC_JIANGUAN+SendTagConstant.ORDER_INFO, SendTagConstant.ORDER_INFO, message);
        return null;
    }
    /**
     * 监管平台推送充电订单状态
@@ -385,8 +385,8 @@
        message.setKey(UUID.randomUUID().toString());
        // 设置消息来源,便于查询
        message.setSource(SendTagConstant.ORDER_STATUS);
        return rocketMQEnhanceTemplate.send(TOPIC_JIANGUAN+SendTagConstant.ORDER_STATUS, SendTagConstant.ORDER_STATUS, message);
        rocketMQEnhanceTemplate.sendAsynchronous(TOPIC_JIANGUAN+SendTagConstant.ORDER_STATUS, SendTagConstant.ORDER_STATUS, message);
        return null;
    }
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/util/RocketMQEnhanceTemplate.java
@@ -56,7 +56,13 @@
        // 注意分隔符
        return send(buildDestination(topic,tag), message);
    }
    /**
     * 发送异步消息
     */
    public <T extends BaseMessage> void sendAsynchronous(String topic, String tag, T message) {
        // 注意分隔符
        sendAsynchronous(buildDestination(topic,tag), message);
    }
    public <T extends BaseMessage> SendResult send(String destination, T message) {
        // 设置业务键,此处根据公共的参数进行处理
@@ -67,6 +73,19 @@
        log.info("[{}]同步消息[{}]---->发送结果[{}]", destination, JSONObject.toJSON(message), JSONObject.toJSON(sendResult));
        return sendResult;
    }
    public <T extends BaseMessage> void sendAsynchronous(String destination, T message) {
        try {
            // 设置业务键,此处根据公共的参数进行处理
            // 更多的其它基础业务处理...
            Message<T> sendMessage = MessageBuilder.withPayload(message).setHeader(RocketMQHeaders.TAGS, message.getKey()).build();
            template.send(destination, sendMessage);
            // 此处为了方便查看给日志转了json,根据选择选择日志记录方式,例如ELK采集
            log.info("[{}]异步消息[{}]", destination, JSONObject.toJSON(message));
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    /**
     * 发送延迟消息
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/util/JianGuanTask.java
File was deleted
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/util/TaskUtil.java
New file
@@ -0,0 +1,60 @@
//package com.ruoyi.integration.util;
//
//import com.ruoyi.integration.mongodb.service.*;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.Resource;
//
///**
// * 定时任务工具类
// * @author zhibing.pu
// * @Date 2025/5/21 11:43
// */
//@Component
//public class TaskUtil {
//
//    @Resource
//    private AcquisitionBillingModeReplyService acquisitionBillingModeReplyService;
//
//    @Resource
//    private AcquisitionBillingModeService acquisitionBillingModeService;
//
//    @Resource
//    private BillingModeVerifyReplyService billingModeVerifyReplyService;
//
//    @Resource
//    private BillingModeVerifyService billingModeVerifyService;
//
//    @Resource
//    private BmsAbortService bmsAbortService;
//
//    @Resource
//    private BmsDemandAndChargerExportationService bmsDemandAndChargerExportationService;
//
//    @Resource
//    private BmsInformationService bmsInformationService;
//
//    @Resource
//    private ChargingHandshakeService chargingHandshakeService;
//
//
//    /**
//     * 定时任务
//     */
//    @Scheduled(cron = "0 0 9 * * ?")
//    public void run(){
//        //获取当前运行的端口号
//        String port = System.getProperty("server.port");
//        if("5071".equals(port)){
//            acquisitionBillingModeReplyService.taskDelete();
//            acquisitionBillingModeService.taskDelete();
//            billingModeVerifyReplyService.taskDelete();
//            billingModeVerifyService.taskDelete();
//            bmsAbortService.taskDelete();
//            bmsDemandAndChargerExportationService.taskDelete();
//            bmsInformationService.taskDelete();
//            chargingHandshakeService.taskDelete();
//        }
//    }
//}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java
@@ -78,102 +78,6 @@
    }
    public static void main(String[] args) {
        // 发送邮箱
        // 收件人电子邮箱,TODO 换成自己的收件箱
        String to = "443237572@qq.com";
        // 发件人电子邮箱,TODO 换成自己的发件箱
        String from = "13281306557@163.com";
        // 指定发送邮件的主机为
        String host = "smtp.163.com";
        Properties properties = new Properties();
        properties.put("mail.smtp.host", "smtp.163.com");
        properties.put("mail.smtp.socketFactory.port", "465");
        properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.port", "465");
        properties.put("mail.smtp.ssl.enable", "true"); // 明确开启SSL
        // 获取默认session对象
        Session session = Session.getDefaultInstance(properties,new Authenticator(){
            @Override
            public PasswordAuthentication getPasswordAuthentication()
            {
                //发件人邮件用户名、授权码,换成自己的发件箱及授权码
                return new PasswordAuthentication("13281306557@163.com", "NUSdxDQqadYvVek2");
            }
        });
        try{
            // 创建默认的 MimeMessage 对象
            MimeMessage message = new MimeMessage(session);
            // Set From,设置发件人
            InternetAddress fromMail = new InternetAddress(from);
            //设置发件人名称,TODO 换成自己的发件箱
            fromMail.setPersonal(MimeUtility.encodeText("明星电力<13281306557@163.com>"));
            message.setFrom(fromMail);
            // Set To: 设置收件人
            InternetAddress toMail = new InternetAddress(to);
            // TODO 换成自己的收件箱
            InternetAddress toMail2 = new InternetAddress(to);
            //发多个邮箱
            Address[] allRecipients = {toMail, toMail2};
            message.setRecipients(Message.RecipientType.TO, allRecipients);
            // Set Subject: 邮件主体
            message.setSubject("明星电力");
            // 设置消息体
            message.setSentDate(new Date());
            // 指定为混合关系
            MimeMultipart msgMultipart = new MimeMultipart("mixed");
            message.setContent(msgMultipart);
            // 邮件信息组装
            //组装的顺序非常重要,一定要先组装文本域,再组装文件
            MimeBodyPart htmlPart = new MimeBodyPart();
            // 组装内容
            htmlPart.setContent("开票", "text/html;charset=UTF-8");
            msgMultipart.addBodyPart(htmlPart);
            // 组装附件
            MimeBodyPart filePart = new MimeBodyPart();
            String imageUrl = "https://mxcd.zhinenganguan.com/file/2025-02-14/_1@2x.png";
            try {
                // 下载数据
                URL url = new URL(imageUrl);
                InputStream inputStream = url.openStream();
                byte[] imageBytes = IOUtils.toByteArray(inputStream);
                // 创建临时文件
                // 截取imageUrl后缀名
                String fileExtension = imageUrl.substring(imageUrl.lastIndexOf("."));
                File tempFile = File.createTempFile("tempImage", fileExtension);
                try (FileOutputStream fos = new FileOutputStream(tempFile)) {
                    fos.write(imageBytes);
                }
                // 创建 FileDataSource
                FileDataSource fileDataSource = new FileDataSource(tempFile);
                System.out.println("FileDataSource created: " + fileDataSource.getName());
                // 如果需要,可以使用 DataHandler 进行进一步处理
                DataHandler dh = new DataHandler(fileDataSource);
                // 清理:删除临时文件(如果不再需要)
                tempFile.deleteOnExit(); // 可根据需要保留或删除
                filePart.setDataHandler(dh);
                // 附件区别内嵌内容的一个特点是有文件名,为防止中文乱码要编码
                filePart.setFileName(MimeUtility.encodeText(dh.getName()));
                msgMultipart.addBodyPart(filePart);
                message.saveChanges();
                //发送
                //Transport.send(message, message.getAllRecipients());
                Transport.send(message);
                System.out.println("发送成功");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }catch (MessagingException | UnsupportedEncodingException mex) {
            mex.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    @RequiresPermissions(value = {"/invoiceManagement/accept_hear_case"}, logical = Logical.OR)
    @PostMapping("/uploadPdf")
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -2119,7 +2119,6 @@
     * @param query
     */
    @Override
    @GlobalTransactional(rollbackFor = Exception.class)
    public void chargeMonitoring(UploadRealTimeMonitoringDataQuery query) {
        if(com.ruoyi.common.core.utils.StringUtils.isNotEmpty(query.getTransaction_serial_number())){
            //获取当前的计费策略
@@ -2145,10 +2144,6 @@
            chargingOrder.setChargingCapacity(query.getCharging_degree());
            chargingOrder.setElectricity(query.getCharging_degree());
            chargingOrder.setTotalElectricity(new BigDecimal(100 - query.getSoc()));
            BmsDemandAndChargerExportation data = bmsDemandAndChargerExportationClient.getBmsDemandAndChargerExportation(chargingOrder1.getCode()).getData();
            if(null != data){
                chargingOrder.setNeedElec(data.getBms_current_requirements());
            }
            this.updateById(chargingOrder);
        }
    }