Pu Zhibing
2026-01-06 4ac4fbae929696ce0151de667139ad46d094a589
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -1,5 +1,6 @@
package com.ruoyi.order.service.impl;
import cn.hutool.core.util.NumberUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -34,6 +35,7 @@
import com.ruoyi.integration.api.model.*;
import com.ruoyi.integration.api.vo.ChargingOrderVo;
import com.ruoyi.integration.api.vo.GetPlatformStopChargingReply;
import com.ruoyi.integration.api.vo.NotificationConnectorChargeStatusVo;
import com.ruoyi.integration.api.vo.StartChargeResult;
import com.ruoyi.order.api.dto.SettlementConfirmAdd;
import com.ruoyi.order.api.feignClient.AccountingStrategyDetailOrderClient;
@@ -232,6 +234,9 @@
   
   @Resource
   private ChargingMessageClient chargingMessageClient;
   @Resource
   private ChengDuJianGuanClient chengDuJianGuanClient;
   
   
   /**
@@ -769,15 +774,26 @@
      
      log.info(chargingOrder.getCode() + ":-------------------远程调起开始充电请求-------------------" + platformStartCharging.toString());
      sendMessageClient.platformStartCharging(platformStartCharging);
//      //异步线程检测远程启动的应答结果。如果失败,则需要全额退款
//      Long id = chargingOrder.getId();
//      //执行5分钟的定时任务检测
//      ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
//      scheduler.scheduleAtFixedRate(()->{
//         if(timingDetection(id)){
//            scheduler.shutdown();
//         }
//      }, 5, 1, TimeUnit.SECONDS);
      ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>());
      threadPoolExecutor.execute(()->{
         //推送成都监管
         NotificationConnectorChargeStatusVo vo = new NotificationConnectorChargeStatusVo();
         vo.setOrderCode(chargingOrder.getCode());
         vo.setChargingGunId(chargingOrder.getChargingGunId());
         chengDuJianGuanClient.notificationConnectorChargeStatus(vo);
      });
      //异步线程检测远程启动的应答结果。如果失败,则需要全额退款
      Long id = chargingOrder.getId();
      //执行10分钟的定时任务检测
      ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
      scheduler.scheduleAtFixedRate(()->{
         if(timingDetection(id)){
            scheduler.shutdown();
         }
      }, 10, 1, TimeUnit.SECONDS);
      return AjaxResult.success();
   }
   
@@ -797,14 +813,15 @@
      String key = "AQJC_" + chargingOrder.getChargingGunId();
      List<PlatformStartChargingReply> data = platformStartChargingReplyService.getPlatformStartChargingReply(code);
      log.info(code + ":-------------------开始检查调起充电结果-------------------" + data.toString());
      if (data.size() != 0) {
      Site site = siteClient.getSiteByIds(Arrays.asList(chargingOrder.getSiteId())).getData().get(0);
      if (!data.isEmpty()) {
         PlatformStartChargingReply platformStartChargingReply = data.get(1);
         Integer startup_result = platformStartChargingReply.getStartup_result();
         Integer failure_cause = platformStartChargingReply.getFailure_cause();
         Integer counter = counter_map.get(code);
         PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key);
         //5分钟内还未插枪则取消充电,退回金额。
         if (failure_cause == 5 && (null == counter || counter < 1800)) {
         //10分钟内还未插枪则取消充电,退回金额。
         if (failure_cause == 5 && (null == counter || counter < 600)) {
            counter = (null == counter ? 0 : counter) + 1;
            counter_map.put(code, counter);
            //启动失败
@@ -820,66 +837,111 @@
            //启动失败
            preChargeCheck1.setStartupSuccess(3);
            preChargeCheck1.setFailureCause(failure_cause);
            chargingOrder.setStatus(2);
            chargingOrder.setEndMode(0);
            this.updateById(chargingOrder);
            //启动失败后取消订单,退款操作
            refund(code);
            chargingOrder.setStatus(-1);
            chargingOrder.setEndMode(0);
         } else {
            //启动成功
            preChargeCheck1.setStartupSuccess(2);
            chargingOrder.setStatus(3);
            chargingOrder.setStartTime(LocalDateTime.now());
            this.updateById(chargingOrder);
         }
         this.updateById(chargingOrder);
         if (chargingOrder.getStatus() == 3) {
            //推送监管平台订单状态
            new Thread(() -> {
         redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
         //推送三方平台订单状态
         if (2 == chargingOrder.getOrderSource() && 1 == site.getIsOpenSynchronization()) {
            tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
         }
         ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>());
         threadPoolExecutor.execute(()->{
            if (chargingOrder.getStatus() == 3) {
               //推送监管平台订单状态
               ChargingOrderVo chargingOrderVo = new ChargingOrderVo();
               BeanUtils.copyProperties(chargingOrder, chargingOrderVo);
               chargingMessageClient.pushOrderStatus(chargingOrderVo);
            }).start();
         }
         redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
         //推送三方平台订单状态
         if (2 == chargingOrder.getOrderSource()) {
            tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
         }
            }
            //推送成都监管
            NotificationConnectorChargeStatusVo vo = new NotificationConnectorChargeStatusVo();
            vo.setOrderCode(chargingOrder.getCode());
            vo.setChargingGunId(chargingOrder.getChargingGunId());
            chengDuJianGuanClient.notificationConnectorChargeStatus(vo);
         });
         return true;
      } else {
         Integer counter = boot_failed_map.get(code);
         log.info(code + ":-------------------未上传开启充电结果-------------------" + counter);
         PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key);
         //5分钟内未启动成功,退回金额。
         if (null == counter || counter < 1800) {
            counter = (null == counter ? 0 : counter) + 1;
            boot_failed_map.put(code, counter);
            //启动失败
            preChargeCheck1.setStartupSuccess(1);
            preChargeCheck1.setFailureCause(0);
         UploadRealTimeMonitoringData uploadRealTimeMonitoringData = uploadRealTimeMonitoringDataService.getDataByOrderCode(code, "desc");
         if(null != uploadRealTimeMonitoringData){
            //启动成功
            preChargeCheck1.setStartupSuccess(2);
            chargingOrder.setStatus(3);
            chargingOrder.setStartTime(LocalDateTime.now());
            this.updateById(chargingOrder);
            redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
            return false;
            //推送三方平台订单状态
            if (2 == chargingOrder.getOrderSource() && 1 == site.getIsOpenSynchronization()) {
               tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
            }
            ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>());
            threadPoolExecutor.execute(()->{
               if (chargingOrder.getStatus() == 3) {
                  //推送监管平台订单状态
                  ChargingOrderVo chargingOrderVo = new ChargingOrderVo();
                  BeanUtils.copyProperties(chargingOrder, chargingOrderVo);
                  chargingMessageClient.pushOrderStatus(chargingOrderVo);
               }
               //推送成都监管
               NotificationConnectorChargeStatusVo vo = new NotificationConnectorChargeStatusVo();
               vo.setOrderCode(chargingOrder.getCode());
               vo.setChargingGunId(chargingOrder.getChargingGunId());
               chengDuJianGuanClient.notificationConnectorChargeStatus(vo);
            });
            return true;
         }else{
            Integer counter = boot_failed_map.get(code);
            log.info(code + ":-------------------未上传开启充电结果-------------------" + counter);
            //10分钟内未启动成功,退回金额。
            if (null == counter || counter < 600) {
               counter = (null == counter ? 0 : counter) + 1;
               boot_failed_map.put(code, counter);
               //启动失败
               preChargeCheck1.setStartupSuccess(1);
               preChargeCheck1.setFailureCause(0);
               redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
               return false;
            }
            //清除计时器中的无效数据
            boot_failed_map.remove(code);
            TChargingOrder order = new TChargingOrder();
            order.setId(id);
            order.setAppUserId(chargingOrder.getAppUserId());
            //启动失败
            preChargeCheck1.setStartupSuccess(3);
            preChargeCheck1.setFailureCause(0);
            order.setStatus(2);
            order.setEndMode(0);
            this.updateById(order);
            //启动失败后取消订单,退款操作
            refund(code);
            redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
            //推送三方平台订单状态
            if (2 == chargingOrder.getOrderSource() && 1 == site.getIsOpenSynchronization()) {
               tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
            }
            ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>());
            threadPoolExecutor.execute(()->{
               //推送成都监管
               NotificationConnectorChargeStatusVo vo = new NotificationConnectorChargeStatusVo();
               vo.setOrderCode(chargingOrder.getCode());
               vo.setChargingGunId(chargingOrder.getChargingGunId());
               chengDuJianGuanClient.notificationConnectorChargeStatus(vo);
            });
            return true;
         }
         //清除计时器中的无效数据
         boot_failed_map.remove(code);
         TChargingOrder order = new TChargingOrder();
         order.setId(id);
         order.setAppUserId(chargingOrder.getAppUserId());
         //启动失败
         preChargeCheck1.setStartupSuccess(3);
         preChargeCheck1.setFailureCause(0);
         //启动失败后取消订单,退款操作
         refund(code);
         order.setStatus(-1);
         order.setEndMode(0);
         this.updateById(order);
         redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
         //推送三方平台订单状态
         if (2 == chargingOrder.getOrderSource()) {
            tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
         }
         return true;
      }
   }
   
@@ -917,6 +979,7 @@
      if (order.getStatus() != 2) {
         return;
      }
      Site site = siteClient.getSiteByIds(Arrays.asList(order.getSiteId())).getData().get(0);
      String code = order.getCode();
      PreChargeCheck preChargeCheck1 = redisService.getCacheObject("AQJC_" + order.getChargingGunId());
      if (null != preChargeCheck1) {
@@ -928,23 +991,26 @@
         //启动失败
         preChargeCheck1.setStartupSuccess(3);
         preChargeCheck1.setFailureCause(failure_cause);
         order.setStatus(2);
         order.setEndMode(0);
         this.updateById(order);
         //启动失败后取消订单,退款操作
         refund(code);
         order.setStatus(-1);
         order.setEndMode(0);
      } else {
         //启动成功
         preChargeCheck1.setStartupSuccess(2);
         order.setStatus(3);
         order.setStartTime(LocalDateTime.now());
         this.updateById(order);
         TChargingGun chargingGun = chargingGunClient.getChargingGunById(order.getChargingGunId()).getData();
         chargingGun.setStatus(4);
         chargingGunClient.updateChargingGunById(chargingGun);
         //推送状态给三方平台
         tcecClient.pushChargingGunStatus(chargingGun.getFullNumber(), 4);
         if(1 == site.getIsOpenSynchronization()){
            //推送状态给三方平台
            tcecClient.pushChargingGunStatus(chargingGun.getFullNumber(), 4);
         }
      }
      redisService.setCacheObject("AQJC_" + order.getChargingGunId(), preChargeCheck1, 24L, TimeUnit.HOURS);
      this.updateById(order);
      
      if (3 == order.getStatus()) {
         //推送监管平台订单状态
@@ -963,9 +1029,10 @@
         result.setStartTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
         Operator operator = operatorClient.getOperatorById(order.getOperatorId()).getData();
         result.setOperatorID(operator.getOperatorId());
         tcecClient.notificationStartChargeResult(result);
         tcecClient.notificationEquipChargeStatus(order.getStartChargeSeq(), order.getOperatorId());
         if(1 == site.getIsOpenSynchronization()){
            tcecClient.notificationStartChargeResult(result);
            tcecClient.notificationEquipChargeStatus(order.getStartChargeSeq(), order.getOperatorId());
         }
      }
   }
   
@@ -1244,7 +1311,10 @@
         if (null != one.getAppUserCarId()) {
            TAppUserCar appUserCar = appUserCarClient.getCarById(one.getAppUserCarId().toString()).getData();
            //   续航 = 续航里程 * soc
            BigDecimal multiply = new BigDecimal(data.getSoc()).divide(new BigDecimal(100)).multiply(new BigDecimal(appUserCar.getEndurance()));
            BigDecimal multiply = BigDecimal.ZERO;
            if(NumberUtil.isNumber(appUserCar.getEndurance())){
               new BigDecimal(data.getSoc()).divide(new BigDecimal(100)).multiply(new BigDecimal(appUserCar.getEndurance()));
            }
            chargingDetails.setEndurance(multiply.setScale(2, RoundingMode.HALF_EVEN));
         }
      }
@@ -1270,12 +1340,14 @@
      }
      Long userId = tokenService.getLoginUserApplet().getUserId();
      if (!order.getAppUserId().equals(userId)) {
         log.info("【" + order.getCode() + "】主动停止充电失败,用户权限不足。当前登录用户id:{},订单用户id:{}", userId, order.getAppUserId());
         return AjaxResult.error("权限不足");
      }
      order.setEndTime(LocalDateTime.now());
      order.setStatus(4);
      order.setEndMode(1);
      this.updateById(order);
      log.info("【" + order.getCode() + "】主动停止充电成功,订单状态已被修改。");
      
      String code1 = order.getCode();
      TChargingGun chargingGun = chargingGunClient.getChargingGunById(order.getChargingGunId()).getData();
@@ -1291,11 +1363,19 @@
         log.info(code1 + ":-------------------远程停止充电请求-------------------");
         log.info(platformStopCharging.toString());
      });
      Site site = siteClient.getSiteByIds(Arrays.asList(order.getSiteId())).getData().get(0);
      //推送三方平台
      if (2 == order.getOrderSource()) {
      if (2 == order.getOrderSource() && 1 == site.getIsOpenSynchronization()) {
         tcecClient.notificationEquipChargeStatus(order.getStartChargeSeq(), order.getOperatorId());
      }
      ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>());
      threadPoolExecutor.execute(()->{
         //推送成都监管
         NotificationConnectorChargeStatusVo vo = new NotificationConnectorChargeStatusVo();
         vo.setOrderCode(order.getCode());
         vo.setChargingGunId(order.getChargingGunId());
         chengDuJianGuanClient.notificationConnectorChargeStatus(vo);
      });
      return AjaxResult.success();
   }
   
@@ -1532,15 +1612,7 @@
      if (siteIds.isEmpty()) siteIds.add(-1);
      dto.setSiteIds(siteIds);
      List<ChargingOrderVO> list = this.baseMapper.chargingOrder(pageInfo, dto, startTime1, startTime2, endTime1, endTime2);
      BigDecimal total = new BigDecimal("0");
      long time = 0L;
      BigDecimal electronicMoney = new BigDecimal("0");
      BigDecimal serviceMoney = new BigDecimal("0");
      BigDecimal commissionMoney = new BigDecimal("0");
//       BigDecimal refundMoney = new BigDecimal("0");
      BigDecimal paymentMoney = new BigDecimal("0");
      List<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list();
      for (ChargingOrderVO chargingOrderVO : list) {
         if (roleType == 2) {
            for (Integer siteId : siteIds) {
@@ -1608,9 +1680,9 @@
      if (null != map) {
         tCharingOrderVO.setTotal(map.get("total") == null ? BigDecimal.ZERO : (BigDecimal) map.get("total"));
         tCharingOrderVO.setTime(map.get("time") == null ? 0L : (Long) map.get("time"));
         tCharingOrderVO.setIncome((map.get("paymentMoney") == null ? BigDecimal.ZERO : (BigDecimal) map.get("paymentMoney")).setScale(2, BigDecimal.ROUND_HALF_EVEN));
         tCharingOrderVO.setElectronicMoney((map.get("electronicMoney") == null ? BigDecimal.ZERO : (BigDecimal) map.get("electronicMoney")).setScale(2, BigDecimal.ROUND_HALF_EVEN));
         tCharingOrderVO.setServiceMoney((map.get("serviceMoney") == null ? BigDecimal.ZERO : (BigDecimal) map.get("serviceMoney")).setScale(2, BigDecimal.ROUND_HALF_EVEN));
         tCharingOrderVO.setIncome(map.get("income") == null ? BigDecimal.ZERO : ((BigDecimal) map.get("income")).setScale(2, RoundingMode.HALF_EVEN));
         tCharingOrderVO.setElectronicMoney(map.get("electronicMoney") == null ? BigDecimal.ZERO : ((BigDecimal) map.get("electronicMoney")).setScale(2, RoundingMode.HALF_EVEN));
         tCharingOrderVO.setServiceMoney(map.get("serviceMoney") == null ? BigDecimal.ZERO : ((BigDecimal) map.get("serviceMoney")).setScale(2, RoundingMode.HALF_EVEN));
      } else {
         tCharingOrderVO.setTotal(BigDecimal.ZERO);
         tCharingOrderVO.setTime(0L);
@@ -1716,14 +1788,17 @@
      String startTime2 = null;
      String endTime1 = null;
      String endTime2 = null;
      List<TChargingGun> allGun = chargingGunClient.getAllGun().getData();
      List<TChargingPile> allPile = chargingGunClient.getAllPile().getData();
      if (StringUtils.hasLength(dto.getStartTime())) {
         String[] split = dto.getStartTime().split(" - ");
         startTime1 = split[0];
         startTime2 = split[1];
      }
      if (StringUtils.hasLength(dto.getEndTime())) {
         String[] split = dto.getEndTime().split(" - ");
         endTime1 = split[0];
         endTime2 = split[1];
      }
      ChargingOrderTimeVO chargingOrderTimeVO = new ChargingOrderTimeVO();
      if (StringUtils.hasLength(dto.getPhone())) {
@@ -1791,108 +1866,203 @@
      }
      dto.setSiteIds(siteIds);
      PageInfo<ChargingOrderListVO> pageInfo = new PageInfo<>(dto.getPageCurr(), dto.getPageSize());
      List<ChargingOrderListVO> list = this.baseMapper.chargingList(pageInfo, dto, startTime1, startTime2, endTime1, endTime2);
      List<Site> sites = siteClient.getSiteAll().getData();
      for (ChargingOrderListVO chargingOrderListVO : list) {
//      List<ChargingOrderListVO> list = this.baseMapper.chargingList(pageInfo, dto, startTime1, startTime2, endTime1, endTime2);
//      List<Site> sites = siteClient.getSiteAll().getData();
//      List<Long> collect1 = list.stream().map(ChargingOrderListVO::getId).collect(Collectors.toList());
//      if(collect1.isEmpty()){
//         collect1.add(-1L);
//      }
//      List<TChargingOrderAccountingStrategy> chargingOrderAccountingStrategies = chargingOrderAccountingStrategyService.list();
//      for (ChargingOrderListVO chargingOrderListVO : list) {
//         if (roleType == 2) {
//            List<Boolean> data = partnerClient.getChargingListMenu(sysUser.getObjectId(), chargingOrderListVO.getSiteId()).getData();
//            chargingOrderListVO.setAuthInfo(data.get(0));
//            chargingOrderListVO.setAuthCurve(data.get(1));
//         }
//         chargingOrderListVO.setChargingCapacity(chargingOrderListVO.getElectricity());
//         BigDecimal bigDecimal = new BigDecimal("0.006");
//         if (chargingOrderListVO.getOrderAmount() != null) {
//            chargingOrderListVO.setCommissionAmount(chargingOrderListVO.getRechargeAmount().multiply(bigDecimal));
//         }
//         chargingOrderListVO.setPaymentAmount(chargingOrderListVO.getPaymentAmount());
//         chargingOrderListVO.setUid(chargingOrderListVO.getId() + "");
//         List<Integer> integers = new ArrayList<>();
//         integers.add(chargingOrderListVO.getSiteId());
//         Site site = sites.stream().filter(e -> e.getId().equals(chargingOrderListVO.getSiteId())).findFirst().orElse(null);
//         if (site != null) {
//            chargingOrderListVO.setSiteName(site.getName());
//         }
//         if (chargingOrderListVO.getChargingGunId() != null && chargingOrderListVO.getChargingPileId() != null) {
//            TChargingGun data1 = allGun.stream().filter(e -> e.getId().equals(chargingOrderListVO.getChargingGunId())).findFirst().orElse(null);
//            TChargingPile data2 = allPile.stream().filter(e -> e.getId().equals(chargingOrderListVO.getChargingPileId())).findFirst().orElse(null);
//            if (data2 != null && data1 != null) {
//               chargingOrderListVO.setTerminalName(data2.getName() + "-" + data1.getName());
//            }
//         }
//         if (chargingOrderListVO.getStartTime() != null && chargingOrderListVO.getEndTime() != null) {
//            LocalDateTime startTime = chargingOrderListVO.getStartTime();
//            LocalDateTime endTime = chargingOrderListVO.getEndTime();
//            // 计算时间差 单位秒
//            long between = ChronoUnit.SECONDS.between(startTime, endTime);
//            chargingOrderListVO.setChargingSecond(between);
//         }
//         // 获取开始SOC 结束soc
//         if (chargingOrderListVO.getCode() != null) {
//            UploadRealTimeMonitoringData asc = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrderListVO.getCode(), "asc");
//            UploadRealTimeMonitoringData desc = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrderListVO.getCode(), "desc");
//            if(null != asc){
//               chargingOrderListVO.setStartSoc(asc.getSoc().toString());
//            }
//            if(null != desc){
//               chargingOrderListVO.setEndSoc(desc.getSoc().toString());
//            }
//         }
//
//         if (chargingOrderListVO.getAppUserId() != null) {
//            TAppUser data3 = appUserClient.getUserById(chargingOrderListVO.getAppUserId()).getData();
//            List<Long> carId = new ArrayList<>();
//            if (data3 != null) {
//               if (chargingOrderListVO.getAppUserCarId() != null) {
//                  carId.add(chargingOrderListVO.getAppUserCarId());
//                  if (!carId.isEmpty()) {
//                     List<TAppUserCar> data4 = appUserCarClient.getCarByIds(carId).getData();
//                     if (data4 != null && !data4.isEmpty()) {
//                        chargingOrderListVO.setLicensePlate(data4.get(0).getLicensePlate());
//                     }
//                  }
//               } else {
//                  chargingOrderListVO.setLicensePlate(chargingOrderListVO.getPlateNum());
//               }
//               chargingOrderListVO.setPhone(data3.getPhone());
//            }
//         }
//         List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategies.stream().filter(s->s.getChargingOrderId().equals(chargingOrderListVO.getId())).collect(Collectors.toList());
//         // 尖峰平谷充电量 度数
//         BigDecimal jian = new BigDecimal("0");
//         BigDecimal feng = new BigDecimal("0");
//         BigDecimal ping = new BigDecimal("0");
//         BigDecimal gu = new BigDecimal("0");
//         BigDecimal total = new BigDecimal("0");
//         for (TChargingOrderAccountingStrategy temp : list2) {
//            if (temp.getChargingCapacity() == null) {
//               temp.setChargingCapacity(BigDecimal.ZERO);
//            }
//            switch (temp.getType()) {
//               case 1:
//                  jian = jian.add(temp.getChargingCapacity());
//                  break;
//               case 2:
//                  feng = feng.add(temp.getChargingCapacity());
//                  break;
//               case 3:
//                  ping = ping.add(temp.getChargingCapacity());
//                  break;
//               case 4:
//                  gu = gu.add(temp.getChargingCapacity());
//                  break;
//            }
//         }
//         total = total.add(jian).add(feng).add(ping).add(gu);
//         if (total.compareTo(new BigDecimal("0")) != 0) {
//            chargingOrderListVO.setElectronicProportion(
//                  jian.divide(total, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%(尖)/"
//                        + feng.divide(total, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%(峰)/"
//                        + ping.divide(total, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%(平)/"
//                        + gu.divide(total, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%(谷)");
//         } else {
//            chargingOrderListVO.setElectronicProportion(
//                  "0" + "%(尖)/" +
//                        "0" + "%(峰)/" +
//                        "0" + "%(平)/" +
//                        "0" + "%(谷)");
//         }
//         if (chargingOrderListVO.getOrderSource().equals(2)) {
//            chargingOrderListVO.setSharingAmount(chargingOrderListVO.getServiceCharge() != null ?
//                  chargingOrderListVO.getServiceCharge().multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_HALF_UP)
//                  : new BigDecimal("0"));
//         } else {
//            chargingOrderListVO.setSharingAmount(new BigDecimal("0"));
//         }
//      }
      List<ChargingOrderListVO> list = new ArrayList<>();
      List<Map<String, Object>> maps = this.baseMapper.chargingList1(pageInfo, dto, startTime1, startTime2, endTime1, endTime2);
      for (Map<String, Object> map : maps) {
         if(null == map){
            continue;
         }
         ChargingOrderListVO chargingOrderListVO = new ChargingOrderListVO();
         if (roleType == 2) {
            List<Boolean> data = partnerClient.getChargingListMenu(sysUser.getObjectId(), chargingOrderListVO.getSiteId()).getData();
            List<Boolean> data = partnerClient.getChargingListMenu(sysUser.getObjectId(), Integer.valueOf(map.get("siteId").toString())).getData();
            chargingOrderListVO.setAuthInfo(data.get(0));
            chargingOrderListVO.setAuthCurve(data.get(1));
         }
         chargingOrderListVO.setCode(map.get("code").toString());
         chargingOrderListVO.setSiteName(map.get("siteName").toString());
         chargingOrderListVO.setOrderType(map.get("orderType").toString());
         chargingOrderListVO.setTerminalName(map.get("terminalName").toString());
         chargingOrderListVO.setElectricity(null == map.get("electricity") ? BigDecimal.ZERO : new BigDecimal(map.get("electricity").toString()));
         chargingOrderListVO.setChargingCapacity(chargingOrderListVO.getElectricity());
         Object periodElectricPrice = map.get("periodElectricPrice");
         Object periodServicePrice = map.get("periodServicePrice");
         if(null != periodServicePrice){
            Integer orderSource = Integer.valueOf(map.get("orderSource").toString());
            if(2 == orderSource){
               BigDecimal bigDecimal = new BigDecimal(periodServicePrice.toString()).multiply(new BigDecimal(0.8)).setScale(2, RoundingMode.HALF_EVEN);
               chargingOrderListVO.setPaymentAmount(new BigDecimal(periodElectricPrice.toString()).add(bigDecimal));
               BigDecimal sharingAmount = new BigDecimal(periodServicePrice.toString()).multiply(new BigDecimal(0.2)).setScale(2, RoundingMode.HALF_EVEN);
               chargingOrderListVO.setSharingAmount(sharingAmount);
            }else{
               chargingOrderListVO.setPaymentAmount(new BigDecimal(periodElectricPrice.toString()).add(new BigDecimal(periodServicePrice.toString())).setScale(2, RoundingMode.HALF_EVEN));
               chargingOrderListVO.setSharingAmount(BigDecimal.ZERO);
            }
         }else{
            chargingOrderListVO.setPaymentAmount(BigDecimal.ZERO);
            chargingOrderListVO.setSharingAmount(BigDecimal.ZERO);
         }
         chargingOrderListVO.setElectrovalence(null == map.get("electrovalence") ? BigDecimal.ZERO : new BigDecimal(map.get("electrovalence").toString()));
         chargingOrderListVO.setServiceCharge(null == map.get("serviceCharge") ? BigDecimal.ZERO : new BigDecimal(map.get("serviceCharge").toString()));
         BigDecimal bigDecimal = new BigDecimal("0.006");
         if (chargingOrderListVO.getOrderAmount() != null) {
            chargingOrderListVO.setCommissionAmount(chargingOrderListVO.getRechargeAmount().multiply(bigDecimal));
         if (!"0".equals(map.get("rechargePaymentType").toString())) {
            chargingOrderListVO.setCommissionAmount(new BigDecimal(map.get("rechargeAmount").toString()).multiply(bigDecimal));
         }
         chargingOrderListVO.setPaymentAmount(chargingOrderListVO.getPaymentAmount());
         chargingOrderListVO.setUid(chargingOrderListVO.getId() + "");
         List<Integer> integers = new ArrayList<>();
         integers.add(chargingOrderListVO.getSiteId());
         Site site = sites.stream().filter(e -> e.getId().equals(chargingOrderListVO.getSiteId())).findFirst().orElse(null);
         if (site != null) {
            chargingOrderListVO.setSiteName(site.getName());
         if(null != map.get("tripartitePlatformName")){
            chargingOrderListVO.setTripartitePlatformName(map.get("tripartitePlatformName").toString());
         }
         if (chargingOrderListVO.getChargingGunId() != null && chargingOrderListVO.getChargingPileId() != null) {
            TChargingGun data1 = allGun.stream().filter(e -> e.getId().equals(chargingOrderListVO.getChargingGunId())).findFirst().orElse(null);
            TChargingPile data2 = allPile.stream().filter(e -> e.getId().equals(chargingOrderListVO.getChargingPileId())).findFirst().orElse(null);
            if (data2 != null && data1 != null) {
               chargingOrderListVO.setTerminalName(data2.getName() + "-" + data1.getName());
            }
         if(null != map.get("startTime")){
            chargingOrderListVO.setStartTime(LocalDateTime.parse(map.get("startTime").toString(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
         }
         if (chargingOrderListVO.getStartTime() != null && chargingOrderListVO.getEndTime() != null) {
            LocalDateTime startTime = chargingOrderListVO.getStartTime();
            LocalDateTime endTime = chargingOrderListVO.getEndTime();
            // 计算时间差 单位秒
            long between = ChronoUnit.SECONDS.between(startTime, endTime);
            chargingOrderListVO.setChargingSecond(between);
         if(null != map.get("endTime")){
            chargingOrderListVO.setEndTime(LocalDateTime.parse(map.get("endTime").toString(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
         }
         // 获取开始SOC 结束soc
         if (chargingOrderListVO.getCode() != null) {
            List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrderListVO.getCode());
            if (data6 != null && !data6.isEmpty()) {
               int min = 100;
               int max = 0;
               for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data6) {
                  if (uploadRealTimeMonitoringData.getSoc() > max) {
                     max = uploadRealTimeMonitoringData.getSoc();
                  }
                  if (uploadRealTimeMonitoringData.getSoc() != 0 && uploadRealTimeMonitoringData.getSoc() < min) {
                     min = uploadRealTimeMonitoringData.getSoc();
                  }
               }
               chargingOrderListVO.setEndSoc(max + "");
               chargingOrderListVO.setStartSoc(min + "");
            }
         if(null != map.get("chargingSecond")){
            chargingOrderListVO.setChargingSecond(Long.valueOf(map.get("chargingSecond").toString()));
         }else{
            chargingOrderListVO.setChargingSecond(0L);
         }
         if (chargingOrderListVO.getAppUserId() != null) {
            TAppUser data3 = appUserClient.getUserById(chargingOrderListVO.getAppUserId()).getData();
            List<Long> carId = new ArrayList<>();
            if (data3 != null) {
               if (chargingOrderListVO.getAppUserCarId() != null) {
                  carId.add(chargingOrderListVO.getAppUserCarId());
                  if (!carId.isEmpty()) {
                     List<TAppUserCar> data4 = appUserCarClient.getCarByIds(carId).getData();
                     if (data4 != null && !data4.isEmpty()) {
                        chargingOrderListVO.setLicensePlate(data4.get(0).getLicensePlate());
                     }
                  }
               } else {
                  chargingOrderListVO.setLicensePlate(chargingOrderListVO.getPlateNum());
               }
               chargingOrderListVO.setPhone(data3.getPhone());
            }
         if(null != map.get("startSoc")){
            chargingOrderListVO.setEndSoc(map.get("startSoc").toString());
         }
         List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategyService.lambdaQuery()
               .eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrderListVO.getId()).list();
         // 尖峰平谷充电量 度数
         BigDecimal jian = new BigDecimal("0");
         BigDecimal feng = new BigDecimal("0");
         BigDecimal ping = new BigDecimal("0");
         BigDecimal gu = new BigDecimal("0");
         BigDecimal total = new BigDecimal("0");
         for (TChargingOrderAccountingStrategy temp : list2) {
            if (temp.getChargingCapacity() == null) {
               temp.setChargingCapacity(BigDecimal.ZERO);
            }
            switch (temp.getType()) {
               case 1:
                  jian = jian.add(temp.getChargingCapacity());
                  break;
               case 2:
                  feng = feng.add(temp.getChargingCapacity());
                  break;
               case 3:
                  ping = ping.add(temp.getChargingCapacity());
                  break;
               case 4:
                  gu = gu.add(temp.getChargingCapacity());
                  break;
            }
         if(null != map.get("endSoc")){
            chargingOrderListVO.setEndSoc(map.get("endSoc").toString());
         }
         total = total.add(jian).add(feng).add(ping).add(gu);
         if(null != map.get("status")){
            chargingOrderListVO.setStatus(Integer.valueOf(map.get("status").toString()));
         }
         if(null != map.get("endMode")){
            chargingOrderListVO.setEndMode(Integer.valueOf(map.get("endMode").toString()));
         }
         if(null != map.get("phone")){
            chargingOrderListVO.setPhone(map.get("phone").toString());
         }
         if(null != map.get("licensePlate")){
            chargingOrderListVO.setLicensePlate(map.get("licensePlate").toString());
         }
         BigDecimal jian = null == map.get("jian") ? BigDecimal.ZERO : new BigDecimal(map.get("jian").toString());
         BigDecimal feng = null == map.get("feng") ? BigDecimal.ZERO : new BigDecimal(map.get("feng").toString());
         BigDecimal ping = null == map.get("ping") ? BigDecimal.ZERO : new BigDecimal(map.get("ping").toString());
         BigDecimal gu = null == map.get("gu") ? BigDecimal.ZERO : new BigDecimal(map.get("gu").toString());
         BigDecimal total = jian.add(feng).add(ping).add(gu);
         if (total.compareTo(new BigDecimal("0")) != 0) {
            chargingOrderListVO.setElectronicProportion(
                  jian.divide(total, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%(尖)/"
@@ -1906,41 +2076,10 @@
                        "0" + "%(平)/" +
                        "0" + "%(谷)");
         }
         if (chargingOrderListVO.getOrderSource().equals(2)) {
            chargingOrderListVO.setSharingAmount(chargingOrderListVO.getServiceCharge() != null ?
                  chargingOrderListVO.getServiceCharge().multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_HALF_UP)
                  : new BigDecimal("0"));
         } else {
            chargingOrderListVO.setSharingAmount(new BigDecimal("0"));
         }
         list.add(chargingOrderListVO);
      }
      // 不分页
      PageInfo<ChargingOrderListVO> pageInfo1 = new PageInfo<>(1, 999999999);
      List<ChargingOrderListVO> list1 = this.baseMapper.chargingList(pageInfo1, dto, startTime1, startTime2, endTime1, endTime2);
      for (ChargingOrderListVO chargingOrderListVO : list1) {
         List<Integer> integers = new ArrayList<>();
         integers.add(chargingOrderListVO.getSiteId());
         Site site = sites.stream().filter(e -> e.getId().equals(chargingOrderListVO.getSiteId())).findFirst().orElse(null);
         if (site != null) {
            chargingOrderListVO.setSiteName(site.getName());
         }
         if (chargingOrderListVO.getStartTime() != null && chargingOrderListVO.getEndTime() != null) {
            LocalDateTime startTime = chargingOrderListVO.getStartTime();
            LocalDateTime endTime = chargingOrderListVO.getEndTime();
            // 计算时间差 单位秒
            long between = ChronoUnit.SECONDS.between(startTime, endTime);
            chargingOrderListVO.setChargingSecond(between);
         }
         if (chargingOrderListVO.getChargingGunId() != null && chargingOrderListVO.getChargingPileId() != null) {
            TChargingGun data1 = allGun.stream().filter(e -> e.getId().equals(chargingOrderListVO.getChargingGunId())).findFirst().orElse(null);
            TChargingPile data2 = allPile.stream().filter(e -> e.getId().equals(chargingOrderListVO.getChargingPileId())).findFirst().orElse(null);
            if (data2 != null && data1 != null) {
               chargingOrderListVO.setTerminalName(data2.getName() + "-" + data1.getName());
            }
         }
      }
      chargingOrderTimeVO.setExportList(list1);
      chargingOrderTimeVO.setOrderCount(list1.size());
      // 计算充电总度数
      BigDecimal electronic = new BigDecimal("0");
      // 支付金额
@@ -1964,77 +2103,28 @@
      BigDecimal feng = new BigDecimal("0");
      BigDecimal ping = new BigDecimal("0");
      BigDecimal gu = new BigDecimal("0");
      List<TChargingOrderAccountingStrategy> chargingOrderAccountingStrategies = chargingOrderAccountingStrategyService.list();
      for (ChargingOrderListVO chargingOrderListVO : list1) {
         List<TChargingOrderAccountingStrategy> collect = chargingOrderAccountingStrategies.stream().filter(s -> s.getChargingOrderId().equals(chargingOrderListVO.getId())).collect(Collectors.toList());
         BigDecimal periodServicePrice = collect.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
         BigDecimal periodElectricPrice = collect.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
         BigDecimal chargingCapacity = collect.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
         electronic = electronic.add(chargingCapacity);
         electrovalence = electrovalence.add(periodElectricPrice);
         if (chargingOrderListVO.getOrderSource().equals(2)) {
            serviceCharge = serviceCharge.add(periodServicePrice.multiply(new BigDecimal("0.8")));
            paymentAmount = paymentAmount.add(periodElectricPrice).add(periodServicePrice.multiply(new BigDecimal("0.8")));
         } else {
            serviceCharge = serviceCharge.add(periodServicePrice);
            paymentAmount = paymentAmount.add(periodElectricPrice).add(periodServicePrice);
      List<Map<String, Object>> list1 = this.baseMapper.chargingListSum(dto, startTime1, startTime2, endTime1, endTime2);
      chargingOrderTimeVO.setOrderCount(list1.size());
      for (Map<String, Object> map : list1) {
         if(null == map){
            continue;
         }
         if (!chargingOrderListVO.getOrderSource().equals(2)) {
            List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategies.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderListVO.getId()))
                  .collect(Collectors.toList());
            for (TChargingOrderAccountingStrategy temp : list2) {
               switch (temp.getType()) {
                  case 1:
                     jian = jian.add(temp.getChargingCapacity());
                     jianElectronic = jianElectronic.add(temp.getPeriodElectricPrice()).add(temp.getPeriodServicePrice());
                     jianService = jianService.add(temp.getPeriodServicePrice());
                     break;
                  case 2:
                     feng = feng.add(temp.getChargingCapacity());
                     fengElectronic = fengElectronic.add(temp.getPeriodElectricPrice()).add(temp.getPeriodServicePrice());
                     fengService = fengService.add(temp.getPeriodServicePrice());
                     break;
                  case 3:
                     ping = ping.add(temp.getChargingCapacity());
                     pingElectronic = pingElectronic.add(temp.getPeriodElectricPrice()).add(temp.getPeriodServicePrice());
                     pingService = pingService.add(temp.getPeriodServicePrice());
                     break;
                  case 4:
                     gu = gu.add(temp.getChargingCapacity());
                     guElectronic = guElectronic.add(temp.getPeriodElectricPrice()).add(temp.getPeriodServicePrice());
                     guService = guService.add(temp.getPeriodServicePrice());
                     break;
               }
            }
         } else {
            List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategies.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderListVO.getId()))
                  .collect(Collectors.toList());
            for (TChargingOrderAccountingStrategy temp : list2) {
               BigDecimal multiply = temp.getPeriodServicePrice().multiply(new BigDecimal("0.8"));
               switch (temp.getType()) {
                  case 1:
                     jian = jian.add(temp.getChargingCapacity());
                     jianElectronic = jianElectronic.add(temp.getPeriodElectricPrice()).add(multiply);
                     jianService = jianService.add(multiply);
                     break;
                  case 2:
                     feng = feng.add(temp.getChargingCapacity());
                     fengElectronic = fengElectronic.add(temp.getPeriodElectricPrice()).add(multiply);
                     fengService = fengService.add(multiply);
                     break;
                  case 3:
                     ping = ping.add(temp.getChargingCapacity());
                     pingElectronic = pingElectronic.add(temp.getPeriodElectricPrice()).add(multiply);
                     pingService = pingService.add(multiply);
                     break;
                  case 4:
                     gu = gu.add(temp.getChargingCapacity());
                     guElectronic = guElectronic.add(temp.getPeriodElectricPrice()).add(multiply);
                     guService = guService.add(multiply);
                     break;
               }
            }
         }
         electronic = electronic.add(new BigDecimal(null == map.get("electronic") ? "0" : map.get("electronic").toString()));
         paymentAmount = paymentAmount.add(new BigDecimal(null == map.get("paymentAmount") ? "0" : map.get("paymentAmount").toString()));
         electrovalence = electrovalence.add(new BigDecimal(null == map.get("electrovalence") ? "0" : map.get("electrovalence").toString()));
         serviceCharge = serviceCharge.add(new BigDecimal(null == map.get("serviceCharge") ? "0" : map.get("serviceCharge").toString()));
         jianElectronic = jianElectronic.add(new BigDecimal(null == map.get("jianElectronic") ? "0" : map.get("jianElectronic").toString()));
         fengElectronic = fengElectronic.add(new BigDecimal(null == map.get("fengElectronic") ? "0" : map.get("fengElectronic").toString()));
         pingElectronic = pingElectronic.add(new BigDecimal(null == map.get("pingElectronic") ? "0" : map.get("pingElectronic").toString()));
         guElectronic = guElectronic.add(new BigDecimal(null == map.get("guElectronic") ? "0" : map.get("guElectronic").toString()));
         jianService = jianService.add(new BigDecimal(null == map.get("jianService") ? "0" : map.get("jianService").toString()));
         fengService = fengService.add(new BigDecimal(null == map.get("fengService") ? "0" : map.get("fengService").toString()));
         pingService = pingService.add(new BigDecimal(null == map.get("pingService") ? "0" : map.get("pingService").toString()));
         guService = guService.add(new BigDecimal(null == map.get("guService") ? "0" : map.get("guService").toString()));
         jian = jian.add(new BigDecimal(null == map.get("jian") ? "0" : map.get("jian").toString()));
         feng = feng.add(new BigDecimal(null == map.get("feng") ? "0" : map.get("feng").toString()));
         ping = ping.add(new BigDecimal(null == map.get("ping") ? "0" : map.get("ping").toString()));
         gu = gu.add(new BigDecimal(null == map.get("gu") ? "0" : map.get("gu").toString()));
      }
      
      chargingOrderTimeVO.setChargingCapacity(electronic.setScale(2, BigDecimal.ROUND_HALF_EVEN));
@@ -2083,6 +2173,93 @@
      pageInfo.setRecords(list);
      chargingOrderTimeVO.setList(pageInfo);
      return chargingOrderTimeVO;
   }
   @Override
   public List<ChargingOrderListVO> export(ChargingListQuery dto) {
      String startTime1 = null;
      String startTime2 = null;
      String endTime1 = null;
      String endTime2 = null;
      if (StringUtils.hasLength(dto.getStartTime())) {
         String[] split = dto.getStartTime().split(" - ");
         startTime1 = split[0];
         startTime2 = split[1];
      }
      if (StringUtils.hasLength(dto.getEndTime())) {
         String[] split = dto.getEndTime().split(" - ");
         endTime1 = split[0];
         endTime2 = split[1];
      }
      if (StringUtils.hasLength(dto.getPhone())) {
         List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData();
         if (data != null) {
            if (!data.isEmpty()) {
               dto.setUserIds(data);
            }
         } else {
            dto.setUserIds(new ArrayList<Long>());
         }
         if (dto.getUserIds().isEmpty()) {
            List<Long> carIds = dto.getUserIds();
            carIds.add(-1L);
            dto.setUserIds(carIds);
         }
      }
      if (StringUtils.hasLength(dto.getLicensePlate())) {
         List<Long> data = appUserCarClient.getAppUserCarByLicensePlates(dto.getLicensePlate()).getData();
         if (data != null) {
            if (!data.isEmpty()) {
               dto.setCarIds(data);
            }
         } else {
            dto.setCarIds(new ArrayList<Long>());
         }
         if (dto.getCarIds().isEmpty()) {
            List<Long> carIds = dto.getCarIds();
            carIds.add(-1L);
            dto.setCarIds(carIds);
         }
      }
      Long userId = tokenService.getLoginUser().getUserid();
      // 查询当前登陆人按钮权限
      SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
      Integer roleType = sysUser.getRoleType();
      //如果没传siteId,获取当前登陆人所有的siteIds
      List<Integer> siteIds = new ArrayList<>();
      if (dto.getSiteId() == null) {
         if (userId != null) {
            List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
            for (GetSiteListDTO datum : data) {
               siteIds.add(datum.getId());
            }
         }
      } else {
         siteIds.add(dto.getSiteId());
      }
      if (siteIds.isEmpty()) {
         siteIds.add(-1);
      } else {
         if (roleType == 2) {
            List<Integer> integers = new ArrayList<>();
            for (Integer siteId : siteIds) {
               // 校验有没有这个站点的权限
               List<Boolean> t1 = partnerClient.getChargingOrderMenu(sysUser.getObjectId(), siteId).getData();
               Boolean b = t1.get(1);
               if (b) {
                  integers.add(siteId);
               }
            }
            siteIds = integers;
         }
      }
      dto.setSiteIds(siteIds);
      List<ChargingOrderListVO> list1 = this.baseMapper.chargingList(dto, startTime1, startTime2, endTime1, endTime2);
      return list1;
   }
   
   
@@ -2318,6 +2495,12 @@
         chargingOrderAccountingStrategyService.remove(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()));
         SimpleDateFormat sdfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         List<AccountingStrategyDetailOrderVo> lists = new ArrayList<>();
         List<UploadRealTimeMonitoringData> dataList = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrder.getCode());
         if(!dataList.isEmpty()){
            vo.setStart_time(sdfs.format(dataList.get(dataList.size() - 1).getCreate_time()) + ".00");
            vo.setEnd_time(sdfs.format(dataList.get(0).getCreate_time()) + ".00");
         }
         //跨天
         if (!vo.getStart_time().split(" ")[0].equals(vo.getEnd_time().split(" ")[0])) {
            //当天的
@@ -2513,6 +2696,7 @@
            }
         }
         chargingOrder.setResidualAmount(rechargeAmount.subtract(total).setScale(2, RoundingMode.HALF_EVEN));
         chargingOrder.setStartTime(LocalDateTime.parse(vo.getStart_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
         chargingOrder.setEndTime(LocalDateTime.parse(vo.getEnd_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
         chargingOrder.setStatus(5);
@@ -2589,13 +2773,21 @@
         chargingOrder.setPaymentAmount(payAmount.setScale(2, RoundingMode.HALF_EVEN));
         chargingOrder.setRefundAmount(refundAmount.setScale(2, RoundingMode.HALF_EVEN));
         chargingOrder.setRefundStatus(1);
         UploadRealTimeMonitoringData asc = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrder.getCode(), "asc");
         UploadRealTimeMonitoringData desc = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrder.getCode(), "desc");
         if(null != asc){
            chargingOrder.setStartSoc(new BigDecimal(asc.getSoc()));
         }
         if(null != desc){
            chargingOrder.setEndSoc(new BigDecimal(desc.getSoc()));
         }
         this.updateById(chargingOrder);
         redisService.setCacheObject("chargingOrderStatus:" + vo.getTransaction_serial_number(), 5, 100L, TimeUnit.SECONDS);
         
         chargingOrder = this.getById(chargingOrder.getId());
         Site site = siteClient.getSiteByIds(Arrays.asList(chargingOrder.getSiteId())).getData().get(0);
         //推送三方平台
         if (2 == chargingOrder.getOrderSource()) {
         if (2 == chargingOrder.getOrderSource() && 1 == site.getIsOpenSynchronization()) {
            TChargingOrder finalChargingOrder = chargingOrder;
            new Thread(new Runnable() {
               @Override
@@ -2607,6 +2799,16 @@
               }
            }).start();
         }
         ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>());
         TChargingOrder finalChargingOrder1 = chargingOrder;
         threadPoolExecutor.execute(()->{
            //推送成都监管
            NotificationConnectorChargeStatusVo statusVo = new NotificationConnectorChargeStatusVo();
            statusVo.setOrderCode(finalChargingOrder1.getCode());
            statusVo.setChargingGunId(finalChargingOrder1.getChargingGunId());
            chengDuJianGuanClient.notificationConnectorChargeStatus(statusVo);
            chengDuJianGuanClient.notificationOrderInfo(statusVo);
         });
         
         //开始将优惠券优惠的金额添加到明细中
         BigDecimal couponDiscountAmount = chargingOrder.getCouponDiscountAmount();
@@ -2631,7 +2833,7 @@
         chargingGunClient.updateChargingGunById(chargingGun);
         chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
         //推送状态给三方平台
         if (2 == chargingOrder.getOrderSource()) {
         if (2 == chargingOrder.getOrderSource() && 1 == site.getIsOpenSynchronization()) {
            tcecClient.pushChargingGunStatus(chargingGun.getFullNumber(), 2);
         }
         
@@ -2673,15 +2875,14 @@
            
            //开始构建退款费用
            refundAmount = refundAmount.setScale(2, RoundingMode.HALF_EVEN);
            Integer rechargePaymentType = chargingOrder.getRechargePaymentType();
            if (refundAmount.compareTo(BigDecimal.ZERO) > 0) {
               Integer rechargePaymentType = chargingOrder.getRechargePaymentType();
               //构建退款明细
               TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
               chargingOrderRefund.setChargingOrderId(chargingOrder.getId());
               SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
               chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
               SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMddHHmmssSSS");
               chargingOrderRefund.setRefundCode("CDF" + sdf1.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
               chargingOrderRefund.setRefundAmount(refundAmount);
               chargingOrderRefund.setRefundStatus(1);
               chargingOrderRefund.setPayType(rechargePaymentType);
               chargingOrderRefund.setRefundStatus(1);
               chargingOrderRefund.setCode(chargingOrder.getCode());
@@ -2737,6 +2938,28 @@
                     this.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
                  }
               }
            }else{
               //构建退款明细
               TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
               chargingOrderRefund.setChargingOrderId(chargingOrder.getId());
               SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMddHHmmssSSS");
               chargingOrderRefund.setRefundCode("CDF" + sdf1.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
               chargingOrderRefund.setRefundAmount(refundAmount);
               chargingOrderRefund.setRefundStatus(2);
               chargingOrderRefund.setPayType(rechargePaymentType);
               chargingOrderRefund.setCode(chargingOrder.getCode());
               chargingOrderRefund.setRefundTitle("充电完成退款");
               chargingOrderRefund.setRefundContent("充电完成退款");
               chargingOrderRefund.setRefundReason("充电完成退款");
               chargingOrderRefund.setRefundRemark("实际充电消费金额:" + chargingOrder.getPaymentAmount());
               chargingOrderRefund.setRefundTotalAmount(refundAmount);
               chargingOrderRefund.setPayAmount(rechargeAmount);
               chargingOrderRefund.setRefundTime(LocalDateTime.now());
               chargingOrderRefundService.save(chargingOrderRefund);
               chargingOrder.setRefundStatus(2);
               chargingOrder.setRefundTime(LocalDateTime.now());
               this.updateById(chargingOrder);
            }
         }
         
@@ -2885,7 +3108,6 @@
            tChargingOrder.setStatus(5);
         }
         
         TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
         chargingOrderRefund.setChargingOrderId(tChargingOrder.getId());
         chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount());
@@ -2894,7 +3116,7 @@
         chargingOrderRefund.setRefundTime(LocalDateTime.now());
         chargingOrderRefund.setCode(tChargingOrder.getCode());
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
         chargingOrderRefund.setRefundCode("GDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
         chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
         chargingOrderRefund.setRefundTitle("后台退款");
         chargingOrderRefund.setRefundContent("后台退款");
         chargingOrderRefund.setRefundReason("后台退款");
@@ -2908,7 +3130,7 @@
            model.setOut_refund_no(chargingOrderRefund.getRefundCode());
            model.setTransaction_id(tChargingOrder.getRechargeSerialNumber());
            model.setReason("取消订单");
            model.setNotify_url("/order/t-shopping-order/cancelShoppingOrderWxRefund");
            model.setNotify_url("/payment/wx/refund/notify");
            WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
            amount.setRefund(payOrderQueryDto.getRefundAmount().multiply(new BigDecimal(100)).intValue());
            amount.setTotal(tChargingOrder.getRechargeAmount().multiply(new BigDecimal(100)).intValue());
@@ -2959,71 +3181,83 @@
               
            }
         }
         if(5 == tChargingOrder.getStatus()){
            ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>());
            threadPoolExecutor.execute(()->{
               //推送成都监管
               NotificationConnectorChargeStatusVo statusVo = new NotificationConnectorChargeStatusVo();
               statusVo.setOrderCode(tChargingOrder.getCode());
               statusVo.setChargingGunId(tChargingOrder.getChargingGunId());
               chengDuJianGuanClient.notificationConnectorChargeStatus(statusVo);
               chengDuJianGuanClient.notificationOrderInfo(statusVo);
            });
         }
      }
      if (payOrderQueryDto.getType() == 2) {
         TShoppingOrder tChargingOrder = shoppingOrderService.getById(payOrderQueryDto.getOrderId());
         if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount()) == -1) {
         TShoppingOrder shoppingOrder = shoppingOrderService.getById(payOrderQueryDto.getOrderId());
         if (shoppingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount()) == -1) {
            return R.fail("退款金额需小于支付金额");
         }
         if ((tChargingOrder.getPaymentAmount().subtract(tChargingOrder.getRefundAmount()).compareTo(payOrderQueryDto.getRefundAmount())) == 0) {
            tChargingOrder.setStatus(5);
         if ((shoppingOrder.getPaymentAmount().subtract(shoppingOrder.getRefundAmount()).compareTo(payOrderQueryDto.getRefundAmount())) == 0) {
            shoppingOrder.setStatus(5);
         }
         
         TShoppingOrderRefund chargingOrderRefund = new TShoppingOrderRefund();
         chargingOrderRefund.setShoppingOrderId(tChargingOrder.getId());
         chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount());
         chargingOrderRefund.setRefundStatus(1);
         chargingOrderRefund.setPayType(tChargingOrder.getPaymentType());
         chargingOrderRefund.setRefundTime(LocalDateTime.now());
         chargingOrderRefund.setCode(tChargingOrder.getCode());
         TShoppingOrderRefund shoppingOrderRefund = new TShoppingOrderRefund();
         shoppingOrderRefund.setShoppingOrderId(shoppingOrder.getId());
         shoppingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount());
         shoppingOrderRefund.setRefundStatus(1);
         shoppingOrderRefund.setPayType(shoppingOrder.getPaymentType());
         shoppingOrderRefund.setRefundTime(LocalDateTime.now());
         shoppingOrderRefund.setCode(shoppingOrder.getCode());
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
         chargingOrderRefund.setRefundCode("GDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
         chargingOrderRefund.setRefundTitle("后台退款");
         chargingOrderRefund.setRefundContent("后台退款");
         chargingOrderRefund.setRefundReason("后台退款");
         chargingOrderRefund.setRefundRemark(payOrderQueryDto.getRemark());
         chargingOrderRefund.setRefundTotalAmount(tChargingOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount()));
         chargingOrderRefund.setPayAmount(tChargingOrder.getPaymentAmount());
         shoppingOrderRefund.setRefundCode("GWF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
         shoppingOrderRefund.setRefundTitle("后台退款");
         shoppingOrderRefund.setRefundContent("后台退款");
         shoppingOrderRefund.setRefundReason("后台退款");
         shoppingOrderRefund.setRefundRemark(payOrderQueryDto.getRemark());
         shoppingOrderRefund.setRefundTotalAmount(shoppingOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount()));
         shoppingOrderRefund.setPayAmount(shoppingOrder.getPaymentAmount());
         
         if (1 == tChargingOrder.getPaymentType()) {
         if (1 == shoppingOrder.getPaymentType()) {
            WxPaymentRefundModel model = new WxPaymentRefundModel();
            model.setOut_trade_no(tChargingOrder.getCode());
            model.setOut_refund_no(chargingOrderRefund.getRefundCode());
            model.setTransaction_id(tChargingOrder.getSerialNumber());
            model.setOut_trade_no(shoppingOrder.getCode());
            model.setOut_refund_no(shoppingOrderRefund.getRefundCode());
            model.setTransaction_id(shoppingOrder.getSerialNumber());
            model.setReason("取消订单");
            model.setNotify_url("/order/t-shopping-order/cancelShoppingOrderWxRefund");
            model.setNotify_url("/payment/wx/refund/notify");
            WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
            amount.setRefund(payOrderQueryDto.getRefundAmount().multiply(new BigDecimal(100)).intValue());
            amount.setTotal(tChargingOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue());
            amount.setTotal(shoppingOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue());
            amount.setCurrency("CNY");
            model.setAmount(amount);
            R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model);
            if (200 == orderR.getCode()) {
               tChargingOrder.setRefundStatus(2);
               tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
               shoppingOrderService.updateById(tChargingOrder);
               shoppingOrderRefundService.save(chargingOrderRefund);
               shoppingOrder.setRefundStatus(2);
               shoppingOrder.setRefundAmount((shoppingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : shoppingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
               shoppingOrderService.updateById(shoppingOrder);
               shoppingOrderRefundService.save(shoppingOrderRefund);
               //手续费
               Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount");
               Object refund_fee1 = amount1.get("refund_fee");
               BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100));
               chargingOrderRefund.setRefundFee(refund_fee);
               shoppingOrderRefundService.updateById(chargingOrderRefund);
               shoppingOrderRefund.setRefundFee(refund_fee);
               shoppingOrderRefundService.updateById(shoppingOrderRefund);
            }
         }
         
         if (2 == tChargingOrder.getPaymentType()) {
         if (2 == shoppingOrder.getPaymentType()) {
            RefundReq dto = new RefundReq();
            dto.setOutTradeNo(tChargingOrder.getCode());
            dto.setOutRequestNo(tChargingOrder.getCode());
            dto.setOutTradeNo(shoppingOrder.getCode());
            dto.setOutRequestNo(shoppingOrder.getCode());
            dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString());
            dto.setRefundReason("取消订单");
            RefundResp resp = aliPaymentClient.refund(dto).getData();
            if (null != resp) {
               tChargingOrder.setRefundStatus(2);
               tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
               shoppingOrderService.updateById(tChargingOrder);
               shoppingOrderRefundService.save(chargingOrderRefund);
               shoppingOrder.setRefundStatus(2);
               shoppingOrder.setRefundAmount((shoppingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : shoppingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
               shoppingOrderService.updateById(shoppingOrder);
               shoppingOrderRefundService.save(shoppingOrderRefund);
            }
         }
//            if(3 == tChargingOrder.getPaymentType()){
@@ -3044,65 +3278,67 @@
      }
      
      if (payOrderQueryDto.getType() == 3) {
         TVipOrder tChargingOrder = vipOrderService.getById(payOrderQueryDto.getOrderId());
         if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount()) == -1) {
         TVipOrder vipOrder = vipOrderService.getById(payOrderQueryDto.getOrderId());
         if (vipOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount()) == -1) {
            return R.fail("退款金额需小于支付金额");
         }
         TVipOrderRefund chargingOrderRefund = new TVipOrderRefund();
         chargingOrderRefund.setVipOrderId(tChargingOrder.getId());
         chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount());
         chargingOrderRefund.setRefundStatus(1);
         chargingOrderRefund.setPayType(tChargingOrder.getPaymentType());
         chargingOrderRefund.setRefundTime(LocalDateTime.now());
         chargingOrderRefund.setCode(tChargingOrder.getCode());
         TVipOrderRefund vipOrderRefund = new TVipOrderRefund();
         vipOrderRefund.setVipOrderId(vipOrder.getId());
         vipOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount());
         vipOrderRefund.setRefundStatus(1);
         vipOrderRefund.setPayTime(vipOrder.getPayTime());
         vipOrderRefund.setPayCode(vipOrder.getCode());
         vipOrderRefund.setPayType(vipOrder.getPaymentType());
         vipOrderRefund.setRefundTime(LocalDateTime.now());
         vipOrderRefund.setCode(vipOrder.getCode());
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
         chargingOrderRefund.setRefundCode("GDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
         chargingOrderRefund.setRefundTitle("后台退款");
         chargingOrderRefund.setRefundContent("后台退款");
         chargingOrderRefund.setRefundReason("后台退款");
         chargingOrderRefund.setRefundRemark(payOrderQueryDto.getRemark());
         chargingOrderRefund.setRefundTotalAmount(tChargingOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount()));
         chargingOrderRefund.setPayAmount(tChargingOrder.getPaymentAmount());
         vipOrderRefund.setRefundCode("HYF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
         vipOrderRefund.setRefundTitle("后台退款");
         vipOrderRefund.setRefundContent("后台退款");
         vipOrderRefund.setRefundReason("后台退款");
         vipOrderRefund.setRefundRemark(payOrderQueryDto.getRemark());
         vipOrderRefund.setRefundTotalAmount(vipOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount()));
         vipOrderRefund.setPayAmount(vipOrder.getPaymentAmount());
         
         if (1 == tChargingOrder.getPaymentType()) {
         if (1 == vipOrder.getPaymentType()) {
            WxPaymentRefundModel model = new WxPaymentRefundModel();
            model.setOut_trade_no(tChargingOrder.getCode());
            model.setOut_refund_no(chargingOrderRefund.getRefundCode());
            model.setTransaction_id(tChargingOrder.getSerialNumber());
            model.setOut_trade_no(vipOrder.getCode());
            model.setOut_refund_no(vipOrderRefund.getRefundCode());
            model.setTransaction_id(vipOrder.getSerialNumber());
            model.setReason("取消订单");
            model.setNotify_url("/order/t-shopping-order/cancelShoppingOrderWxRefund");
            model.setNotify_url("/payment/wx/refund/notify");
            WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
            amount.setRefund(payOrderQueryDto.getRefundAmount().multiply(new BigDecimal(100)).intValue());
            amount.setTotal(tChargingOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue());
            amount.setTotal(vipOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue());
            amount.setCurrency("CNY");
            model.setAmount(amount);
            R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model);
            if (200 == orderR.getCode()) {
               tChargingOrder.setRefundStatus(2);
               tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
               vipOrderService.updateById(tChargingOrder);
               vipOrderRefundService.save(chargingOrderRefund);
               vipOrder.setRefundStatus(2);
               vipOrder.setRefundAmount((vipOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : vipOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
               vipOrderService.updateById(vipOrder);
               vipOrderRefundService.save(vipOrderRefund);
               //手续费
               Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount");
               Object refund_fee1 = amount1.get("refund_fee");
               BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100));
               chargingOrderRefund.setRefundFee(refund_fee);
               vipOrderRefundService.updateById(chargingOrderRefund);
               vipOrderRefund.setRefundFee(refund_fee);
               vipOrderRefundService.updateById(vipOrderRefund);
            }
         }
         
         if (2 == tChargingOrder.getPaymentType()) {
         if (2 == vipOrder.getPaymentType()) {
            RefundReq dto = new RefundReq();
            dto.setOutTradeNo(tChargingOrder.getCode());
            dto.setOutRequestNo(tChargingOrder.getCode());
            dto.setOutTradeNo(vipOrder.getCode());
            dto.setOutRequestNo(vipOrder.getCode());
            dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString());
            dto.setRefundReason("取消订单");
            RefundResp resp = aliPaymentClient.refund(dto).getData();
            if (null != resp) {
               tChargingOrder.setRefundStatus(2);
               tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
               vipOrderService.updateById(tChargingOrder);
               vipOrderRefundService.save(chargingOrderRefund);
               vipOrder.setRefundStatus(2);
               vipOrder.setRefundAmount((vipOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : vipOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
               vipOrderService.updateById(vipOrder);
               vipOrderRefundService.save(vipOrderRefund);
            }
         }
//         if(3 == tChargingOrder.getPaymentType()){
@@ -4108,9 +4344,19 @@
//            scheduler.shutdown();
//         }
//      }, 5, 1, TimeUnit.SECONDS);
      //推送三方平台订单状态
      tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
      Site site = siteClient.getSiteByIds(Arrays.asList(chargingOrder.getSiteId())).getData().get(0);
      if(1 == site.getIsOpenSynchronization()){
         //推送三方平台订单状态
         tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
      }
      ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>());
      threadPoolExecutor.execute(()->{
         //推送成都监管
         NotificationConnectorChargeStatusVo statusVo = new NotificationConnectorChargeStatusVo();
         statusVo.setOrderCode(chargingOrder.getCode());
         statusVo.setChargingGunId(chargingOrder.getChargingGunId());
         chengDuJianGuanClient.notificationConnectorChargeStatus(statusVo);
      });
      return R.ok();
   }
   
@@ -4123,12 +4369,16 @@
    */
   @Override
   public R tripartitePlatformStopCharge(String startChargeSeq) {
      log.info("三方平台请求停止充电:" + startChargeSeq);
      TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getStartChargeSeq, startChargeSeq));
      Integer status = order.getStatus();
      String code1 = order.getCode();
      if (status != 3) {
         log.info("【" + code1 + "】三方平台请求停止充电失败:还未开始充电");
         return R.fail("还未开始充电");
      }
      if (status == 4 || status == 5) {
         log.info("【" + code1 + "】三方平台请求停止充电:不能重复操作");
         return R.fail("不能重复操作");
      }
      TChargingOrder chargingOrder = new TChargingOrder();
@@ -4138,9 +4388,10 @@
      chargingOrder.setStatus(4);
      chargingOrder.setEndMode(1);
      this.updateById(chargingOrder);
      tcecClient.notificationEquipChargeStatus(order.getStartChargeSeq(), order.getOperatorId());
      String code1 = order.getCode();
      Site site = siteClient.getSiteByIds(Arrays.asList(order.getSiteId())).getData().get(0);
      if(1 == site.getIsOpenSynchronization()){
         tcecClient.notificationEquipChargeStatus(order.getStartChargeSeq(), order.getOperatorId());
      }
      TChargingGun chargingGun = chargingGunClient.getChargingGunById(order.getChargingGunId()).getData();
      //异步线程处理停机
      ExecutorService cachedThreadPool = Executors.newFixedThreadPool(1);
@@ -4150,9 +4401,18 @@
         PlatformStopCharging platformStopCharging = new PlatformStopCharging();
         platformStopCharging.setCharging_pile_code(chargingPile.getCode());
         platformStopCharging.setCharging_gun_code(chargingGun.getCode());
         log.info("【" + code1 + "】三方平台请求停止充电发起消息:" + JSON.toJSONString(platformStopCharging));
         sendMessageClient.platformStopCharging(platformStopCharging);
         log.info(code1 + ":-------------------远程停止充电请求-------------------");
         log.info("【" + code1 + "】三方平台请求停止充电发起消息结束");
         log.info(platformStopCharging.toString());
      });
      ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>());
      threadPoolExecutor.execute(()->{
         //推送成都监管
         NotificationConnectorChargeStatusVo statusVo = new NotificationConnectorChargeStatusVo();
         statusVo.setOrderCode(chargingOrder.getCode());
         statusVo.setChargingGunId(chargingOrder.getChargingGunId());
         chengDuJianGuanClient.notificationConnectorChargeStatus(statusVo);
      });
      return R.ok();
   }
@@ -4191,8 +4451,7 @@
//      tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
//      tcecClient.notificationStopChargeResult(chargingOrder.getStartChargeSeq(), chargingOrder.getChargingGunId().toString(),
//            chargingOrder.getOperatorId());
      tcecClient.notificationChargeOrderInfo(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
      return R.ok();
      return tcecClient.notificationChargeOrderInfo(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
   }
   
   
@@ -4342,4 +4601,35 @@
   public List<TChargingOrder> findEndChargingOrder() {
      return this.baseMapper.findEndChargingOrder();
   }
   /**
    * 获取需要手动修改订单状态的数据
    * @return
    */
   @Override
   public List<TChargingOrder> findUpStatusChargingOrder() {
      return this.baseMapper.findUpStatusChargingOrder();
   }
   /**
    * 查询充电算账单数据
    * @param startTime
    * @param endTime
    */
   @Override
    public List<Map<String, Object>> getChargingSettlementBill(String startTime, String endTime, Integer dateType) {
      return this.baseMapper.getChargingSettlementBill(startTime, endTime, dateType);
    }
   /**
    * 查询账户结算账单数据
    * @param startTime
    * @param endTime
    * @return
    */
   @Override
   public List<Map<String, Object>> getAccountSettlementStatement(String startTime, String endTime, Integer rechargePaymentType) {
      return this.baseMapper.getAccountSettlementStatement(startTime, endTime, rechargePaymentType);
   }
}