Pu Zhibing
1 天以前 073790a8e3f2aaa352ead3157b23b6ce4b5d1ae0
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -103,7 +103,7 @@
/**
 * <p>
 *  服务实现类
 * 服务实现类
 * </p>
 *
 * @author xiaochen
@@ -113,7 +113,7 @@
public class TChargingOrderServiceImpl extends ServiceImpl<TChargingOrderMapper, TChargingOrder> implements TChargingOrderService {
   
   private Logger log = LoggerFactory.getLogger(TChargingOrderServiceImpl.class);
   @Resource
   private ChargingGunClient chargingGunClient;
   @Resource
@@ -127,10 +127,10 @@
   private AppUserCarClient appUserCarClient;
   @Resource
   private AppUserClient appUserClient;
   @Resource
   private ChargingPileClient chargingPileClient;
   @Resource
   private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService;
   
@@ -144,10 +144,10 @@
   private AliPaymentClient aliPaymentClient;
   @Resource
   private H5AliPaymentClient h5AliPaymentClient;
   @Resource
   private AppCouponClient appCouponClient;
   @Resource
   private AppUserVipDetailClient appUserVipDetailClient;
   
@@ -159,43 +159,43 @@
   
   @Resource
   private TCECClient tcecClient;
   @Resource
   private SendMessageClient sendMessageClient;
   @Resource
   private TOrderEvaluateService orderEvaluateService;
   
   @Resource
   private AccountingStrategyDetailClient accountingStrategyDetailClient;
   @Resource
   private AccountingStrategyDetailOrderClient accountingStrategyDetailOrderClient;
   @Resource
   private AccountingStrategyClient accountingStrategyClient;
   @Resource
   private PlatformStartChargingReplyService platformStartChargingReplyService;
   @Resource
   private TChargingOrderRefundService chargingOrderRefundService;
   @Resource
   private PlatformStopChargingReplyClient platformStopChargingReplyClient;
   @Resource
   private AccountingStrategyOrderService accountingStrategyOrderService;
   @Resource
   private AccountingStrategyDetailOrderService accountingStrategyDetailOrderService;
   @Resource
   private InviteUserClient inviteUserClient;
   @Resource
   private AppUserIntegralChangeClient appUserIntegralChangeClient;
   @Resource
   private IntegralRuleClient integralRuleClient;
   
@@ -233,12 +233,11 @@
   
   @Resource
   private ChargingMessageClient chargingMessageClient;
   /**
    * 获取小程序充电记录列表数据
    *
    * @param query
    * @return
    */
@@ -279,6 +278,7 @@
   
   /**
    * 获取充电订单明细
    *
    * @param id 订单id
    * @return
    */
@@ -297,20 +297,20 @@
      myChargingOrderInfo.setChargeMode(chargingGun.getChargeMode());
      String name = chargingGunClient.getAllName(chargingOrder.getChargingGunId()).getData();
      myChargingOrderInfo.setName(name);
      if(Objects.nonNull(chargingOrder.getAppUserCarId())){
      if (Objects.nonNull(chargingOrder.getAppUserCarId())) {
         TAppUserCar tAppUserCar = appUserCarClient.getCarById(chargingOrder.getAppUserCarId().toString()).getData();
         if(null != tAppUserCar){
         if (null != tAppUserCar) {
            myChargingOrderInfo.setLicensePlate(tAppUserCar.getLicensePlate());
         }else{
         } else {
            myChargingOrderInfo.setLicensePlate("无");
         }
      }else{
      } else {
         myChargingOrderInfo.setLicensePlate(chargingOrder.getPlateNum());
      }
      if(null != chargingOrder.getStartTime()){
      if (null != chargingOrder.getStartTime()) {
         myChargingOrderInfo.setStartTime(chargingOrder.getStartTime().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond() * 1000);
      }
      if(null != chargingOrder.getEndTime()){
      if (null != chargingOrder.getEndTime()) {
         myChargingOrderInfo.setEndTime(chargingOrder.getEndTime().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond() * 1000);
      }
      myChargingOrderInfo.setOrderAmount(chargingOrder.getOrderAmount());
@@ -325,13 +325,13 @@
      );
      myChargingOrderInfo.setStageCost(stageCost);
      List<UploadRealTimeMonitoringData> dataList = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrder.getCode());
      if(null != dataList){
      if (null != dataList) {
         //在MongoDB中获取数据
         SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
         List<UploadRealTimeMonitoringData> dataLists = new ArrayList<>();
         String t = "";
         for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : dataList) {
            if(!sdf.format(uploadRealTimeMonitoringData.getCreate_time()).equals(t)){
            if (!sdf.format(uploadRealTimeMonitoringData.getCreate_time()).equals(t)) {
               dataLists.add(uploadRealTimeMonitoringData);
               t = sdf.format(uploadRealTimeMonitoringData.getCreate_time());
            }
@@ -353,7 +353,7 @@
         myChargingOrderInfo.setCurrentAndVoltage(currentAndVoltage);
         //在MongoDB中获取数据
         List<Integer> soc = dataLists.stream().map(UploadRealTimeMonitoringData::getSoc).collect(Collectors.toList());
         List<BigDecimal> po = dataLists.stream().map(s -> s.getOutput_current().multiply(s.getOutput_voltage()).divide(new BigDecimal(1000),2, RoundingMode.HALF_DOWN)).collect(Collectors.toList());
         List<BigDecimal> po = dataLists.stream().map(s -> s.getOutput_current().multiply(s.getOutput_voltage()).divide(new BigDecimal(1000), 2, RoundingMode.HALF_DOWN)).collect(Collectors.toList());
         List<Map<String, Object>> power = new ArrayList<>();
         for (int i = 0; i < time.size(); i++) {
            Map<String, Object> map = new HashMap<>();
@@ -369,13 +369,14 @@
      myChargingOrderInfo.setActionable(myChargingOrderInfo.getEndTime() + 604800000L < System.currentTimeMillis() ? 0 : 1);
      long count = orderAppealService.count(Wrappers.lambdaQuery(TOrderAppeal.class)
            .eq(TOrderAppeal::getOrderId, id));
      myChargingOrderInfo.setIsAppeal(count>0?0:1);
      myChargingOrderInfo.setIsAppeal(count > 0 ? 0 : 1);
      return myChargingOrderInfo;
   }
   
   
   /**
    * 获取待开票订单列表
    *
    * @param query
    * @return
    */
@@ -409,6 +410,7 @@
   
   /**
    * 充电支付
    *
    * @param addChargingOrder
    * @return
    */
@@ -421,32 +423,32 @@
            .eq(TChargingOrder::getRechargePaymentStatus, 1).eq(TChargingOrder::getDelFlag, 0));
      for (TChargingOrder tChargingOrder : list) {
         Integer rechargePaymentType = tChargingOrder.getRechargePaymentType();
         if(1 == rechargePaymentType){
         if (1 == rechargePaymentType) {
            NotifyV3PayDecodeRespBody data = wxPaymentClient.queryOrderInfo(tChargingOrder.getCode()).getData();
            if(null != data){
            if (null != data) {
               String trade_state = data.getTrade_state();
               //支付失败,删除无效的订单
               if(trade_state.equals("REFUND") || trade_state.equals("NOTPAY") || trade_state.equals("REVOKED") || trade_state.equals("PAYERROR")){
               if (trade_state.equals("REFUND") || trade_state.equals("NOTPAY") || trade_state.equals("REVOKED") || trade_state.equals("PAYERROR")) {
                  this.removeById(tChargingOrder.getId());
               }
            }
         }
         if(2 == rechargePaymentType){
         if (2 == rechargePaymentType) {
            AliQueryOrder data = aliPaymentClient.query(tChargingOrder.getCode()).getData();
            if(null != data){
            if (null != data) {
               //支付失败,删除无效的订单
               String tradeStatus = data.getTradeStatus();
               if(null != tradeStatus && tradeStatus.equals("TRADE_CLOSED")){
               if (null != tradeStatus && tradeStatus.equals("TRADE_CLOSED")) {
                  this.removeById(tChargingOrder.getId());
               }
            }
         }
         if(3 == rechargePaymentType){
         if (3 == rechargePaymentType) {
            AliQueryOrder data = h5AliPaymentClient.query(tChargingOrder.getCode()).getData();
            if(null != data){
            if (null != data) {
               //支付失败,删除无效的订单
               String tradeStatus = data.getTradeStatus();
               if(null != tradeStatus && tradeStatus.equals("TRADE_CLOSED")){
               if (null != tradeStatus && tradeStatus.equals("TRADE_CLOSED")) {
                  this.removeById(tChargingOrder.getId());
               }
            }
@@ -456,52 +458,52 @@
      //检查当前枪是否是正在使用中
      TChargingOrder one = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getChargingGunId, addChargingOrder.getId())
            .in(TChargingOrder::getStatus, Arrays.asList(3)).eq(TChargingOrder::getDelFlag, 0));
      if(null != one){
      if (null != one) {
         return AjaxResult.error("充电枪正在充电中,启动失败");
      }
      //查询当前充电枪是否有正在支付的订单
      one = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getChargingGunId, addChargingOrder.getId())
            .eq(TChargingOrder::getAppUserCarId, userId).eq(TChargingOrder::getRechargePaymentStatus, 1).eq(TChargingOrder::getDelFlag, 0));
      if(null != one){
      if (null != one) {
         //查询三方支付数据,支付中直接结束三方订单
         if(1 == one.getRechargePaymentType()){
         if (1 == one.getRechargePaymentType()) {
            NotifyV3PayDecodeRespBody data = wxPaymentClient.queryOrderInfo(one.getCode()).getData();
            if(null != data){
            if (null != data) {
               String trade_state = data.getTrade_state();
               //支付失败,删除无效的订单
               if(trade_state.equals("REFUND") || trade_state.equals("NOTPAY") || trade_state.equals("REVOKED") || trade_state.equals("PAYERROR")){
               if (trade_state.equals("REFUND") || trade_state.equals("NOTPAY") || trade_state.equals("REVOKED") || trade_state.equals("PAYERROR")) {
                  this.removeById(one.getId());
               }else{
               } else {
                  //结束第三方支付,删除订单
                  wxPaymentClient.close(one.getCode());
                  this.removeById(one.getId());
               }
            }
         }
         if(2 == one.getRechargePaymentType()){
         if (2 == one.getRechargePaymentType()) {
            AliQueryOrder data = aliPaymentClient.query(one.getCode()).getData();
            if(null != data){
            if (null != data) {
               String trade_state = data.getTradeStatus();
               //支付失败,删除无效的订单
               if(trade_state.equals("TRADE_CLOSED")){
               if (trade_state.equals("TRADE_CLOSED")) {
                  this.removeById(one.getId());
               }
               if(trade_state.equals("WAIT_BUYER_PAY")){
               if (trade_state.equals("WAIT_BUYER_PAY")) {
                  //结束第三方支付,删除订单
                  aliPaymentClient.close(one.getCode());
                  this.removeById(one.getId());
               }
            }
         }
         if(3 == one.getRechargePaymentType()){
         if (3 == one.getRechargePaymentType()) {
            AliQueryOrder data = h5AliPaymentClient.query(one.getCode()).getData();
            if(null != data){
            if (null != data) {
               String trade_state = data.getTradeStatus();
               //支付失败,删除无效的订单
               if(trade_state.equals("TRADE_CLOSED")){
               if (trade_state.equals("TRADE_CLOSED")) {
                  this.removeById(one.getId());
               }
               if(trade_state.equals("WAIT_BUYER_PAY")){
               if (trade_state.equals("WAIT_BUYER_PAY")) {
                  //结束第三方支付,删除订单
                  h5AliPaymentClient.close(one.getCode());
                  this.removeById(one.getId());
@@ -520,9 +522,9 @@
      chargingOrder.setOrderClassification(1);
      chargingOrder.setAppUserId(userId);
      chargingOrder.setAppUserCarId(addChargingOrder.getAppUserCarId());
      if(null != addChargingOrder.getAppUserCarId()){
      if (null != addChargingOrder.getAppUserCarId()) {
         TAppUserCar userCar = appUserCarClient.getCarById(addChargingOrder.getAppUserCarId().toString()).getData();
         if(null != userCar){
         if (null != userCar) {
            chargingOrder.setPlateNum(userCar.getLicensePlate());
         }
      }
@@ -541,20 +543,20 @@
      
      Site site = siteClient.getSiteByIds(Arrays.asList(tChargingGun.getSiteId())).getData().get(0);
      Integer accountingStrategyId = tChargingGun.getAccountingStrategyId();
      if(null == accountingStrategyId){
      if (null == accountingStrategyId) {
         //查询站点上面的计费策略
         accountingStrategyId = site.getAccountingStrategyId();
      }
      TAccountingStrategy accountingStrategy = accountingStrategyClient.getAccountingStrategyById(accountingStrategyId).getData();
      
      //直营站点才可以享受会员折扣
      if(null != appUser.getVipId() && 1 == site.getBusinessCategory()){
      if (null != appUser.getVipId() && 1 == site.getBusinessCategory()) {
         TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
         BigDecimal discount = null;
         if(1 == vip.getType()){
         if (1 == vip.getType()) {
            //普通会员折扣使用积分策略上的折扣,且有最高优惠金额
            discount = accountingStrategy.getDiscount();
         }else{
         } else {
            //内部会员使用会员信息设置的折扣,没有最高优惠金额
            discount = vip.getDiscount();
         }
@@ -562,15 +564,15 @@
         getAppUserVipDetail.setAppUserId(appUser.getId());
         getAppUserVipDetail.setVipId(appUser.getVipId());
         TAppUserVipDetail vipDetail = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData();
         if(null != vipDetail){
         if (null != vipDetail) {
            Integer chargeNum = vipDetail.getChargeNum();
            if(0 < chargeNum){
            if (0 < chargeNum) {
               chargingOrder.setVipDiscount(discount);
            }
         }
      }
      this.save(chargingOrder);
      //添加订单的计费策略
      List<TAccountingStrategyDetail> strategyDetailList = accountingStrategyDetailClient.getListByAccountingStrategyId(accountingStrategyId).getData();
      AccountingStrategyOrder accountingStrategyOrder = new AccountingStrategyOrder();
@@ -585,10 +587,10 @@
         list1.add(accountingStrategyDetailOrder);
      }
      accountingStrategyDetailOrderService.saveBatch(list1);
      //会员优惠折扣将其计入增加充电时长(增加总充电金额)
      //如果充电总金额未使用完,则需要退回费用=(原金额/总金额)*(总金额-实际充电金额)
      if(1 == addChargingOrder.getPaymentType()){
      if (1 == addChargingOrder.getPaymentType()) {
         PaymentOrder paymentOrder = new PaymentOrder();
         paymentOrder.setCode(chargingOrder.getCode());
         paymentOrder.setAmount(addChargingOrder.getPaymentAmount());
@@ -598,7 +600,7 @@
         Map<String, Object> data = wxPaymentClient.orderPay(paymentOrder).getData();
         return AjaxResult.success(data);
      }
      if(2 == addChargingOrder.getPaymentType()){
      if (2 == addChargingOrder.getPaymentType()) {
         AliPaymentReq req = new AliPaymentReq();
         req.setOutTradeNo(chargingOrder.getCode());
         req.setTotalAmount(addChargingOrder.getPaymentAmount().toString());
@@ -607,11 +609,11 @@
         req.setBody("充电充值");
         req.setNotifyUrl("/payment/ali/callBack");
         AliPaymentResp data = aliPaymentClient.payment(req).getData();
         if(null != data){
         if (null != data) {
            return AjaxResult.success(data);
         }
      }
      if(3 == addChargingOrder.getPaymentType()){
      if (3 == addChargingOrder.getPaymentType()) {
         AliPaymentReq req = new AliPaymentReq();
         req.setOutTradeNo(chargingOrder.getCode());
         req.setTotalAmount(addChargingOrder.getPaymentAmount().toString());
@@ -621,8 +623,8 @@
         req.setNotifyUrl("/payment/aliH5/callBack");
         req.setReturnUrl(addChargingOrder.getReturnUrl());
         String data = h5AliPaymentClient.payment(req).getData();
         if(StringUtils.hasLength(data)){
            return AjaxResult.success("操作成功",data);
         if (StringUtils.hasLength(data)) {
            return AjaxResult.success("操作成功", data);
         }
      }
      throw new RuntimeException("无效的支付方式");
@@ -631,23 +633,24 @@
   
   /**
    * 支付成功后的回调处理逻辑
    * @param paymentType 支付方式:1=微信,2=支付宝
    * @param out_trade_no 业务流水号
    *
    * @param paymentType    支付方式:1=微信,2=支付宝
    * @param out_trade_no   业务流水号
    * @param transaction_id 三方支付流水号
    * @param attach 附加数据
    * @param attach         附加数据
    * @return
    */
   @Override
   public AjaxResult chargingOrderCallback(Integer paymentType, String out_trade_no, String transaction_id, String attach) {
      TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, out_trade_no));
      if(chargingOrder.getRechargePaymentStatus() == 2){
      if (chargingOrder.getRechargePaymentStatus() == 2) {
         return AjaxResult.success();
      }
      chargingOrder.setRechargePaymentStatus(2);
      chargingOrder.setRechargeSerialNumber(transaction_id);
      chargingOrder.setStatus(2);
      chargingOrder.setPayTime(LocalDateTime.now());
      //添加安全检测数据到缓存中,每步安全检测完成后需要更新缓存数据
      PreChargeCheck preChargeCheck = new PreChargeCheck();
      preChargeCheck.setElectronicLockLock(false);
@@ -675,12 +678,12 @@
      
      TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
      //判断会员是否还有充电优惠次数,计算会员优惠的折扣金额
      if(null != appUser.getVipId()){
      if (null != appUser.getVipId()) {
         GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
         getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId());
         getAppUserVipDetail.setVipId(appUser.getVipId());
         TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData();
         if(null != data && data.getChargeNum() > 0){
         if (null != data && data.getChargeNum() > 0) {
            //计算折扣
            List<AccountingStrategyDetailOrder> list = accountingStrategyDetailOrderClient.getAllAccountingStrategyDetailOrder(chargingOrder.getId()).getData();
            list.get(list.size() - 1).setEndTime("23:59");
@@ -691,14 +694,14 @@
               Integer start = Integer.valueOf(accountingStrategyDetailOrder.getStartTime().replaceAll(":", ""));
               Integer end = Integer.valueOf(accountingStrategyDetailOrder.getEndTime().replaceAll(":", ""));
               String[] split = accountingStrategyDetailOrder.getEndTime().split(":");
               if(sta || (now >= start && now < end)){
               if (sta || (now >= start && now < end)) {
                  sta = true;
                  
                  Calendar end_calendar = Calendar.getInstance();
                  end_calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
                  end_calendar.set(Calendar.MINUTE, Integer.valueOf(split[1]));
                  //到此策略结束的秒数
                  if(null == nowTimeMillis){
                  if (null == nowTimeMillis) {
                     String[] split1 = accountingStrategyDetailOrder.getStartTime().split(":");
                     Calendar start_calendar = Calendar.getInstance();
                     start_calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split1[0]));
@@ -714,32 +717,32 @@
                  BigDecimal s_server_amount = s_degrees.multiply(accountingStrategyDetailOrder.getServiceCharge());
                  //计算剩余金额能充多长时间的电
                  long times = rechargeAmount1.divide(s_total_amount, 0, RoundingMode.DOWN).longValue();
                  if(times > m){
                  if (times > m) {
                     //充电时间跨度两个计费策略,需要继续对下一个策略进行计算
                     serviceCharge = serviceCharge.add(s_server_amount.multiply(new BigDecimal(m)));
                     rechargeAmount1 = rechargeAmount1.subtract(s_total_amount.multiply(new BigDecimal(m)));
                     nowTimeMillis = null;
                  }else{
                  } else {
                     serviceCharge = serviceCharge.add(s_server_amount.multiply(new BigDecimal(times)));
                     break;
                  }
               }
            }
            if(null != discount){
            if (null != discount) {
               discountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(discount));
            }
            
            if(discountAmount.compareTo(BigDecimal.ZERO) >= 0){
            if (discountAmount.compareTo(BigDecimal.ZERO) >= 0) {
               //计算会员最大优惠金额
               TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
               BigDecimal maximumDeduction = vip.getMaximumDeduction();
               //普通会员有最高优惠限制
               if(vip.getType() == 1 && discountAmount.compareTo(maximumDeduction) > 0){
               if (vip.getType() == 1 && discountAmount.compareTo(maximumDeduction) > 0) {
                  discountAmount = maximumDeduction;
               }
            }
            discountAmount = discountAmount.setScale(4, RoundingMode.HALF_EVEN);
            if(discountAmount.compareTo(BigDecimal.ZERO) >= 0){
            if (discountAmount.compareTo(BigDecimal.ZERO) >= 0) {
               data.setChargeNum(data.getChargeNum() - 1);
               appUserVipDetailClient.updateAppUserVipDetail(data);
            }
@@ -751,8 +754,8 @@
      chargingOrder.setChargeAmount(account_balance);
      chargingOrder.setVipDiscountAmount(discountAmount);
      this.updateById(chargingOrder);
      TChargingPile chargingPile = chargingPileClient.getChargingPileById(tChargingGun.getChargingPileId()).getData();
      //调用远程启动充电消息
      PlatformStartCharging platformStartCharging = new PlatformStartCharging();
@@ -780,26 +783,27 @@
   
   /**
    * 定时检测mongodb数据库数据
    *
    * @param id
    * @return
    */
   public boolean timingDetection(Long id){
   public boolean timingDetection(Long id) {
      TChargingOrder chargingOrder = this.getById(id);
      if(chargingOrder.getStatus() != 2){
      if (chargingOrder.getStatus() != 2) {
         return true;
      }
      String code = chargingOrder.getCode();
      String key = "AQJC_" + chargingOrder.getChargingGunId();
      List<PlatformStartChargingReply> data = platformStartChargingReplyService.getPlatformStartChargingReply(code);
      log.info(code + ":-------------------开始检查调起充电结果-------------------" + data.toString());
      if(data.size() != 0){
      if (data.size() != 0) {
         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)){
         if (failure_cause == 5 && (null == counter || counter < 1800)) {
            counter = (null == counter ? 0 : counter) + 1;
            counter_map.put(code, counter);
            //启动失败
@@ -811,7 +815,7 @@
         
         //清除计时器中的无效数据
         counter_map.remove(code);
         if(0 == startup_result){
         if (0 == startup_result) {
            //启动失败
            preChargeCheck1.setStartupSuccess(3);
            preChargeCheck1.setFailureCause(failure_cause);
@@ -819,16 +823,16 @@
            refund(code);
            chargingOrder.setStatus(-1);
            chargingOrder.setEndMode(0);
         }else{
         } else {
            //启动成功
            preChargeCheck1.setStartupSuccess(2);
            chargingOrder.setStatus(3);
            chargingOrder.setStartTime(LocalDateTime.now());
         }
         this.updateById(chargingOrder);
         if(chargingOrder.getStatus() == 3){
         if (chargingOrder.getStatus() == 3) {
            //推送监管平台订单状态
            new Thread(()->{
            new Thread(() -> {
               ChargingOrderVo chargingOrderVo = new ChargingOrderVo();
               BeanUtils.copyProperties(chargingOrder, chargingOrderVo);
               chargingMessageClient.pushOrderStatus(chargingOrderVo);
@@ -837,16 +841,16 @@
         
         redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
         //推送三方平台订单状态
         if(2 == chargingOrder.getOrderSource()){
         if (2 == chargingOrder.getOrderSource()) {
            tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
         }
         return true;
      }else{
      } else {
         Integer counter = boot_failed_map.get(code);
         log.info(code + ":-------------------未上传开启充电结果-------------------" + counter);
         PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key);
         //5分钟内未启动成功,退回金额。
         if(null == counter || counter < 1800){
         if (null == counter || counter < 1800) {
            counter = (null == counter ? 0 : counter) + 1;
            boot_failed_map.put(code, counter);
            //启动失败
@@ -871,7 +875,7 @@
         this.updateById(order);
         redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
         //推送三方平台订单状态
         if(2 == chargingOrder.getOrderSource()){
         if (2 == chargingOrder.getOrderSource()) {
            tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
         }
         return true;
@@ -881,16 +885,17 @@
   
   /**
    * 修改安全检测数据
    *
    * @param securityDetection
    */
   @Override
   public void securityDetection(SecurityDetectionVO securityDetection){
   public void securityDetection(SecurityDetectionVO securityDetection) {
      GetChargingGunByCode code = new GetChargingGunByCode();
      code.setCharging_pile_code(securityDetection.getCharging_pile_code());
      code.setCharging_gun_code(securityDetection.getCharging_gun_code());
      TChargingGun chargingGun = chargingGunClient.getChargingGunByCode(code).getData();
      PreChargeCheck preChargeCheck1 = redisService.getCacheObject("AQJC_" + chargingGun.getId());
      if(null != preChargeCheck1){
      if (null != preChargeCheck1) {
         preChargeCheck1.setElectronicLockLock(true);
         preChargeCheck1.setInsulationTesting(true);
         preChargeCheck1.setSecureConnectionDetection(securityDetection.getSecure_connection() == 1);
@@ -900,6 +905,7 @@
   
   /**
    * 启动充电应答
    *
    * @param message
    */
   @Override
@@ -907,17 +913,17 @@
      Integer startup_result = message.getStartup_result();
      Integer failure_cause = message.getFailure_cause();
      TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, message.getTransaction_serial_number()));
      if(order.getStatus() != 2){
      if (order.getStatus() != 2) {
         return;
      }
      String code = order.getCode();
      PreChargeCheck preChargeCheck1 =  redisService.getCacheObject("AQJC_" + order.getChargingGunId());
      if(null != preChargeCheck1){
      PreChargeCheck preChargeCheck1 = redisService.getCacheObject("AQJC_" + order.getChargingGunId());
      if (null != preChargeCheck1) {
         preChargeCheck1.setElectronicLockLock(true);
         preChargeCheck1.setInsulationTesting(true);
         preChargeCheck1.setStartupSuccess(1);
      }
      if(0 == startup_result){
      if (0 == startup_result) {
         //启动失败
         preChargeCheck1.setStartupSuccess(3);
         preChargeCheck1.setFailureCause(failure_cause);
@@ -925,7 +931,7 @@
         refund(code);
         order.setStatus(-1);
         order.setEndMode(0);
      }else{
      } else {
         //启动成功
         preChargeCheck1.setStartupSuccess(2);
         order.setStatus(3);
@@ -939,16 +945,16 @@
      redisService.setCacheObject("AQJC_" + order.getChargingGunId(), preChargeCheck1, 24L, TimeUnit.HOURS);
      this.updateById(order);
      
      if(3 == order.getStatus()){
      if (3 == order.getStatus()) {
         //推送监管平台订单状态
         new Thread(()->{
         new Thread(() -> {
            ChargingOrderVo chargingOrderVo = new ChargingOrderVo();
            BeanUtils.copyProperties(order, chargingOrderVo);
            chargingMessageClient.pushOrderStatus(chargingOrderVo);
         }).start();
      }
      //推送三方平台启动充电结果
      if(2 == order.getOrderSource()){
      if (2 == order.getOrderSource()) {
         StartChargeResult result = new StartChargeResult();
         result.setStartChargeSeq(order.getStartChargeSeq());
         result.setStartChargeSeqStat(3 == order.getStatus() ? 2 : 4);
@@ -964,12 +970,13 @@
   
   /**
    * 启动失败后的退款,取消订单
    *
    * @param code
    */
   public void refund(String code){
   public void refund(String code) {
      log.info(code + ":-------------------充电启动失败,执行退款-------------------");
      TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code));
      if(chargingOrder.getOrderSource() == 1 && chargingOrder.getStatus() == 2){
      if (chargingOrder.getOrderSource() == 1 && chargingOrder.getStatus() == 2) {
         Integer rechargePaymentType = chargingOrder.getRechargePaymentType();
         BigDecimal rechargeAmount = chargingOrder.getRechargeAmount();
         //构建退款明细
@@ -988,7 +995,7 @@
         chargingOrderRefund.setRefundRemark("全额退款");
         chargingOrderRefund.setRefundTotalAmount(rechargeAmount);
         chargingOrderRefund.setPayAmount(rechargeAmount);
         if(1 == rechargePaymentType){
         if (1 == rechargePaymentType) {
            WxPaymentRefundModel model = new WxPaymentRefundModel();
            model.setOut_trade_no(chargingOrder.getCode());
            model.setOut_refund_no(chargingOrderRefund.getRefundCode());
@@ -1000,7 +1007,7 @@
            amount.setCurrency("CNY");
            model.setAmount(amount);
            R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model);
            if(200 == orderR.getCode()){
            if (200 == orderR.getCode()) {
               chargingOrderRefundService.save(chargingOrderRefund);
               //手续费
               Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount");
@@ -1009,36 +1016,36 @@
               chargingOrderRefund.setRefundFee(refund_fee);
               chargingOrderRefundService.updateById(chargingOrderRefund);
               //回退会员折扣次数
               if(chargingOrder.getVipDiscountAmount().compareTo(BigDecimal.ZERO) > 0){
               if (chargingOrder.getVipDiscountAmount().compareTo(BigDecimal.ZERO) > 0) {
                  TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
                  GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
                  getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId());
                  getAppUserVipDetail.setVipId(appUser.getVipId());
                  TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData();
                  if(null != data){
                  if (null != data) {
                     data.setChargeNum(data.getChargeNum() + 1);
                     appUserVipDetailClient.updateAppUserVipDetail(data);
                  }
               }
            }
         }
         if(2 == rechargePaymentType){
         if (2 == rechargePaymentType) {
            RefundReq dto = new RefundReq();
            dto.setOutTradeNo(chargingOrder.getCode());
            dto.setOutRequestNo(chargingOrderRefund.getCode());
            dto.setRefundAmount(rechargeAmount.toString());
            dto.setRefundReason("充电失败,取消充电订单");
            RefundResp resp = aliPaymentClient.refund(dto).getData();
            if(null != resp){
            if (null != resp) {
               chargingOrderRefundService.save(chargingOrderRefund);
               //回退会员折扣次数
               if(chargingOrder.getVipDiscountAmount().compareTo(BigDecimal.ZERO) > 0){
               if (chargingOrder.getVipDiscountAmount().compareTo(BigDecimal.ZERO) > 0) {
                  TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
                  GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
                  getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId());
                  getAppUserVipDetail.setVipId(appUser.getVipId());
                  TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData();
                  if(null != data){
                  if (null != data) {
                     data.setChargeNum(data.getChargeNum() + 1);
                     appUserVipDetailClient.updateAppUserVipDetail(data);
                  }
@@ -1052,28 +1059,28 @@
               chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
            }
         }
         if(3 == rechargePaymentType){
         if (3 == rechargePaymentType) {
            RefundReq dto = new RefundReq();
            dto.setOutTradeNo(chargingOrder.getRechargeSerialNumber());
            dto.setOutRequestNo(chargingOrderRefund.getCode());
            dto.setRefundAmount(rechargeAmount.toString());
            dto.setRefundReason("充电失败,取消充电订单");
            RefundResp resp = h5AliPaymentClient.refund(dto).getData();
            if(null != resp && "10000".equals(resp.getCode())){
            if (null != resp && "10000".equals(resp.getCode())) {
               chargingOrderRefundService.save(chargingOrderRefund);
               //回退会员折扣次数
               if(chargingOrder.getVipDiscountAmount().compareTo(BigDecimal.ZERO) > 0){
               if (chargingOrder.getVipDiscountAmount().compareTo(BigDecimal.ZERO) > 0) {
                  TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
                  GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
                  getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId());
                  getAppUserVipDetail.setVipId(appUser.getVipId());
                  TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData();
                  if(null != data){
                  if (null != data) {
                     data.setChargeNum(data.getChargeNum() + 1);
                     appUserVipDetailClient.updateAppUserVipDetail(data);
                  }
               }
               try {
                  Thread.sleep(1000);
               } catch (InterruptedException e) {
@@ -1082,16 +1089,15 @@
               chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
            }
         }
      }
   }
   
   
   public void refund1(String code, BigDecimal money){
   public void refund1(String code, BigDecimal money) {
      log.info(code + ":-------------------充电成功,执行手动退款-------------------");
      TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code));
      if(chargingOrder.getOrderSource() == 1){
      if (chargingOrder.getOrderSource() == 1) {
         BigDecimal rechargeAmount = chargingOrder.getRechargeAmount();
         Integer rechargePaymentType = chargingOrder.getRechargePaymentType();
         //构建退款明细
@@ -1110,7 +1116,7 @@
         chargingOrderRefund.setRefundRemark("充电完成退款,手动退款");
         chargingOrderRefund.setRefundTotalAmount(money);
         chargingOrderRefund.setPayAmount(money);
         if(1 == rechargePaymentType){
         if (1 == rechargePaymentType) {
            WxPaymentRefundModel model = new WxPaymentRefundModel();
            model.setOut_trade_no(chargingOrder.getCode());
            model.setOut_refund_no(chargingOrderRefund.getRefundCode());
@@ -1122,7 +1128,7 @@
            amount.setCurrency("CNY");
            model.setAmount(amount);
            R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model);
            if(200 == orderR.getCode()){
            if (200 == orderR.getCode()) {
               chargingOrderRefundService.save(chargingOrderRefund);
               //手续费
               Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount");
@@ -1132,14 +1138,14 @@
               chargingOrderRefundService.updateById(chargingOrderRefund);
            }
         }
         if(2 == rechargePaymentType){
         if (2 == rechargePaymentType) {
            RefundReq dto = new RefundReq();
            dto.setOutTradeNo(chargingOrder.getCode());
            dto.setOutRequestNo(chargingOrderRefund.getCode());
            dto.setRefundAmount(money.toString());
            dto.setRefundReason("充电完成退款");
            RefundResp resp = aliPaymentClient.refund(dto).getData();
            if(null != resp){
            if (null != resp) {
               chargingOrderRefundService.save(chargingOrderRefund);
               try {
                  Thread.sleep(1000);
@@ -1149,14 +1155,14 @@
               chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
            }
         }
         if(3 == rechargePaymentType){
         if (3 == rechargePaymentType) {
            RefundReq dto = new RefundReq();
            dto.setOutTradeNo(chargingOrder.getRechargeSerialNumber());
            dto.setOutRequestNo(chargingOrderRefund.getCode());
            dto.setRefundAmount(money.toString());
            dto.setRefundReason("充电完成退款");
            RefundResp resp = h5AliPaymentClient.refund(dto).getData();
            if(null != resp && "10000".equals(resp.getCode())){
            if (null != resp && "10000".equals(resp.getCode())) {
               chargingOrderRefundService.save(chargingOrderRefund);
               try {
                  Thread.sleep(1000);
@@ -1166,20 +1172,21 @@
               chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
            }
         }
      }
   }
   /**
    * 启动失败后微信退款的回调处理
    *
    * @param out_refund_no
    * @param refund_id
    * @param tradeState
    * @param success_time
    * @return
    */
   public AjaxResult chargingOrderStartupFailureWxRefund(String out_refund_no, String refund_id, String tradeState, String success_time){
   public AjaxResult chargingOrderStartupFailureWxRefund(String out_refund_no, String refund_id, String tradeState, String success_time) {
      TChargingOrderRefund one = chargingOrderRefundService.getOne(new LambdaQueryWrapper<TChargingOrderRefund>().eq(TChargingOrderRefund::getRefundCode, out_refund_no));
      one.setRefundSerialNumber(refund_id);
      one.setRefundStatus(2);
@@ -1196,12 +1203,11 @@
      this.updateById(chargingOrder);
      return AjaxResult.success();
   }
   /**
    * 获取充电中的详情
    *
    * @param id
    * @return
    */
@@ -1210,7 +1216,7 @@
      Long userId = tokenService.getLoginUserApplet().getUserId();
      TChargingOrder one = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, userId).eq(TChargingOrder::getChargingGunId, id)
            .eq(TChargingOrder::getRechargePaymentStatus, 2).eq(TChargingOrder::getDelFlag, 0).orderByDesc(TChargingOrder::getStartTime).last(" limit 0, 1"));
      if(null == one || !one.getAppUserId().equals(userId)){
      if (null == one || !one.getAppUserId().equals(userId)) {
         return null;
      }
      ChargingDetails chargingDetails = new ChargingDetails();
@@ -1223,7 +1229,7 @@
      chargingDetails.setStatus(one.getStatus());
      chargingDetails.setChargingCost(one.getResidualAmount());
      UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataService.getLastDataById(one.getCode());
      if(null != data){
      if (null != data) {
         chargingDetails.setChargeCurrent(data.getOutput_current());
         chargingDetails.setChargeVoltage(data.getOutput_voltage());
         BigDecimal power = data.getOutput_current().multiply(data.getOutput_voltage()).divide(new BigDecimal(1000), new MathContext(4, RoundingMode.HALF_EVEN));
@@ -1234,7 +1240,7 @@
         Integer h = Integer.valueOf(data.getCumulative_charging_time() / 60);
         Integer m = Integer.valueOf(data.getCumulative_charging_time() % 60);
         chargingDetails.setChargedTime(String.format("%02d", h) + ":" + String.format("%02d", m));
         if(null != one.getAppUserCarId()){
         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()));
@@ -1247,6 +1253,7 @@
   
   /**
    * 停止充电操作
    *
    * @param id 订单id
    * @return
    */
@@ -1254,14 +1261,14 @@
   public AjaxResult stopCharging(String id) {
      TChargingOrder order = this.getById(id);
      Integer status = order.getStatus();
      if(status != 3){
      if (status != 3) {
         return AjaxResult.error("还未开始充电");
      }
      if(status == 4 || status == 5){
      if (status == 4 || status == 5) {
         return AjaxResult.error("不能重复操作");
      }
      Long userId = tokenService.getLoginUserApplet().getUserId();
      if(!order.getAppUserId().equals(userId)){
      if (!order.getAppUserId().equals(userId)) {
         return AjaxResult.error("权限不足");
      }
      order.setEndTime(LocalDateTime.now());
@@ -1273,7 +1280,7 @@
      TChargingGun chargingGun = chargingGunClient.getChargingGunById(order.getChargingGunId()).getData();
      //异步线程处理停机
      ExecutorService cachedThreadPool = Executors.newFixedThreadPool(1);
      cachedThreadPool.execute(()->{
      cachedThreadPool.execute(() -> {
         //调用硬件停止充电,停止成功后开始计算费用退款
         TChargingPile chargingPile = chargingPileClient.getChargingPileById(order.getChargingPileId()).getData();
         PlatformStopCharging platformStopCharging = new PlatformStopCharging();
@@ -1290,7 +1297,7 @@
         chargingMessageClient.pushOrderStatus(chargingOrderVo);
      });
      //推送三方平台
      if(2 == order.getOrderSource()){
      if (2 == order.getOrderSource()) {
         tcecClient.notificationEquipChargeStatus(order.getStartChargeSeq(), order.getOperatorId());
      }
      
@@ -1300,9 +1307,10 @@
   
   /**
    * 结束充电后处理用户标签数据
    *
    * @param chargingOrder
    */
   public void editUserTag(TChargingOrder chargingOrder){
   public void editUserTag(TChargingOrder chargingOrder) {
      //处理用户标签数据
      List<TUserTag> data = userTagClient.getAllUserTag().getData();
      //累计充电次数
@@ -1318,7 +1326,7 @@
         String end = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
         long count1 = this.count(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId())
               .eq(TChargingOrder::getRechargePaymentStatus, 2).between(TChargingOrder::getStartTime, start, end).eq(TChargingOrder::getDelFlag, 0));
         if(null == data1 && count1 >= times){
         if (null == data1 && count1 >= times) {
            data1 = new TAppUserTag();
            data1.setAppUserId(chargingOrder.getAppUserId());
            data1.setUserTagId(tUserTag.getId());
@@ -1342,7 +1350,7 @@
         String end = endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
         long count1 = this.count(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId())
               .eq(TChargingOrder::getRechargePaymentStatus, 2).between(TChargingOrder::getStartTime, start, end).eq(TChargingOrder::getDelFlag, 0));
         if(null == data1 && count1 >= times){
         if (null == data1 && count1 >= times) {
            data1 = new TAppUserTag();
            data1.setAppUserId(chargingOrder.getAppUserId());
            data1.setUserTagId(tUserTag.getId());
@@ -1355,46 +1363,47 @@
   
   /**
    * 推荐奖励(被推荐首单奖励)
    *
    * @param chargingOrder
    */
   public void referralReward(TChargingOrder chargingOrder){
   public void referralReward(TChargingOrder chargingOrder) {
      //处理推荐奖励(被推荐首单奖励)
      TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
      long count = this.count(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId())
            .in(TChargingOrder::getStatus, Arrays.asList(4, 5)).eq(TChargingOrder::getDelFlag, 0));
      if(null != appUser.getInviteUserId() && 1 == count){
      if (null != appUser.getInviteUserId() && 1 == count) {
         TIntegralRule integralRule = integralRuleClient.getSet().getData();
         String inviteUsersToEarnPoints = integralRule.getInviteUsersToEarnPoints();
         JSONObject jsonObject = JSON.parseObject(inviteUsersToEarnPoints);
         Integer num1 = jsonObject.getInteger("num1");
         
         TAppUser appUser1 = appUserClient.getUserById(appUser.getInviteUserId()).getData();
         if(null != appUser1.getVipId()){
         if (null != appUser1.getVipId()) {
            TVip vip = vipClient.getInfo1(appUser1.getVipId()).getData();
            Integer doubleIntegration = vip.getDoubleIntegration();
            //双倍积分
            if(1 == doubleIntegration){
            if (1 == doubleIntegration) {
               num1 *= 2;
            }
         }
         
         GetInviteUser query = new GetInviteUser();
         query.setAppUserId(appUser1.getId());
         query.setBeInvitedAppUserId(chargingOrder.getAppUserId());
         TInviteUser inviteUser = inviteUserClient.getInviteUser(query).getData();
         if(null == inviteUser){
         if (null == inviteUser) {
            inviteUser = new TInviteUser();
            inviteUser.setAppUserId(appUser1.getId());
            inviteUser.setBeInvitedAppUserId(chargingOrder.getAppUserId());
            inviteUser.setAward(num1);
            inviteUser.setCreateTime(LocalDateTime.now());
            inviteUserClient.saveInviteUser(inviteUser);
         }else{
         } else {
            inviteUser.setAward(num1);
            inviteUserClient.updateInviteUser(inviteUser);
         }
         if(num1 > 0){
         if (num1 > 0) {
            TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange();
            String code = Double.valueOf(Math.random() * 1000).intValue() + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
            appUserIntegralChange.setCode(code);
@@ -1414,27 +1423,27 @@
   }
   
   
   /**
    * 停止充电应答结果处理
    *
    * @param platformStopChargingReply
    */
   @Override
   public void terminateSuccessfulResponse(PlatformStopChargingReplyVO platformStopChargingReply){
   public void terminateSuccessfulResponse(PlatformStopChargingReplyVO platformStopChargingReply) {
      GetChargingGunByCode code = new GetChargingGunByCode();
      code.setCharging_gun_code(platformStopChargingReply.getCharging_gun_code());
      code.setCharging_pile_code(platformStopChargingReply.getCharging_pile_code());
      TChargingGun chargingGun = chargingGunClient.getChargingGunByCode(code).getData();
      TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getChargingGunId, chargingGun.getId())
            .orderByDesc(TChargingOrder::getEndTime).eq(TChargingOrder::getRechargePaymentStatus, 2).last(" limit 0, 1"));
      if(null != order && order.getStatus() != 4){
      if (null != order && order.getStatus() != 4) {
         return;
      }
      
      String code1 = order.getCode();
      if(0 == platformStopChargingReply.getStop_result()){
      if (0 == platformStopChargingReply.getStop_result()) {
         String failure_cause = "";
         switch (platformStopChargingReply.getFailure_cause()){
         switch (platformStopChargingReply.getFailure_cause()) {
            case 0:
               failure_cause = "无";
               break;
@@ -1449,7 +1458,7 @@
               break;
         }
         log.info(code1 + ":停机失败:订单号:{},失败原因:{}", order.getCode(), failure_cause);
      }else{
      } else {
         TChargingOrder chargingOrder = new TChargingOrder();
         chargingOrder.setId(order.getId());
         chargingOrder.setAppUserId(order.getAppUserId());
@@ -1459,12 +1468,8 @@
   }
   
   
    @Override
    public TCharingOrderVO chargingOrder(ChargingOrderQuery dto) {
   @Override
   public TCharingOrderVO chargingOrder(ChargingOrderQuery dto) {
      TCharingOrderVO tCharingOrderVO = new TCharingOrderVO();
      List<TChargingGun> allGun = chargingGunClient.getAllGun().getData();
      List<TChargingPile> allPile = chargingGunClient.getAllPile().getData();
@@ -1475,22 +1480,22 @@
      String startTime2 = null;
      String endTime1 = null;
      String endTime2 = null;
      if (StringUtils.hasLength(dto.getStartTime())){
      if (StringUtils.hasLength(dto.getStartTime())) {
         String[] split = dto.getStartTime().split(" - ");
         startTime1 = split[0];
         startTime2 = split[1];
      }
      if (StringUtils.hasLength(dto.getEndTime())){
      if (StringUtils.hasLength(dto.getEndTime())) {
         String[] split = dto.getEndTime().split(" - ");
         endTime1 = split[0];
         endTime2 = split[1];
      }
      PageInfo<ChargingOrderVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
      if (StringUtils.hasLength(dto.getPhone())){
      PageInfo<ChargingOrderVO> pageInfo = new PageInfo<>(dto.getPageCurr(), dto.getPageSize());
      if (StringUtils.hasLength(dto.getPhone())) {
         List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData();
         if (data.isEmpty()){
         if (data.isEmpty()) {
            tCharingOrderVO.setList(pageInfo);
            return tCharingOrderVO;
         }
@@ -1502,70 +1507,70 @@
      Integer roleType = sysUser.getRoleType();
      //如果没传siteId,获取当前登陆人所有的siteIds
      List<Integer> siteIds = new ArrayList<>();
      if (dto.getSiteId()==null){
         if (userId != null){
      if (dto.getSiteId() == null) {
         if (userId != null) {
            List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
            for (GetSiteListDTO datum : data) {
               siteIds.add(datum.getId());
            }
         }
      }else {
      } else {
         siteIds.add(dto.getSiteId());
      }
      if (siteIds.isEmpty()){
      if (siteIds.isEmpty()) {
         siteIds.add(-1);
      }else{
         if (roleType == 2){
      } else {
         if (roleType == 2) {
            List<Integer> integers = new ArrayList<>();
            for (Integer siteId : siteIds) {
               // 校验有没有这个站点的权限
               List<Boolean> t1= partnerClient.getChargingOrderMenu(sysUser.getObjectId(),siteId).getData();
               List<Boolean> t1 = partnerClient.getChargingOrderMenu(sysUser.getObjectId(), siteId).getData();
               Boolean b = t1.get(1);
               if (b){
               if (b) {
                  integers.add(siteId);
               }
            }
            siteIds = integers;
         }
      }
      if (siteIds.isEmpty())siteIds.add(-1);
      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");
      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");
      BigDecimal paymentMoney = new BigDecimal("0");
      List<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list();
      for (ChargingOrderVO chargingOrderVO : list) {
         if (roleType == 2){
         if (roleType == 2) {
            for (Integer siteId : siteIds) {
               // 校验有没有这个站点的权限
               List<Boolean> t1= partnerClient.getChargingOrderMenu(sysUser.getObjectId(),siteId).getData();
               List<Boolean> t1 = partnerClient.getChargingOrderMenu(sysUser.getObjectId(), siteId).getData();
               chargingOrderVO.setAuthRecord(t1.get(0));
            }
         }
         chargingOrderVO.setCommissionAmount(chargingOrderVO.getRechargeAmount()!=null?chargingOrderVO.getRechargeAmount().multiply(new BigDecimal("0.006")):new BigDecimal("0"));
         chargingOrderVO.setPlatFormMoney(chargingOrderVO.getRechargeAmount()!=null?chargingOrderVO.getRechargeAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN):new BigDecimal("0"));
         chargingOrderVO.setUid(chargingOrderVO.getId()+"");
         TChargingGun data3 = allGun.stream().filter(e->e.getId().equals(chargingOrderVO.getChargingGunId())).findFirst().orElse(null);
         TChargingPile data2 = allPile.stream().filter(e->e.getId().equals(chargingOrderVO.getChargingPileId())).findFirst().orElse(null);
         if (chargingOrderVO.getSiteId()!=null){
         chargingOrderVO.setCommissionAmount(chargingOrderVO.getRechargeAmount() != null ? chargingOrderVO.getRechargeAmount().multiply(new BigDecimal("0.006")) : new BigDecimal("0"));
         chargingOrderVO.setPlatFormMoney(chargingOrderVO.getRechargeAmount() != null ? chargingOrderVO.getRechargeAmount().multiply(new BigDecimal("0.006")).setScale(2, BigDecimal.ROUND_DOWN) : new BigDecimal("0"));
         chargingOrderVO.setUid(chargingOrderVO.getId() + "");
         TChargingGun data3 = allGun.stream().filter(e -> e.getId().equals(chargingOrderVO.getChargingGunId())).findFirst().orElse(null);
         TChargingPile data2 = allPile.stream().filter(e -> e.getId().equals(chargingOrderVO.getChargingPileId())).findFirst().orElse(null);
         if (chargingOrderVO.getSiteId() != null) {
            List<Integer> integers = new ArrayList<>();
            integers.add(chargingOrderVO.getSiteId());
            Site site = data9.stream().filter(e -> e.getId().equals(chargingOrderVO.getSiteId())).findFirst().orElse(null);
            if (site!=null)chargingOrderVO.setSiteName(site.getName());
            if (site != null) chargingOrderVO.setSiteName(site.getName());
         }
         if (data2!=null && data3!=null){
            chargingOrderVO.setTerminalName(data2.getName()+"-"+data3.getName());
         if (data2 != null && data3 != null) {
            chargingOrderVO.setTerminalName(data2.getName() + "-" + data3.getName());
         }
         // 充电订单 明细记录
         List<TChargingOrderAccountingStrategy> chargingOrderId = list3.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderVO.getId())).collect(Collectors.toList());
         if (chargingOrderVO.getStartTime()!=null && chargingOrderVO.getEndTime()!=null){
         if (chargingOrderVO.getStartTime() != null && chargingOrderVO.getEndTime() != null) {
            LocalDateTime startTime = chargingOrderVO.getStartTime();
            LocalDateTime endTime = chargingOrderVO.getEndTime();
            // 计算时间差 单位秒
@@ -1575,10 +1580,10 @@
            BigDecimal electronic_reduce = chargingOrderId.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
            chargingOrderVO.setElectrovalence(electronic_reduce);
            BigDecimal service_reduce = chargingOrderId.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
            if (!chargingOrderVO.getOrderSource().equals(2)){
            if (!chargingOrderVO.getOrderSource().equals(2)) {
               chargingOrderVO.setServiceCharge(service_reduce);
               chargingOrderVO.setSharingAmount(BigDecimal.ZERO);
            }else{
            } else {
               chargingOrderVO.setServiceCharge(service_reduce.multiply(new BigDecimal("0.8")));
               chargingOrderVO.setSharingAmount(service_reduce.multiply(new BigDecimal("0.2")));
            }
@@ -1588,28 +1593,28 @@
         chargingOrderVO.setCount(size);
         // 用户手机号
         TAppUser data = data6.stream().filter(e -> e.getId().equals(chargingOrderVO.getAppUserId())).findFirst().orElse(null);
         if (data!=null){
         if (data != null) {
            // 车牌号
            chargingOrderVO.setPhone(data.getPhone());
            List<Long> longs = new ArrayList<>();
            if (chargingOrderVO.getAppUserCarId()!=null){
            if (chargingOrderVO.getAppUserCarId() != null) {
               longs.add(chargingOrderVO.getAppUserCarId());
               TAppUserCar tAppUserCar = data4.stream().filter(e -> e.getId().equals(chargingOrderVO.getAppUserCarId())).findFirst().orElse(null);
               if (tAppUserCar!=null){
               if (tAppUserCar != null) {
                  chargingOrderVO.setLicensePlate(tAppUserCar.getLicensePlate());
               }
            }else{
            } else {
               chargingOrderVO.setLicensePlate(chargingOrderVO.getPlateNum());
            }
         }
      }
//      List<TChargingOrderRefund> chargingOrderRefunds = chargingOrderRefundService.lambdaQuery()
//            .eq(TChargingOrderRefund::getRefundStatus,2).list();
       Map<String, Object> map = this.baseMapper.chargingOrderNolimit(dto,startTime1,startTime2,endTime1,endTime2);
      Map<String, Object> map = this.baseMapper.chargingOrderNolimit(dto, startTime1, startTime2, endTime1, endTime2);
//      for (ChargingOrderVO chargingOrderVO : list1) {
//         if(null == chargingOrderVO.getStatus() || 5 != chargingOrderVO.getStatus()){
//            continue;
@@ -1640,13 +1645,13 @@
////            refundMoney = refundMoney.add(tChargingOrderRefund.getRefundTotalAmount());
////         }
//      }
      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));
      }else{
      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));
      } else {
         tCharingOrderVO.setTotal(BigDecimal.ZERO);
         tCharingOrderVO.setTime(0L);
         tCharingOrderVO.setIncome(BigDecimal.ZERO);
@@ -1655,18 +1660,18 @@
      }
      pageInfo.setRecords(list);
      tCharingOrderVO.setList(pageInfo);
        return tCharingOrderVO;
    }
      return tCharingOrderVO;
   }
   @Override
   public R<PageInfo<PayOrderDto>> payOrderQuery(PayOrderQueryDto payOrderQueryDto) {
      PageInfo<PayOrderDto> pageInfo = new PageInfo<>(payOrderQueryDto.getPageCurr(),payOrderQueryDto.getPageSize());
      List<PayOrderDto> list = this.baseMapper.payOrderQuery(pageInfo,payOrderQueryDto);
      PageInfo<PayOrderDto> pageInfo = new PageInfo<>(payOrderQueryDto.getPageCurr(), payOrderQueryDto.getPageSize());
      List<PayOrderDto> list = this.baseMapper.payOrderQuery(pageInfo, payOrderQueryDto);
      for (PayOrderDto payOrderDto : list) {
         if (payOrderDto.getType()==2||payOrderDto.getType()==3){
         if (payOrderDto.getType() == 2 || payOrderDto.getType() == 3) {
            payOrderDto.setFinalAmount(payOrderDto.getOrderAmount());
         }
         if (payOrderDto.getType()==1&&payOrderDto.getStatus()==3){
         if (payOrderDto.getType() == 1 && payOrderDto.getStatus() == 3) {
            payOrderDto.setFinalAmount(payOrderDto.getOrderAmount());
            payOrderDto.setOrderAmount(payOrderDto.getOrderAmount());
            payOrderDto.setPaymentAmount(payOrderDto.getOrderAmount());
@@ -1675,117 +1680,117 @@
      pageInfo.setRecords(list);
      return R.ok(pageInfo);
   }
   @Override
   public R<PageInfo<TChargingOrderRefund>> getRefundList(ChargingRefundDto chargingRefundDto) {
      PageInfo<TChargingOrderRefund> pageInfo = new PageInfo<>(chargingRefundDto.getPageCurr(),chargingRefundDto.getPageSize());
      List<TChargingOrderRefund> list = this.baseMapper.getRefundList(pageInfo,chargingRefundDto);
      PageInfo<TChargingOrderRefund> pageInfo = new PageInfo<>(chargingRefundDto.getPageCurr(), chargingRefundDto.getPageSize());
      List<TChargingOrderRefund> list = this.baseMapper.getRefundList(pageInfo, chargingRefundDto);
      pageInfo.setRecords(list);
      return R.ok(pageInfo);
   }
   @Override
   public List<ChargingOrderGroup> chargingOrderGroup(ChargingPercentProvinceDto chargingPercentProvinceDto) {
      return this.baseMapper.chargingOrderGroup(chargingPercentProvinceDto);
   }
   @Override
   public List<SixChargingDto> charge(LocalDate sixBefore, List<Integer> siteIds) {
      return this.baseMapper.charge(sixBefore,siteIds);
      return this.baseMapper.charge(sixBefore, siteIds);
   }
   @Override
   public List<SixCircleDto> circle(List<Integer> siteIds,LocalDate sixBefore) {
      return this.baseMapper.circle(siteIds,sixBefore);
   public List<SixCircleDto> circle(List<Integer> siteIds, LocalDate sixBefore) {
      return this.baseMapper.circle(siteIds, sixBefore);
   }
   @Override
   public Map<String, Object> countAll(List<Integer> siteIds) {
      return this.baseMapper.countAll(siteIds);
   }
   @Override
   public List<Map<String, Object>> getSumByType(LocalDate start,LocalDate end,List<Integer> siteIds) {
   public List<Map<String, Object>> getSumByType(LocalDate start, LocalDate end, List<Integer> siteIds) {
      LocalDateTime start1 = start.atStartOfDay();
      LocalDateTime end1 = end.atTime(LocalTime.MAX);
      return this.baseMapper.getSumByType(start1,end1, siteIds);
      return this.baseMapper.getSumByType(start1, end1, siteIds);
   }
   @Override
   public List<Map<String, Object>> getDateData(LocalDate start,LocalDate end,List<Integer> siteIds) {
   public List<Map<String, Object>> getDateData(LocalDate start, LocalDate end, List<Integer> siteIds) {
      LocalDateTime start1 = start.atStartOfDay();
      LocalDateTime end1 = end.atTime(LocalTime.MAX);
      return this.baseMapper.getDateData(start1,end1, siteIds);
      return this.baseMapper.getDateData(start1, end1, siteIds);
   }
   @Override
   public List<Map<String, Object>> getWeekData(LocalDate start,LocalDate end,List<Integer> siteIds) {
   public List<Map<String, Object>> getWeekData(LocalDate start, LocalDate end, List<Integer> siteIds) {
      LocalDateTime start1 = start.atStartOfDay();
      LocalDateTime end1 = end.atTime(LocalTime.MAX);
      return this.baseMapper.getWeekData(start1,end1,siteIds);
      return this.baseMapper.getWeekData(start1, end1, siteIds);
   }
   @Override
   public List<Map<String, Object>> getMonthData(LocalDate start,LocalDate end,List<Integer> siteIds) {
   public List<Map<String, Object>> getMonthData(LocalDate start, LocalDate end, List<Integer> siteIds) {
      LocalDateTime start1 = start.atStartOfDay();
      LocalDateTime end1 = end.atTime(LocalTime.MAX);
      return this.baseMapper.getMonthData(start1,end1,siteIds);
      return this.baseMapper.getMonthData(start1, end1, siteIds);
   }
   @Override
   public List<Map<String, Object>> getYearData(LocalDate start,LocalDate end,List<Integer> siteIds) {
   public List<Map<String, Object>> getYearData(LocalDate start, LocalDate end, List<Integer> siteIds) {
      LocalDateTime start1 = start.atStartOfDay();
      LocalDateTime end1 = end.atTime(LocalTime.MAX);
      return this.baseMapper.getYearData(start1,end1,siteIds);
      return this.baseMapper.getYearData(start1, end1, siteIds);
   }
   @Resource
   private SysUserClient sysUserClient;
   @Override
   public ChargingOrderTimeVO chargingList(ChargingListQuery dto) {
      String startTime1 = null;
      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())){
      if (StringUtils.hasLength(dto.getStartTime())) {
         String[] split = dto.getStartTime().split(" - ");
         startTime1 = split[0];
         startTime2 = split[1];
      }
      ChargingOrderTimeVO chargingOrderTimeVO = new ChargingOrderTimeVO();
      if (StringUtils.hasLength(dto.getPhone())){
      if (StringUtils.hasLength(dto.getPhone())) {
         List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData();
         if(data!=null){
            if (!data.isEmpty()){
         if (data != null) {
            if (!data.isEmpty()) {
               dto.setUserIds(data);
            }
         }else{
         } else {
            dto.setUserIds(new ArrayList<Long>());
         }
         if (dto.getUserIds().isEmpty()){
         if (dto.getUserIds().isEmpty()) {
            List<Long> carIds = dto.getUserIds();
            carIds.add(-1L);
            dto.setUserIds(carIds);
         }
      }
      if (StringUtils.hasLength(dto.getLicensePlate())){
      if (StringUtils.hasLength(dto.getLicensePlate())) {
         List<Long> data = appUserCarClient.getAppUserCarByLicensePlates(dto.getLicensePlate()).getData();
         if(data!=null){
            if (!data.isEmpty()){
         if (data != null) {
            if (!data.isEmpty()) {
               dto.setCarIds(data);
            }
         }else{
         } else {
            dto.setCarIds(new ArrayList<Long>());
         }
         if (dto.getCarIds().isEmpty()){
         if (dto.getCarIds().isEmpty()) {
            List<Long> carIds = dto.getCarIds();
            carIds.add(-1L);
            dto.setCarIds(carIds);
@@ -1797,27 +1802,27 @@
      Integer roleType = sysUser.getRoleType();
      //如果没传siteId,获取当前登陆人所有的siteIds
      List<Integer> siteIds = new ArrayList<>();
      if (dto.getSiteId()==null){
         if (userId != null){
      if (dto.getSiteId() == null) {
         if (userId != null) {
            List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
            for (GetSiteListDTO datum : data) {
               siteIds.add(datum.getId());
            }
         }
      }else {
      } else {
         siteIds.add(dto.getSiteId());
      }
      if (siteIds.isEmpty()){
      if (siteIds.isEmpty()) {
         siteIds.add(-1);
      }else{
         if (roleType == 2){
      } else {
         if (roleType == 2) {
            List<Integer> integers = new ArrayList<>();
            for (Integer siteId : siteIds) {
               // 校验有没有这个站点的权限
               List<Boolean> t1= partnerClient.getChargingOrderMenu(sysUser.getObjectId(),siteId).getData();
               List<Boolean> t1 = partnerClient.getChargingOrderMenu(sysUser.getObjectId(), siteId).getData();
               Boolean b = t1.get(1);
               if (b){
               if (b) {
                  integers.add(siteId);
               }
            }
@@ -1825,39 +1830,39 @@
         }
      }
      dto.setSiteIds(siteIds);
      PageInfo<ChargingOrderListVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
      List<ChargingOrderListVO> list = this.baseMapper.chargingList(pageInfo,dto,startTime1,startTime2,endTime1,endTime2);
      PageInfo<ChargingOrderListVO> pageInfo = new PageInfo<>(dto.getPageCurr(), dto.getPageSize());
      List<ChargingOrderListVO> list = this.baseMapper.chargingList(pageInfo, dto, startTime1, startTime2, endTime1, endTime2);
      List<Integer> siteIdsList = list.stream().map(ChargingOrderListVO::getSiteId).collect(Collectors.toList());
      if (siteIdsList.isEmpty())siteIdsList.add(-1);
      if (siteIdsList.isEmpty()) siteIdsList.add(-1);
      List<Site> sites = siteClient.getSiteByIds(siteIdsList).getData();
      for (ChargingOrderListVO chargingOrderListVO : list) {
         if (roleType==2){
         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){
         if (chargingOrderListVO.getOrderAmount() != null) {
            chargingOrderListVO.setCommissionAmount(chargingOrderListVO.getRechargeAmount().multiply(bigDecimal));
         }
         chargingOrderListVO.setPaymentAmount(chargingOrderListVO.getPaymentAmount());
         chargingOrderListVO.setUid(chargingOrderListVO.getId()+"");
         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){
         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 (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){
         if (chargingOrderListVO.getStartTime() != null && chargingOrderListVO.getEndTime() != null) {
            LocalDateTime startTime = chargingOrderListVO.getStartTime();
            LocalDateTime endTime = chargingOrderListVO.getEndTime();
            // 计算时间差 单位秒
@@ -1865,38 +1870,38 @@
            chargingOrderListVO.setChargingSecond(between);
         }
         // 获取开始SOC 结束soc
         if (chargingOrderListVO.getCode()!=null){
         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 (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();
                  }
               }
               if (uploadRealTimeMonitoringData.getSoc()!=0 &&uploadRealTimeMonitoringData.getSoc()<min){
                  min = uploadRealTimeMonitoringData.getSoc();
               }
            }
               chargingOrderListVO.setEndSoc(max+"");
               chargingOrderListVO.setStartSoc(min+"");
               chargingOrderListVO.setEndSoc(max + "");
               chargingOrderListVO.setStartSoc(min + "");
            }
         }
         if (chargingOrderListVO.getAppUserId()!=null){
         if (chargingOrderListVO.getAppUserId() != null) {
            TAppUser data3 = appUserClient.getUserById(chargingOrderListVO.getAppUserId()).getData();
            List<Long> carId = new ArrayList<>();
            if (data3!=null){
            if (data3 != null) {
               if (chargingOrderListVO.getAppUserCarId() != null) {
                  carId.add(chargingOrderListVO.getAppUserCarId());
                  if (!carId.isEmpty()){
                  if (!carId.isEmpty()) {
                     List<TAppUserCar> data4 = appUserCarClient.getCarByIds(carId).getData();
                     if (data4!=null && !data4.isEmpty()) {
                     if (data4 != null && !data4.isEmpty()) {
                        chargingOrderListVO.setLicensePlate(data4.get(0).getLicensePlate());
                     }
                  }
               }else{
               } else {
                  chargingOrderListVO.setLicensePlate(chargingOrderListVO.getPlateNum());
               }
               chargingOrderListVO.setPhone(data3.getPhone());
@@ -1911,7 +1916,7 @@
         BigDecimal gu = new BigDecimal("0");
         BigDecimal total = new BigDecimal("0");
         for (TChargingOrderAccountingStrategy temp : list2) {
            if (temp.getChargingCapacity() == null){
            if (temp.getChargingCapacity() == null) {
               temp.setChargingCapacity(BigDecimal.ZERO);
            }
            switch (temp.getType()) {
@@ -1930,47 +1935,47 @@
            }
         }
         total = total.add(jian).add(feng).add(ping).add(gu);
         if (total.compareTo(new BigDecimal("0")) != 0){
         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{
                  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"+"%(谷)");
                  "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{
         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"));
         }
      }
      // 不分页
      PageInfo<ChargingOrderListVO> pageInfo1 = new PageInfo<>(1,999999999);
      List<ChargingOrderListVO> list1 = this.baseMapper.chargingList(pageInfo1,dto,startTime1,startTime2,endTime1,endTime2);
      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){
         if (site != null) {
            chargingOrderListVO.setSiteName(site.getName());
         }
         if (chargingOrderListVO.getStartTime()!=null && chargingOrderListVO.getEndTime()!=null){
         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 (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());
            }
@@ -1990,7 +1995,7 @@
      BigDecimal jianElectronic = new BigDecimal("0");
      BigDecimal fengElectronic = new BigDecimal("0");
      BigDecimal pingElectronic = new BigDecimal("0");
      BigDecimal guElectronic   = new BigDecimal("0");
      BigDecimal guElectronic = new BigDecimal("0");
      // 尖峰平谷服务费
      BigDecimal jianService = new BigDecimal("0");
      BigDecimal fengService = new BigDecimal("0");
@@ -2009,18 +2014,18 @@
         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)){
         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{
         } else {
            serviceCharge = serviceCharge.add(periodServicePrice);
            paymentAmount = paymentAmount.add(periodElectricPrice).add(periodServicePrice);
         }
         if (!chargingOrderListVO.getOrderSource().equals(2)){
         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()){
               switch (temp.getType()) {
                  case 1:
                     jian = jian.add(temp.getChargingCapacity());
                     jianElectronic = jianElectronic.add(temp.getPeriodElectricPrice()).add(temp.getPeriodServicePrice());
@@ -2043,12 +2048,12 @@
                     break;
               }
            }
         }else{
         } 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()){
               switch (temp.getType()) {
                  case 1:
                     jian = jian.add(temp.getChargingCapacity());
                     jianElectronic = jianElectronic.add(temp.getPeriodElectricPrice()).add(multiply);
@@ -2073,7 +2078,7 @@
            }
         }
      }
      chargingOrderTimeVO.setChargingCapacity(electronic.setScale(2, BigDecimal.ROUND_HALF_EVEN));
      chargingOrderTimeVO.setPaymentAmount(paymentAmount.setScale(2, BigDecimal.ROUND_HALF_EVEN));
      chargingOrderTimeVO.setElectrovalence(electrovalence.setScale(2, BigDecimal.ROUND_HALF_EVEN));
@@ -2084,143 +2089,141 @@
      BigDecimal add1 = jianService.add(fengService).add(pingService).add(guService);
      // 计算尖峰平谷充电量占比
      BigDecimal add2 = jian.add(feng).add(ping).add(gu);
      if (add.compareTo(new BigDecimal("0"))!=0){
         chargingOrderTimeVO.setCapacityProportion(jian+"度/"+feng+"度/"+ping+"度/"+gu+"度-"
               +jian.divide(add2,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
               +feng.divide(add2,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
               +ping.divide(add2,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
               +gu.divide(add2,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%");
         chargingOrderTimeVO.setServiceProportion(jianService+"元/"+fengService+"元/"+pingService+"元/"+guService+"元-"
               +jianService.divide(add1,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
               +fengService.divide(add1,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
               +pingService.divide(add1,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
               +guService.divide(add1,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%");
         chargingOrderTimeVO.setElectronicProportion(jianElectronic+"元/"+fengElectronic+"元/"+pingElectronic+"元/"+guElectronic+"元-"
               +jianElectronic.divide(add,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
               +fengElectronic.divide(add,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
               +pingElectronic.divide(add,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
               +guElectronic.divide(add,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%");
      }else{
         chargingOrderTimeVO.setCapacityProportion(jianElectronic+"度/"+fengElectronic+"度/"+pingElectronic+"度/"+guElectronic+"度-"
               +"0"+"%/"
               +"0"+"%/"
               +"0"+"%/"
               +"0"+"%");
         chargingOrderTimeVO.setServiceProportion(jianService+"元/"+fengService+"元/"+pingService+"元/"+guService+"元-"
               +"0"+"%/"
               +"0"+"%/"
               +"0"+"%/"
               +"0"+"%");
         chargingOrderTimeVO.setElectronicProportion(jian+"元/"+feng+"元/"+ping+"元/"+gu+"元-"
               +"0"+"%/"
               +"0"+"%/"
               +"0"+"%/"
               +"0"+"%");
      if (add.compareTo(new BigDecimal("0")) != 0) {
         chargingOrderTimeVO.setCapacityProportion(jian + "度/" + feng + "度/" + ping + "度/" + gu + "度-"
               + jian.divide(add2, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%/"
               + feng.divide(add2, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%/"
               + ping.divide(add2, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%/"
               + gu.divide(add2, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%");
         chargingOrderTimeVO.setServiceProportion(jianService + "元/" + fengService + "元/" + pingService + "元/" + guService + "元-"
               + jianService.divide(add1, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%/"
               + fengService.divide(add1, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%/"
               + pingService.divide(add1, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%/"
               + guService.divide(add1, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%");
         chargingOrderTimeVO.setElectronicProportion(jianElectronic + "元/" + fengElectronic + "元/" + pingElectronic + "元/" + guElectronic + "元-"
               + jianElectronic.divide(add, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%/"
               + fengElectronic.divide(add, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%/"
               + pingElectronic.divide(add, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%/"
               + guElectronic.divide(add, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%");
      } else {
         chargingOrderTimeVO.setCapacityProportion(jianElectronic + "度/" + fengElectronic + "度/" + pingElectronic + "度/" + guElectronic + "度-"
               + "0" + "%/"
               + "0" + "%/"
               + "0" + "%/"
               + "0" + "%");
         chargingOrderTimeVO.setServiceProportion(jianService + "元/" + fengService + "元/" + pingService + "元/" + guService + "元-"
               + "0" + "%/"
               + "0" + "%/"
               + "0" + "%/"
               + "0" + "%");
         chargingOrderTimeVO.setElectronicProportion(jian + "元/" + feng + "元/" + ping + "元/" + gu + "元-"
               + "0" + "%/"
               + "0" + "%/"
               + "0" + "%/"
               + "0" + "%");
      }
      pageInfo.setRecords(list);
      chargingOrderTimeVO.setList(pageInfo);
      return chargingOrderTimeVO;
   }
   
   @Override
   public ChargingOrderListInfoVO chargingInfo(String uid) {
      TChargingOrder chargingOrder= this.getById(uid);
      TChargingOrder chargingOrder = this.getById(uid);
      ChargingOrderListInfoVO chargingOrderListInfoVO = new ChargingOrderListInfoVO();
      chargingOrderListInfoVO.setStartTime(chargingOrder.getStartTime());
      chargingOrderListInfoVO.setEndTime(chargingOrder.getEndTime());
      chargingOrderListInfoVO.setStatus(chargingOrder.getStatus());
      BigDecimal bigDecimal = new BigDecimal("0.006");
      if (chargingOrder.getOrderAmount()!=null){
      if (chargingOrder.getOrderAmount() != null) {
         BigDecimal multiply = chargingOrder.getPaymentAmount().multiply(bigDecimal);
         chargingOrderListInfoVO.setCommissionAmount(multiply.setScale(2, BigDecimal.ROUND_HALF_UP));
      }
      chargingOrderListInfoVO.setElectrovalence(chargingOrder.getElectrovalence());
      chargingOrderListInfoVO.setServiceCharge(chargingOrder.getServiceCharge());
      if (chargingOrder.getElectrovalence()!=null && chargingOrder.getServiceCharge()!=null){
      if (chargingOrder.getElectrovalence() != null && chargingOrder.getServiceCharge() != null) {
         chargingOrderListInfoVO.setTotal(chargingOrder.getElectrovalence().add(chargingOrder.getServiceCharge()));
      }else{
      } else {
         chargingOrderListInfoVO.setTotal(new BigDecimal("0"));
      }
      if (chargingOrderListInfoVO.getTotal().compareTo(new BigDecimal("0"))>0){
         if (chargingOrder.getCouponDiscountAmount()!=null&& chargingOrder.getVipDiscountAmount()!=null&& chargingOrder.getSharingAmount()!=null&& chargingOrder.getCommissionAmount()!=null){
      if (chargingOrderListInfoVO.getTotal().compareTo(new BigDecimal("0")) > 0) {
         if (chargingOrder.getCouponDiscountAmount() != null && chargingOrder.getVipDiscountAmount() != null && chargingOrder.getSharingAmount() != null && chargingOrder.getCommissionAmount() != null) {
            chargingOrderListInfoVO.setRealTotal(chargingOrderListInfoVO.getTotal().subtract(chargingOrder.getCouponDiscountAmount()).subtract(chargingOrder.getVipDiscountAmount()).subtract(chargingOrder.getSharingAmount()).subtract(chargingOrder.getCommissionAmount()));
         }else{
         } else {
            chargingOrderListInfoVO.setRealTotal(chargingOrderListInfoVO.getTotal());
         }
      }else{
      } else {
         chargingOrderListInfoVO.setRealTotal(new BigDecimal("0"));
      }
      chargingOrderListInfoVO.setCode(chargingOrder.getCode());
      List<Site> data = siteClient.getSiteByIds(Arrays.asList(chargingOrder.getSiteId())).getData();
      if (!data.isEmpty()){
      if (!data.isEmpty()) {
         chargingOrderListInfoVO.setSiteName(data.get(0).getName());
         chargingOrderListInfoVO.setSiteAddress(data.get(0).getAddress());
      }
      if (chargingOrder.getChargingGunId()!=null){
      if (chargingOrder.getChargingGunId() != null) {
         TChargingGun data1 = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
         if (data1!=null){
         if (data1 != null) {
            TChargingPile data2 = chargingPileClient.getChargingPileById(data1.getChargingPileId()).getData();
            if (data2!=null){
            if (data2 != null) {
               chargingOrderListInfoVO.setGunCode(data1.getCode());
               chargingOrderListInfoVO.setTerminalName(data2.getName()+data1.getName());
               chargingOrderListInfoVO.setTerminalName(data2.getName() + data1.getName());
            }
         }
      }
      chargingOrderListInfoVO.setChargingCapacity(chargingOrder.getChargingCapacity());
      chargingOrderListInfoVO.setEndMode(chargingOrder.getEndMode());
      // 获取开始SOC 结束soc
      if (chargingOrder.getCode()!=null){
      if (chargingOrder.getCode() != null) {
         List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrder.getCode());
         if (data6!=null){
         if (data6 != null) {
            for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data6) {
               if (uploadRealTimeMonitoringData.getOutput_current()!=null&&
                     uploadRealTimeMonitoringData.getOutput_voltage()!=null){
               if (uploadRealTimeMonitoringData.getOutput_current() != null &&
                     uploadRealTimeMonitoringData.getOutput_voltage() != null) {
                  uploadRealTimeMonitoringData.setPower(uploadRealTimeMonitoringData.getOutput_voltage()
                        .multiply(uploadRealTimeMonitoringData.getOutput_current()).divide(new BigDecimal(1000),2, BigDecimal.ROUND_HALF_UP));
                        .multiply(uploadRealTimeMonitoringData.getOutput_current()).divide(new BigDecimal(1000), 2, BigDecimal.ROUND_HALF_UP));
               }
            }
            if (!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();
                     }
            if (!data6.isEmpty()) {
               int min = 100;
               int max = 0;
               for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data6) {
                  if (uploadRealTimeMonitoringData.getSoc() > max) {
                     max = uploadRealTimeMonitoringData.getSoc();
                  }
               chargingOrderListInfoVO.setEndSoc(max+"");
               chargingOrderListInfoVO.setStartSoc(min+"");
                  if (uploadRealTimeMonitoringData.getSoc() != 0 && uploadRealTimeMonitoringData.getSoc() < min) {
                     min = uploadRealTimeMonitoringData.getSoc();
                  }
               }
               chargingOrderListInfoVO.setEndSoc(max + "");
               chargingOrderListInfoVO.setStartSoc(min + "");
               SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
               for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data6) {
                  uploadRealTimeMonitoringData.setCreateTime(simpleDateFormat.format(uploadRealTimeMonitoringData.getCreate_time()));
               }
            }
         }
         chargingOrderListInfoVO.setList(data6);
      }
      if (chargingOrderListInfoVO.getStartTime()!=null && chargingOrderListInfoVO.getEndTime()!=null){
      if (chargingOrderListInfoVO.getStartTime() != null && chargingOrderListInfoVO.getEndTime() != null) {
         LocalDateTime startTime = chargingOrderListInfoVO.getStartTime();
         LocalDateTime endTime = chargingOrderListInfoVO.getEndTime();
         // 计算时间差 单位秒
         long between = ChronoUnit.SECONDS.between(startTime, endTime);
         chargingOrderListInfoVO.setChargingSecond(between+"");
         chargingOrderListInfoVO.setChargingSecond(between + "");
      }
      if (chargingOrder.getAppUserCarId()!=null){
      if (chargingOrder.getAppUserCarId() != null) {
         List<TAppUserCar> data3 = appUserCarClient.getCarByIds(Collections.singletonList(chargingOrder.getAppUserCarId())).getData();
         if (data3!=null && !data3.isEmpty()) {
         if (data3 != null && !data3.isEmpty()) {
            chargingOrderListInfoVO.setLicensePlate(data3.get(0).getLicensePlate());
         }
      }else{
      } else {
         chargingOrderListInfoVO.setLicensePlate(chargingOrder.getPlateNum());
      }
      chargingOrderListInfoVO.setStartTime(chargingOrder.getStartTime());
@@ -2229,11 +2232,11 @@
      chargingOrderListInfoVO.setUid(chargingOrder.getId().toString());
      chargingOrderListInfoVO.setCouponDiscountAmount(chargingOrder.getCouponDiscountAmount());
      chargingOrderListInfoVO.setVipDiscountAmount(chargingOrder.getVipDiscountAmount());
      if (chargingOrder.getOrderSource().equals(2)){
      if (chargingOrder.getOrderSource().equals(2)) {
         chargingOrderListInfoVO.setSharingAmount(chargingOrder.getServiceCharge().multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_HALF_UP));
      }else{
      } else {
         chargingOrderListInfoVO.setSharingAmount(chargingOrder.getSharingAmount());
      }
      // 查询费用明细列表
      List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.lambdaQuery()
@@ -2242,15 +2245,16 @@
      chargingOrderListInfoVO.setList1(list);
      return chargingOrderListInfoVO;
   }
   /**
    * 处理充电订单实时监控数据相关的业务逻辑
    *
    * @param query
    */
   @Override
   public void chargeMonitoring(UploadRealTimeMonitoringDataQuery query) {
      if(com.ruoyi.common.core.utils.StringUtils.isNotEmpty(query.getTransaction_serial_number())){
      if (com.ruoyi.common.core.utils.StringUtils.isNotEmpty(query.getTransaction_serial_number())) {
         //获取当前的计费策略
         TChargingOrder chargingOrder1 = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, query.getTransaction_serial_number()));
         BigDecimal residualAmount = chargingOrder1.getRechargeAmount().add(chargingOrder1.getVipDiscountAmount()).subtract(query.getPaid_amount());
@@ -2258,7 +2262,7 @@
         chargingOrder.setId(chargingOrder1.getId());
         chargingOrder.setAppUserId(chargingOrder1.getAppUserId());
         chargingOrder.setResidualAmount(residualAmount);
         if(query.getOutput_current().compareTo(BigDecimal.ZERO) != 0){
         if (query.getOutput_current().compareTo(BigDecimal.ZERO) != 0) {
            BigDecimal divide = (query.getOutput_current().multiply(query.getOutput_voltage())).divide(new BigDecimal(1000));
            chargingOrder.setChargingPower(divide);
            chargingOrder.setCurrent(query.getOutput_current());
@@ -2277,10 +2281,11 @@
         this.updateById(chargingOrder);
      }
   }
   /**
    * 自动结束充电后的处理逻辑
    *
    * @param orderCode
    */
   @Override
@@ -2292,9 +2297,10 @@
      chargingOrder.setEndMode(endMode);
      this.updateById(chargingOrder);
   }
   /**
    * 异常结束充电处理逻辑
    *
    * @param orderCode
    */
   @Override
@@ -2305,6 +2311,7 @@
   
   /**
    * 停止充电返回账单后计算费用
    *
    * @param vo
    */
   @Override
@@ -2318,16 +2325,16 @@
         lock.unlock();
         return R.ok();
      }
      if(!tryLock){
      if (!tryLock) {
         return R.ok();
      }
      try {
         TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, vo.getTransaction_serial_number()));
         if(null == chargingOrder){
         if (null == chargingOrder) {
            return R.ok();
         }
         Integer status = chargingOrder.getStatus();
         if(status == 5){
         if (status == 5) {
            return R.ok();
         }
         
@@ -2341,7 +2348,7 @@
         
         //获取订单的计费策略
         List<AccountingStrategyDetailOrder> accountingStrategyDetailOrderList = accountingStrategyDetailOrderClient.getAllAccountingStrategyDetailOrder(chargingOrder.getId()).getData();
         if(accountingStrategyDetailOrderList.isEmpty()){
         if (accountingStrategyDetailOrderList.isEmpty()) {
            return R.fail("计费策略为空,无法计算费用");
         }
         accountingStrategyDetailOrderList.get(accountingStrategyDetailOrderList.size() - 1).setEndTime("23:59");
@@ -2350,7 +2357,7 @@
         SimpleDateFormat sdfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         List<AccountingStrategyDetailOrderVo> lists = new ArrayList<>();
         //跨天
         if(!vo.getStart_time().split(" ")[0].equals(vo.getEnd_time().split(" ")[0])){
         if (!vo.getStart_time().split(" ")[0].equals(vo.getEnd_time().split(" ")[0])) {
            //当天的
            //开始通过计费策略遍历解析每个时段的费用明细
            String start_time = vo.getStart_time();
@@ -2365,12 +2372,12 @@
            for (int i = accountingStrategyDetailOrderList.size(); i > 0; i--) {
               AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i - 1);
               long time = sdfs.parse(start_time.split(" ")[0] + " " + strategyDetail.getEndTime() + ":00").getTime();
               if(time < start){
               if (time < start) {
                  break;
               }
               //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
               Object invoke = null;
               switch (strategyDetail.getType()){
               switch (strategyDetail.getType()) {
                  case 1:
                     //充电度数
                     invoke = clazz.getMethod("getSpike_charge" + (i)).invoke(vo);
@@ -2388,7 +2395,7 @@
                     invoke = clazz.getMethod("getValley_charge" + (i)).invoke(vo);
                     break;
               }
               if(null == invoke || Double.valueOf(invoke.toString()) == 0){
               if (null == invoke || Double.valueOf(invoke.toString()) == 0) {
                  continue;
               }
               BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
@@ -2403,12 +2410,12 @@
            for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) {
               AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i);
               long time = sdfs.parse(end_time.split(" ")[0] + " " + strategyDetail.getStartTime() + ":00").getTime();
               if(time > end){
               if (time > end) {
                  break;
               }
               //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
               Object invoke = null;
               switch (strategyDetail.getType()){
               switch (strategyDetail.getType()) {
                  case 1:
                     //充电度数
                     invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo);
@@ -2426,7 +2433,7 @@
                     invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo);
                     break;
               }
               if(null == invoke || Double.valueOf(invoke.toString()) == 0){
               if (null == invoke || Double.valueOf(invoke.toString()) == 0) {
                  continue;
               }
               BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
@@ -2435,13 +2442,13 @@
               vo1.setChargingCapacity(sharp_peak_charge);
               lists.add(vo1);
            }
         }else{
         } else {
            for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) {
               Class<? extends TransactionRecordMessageVO> clazz = vo.getClass();
               AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i);
               //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
               Object invoke = null;
               switch (strategyDetail.getType()){
               switch (strategyDetail.getType()) {
                  case 1:
                     //充电度数
                     invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo);
@@ -2459,7 +2466,7 @@
                     invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo);
                     break;
               }
               if(null == invoke || Double.valueOf(invoke.toString()) == 0){
               if (null == invoke || Double.valueOf(invoke.toString()) == 0) {
                  continue;
               }
               BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
@@ -2481,16 +2488,16 @@
            chargingOrderAccountingStrategy.setElectrovalence(strategyDetail.getElectrovalence());
            chargingOrderAccountingStrategy.setServiceCharge(strategyDetail.getServiceCharge());
            chargingOrderAccountingStrategy.setCostServiceCharge(strategyDetail.getCostServiceCharge());
            if(i == 0){
            if (i == 0) {
               String time = vo.getStart_time().split(" ")[1];
               chargingOrderAccountingStrategy.setStartTime(time.substring(0, time.lastIndexOf(":")));
            }else{
            } else {
               chargingOrderAccountingStrategy.setStartTime(strategyDetail.getStartTime());
            }
            if(i == lists.size() - 1){
            if (i == lists.size() - 1) {
               String time = vo.getEnd_time().split(" ")[1];
               chargingOrderAccountingStrategy.setEndTime(time.substring(0, time.lastIndexOf(":")));
            }else{
            } else {
               chargingOrderAccountingStrategy.setEndTime(strategyDetail.getEndTime());
            }
            
@@ -2500,7 +2507,7 @@
            BigDecimal serviceCharge = originalServicePrice;
            BigDecimal vipDiscountAmount = BigDecimal.ZERO;
            //计算优惠金额
            if(null != chargingOrder.getVipDiscount()){
            if (null != chargingOrder.getVipDiscount()) {
               //0.58折
               vipDiscountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(chargingOrder.getVipDiscount()));
               serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount());
@@ -2536,13 +2543,13 @@
         order.setId(chargingOrder.getId());
         order.setAppUserId(chargingOrder.getAppUserId());
         UploadRealTimeMonitoringData uploadRealTimeMonitoringData = uploadRealTimeMonitoringDataService.getLastDataById(chargingOrder.getCode());
         if(null != uploadRealTimeMonitoringData && null == chargingOrder.getEndMode()){
         if (null != uploadRealTimeMonitoringData && null == chargingOrder.getEndMode()) {
            Integer soc = uploadRealTimeMonitoringData.getSoc();
            if(soc >= 98){
            if (soc >= 98) {
               order.setEndMode(2);
            }else if(chargingOrder.getResidualAmount().compareTo(new BigDecimal(1)) <= 0){
            } else if (chargingOrder.getResidualAmount().compareTo(new BigDecimal(1)) <= 0) {
               order.setEndMode(3);
            }else{
            } else {
               order.setEndMode(0);
            }
         }
@@ -2555,54 +2562,54 @@
         order.setChargingCapacity(vo.getTotal_electricity());
         order.setElectricity(vo.getTotal_electricity());
         order.setVipDiscountAmount(vipDiscountAmount_total);
         if(vipDiscountAmount_total.compareTo(BigDecimal.ZERO) == 0){
         if (vipDiscountAmount_total.compareTo(BigDecimal.ZERO) == 0) {
            order.setVipDiscount(BigDecimal.valueOf(1));
         }
         
         //计算优惠券
         BigDecimal couponDiscount = BigDecimal.ZERO;
         if(null != chargingOrder.getAppCouponId()){
         if (null != chargingOrder.getAppCouponId()) {
            //判断实际充电金额是否满足优惠券使用条件,如果不满足则不适用优惠券。
            TAppCoupon appCoupon = appCouponClient.getAppCouponById(chargingOrder.getAppCouponId()).getData();
            String couponJson = appCoupon.getCouponJson();
            TCoupon tCoupon = JSON.parseObject(couponJson, TCoupon.class);
            Integer preferentialMode = tCoupon.getPreferentialMode();
            if(1 == preferentialMode){
            if (1 == preferentialMode) {
               //满减
               if(payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0){
               if (payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0) {
                  BigDecimal couponDiscountAmount = tCoupon.getDiscountAmount();
                  //如果优惠金额大于服务费金额,以服务费作为最大限制
                  if(serviceCharge_total.compareTo(couponDiscountAmount) < 0){
                  if (serviceCharge_total.compareTo(couponDiscountAmount) < 0) {
                     couponDiscount = serviceCharge_total;
                     serviceCharge_total = BigDecimal.ZERO;
                  }else{
                  } else {
                     couponDiscount = couponDiscountAmount;
                  }
                  appCoupon.setStatus(2);
                  appCouponClient.updateAppCoupon(appCoupon);
               }else{
               } else {
                  order.setAppCouponId(null);
                  order.setCouponDiscountAmount(BigDecimal.ZERO);
                  appCouponClient.refund(chargingOrder.getAppCouponId().toString());
               }
            }
            if(2 == preferentialMode){
            if (2 == preferentialMode) {
               //抵扣
               if(payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0){
               if (payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0) {
                  //折扣金额
                  BigDecimal divide = payAmount.multiply(new BigDecimal(10).subtract(tCoupon.getDiscount())).divide(new BigDecimal(10));
                  divide = divide.compareTo(tCoupon.getMaximumDiscountAmount()) > 0 ? tCoupon.getMaximumDiscountAmount() : divide;
                  //如果优惠金额大于服务费金额,以服务费作为最大限制
                  if(serviceCharge_total.compareTo(divide) < 0){
                  if (serviceCharge_total.compareTo(divide) < 0) {
                     couponDiscount = serviceCharge_total;
                     serviceCharge_total = BigDecimal.ZERO;
                  }else{
                  } else {
                     couponDiscount = divide;
                  }
                  
                  appCoupon.setStatus(2);
                  appCouponClient.updateAppCoupon(appCoupon);
               }else{
               } else {
                  order.setAppCouponId(null);
                  order.setCouponDiscountAmount(BigDecimal.ZERO);
                  appCouponClient.refund(chargingOrder.getAppCouponId().toString());
@@ -2615,7 +2622,7 @@
         refundAmount = refundAmount.add(couponDiscount);
         //实际支付金额-优惠券
         payAmount = payAmount.subtract(couponDiscount);
         if(serviceCharge_total.compareTo(BigDecimal.ZERO) > 0){
         if (serviceCharge_total.compareTo(BigDecimal.ZERO) > 0) {
            serviceCharge_total = serviceCharge_total.subtract(couponDiscount);
         }
         order.setCouponDiscountAmount(couponDiscount.setScale(2, RoundingMode.HALF_EVEN));
@@ -2627,7 +2634,7 @@
         chargingOrder = this.getById(order.getId());
         
         //推送三方平台
         if(2 == chargingOrder.getOrderSource()){
         if (2 == chargingOrder.getOrderSource()) {
            TChargingOrder finalChargingOrder = chargingOrder;
            new Thread(new Runnable() {
               @Override
@@ -2642,7 +2649,7 @@
         
         //开始将优惠券优惠的金额添加到明细中
         BigDecimal couponDiscountAmount = order.getCouponDiscountAmount();
         if(null != couponDiscountAmount && couponDiscountAmount.compareTo(BigDecimal.ZERO) > 0){
         if (null != couponDiscountAmount && couponDiscountAmount.compareTo(BigDecimal.ZERO) > 0) {
            List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, order.getId()));
            BigDecimal reduce = list.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
            for (TChargingOrderAccountingStrategy chargingOrderAccountingStrategy : list) {
@@ -2662,27 +2669,27 @@
         chargingGun.setChargingPower(BigDecimal.ZERO);
         chargingGunClient.updateChargingGunById(chargingGun);
         //推送状态给三方平台
         if(2 == chargingOrder.getOrderSource()){
         if (2 == chargingOrder.getOrderSource()) {
            tcecClient.pushChargingGunStatus(chargingGun.getFullNumber(), chargingGun.getStatus());
         }
         
         //添加积分
         if(1 == chargingOrder.getOrderSource()){
         if (1 == chargingOrder.getOrderSource()) {
            TIntegralRule integralRule = integralRuleClient.getSet().getData();
            if(null != integralRule){
            if (null != integralRule) {
               TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
               Integer num1 = JSON.parseObject(integralRule.getChargeCredit()).getInteger("num1");
               Integer integral = chargingOrder.getServiceCharge().intValue() * num1;
               if(null != appUser.getVipId()){
               if (null != appUser.getVipId()) {
                  TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
                  Integer doubleIntegration = vip.getDoubleIntegration();
                  //双倍积分
                  if(1 == doubleIntegration){
                  if (1 == doubleIntegration) {
                     integral *= 2;
                  }
               }
               
               if(integral > 0){
               if (integral > 0) {
                  TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange();
                  appUserIntegralChange.setAppUserId(appUser.getId());
                  appUserIntegralChange.setChangeType(2);
@@ -2704,7 +2711,7 @@
            
            //开始构建退款费用
            refundAmount = refundAmount.setScale(2, RoundingMode.HALF_EVEN);
            if(refundAmount.compareTo(BigDecimal.ZERO) > 0){
            if (refundAmount.compareTo(BigDecimal.ZERO) > 0) {
               Integer rechargePaymentType = chargingOrder.getRechargePaymentType();
               //构建退款明细
               TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
@@ -2722,7 +2729,7 @@
               chargingOrderRefund.setRefundRemark("实际充电消费金额:" + chargingOrder.getPaymentAmount());
               chargingOrderRefund.setRefundTotalAmount(refundAmount);
               chargingOrderRefund.setPayAmount(rechargeAmount);
               if(1 == rechargePaymentType){
               if (1 == rechargePaymentType) {
                  WxPaymentRefundModel model = new WxPaymentRefundModel();
                  model.setOut_trade_no(chargingOrder.getCode());
                  model.setOut_refund_no(chargingOrderRefund.getRefundCode());
@@ -2734,7 +2741,7 @@
                  amount.setCurrency("CNY");
                  model.setAmount(amount);
                  R<Map<String, Object>> result = wxPaymentClient.refundOrderR(model);
                  if(200 == result.getCode()){
                  if (200 == result.getCode()) {
                     chargingOrderRefundService.save(chargingOrderRefund);
                     //手续费
                     Map<String, Object> amount1 = (Map<String, Object>) result.getData().get("amount");
@@ -2744,26 +2751,26 @@
                     chargingOrderRefundService.updateById(chargingOrderRefund);
                  }
               }
               if(2 == rechargePaymentType){
               if (2 == rechargePaymentType) {
                  RefundReq dto = new RefundReq();
                  dto.setOutTradeNo(chargingOrder.getCode());
                  dto.setOutRequestNo(chargingOrderRefund.getRefundCode());
                  dto.setRefundAmount(refundAmount.toString());
                  dto.setRefundReason("充电完成退款");
                  RefundResp resp = aliPaymentClient.refund(dto).getData();
                  if(null != resp){
                  if (null != resp) {
                     chargingOrderRefundService.save(chargingOrderRefund);
                     this.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
                  }
               }
               if(3 == rechargePaymentType){
               if (3 == rechargePaymentType) {
                  RefundReq dto = new RefundReq();
                  dto.setOutTradeNo(chargingOrder.getRechargeSerialNumber());
                  dto.setOutRequestNo(chargingOrderRefund.getRefundCode());
                  dto.setRefundAmount(refundAmount.toString());
                  dto.setRefundReason("充电完成退款");
                  RefundResp resp = h5AliPaymentClient.refund(dto).getData();
                  if(null != resp && "10000".equals(resp.getCode())){
                  if (null != resp && "10000".equals(resp.getCode())) {
                     chargingOrderRefundService.save(chargingOrderRefund);
                     this.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
                  }
@@ -2782,11 +2789,11 @@
         if (!chargingOrder.getOrderSource().equals(2)) {
            serviceMoney = serviceMoney.add(service_reduce);
            paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce);
         }else{
         } else {
            serviceMoney = serviceMoney.add(service_reduce.multiply(new BigDecimal("0.8")));
            paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")));
         }
         if (chargingOrder.getStartTime()!=null && chargingOrder.getEndTime()!=null){
         if (chargingOrder.getStartTime() != null && chargingOrder.getEndTime() != null) {
            LocalDateTime startTime = chargingOrder.getStartTime();
            LocalDateTime endTime = chargingOrder.getEndTime();
            // 计算时间差 单位秒
@@ -2800,97 +2807,95 @@
         summaryData.setElectricPrice(electronic_reduce.setScale(2, BigDecimal.ROUND_HALF_EVEN));
         summaryData.setServicePrice(serviceMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
         chargingOrderSummaryDataService.save(summaryData);
      }catch (Exception e) {
      } catch (Exception e) {
         e.printStackTrace();
      }finally {
      } finally {
         lock.unlock();
      }
      return R.ok();
   }
   
   
   @Override
   public List<Map<String, Object>> getByDate(LocalDate start,LocalDate end,List<Integer> siteIds) {
         LocalDateTime start1 = start.atStartOfDay();
         LocalDateTime end1 = end.atTime(LocalTime.MAX);
      return this.baseMapper.getByDate(start1,end1,siteIds);
   public List<Map<String, Object>> getByDate(LocalDate start, LocalDate end, List<Integer> siteIds) {
      LocalDateTime start1 = start.atStartOfDay();
      LocalDateTime end1 = end.atTime(LocalTime.MAX);
      return this.baseMapper.getByDate(start1, end1, siteIds);
   }
   @Override
   public List<Map<String, Object>> queryPower(List<Integer> siteIds) {
      return this.baseMapper.queryPower(siteIds);
   }
   @Override
   public Map<String, Object> qureryPowerLevel(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
      return this.baseMapper.queryPowerLevel(siteIds,statisticsQueryDto);
      return this.baseMapper.queryPowerLevel(siteIds, statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> usersDay(ChargingStatisticsQueryDto statisticsQueryDto) {
      return this.baseMapper.usersDay(statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> usersDay1() {
      return this.baseMapper.usersDay1();
   }
   @Override
   public List<Map<String, Object>> usersByQuery(ChargingStatisticsQueryDto statisticsQueryDto) {
      return this.baseMapper.usersByQuery(statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> usersByQuery1(ChargingStatisticsQueryDto statisticsQueryDto) {
      return this.baseMapper.usersByQuery1(statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> getUserTagCount() {
      return this.baseMapper.getUserTagCount();
   }
   @Override
   public List<Map<String, Object>> getVipCount() {
      return this.baseMapper.getVipCount();
   }
   @Override
   public List<Map<String, Object>> unitConsumption(ChargingStatisticsQueryDto statisticsQueryDto) {
      return this.baseMapper.unitConsumption(statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> carUserMethod() {
      return this.baseMapper.carUserMethod();
   }
   @Override
   public List<Map<String, Object>> carUserBrand() {
      return this.baseMapper.carUserBrand();
   }
   @Override
   public Map<String, Object> countLocalCar() {
      return this.baseMapper.countLocalCar();
   }
   @Override
   public Double getAver(List<Integer> siteIds) {
      return this.baseMapper.getAver(siteIds);
   }
   @Override
   public List<Map<String, Object>> getLevelEvaluate(List<Integer> siteIds) {
      return this.baseMapper.getLevelEvaluate(siteIds);
   }
   @Resource
   private TShoppingOrderService shoppingOrderService;
   @Resource
@@ -2901,160 +2906,158 @@
   private TVipOrderRefundService vipOrderRefundService;
   
   
   @Override
   public R payRefund(PayOrderRefundDto payOrderQueryDto) {
         if (payOrderQueryDto.getType()==1){
            TChargingOrder tChargingOrder = this.baseMapper.selectById(payOrderQueryDto.getOrderId());
            if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount())==-1){
               return R.fail("退款金额需小于支付金额");
            }
            if ((tChargingOrder.getRechargeAmount().subtract(tChargingOrder.getRefundAmount()).compareTo(payOrderQueryDto.getRefundAmount()))==0){
               tChargingOrder.setStatus(5);
            }
            TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
            chargingOrderRefund.setChargingOrderId(tChargingOrder.getId());
            chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount());
            chargingOrderRefund.setRefundStatus(1);
            chargingOrderRefund.setPayType(tChargingOrder.getRechargePaymentType());
            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.setRefundTitle("后台退款");
            chargingOrderRefund.setRefundContent("后台退款");
            chargingOrderRefund.setRefundReason("后台退款");
            chargingOrderRefund.setRefundRemark(payOrderQueryDto.getRemark());
            chargingOrderRefund.setRefundTotalAmount(tChargingOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount()));
            chargingOrderRefund.setPayAmount(tChargingOrder.getPaymentAmount());
            if(1 == tChargingOrder.getRechargePaymentType()){
               WxPaymentRefundModel model = new WxPaymentRefundModel();
               model.setOut_trade_no(tChargingOrder.getCode());
               model.setOut_refund_no(chargingOrderRefund.getRefundCode());
               model.setTransaction_id(tChargingOrder.getRechargeSerialNumber());
               model.setReason("取消订单");
               model.setNotify_url("/order/t-shopping-order/cancelShoppingOrderWxRefund");
               WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
               amount.setRefund(payOrderQueryDto.getRefundAmount().multiply(new BigDecimal(100)).intValue());
               amount.setTotal(tChargingOrder.getRechargeAmount().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()));
                  this.baseMapper.updateById(tChargingOrder);
                  chargingOrderRefundService.save(chargingOrderRefund);
                  //手续费
                  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);
                  chargingOrderRefundService.updateById(chargingOrderRefund);
               }
            }
            if(2 == tChargingOrder.getRechargePaymentType()){
               RefundReq dto = new RefundReq();
               dto.setOutTradeNo(tChargingOrder.getCode());
               dto.setOutRequestNo(tChargingOrder.getCode());
               dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString());
               dto.setRefundReason("取消订单");
               RefundResp resp = aliPaymentClient.refund(dto).getData();
               if(null != resp){
                  chargingOrderRefund.setRefundStatus(2);
                  chargingOrderRefund.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
                  this.baseMapper.updateById(tChargingOrder);
                  chargingOrderRefundService.save(chargingOrderRefund);
               }
            }
            if(3 == tChargingOrder.getRechargePaymentType()){
               RefundReq dto = new RefundReq();
               dto.setOutTradeNo(tChargingOrder.getRechargeSerialNumber());
               dto.setOutRequestNo(tChargingOrder.getCode());
               dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString());
               dto.setRefundReason("取消订单");
               RefundResp resp = h5AliPaymentClient.refund(dto).getData();
               if(null != resp && "10000".equals(resp.getCode())){
                  chargingOrderRefund.setRefundStatus(2);
                  chargingOrderRefund.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
                  this.baseMapper.updateById(tChargingOrder);
                  chargingOrderRefundService.save(chargingOrderRefund);
               }
      if (payOrderQueryDto.getType() == 1) {
         TChargingOrder tChargingOrder = this.baseMapper.selectById(payOrderQueryDto.getOrderId());
         if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount()) == -1) {
            return R.fail("退款金额需小于支付金额");
         }
         if ((tChargingOrder.getRechargeAmount().subtract(tChargingOrder.getRefundAmount()).compareTo(payOrderQueryDto.getRefundAmount())) == 0) {
            tChargingOrder.setStatus(5);
         }
         TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
         chargingOrderRefund.setChargingOrderId(tChargingOrder.getId());
         chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount());
         chargingOrderRefund.setRefundStatus(1);
         chargingOrderRefund.setPayType(tChargingOrder.getRechargePaymentType());
         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.setRefundTitle("后台退款");
         chargingOrderRefund.setRefundContent("后台退款");
         chargingOrderRefund.setRefundReason("后台退款");
         chargingOrderRefund.setRefundRemark(payOrderQueryDto.getRemark());
         chargingOrderRefund.setRefundTotalAmount(tChargingOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount()));
         chargingOrderRefund.setPayAmount(tChargingOrder.getPaymentAmount());
         if (1 == tChargingOrder.getRechargePaymentType()) {
            WxPaymentRefundModel model = new WxPaymentRefundModel();
            model.setOut_trade_no(tChargingOrder.getCode());
            model.setOut_refund_no(chargingOrderRefund.getRefundCode());
            model.setTransaction_id(tChargingOrder.getRechargeSerialNumber());
            model.setReason("取消订单");
            model.setNotify_url("/order/t-shopping-order/cancelShoppingOrderWxRefund");
            WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
            amount.setRefund(payOrderQueryDto.getRefundAmount().multiply(new BigDecimal(100)).intValue());
            amount.setTotal(tChargingOrder.getRechargeAmount().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()));
               this.baseMapper.updateById(tChargingOrder);
               chargingOrderRefundService.save(chargingOrderRefund);
               //手续费
               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);
               chargingOrderRefundService.updateById(chargingOrderRefund);
            }
         }
         if (payOrderQueryDto.getType()==2){
            TShoppingOrder tChargingOrder = shoppingOrderService.getById(payOrderQueryDto.getOrderId());
            if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount())==-1){
               return R.fail("退款金额需小于支付金额");
         if (2 == tChargingOrder.getRechargePaymentType()) {
            RefundReq dto = new RefundReq();
            dto.setOutTradeNo(tChargingOrder.getCode());
            dto.setOutRequestNo(tChargingOrder.getCode());
            dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString());
            dto.setRefundReason("取消订单");
            RefundResp resp = aliPaymentClient.refund(dto).getData();
            if (null != resp) {
               chargingOrderRefund.setRefundStatus(2);
               chargingOrderRefund.setRefundAmount((tChargingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
               this.baseMapper.updateById(tChargingOrder);
               chargingOrderRefundService.save(chargingOrderRefund);
            }
            if ((tChargingOrder.getPaymentAmount().subtract(tChargingOrder.getRefundAmount()).compareTo(payOrderQueryDto.getRefundAmount()))==0){
               tChargingOrder.setStatus(5);
         }
         if (3 == tChargingOrder.getRechargePaymentType()) {
            RefundReq dto = new RefundReq();
            dto.setOutTradeNo(tChargingOrder.getRechargeSerialNumber());
            dto.setOutRequestNo(tChargingOrder.getCode());
            dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString());
            dto.setRefundReason("取消订单");
            RefundResp resp = h5AliPaymentClient.refund(dto).getData();
            if (null != resp && "10000".equals(resp.getCode())) {
               chargingOrderRefund.setRefundStatus(2);
               chargingOrderRefund.setRefundAmount((tChargingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
               this.baseMapper.updateById(tChargingOrder);
               chargingOrderRefundService.save(chargingOrderRefund);
            }
            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());
            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());
            if(1 == tChargingOrder.getPaymentType()){
               WxPaymentRefundModel model = new WxPaymentRefundModel();
               model.setOut_trade_no(tChargingOrder.getCode());
               model.setOut_refund_no(chargingOrderRefund.getRefundCode());
               model.setTransaction_id(tChargingOrder.getSerialNumber());
               model.setReason("取消订单");
               model.setNotify_url("/order/t-shopping-order/cancelShoppingOrderWxRefund");
               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.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);
                  //手续费
                  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);
               }
         }
      }
      if (payOrderQueryDto.getType() == 2) {
         TShoppingOrder tChargingOrder = shoppingOrderService.getById(payOrderQueryDto.getOrderId());
         if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount()) == -1) {
            return R.fail("退款金额需小于支付金额");
         }
         if ((tChargingOrder.getPaymentAmount().subtract(tChargingOrder.getRefundAmount()).compareTo(payOrderQueryDto.getRefundAmount())) == 0) {
            tChargingOrder.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());
         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());
         if (1 == tChargingOrder.getPaymentType()) {
            WxPaymentRefundModel model = new WxPaymentRefundModel();
            model.setOut_trade_no(tChargingOrder.getCode());
            model.setOut_refund_no(chargingOrderRefund.getRefundCode());
            model.setTransaction_id(tChargingOrder.getSerialNumber());
            model.setReason("取消订单");
            model.setNotify_url("/order/t-shopping-order/cancelShoppingOrderWxRefund");
            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.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);
               //手续费
               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);
            }
            if(2 == tChargingOrder.getPaymentType()){
               RefundReq dto = new RefundReq();
               dto.setOutTradeNo(tChargingOrder.getCode());
               dto.setOutRequestNo(tChargingOrder.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);
               }
         }
         if (2 == tChargingOrder.getPaymentType()) {
            RefundReq dto = new RefundReq();
            dto.setOutTradeNo(tChargingOrder.getCode());
            dto.setOutRequestNo(tChargingOrder.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);
            }
         }
//            if(3 == tChargingOrder.getPaymentType()){
//               RefundReq dto = new RefundReq();
//               dto.setOutTradeNo(tChargingOrder.getCode());
@@ -3069,12 +3072,12 @@
//                  shoppingOrderRefundService.save(chargingOrderRefund);
//               }
//            }
         }
      if (payOrderQueryDto.getType()==3){
      }
      if (payOrderQueryDto.getType() == 3) {
         TVipOrder tChargingOrder = vipOrderService.getById(payOrderQueryDto.getOrderId());
         if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount())==-1){
         if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount()) == -1) {
            return R.fail("退款金额需小于支付金额");
         }
         TVipOrderRefund chargingOrderRefund = new TVipOrderRefund();
@@ -3092,8 +3095,8 @@
         chargingOrderRefund.setRefundRemark(payOrderQueryDto.getRemark());
         chargingOrderRefund.setRefundTotalAmount(tChargingOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount()));
         chargingOrderRefund.setPayAmount(tChargingOrder.getPaymentAmount());
         if(1 == tChargingOrder.getPaymentType()){
         if (1 == tChargingOrder.getPaymentType()) {
            WxPaymentRefundModel model = new WxPaymentRefundModel();
            model.setOut_trade_no(tChargingOrder.getCode());
            model.setOut_refund_no(chargingOrderRefund.getRefundCode());
@@ -3106,9 +3109,9 @@
            amount.setCurrency("CNY");
            model.setAmount(amount);
            R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model);
            if(200 == orderR.getCode()){
            if (200 == orderR.getCode()) {
               tChargingOrder.setRefundStatus(2);
               tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
               tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
               vipOrderService.updateById(tChargingOrder);
               vipOrderRefundService.save(chargingOrderRefund);
               //手续费
@@ -3119,17 +3122,17 @@
               vipOrderRefundService.updateById(chargingOrderRefund);
            }
         }
         if(2 == tChargingOrder.getPaymentType()){
         if (2 == tChargingOrder.getPaymentType()) {
            RefundReq dto = new RefundReq();
            dto.setOutTradeNo(tChargingOrder.getCode());
            dto.setOutRequestNo(tChargingOrder.getCode());
            dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString());
            dto.setRefundReason("取消订单");
            RefundResp resp = aliPaymentClient.refund(dto).getData();
            if(null != resp){
            if (null != resp) {
               tChargingOrder.setRefundStatus(2);
               tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
               tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
               vipOrderService.updateById(tChargingOrder);
               vipOrderRefundService.save(chargingOrderRefund);
            }
@@ -3151,10 +3154,11 @@
      }
      return R.ok();
   }
   /**
    * 根据车牌号和开始时间查询充电数据
    *
    * @param query
    * @return
    */
@@ -3165,19 +3169,19 @@
            .eq(TChargingOrder::getRechargePaymentStatus, 2).in(TChargingOrder::getStatus, Arrays.asList(4, 5)));
      return one;
   }
   @Override
   public TSettlementConfirm settlementAdd(SettlementConfirmAdd dto) {
      List<Site> data = siteClient.getSiteByIds(Arrays.asList(dto.getSiteId())).getData();
      List<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list();
      TSettlementConfirm tSettlementConfirm = new TSettlementConfirm();
      if (!data.isEmpty()){
      if (!data.isEmpty()) {
         tSettlementConfirm.setSiteName(data.get(0).getName());
         tSettlementConfirm.setPartnerId(data.get(0).getPartnerId());
         if (data.get(0).getPartnerId()!=null){
         if (data.get(0).getPartnerId() != null) {
            Partner data1 = siteClient.getPartnerR(data.get(0).getPartnerId()).getData();
            if (data1!=null){
            if (data1 != null) {
               tSettlementConfirm.setPartnerName(data1.getName());
               tSettlementConfirm.setPartnerId(data1.getId());
            }
@@ -3188,17 +3192,17 @@
      // 将这两个时间转化为localDateTime
      // 创建 DateTimeFormatter 对象,指定格式
      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
      // 将字符串解析为 LocalDateTime 对象
      LocalDateTime localDateTime = LocalDateTime.parse(startTime, formatter);
      LocalDateTime localDateTime1 = LocalDateTime.parse(endTime, formatter);
      tSettlementConfirm.setEndTime(localDateTime1);
      tSettlementConfirm.setStartTime(localDateTime);
      // 根据站点id和开始时间和结束时间和归属日期 查询充电订单列表
      QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
            .eq("site_id", dto.getSiteId());
      switch (dto.getType()){
      switch (dto.getType()) {
         case 1:
            eq.between("pay_time", localDateTime, localDateTime1);
            break;
@@ -3226,7 +3230,7 @@
      // 支付订单金额 需要减去退款金额
      BigDecimal paymentAmount = new BigDecimal("0");
      for (TChargingOrder tChargingOrder : tChargingOrders) {
         if(null == tChargingOrder.getStatus() || 5 != tChargingOrder.getStatus()){
         if (null == tChargingOrder.getStatus() || 5 != tChargingOrder.getStatus()) {
            continue;
         }
         List<TChargingOrderAccountingStrategy> list4 = list3.stream().filter(e -> e.getChargingOrderId().equals(tChargingOrder.getId())).collect(Collectors.toList());
@@ -3236,41 +3240,41 @@
         // 累加充电总度数
         chargingElectronic = chargingElectronic.add(chargingCapacity);
         // 累加分佣
         if (tChargingOrder.getOrderSource()==2) {
            sharingAmount = sharingAmount.add(service_reduce.multiply(new BigDecimal("0.2")).setScale(2,BigDecimal.ROUND_DOWN));
         if (tChargingOrder.getOrderSource() == 2) {
            sharingAmount = sharingAmount.add(service_reduce.multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_DOWN));
         }
         // 累加电费
         electrovalence = electrovalence.add(electronic_reduce);
         if (tChargingOrder.getPaymentAmount()!=null && tChargingOrder.getOrderSource()!=2){
         if (tChargingOrder.getPaymentAmount() != null && tChargingOrder.getOrderSource() != 2) {
            paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount());
         }
         if (tChargingOrder.getRechargeAmount()!=null){
         if (tChargingOrder.getRechargeAmount() != null) {
            orderCommission = orderCommission.add(tChargingOrder.getRechargeAmount().multiply(new BigDecimal("0.006"))
                  .setScale(2,BigDecimal.ROUND_DOWN));
                  .setScale(2, BigDecimal.ROUND_DOWN));
         }
         // 累加服务费
         if (tChargingOrder.getServiceCharge()!=null){
            if (tChargingOrder.getOrderSource()==2) {
               serviceCharge = serviceCharge.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2,BigDecimal.ROUND_DOWN));
         if (tChargingOrder.getServiceCharge() != null) {
            if (tChargingOrder.getOrderSource() == 2) {
               serviceCharge = serviceCharge.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2, BigDecimal.ROUND_DOWN));
               paymentAmount = paymentAmount.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")));
            }else{
            } else {
               serviceCharge = serviceCharge.add(service_reduce);
            }
         }
         // 累加会员折扣
         if (tChargingOrder.getVipDiscountAmount()!=null){
         if (tChargingOrder.getVipDiscountAmount() != null) {
            vipDiscount = vipDiscount.add(tChargingOrder.getVipDiscountAmount());
         }
         // 累加优惠券折扣
         if (tChargingOrder.getCouponDiscountAmount()!=null){
         if (tChargingOrder.getCouponDiscountAmount() != null) {
            couponDiscount = couponDiscount.add(tChargingOrder.getCouponDiscountAmount());
         }
      }
      // 三方交易手续费 三方收费*0.6%
      commissionAmount = sharingAmount.multiply(new BigDecimal("0.006"));
      tSettlementConfirm.setSharingAmount(sharingAmount.setScale(2, RoundingMode.HALF_DOWN));
@@ -3286,8 +3290,8 @@
      tSettlementConfirm.setVipDiscount(vipDiscount);
      tSettlementConfirm.setCouponDiscount(couponDiscount);
      tSettlementConfirm.setType(dto.getType());
      if (dto.getState() == 2){
      if (dto.getState() == 2) {
         tSettlementConfirm.setServiceMoney(dto.getServiceCharge().subtract(dto.getVenue()).subtract(dto.getClean())
               .subtract(dto.getMaintain()).multiply(dto.getServicePartner()));
         tSettlementConfirm.setSupplyElectronic(dto.getSupplyElectronic());
@@ -3296,7 +3300,7 @@
         tSettlementConfirm.setClean(dto.getClean());
         tSettlementConfirm.setLossElectronic(dto.getMeteringElectronic().subtract(dto.getChargingElectronic()));
         tSettlementConfirm.setMaintain(dto.getMaintain());
         tSettlementConfirm.setMeteringElectronic(dto.getMeteringElectronic());
         tSettlementConfirm.setProportionPartner(dto.getProportionPartner());
         tSettlementConfirm.setProportionMoney(dto.getProportionMoney());
@@ -3314,7 +3318,7 @@
         BigDecimal subtract2 = multiply.subtract(subtract1);
         tSettlementConfirm.setNewMoney(dto.getServiceCharge().subtract(dto.getVenue()).subtract(dto.getClean())
               .subtract(dto.getMaintain()).multiply(subtract9).subtract(subtract1));
         tSettlementConfirm.setTotalService(dto.getTotalService());
         tSettlementConfirm.setServiceRemark(dto.getServiceRemark());
         tSettlementConfirm.setDistribution(dto.getDistribution());
@@ -3328,18 +3332,18 @@
      }
      return tSettlementConfirm;
   }
   @Override
   public PageInfo<TSettlementConfirm> settlementList(SettlementListQuery dto) {
      String startTime = null;
      String endTime = null;
      if (StringUtils.hasLength(dto.getStartTime())){
      if (StringUtils.hasLength(dto.getStartTime())) {
         dto.setType(1);
         String[] split = dto.getStartTime().split(" - ");
         startTime = split[0];
         endTime = split[1];
      }
      if (StringUtils.hasLength(dto.getEndTime())){
      if (StringUtils.hasLength(dto.getEndTime())) {
         dto.setType(2);
         String[] split = dto.getEndTime().split(" - ");
         startTime = split[0];
@@ -3353,27 +3357,27 @@
      Integer roleType = sysUser.getRoleType();
      //如果没传siteId,获取当前登陆人所有的siteIds
      List<Integer> siteIds = new ArrayList<>();
      if (dto.getSiteIds()==null){
         if (userId != null){
      if (dto.getSiteIds() == null) {
         if (userId != null) {
            List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
            for (GetSiteListDTO datum : data) {
               siteIds.add(datum.getId());
            }
         }
      }else {
      } else {
         siteIds.add(dto.getSiteIds());
      }
      if (siteIds.isEmpty()){
      if (siteIds.isEmpty()) {
         siteIds.add(-1);
      }else{
         if (roleType == 2){
      } else {
         if (roleType == 2) {
            List<Integer> integers = new ArrayList<>();
            for (Integer siteId : siteIds) {
               // 校验有没有这个站点的权限
               List<Boolean> t1= partnerClient.getSettlementListMenu(sysUser.getObjectId(),siteId).getData();
               List<Boolean> t1 = partnerClient.getSettlementListMenu(sysUser.getObjectId(), siteId).getData();
               Boolean b = t1.get(2);
               if (b){
               if (b) {
                  integers.add(siteId);
               }
            }
@@ -3381,49 +3385,50 @@
         }
      }
      dto.setSiteIdss(siteIds);
      PageInfo<TSettlementConfirm> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
      List<TSettlementConfirm> list = tSettlementConfirmMapper.settlementList(pageInfo,dto);
      PageInfo<TSettlementConfirm> pageInfo = new PageInfo<>(dto.getPageCurr(), dto.getPageSize());
      List<TSettlementConfirm> list = tSettlementConfirmMapper.settlementList(pageInfo, dto);
      for (TSettlementConfirm tSettlementConfirm : list) {
         if (roleType==2){
         if (roleType == 2) {
            List<Boolean> data = partnerClient.getSettlementListMenu(sysUser.getObjectId(), tSettlementConfirm.getSiteId()).getData();
            tSettlementConfirm.setAuthDownLoad(data.get(0));
            tSettlementConfirm.setAuthDelete(data.get(1));
         }
         tSettlementConfirm.setUid(tSettlementConfirm.getId().toString());
         List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(tSettlementConfirm.getSiteId())).getData();
         if (!data1.isEmpty()){
         if (!data1.isEmpty()) {
            tSettlementConfirm.setSiteName(data1.get(0).getName());
            Partner data = siteClient.getPartnerR(data1.get(0).getPartnerId()).getData();
            if (data!=null){
            if (data != null) {
               tSettlementConfirm.setPartnerName(data.getName());
            }
         }
         String format = tSettlementConfirm.getStartTime().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));
         String format1 = tSettlementConfirm.getEndTime().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));
         tSettlementConfirm.setTime(format+"至"+format1);
         tSettlementConfirm.setTime(format + "至" + format1);
      }
      pageInfo.setRecords(list);
      return pageInfo;
   }
   @Autowired
   private TChargingOrderService chargingOrderService;
   @Override
   public SettlementTotalVO settlementTotal(String time) {
      Long userId = tokenService.getLoginUser().getUserid();
      //如果没传siteId,获取当前登陆人所有的siteIds
      List<Integer> siteIds = new ArrayList<>();
      if (userId != null){
            List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
            for (GetSiteListDTO datum : data) {
               siteIds.add(datum.getId());
            }
      if (userId != null) {
         List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
         for (GetSiteListDTO datum : data) {
            siteIds.add(datum.getId());
         }
      }
      if (siteIds.isEmpty()){
      if (siteIds.isEmpty()) {
         siteIds.add(-1);
      }
      List<Site> siteList = siteClient.getSiteAll().getData();
@@ -3431,14 +3436,14 @@
      List<TChargingOrder> totalOrder = chargingOrderService.list(new LambdaQueryWrapper<>(TChargingOrder.class)
            .eq(TChargingOrder::getRechargePaymentStatus, 2).eq(TChargingOrder::getStatus, 5));
      SettlementTotalVO res = new SettlementTotalVO();
      List<TSettlementConfirm> list1 = tSettlementConfirmMapper.settlementTotal(time,siteIds);
      List<TSettlementConfirm> list1 = tSettlementConfirmMapper.settlementTotal(time, siteIds);
      LocalDateTime parse = LocalDateTime.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
      // 减少一个月
      LocalDateTime minus = parse.minusMonths(1);
      List<TSettlementConfirm> list2 = tSettlementConfirmMapper.settlementTotal(time,siteIds);
      List<TSettlementConfirm> list2 = tSettlementConfirmMapper.settlementTotal(time, siteIds);
      // 合计
      List<TSettlementConfirm> total = new ArrayList<>();
      TSettlementConfirm tSettlementConfirm1 = new TSettlementConfirm();
      BigDecimal meteringElectronic = new BigDecimal("0");
      BigDecimal chargingElectronic = new BigDecimal("0");
@@ -3468,22 +3473,22 @@
      BigDecimal couponDiscount = new BigDecimal("0");
      tSettlementConfirm1.setElectronicRefund(0);
      // 上月成本合计
      BigDecimal beforeCost= new BigDecimal("0");
      BigDecimal beforeCost = new BigDecimal("0");
      // 上月利润合计
      BigDecimal beforeIncome= new BigDecimal("0");
      BigDecimal beforeIncome = new BigDecimal("0");
      int i = 1;
      for (TSettlementConfirm tSettlementConfirm : list1) {
         tSettlementConfirm.setXuhao(i);
         tSettlementConfirm.setMetering(tSettlementConfirm.getSupplyElectronic());
         Site site = siteList.stream().filter(e -> e.getId().equals(tSettlementConfirm.getSiteId())).findFirst().orElse(null);
         if (site!=null){
         if (site != null) {
            tSettlementConfirm.setSiteName(site.getName());
         }
         if (tSettlementConfirm.getMeteringElectronic()!=null){
         if (tSettlementConfirm.getMeteringElectronic() != null) {
            meteringElectronic = meteringElectronic.add(tSettlementConfirm.getMeteringElectronic());
            chargingElectronic = chargingElectronic.add(tSettlementConfirm.getChargingElectronic());
         }
         if (tSettlementConfirm.getLossElectronic()!=null){
         if (tSettlementConfirm.getLossElectronic() != null) {
            lossElectronic = lossElectronic.add(tSettlementConfirm.getLossElectronic());
         }
         income = income.add(tSettlementConfirm.getIncome());
@@ -3509,12 +3514,12 @@
         orderCommission = orderCommission.add(tSettlementConfirm.getOrderCommission());
         vipDiscount = vipDiscount.add(tSettlementConfirm.getVipDiscount());
         couponDiscount = couponDiscount.add(tSettlementConfirm.getCouponDiscount());
         // 查询结算确认单开始时间和结束时间的单子
         QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
               .eq("site_id", tSettlementConfirm.getSiteId())
               .eq("recharge_payment_status",2);
         switch (tSettlementConfirm.getType()){
               .eq("recharge_payment_status", 2);
         switch (tSettlementConfirm.getType()) {
            case 1:
               eq.between("start_time", tSettlementConfirm.getStartTime(), tSettlementConfirm.getEndTime());
               break;
@@ -3522,9 +3527,9 @@
               eq.between("end_time", tSettlementConfirm.getStartTime(), tSettlementConfirm.getEndTime());
               break;
         }
         List<TChargingOrder> tChargingOrders = totalOrder.stream().filter(e-> e.getPayTime()
         List<TChargingOrder> tChargingOrders = totalOrder.stream().filter(e -> e.getPayTime()
               .isBefore(tSettlementConfirm.getEndTime())
               && e.getPayTime().isAfter(tSettlementConfirm.getStartTime())&&e.getSiteId().equals(tSettlementConfirm.getSiteId())).collect(Collectors.toList());
               && e.getPayTime().isAfter(tSettlementConfirm.getStartTime()) && e.getSiteId().equals(tSettlementConfirm.getSiteId())).collect(Collectors.toList());
         // 充电总时长
         Long temp = 0L;
         for (TChargingOrder tChargingOrder : tChargingOrders) {
@@ -3532,7 +3537,7 @@
            LocalDateTime endTime = tChargingOrder.getEndTime();
            // 计算时间差 单位秒
            long between = ChronoUnit.SECONDS.between(startTime, endTime);
            temp+=between;
            temp += between;
         }
         List<TChargingPile> data = siteClient.getPileListBySiteId(tSettlementConfirm.getSiteId()).getData();
         // 计算充电桩的功率平均值
@@ -3540,17 +3545,17 @@
         for (TChargingPile datum : data) {
            bigDecimal = bigDecimal.add(datum.getRatedPower());
         }
         tSettlementConfirm.setIncome(tSettlementConfirm.getElectrovalence().add(tSettlementConfirm.getServiceCharge()));
         //利用率=充电量/(桩数量*功率*时间)
         List<TChargingPile> data2 = pileList.stream().filter(e -> e.getSiteId().equals(tSettlementConfirm.getSiteId())).collect(Collectors.toList());
         BigDecimal bigDecimal2 = new BigDecimal("0");
         if (data2!=null && (!data2.isEmpty())){
         if (data2 != null && (!data2.isEmpty())) {
            for (TChargingPile tChargingPile : data2) {
               bigDecimal2 = bigDecimal2.add(tChargingPile.getRatedPower());
            }
            BigDecimal bigDecimal1 = new BigDecimal(data2.size()+"");
            BigDecimal bigDecimal1 = new BigDecimal(data2.size() + "");
            // 平均功率
            BigDecimal divide = bigDecimal2.divide(bigDecimal1, 2, RoundingMode.HALF_DOWN);
            // 充电量
@@ -3559,27 +3564,27 @@
            BigDecimal bigDecimal3 = new BigDecimal(data2.size());
            BigDecimal multiply = chargingElectronic1.multiply(new BigDecimal("24"));
            BigDecimal multiply1 = bigDecimal3.multiply(divide).multiply(new BigDecimal(temp));
            tSettlementConfirm.setRate(chargingElectronic1.divide(multiply1,2,RoundingMode.HALF_DOWN)+"");
         }else{
            tSettlementConfirm.setRate(chargingElectronic1.divide(multiply1, 2, RoundingMode.HALF_DOWN) + "");
         } else {
            tSettlementConfirm.setRate("");
         }
         for (TSettlementConfirm settlementConfirm : list2) {
            int value = parse.getMonth().getValue();
            settlementConfirm.setMonth(value);
            settlementConfirm.setIncome(settlementConfirm.getElectrovalence().add(settlementConfirm.getServiceCharge()));
            tSettlementConfirm.setMetering(tSettlementConfirm.getSupplyElectronic());
            if (tSettlementConfirm.getSiteId().equals(settlementConfirm.getSiteId())){
            if (tSettlementConfirm.getSiteId().equals(settlementConfirm.getSiteId())) {
               // 电站相同比较收入涨幅跌幅
               if (tSettlementConfirm.getIncome().compareTo(BigDecimal.ZERO)>0){
                  BigDecimal subtract = tSettlementConfirm.getIncome().subtract(settlementConfirm.getIncome()).divide(tSettlementConfirm.getIncome(),2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
                  tSettlementConfirm.setIncomePercentage(subtract+"%");
               }else {
                  tSettlementConfirm.setIncomePercentage("100"+"%");
               if (tSettlementConfirm.getIncome().compareTo(BigDecimal.ZERO) > 0) {
                  BigDecimal subtract = tSettlementConfirm.getIncome().subtract(settlementConfirm.getIncome()).divide(tSettlementConfirm.getIncome(), 2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
                  tSettlementConfirm.setIncomePercentage(subtract + "%");
               } else {
                  tSettlementConfirm.setIncomePercentage("100" + "%");
               }
               // 比较总利润 收入合计-成本合计
               BigDecimal subtract1 = tSettlementConfirm.getIncome().subtract(tSettlementConfirm.getCost());
               BigDecimal subtract2 = settlementConfirm.getIncome().subtract(settlementConfirm.getCost());
@@ -3587,7 +3592,8 @@
                     .divide(subtract2, 2, RoundingMode.HALF_DOWN)
                     .multiply(new BigDecimal("100"))
                     .setScale(2, RoundingMode.HALF_DOWN);
               tSettlementConfirm.setTotalPercentage(bigDecimal1+"%");            }
               tSettlementConfirm.setTotalPercentage(bigDecimal1 + "%");
            }
            beforeCost = beforeCost.add(settlementConfirm.getCost());
            beforeIncome = beforeIncome.add(settlementConfirm.getIncome());
         }
@@ -3622,21 +3628,21 @@
      tSettlementConfirm.setVipDiscount(vipDiscount);
      tSettlementConfirm.setCouponDiscount(couponDiscount);
      // 本月
      if (beforeIncome.compareTo(new BigDecimal("0")) == 0){
         tSettlementConfirm.setIncomePercentage(0+"%");
         tSettlementConfirm.setIncomePercentage(0+"%");
      }else{
         BigDecimal subtract = income.subtract(beforeIncome).divide(beforeIncome,2,RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
         tSettlementConfirm.setIncomePercentage(subtract+"%");
         tSettlementConfirm.setIncomePercentage(subtract+"%");
      if (beforeIncome.compareTo(new BigDecimal("0")) == 0) {
         tSettlementConfirm.setIncomePercentage(0 + "%");
         tSettlementConfirm.setIncomePercentage(0 + "%");
      } else {
         BigDecimal subtract = income.subtract(beforeIncome).divide(beforeIncome, 2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
         tSettlementConfirm.setIncomePercentage(subtract + "%");
         tSettlementConfirm.setIncomePercentage(subtract + "%");
      }
      // 比较总利润 收入合计-成本合计
      BigDecimal subtract1 = income.subtract(cost);
      BigDecimal subtract2 = beforeIncome.subtract(beforeCost);
      if (subtract2.compareTo(new BigDecimal("0")) == 0){
         tSettlementConfirm.setTotalPercentage(0+"%");
      }else{
         tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2,2, RoundingMode.HALF_DOWN).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"))+"%");
      if (subtract2.compareTo(new BigDecimal("0")) == 0) {
         tSettlementConfirm.setTotalPercentage(0 + "%");
      } else {
         tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2, 2, RoundingMode.HALF_DOWN).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100")) + "%");
      }
      tSettlementConfirm.setElectronicRefund(0);
      // 查询上次汇报数据 进行比对涨幅跌幅
@@ -3645,17 +3651,18 @@
      res.setList2(total);
      return res;
   }
   @Override
   public SettlementTotalVO settlementTotalR(String time,Long userId) {
   public SettlementTotalVO settlementTotalR(String time, Long userId) {
      //如果没传siteId,获取当前登陆人所有的siteIds
      List<Integer> siteIds = new ArrayList<>();
      if (userId != null){
            List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
            for (GetSiteListDTO datum : data) {
               siteIds.add(datum.getId());
            }
      if (userId != null) {
         List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
         for (GetSiteListDTO datum : data) {
            siteIds.add(datum.getId());
         }
      }
      if (siteIds.isEmpty()){
      if (siteIds.isEmpty()) {
         siteIds.add(-1);
      }
      List<Site> siteList = siteClient.getSiteAll().getData();
@@ -3666,12 +3673,12 @@
      List<TChargingOrder> totalOrder = chargingOrderService.list(new LambdaQueryWrapper<>(TChargingOrder.class)
            .eq(TChargingOrder::getRechargePaymentStatus, 2));
      SettlementTotalVO res = new SettlementTotalVO();
      List<TSettlementConfirm> list1 = tSettlementConfirmMapper.settlementTotal(time,siteIds);
      List<TSettlementConfirm> list1 = tSettlementConfirmMapper.settlementTotal(time, siteIds);
      LocalDateTime parse = LocalDateTime.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
      List<TSettlementConfirm> list2 = tSettlementConfirmMapper.settlementTotal(time,siteIds);
      List<TSettlementConfirm> list2 = tSettlementConfirmMapper.settlementTotal(time, siteIds);
      // 合计
      List<TSettlementConfirm> total = new ArrayList<>();
      TSettlementConfirm tSettlementConfirm1 = new TSettlementConfirm();
      BigDecimal meteringElectronic = new BigDecimal("0");
      BigDecimal chargingElectronic = new BigDecimal("0");
@@ -3703,22 +3710,22 @@
//      tSettlementConfirm1.setTotalPercentage();
      tSettlementConfirm1.setElectronicRefund(0);
      // 上月成本合计
      BigDecimal beforeCost= new BigDecimal("0");
      BigDecimal beforeCost = new BigDecimal("0");
      // 上月利润合计
      BigDecimal beforeIncome= new BigDecimal("0");
      BigDecimal beforeIncome = new BigDecimal("0");
      int i = 1;
      for (TSettlementConfirm tSettlementConfirm : list1) {
         tSettlementConfirm.setXuhao(i);
         tSettlementConfirm.setMetering(tSettlementConfirm.getSupplyElectronic());
         List<Site> data1 = siteList.stream().filter(e -> e.getId().equals(tSettlementConfirm.getSiteId())).collect(Collectors.toList());
         if (!data1.isEmpty()){
         if (!data1.isEmpty()) {
            tSettlementConfirm.setSiteName(data1.get(0).getName());
         }
         if (tSettlementConfirm.getMeteringElectronic()!=null){
         if (tSettlementConfirm.getMeteringElectronic() != null) {
            meteringElectronic = meteringElectronic.add(tSettlementConfirm.getMeteringElectronic());
            chargingElectronic = chargingElectronic.add(tSettlementConfirm.getChargingElectronic());
         }
         if (tSettlementConfirm.getLossElectronic()!=null){
         if (tSettlementConfirm.getLossElectronic() != null) {
            lossElectronic = lossElectronic.add(tSettlementConfirm.getLossElectronic());
         }
         income = income.add(tSettlementConfirm.getIncome());
@@ -3744,12 +3751,12 @@
         orderCommission = orderCommission.add(tSettlementConfirm.getOrderCommission());
         vipDiscount = vipDiscount.add(tSettlementConfirm.getVipDiscount());
         couponDiscount = couponDiscount.add(tSettlementConfirm.getCouponDiscount());
         // 查询结算确认单开始时间和结束时间的单子
         QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
               .eq("site_id", tSettlementConfirm.getSiteId())
               .eq("recharge_payment_status",2);
         switch (tSettlementConfirm.getType()){
               .eq("recharge_payment_status", 2);
         switch (tSettlementConfirm.getType()) {
            case 1:
               eq.between("start_time", tSettlementConfirm.getStartTime(), tSettlementConfirm.getEndTime());
               break;
@@ -3757,10 +3764,10 @@
               eq.between("end_time", tSettlementConfirm.getStartTime(), tSettlementConfirm.getEndTime());
               break;
         }
         List<TChargingOrder> tChargingOrders = totalOrder.stream().filter(e-> e.getPayTime()
         List<TChargingOrder> tChargingOrders = totalOrder.stream().filter(e -> e.getPayTime()
               .isBefore(tSettlementConfirm.getEndTime())
               && e.getPayTime().isAfter(tSettlementConfirm.getStartTime())&&e.getSiteId().equals(tSettlementConfirm.getSiteId())).collect(Collectors.toList());
               && e.getPayTime().isAfter(tSettlementConfirm.getStartTime()) && e.getSiteId().equals(tSettlementConfirm.getSiteId())).collect(Collectors.toList());
         // 充电总时长
         Long temp = 0L;
         for (TChargingOrder tChargingOrder : tChargingOrders) {
@@ -3768,7 +3775,7 @@
            LocalDateTime endTime = tChargingOrder.getEndTime();
            // 计算时间差 单位秒
            long between = ChronoUnit.SECONDS.between(startTime, endTime);
            temp+=between;
            temp += between;
         }
         List<TChargingPile> data = siteClient.getPileListBySiteId(tSettlementConfirm.getSiteId()).getData();
         // 计算充电桩的功率平均值
@@ -3776,18 +3783,18 @@
         for (TChargingPile datum : data) {
            bigDecimal = bigDecimal.add(datum.getRatedPower());
         }
         tSettlementConfirm.setIncome(tSettlementConfirm.getElectrovalence().add(tSettlementConfirm.getServiceCharge()));
         //利用率=充电量/(桩数量*功率*时间)
         List<TChargingPile> data2 = chargingPileClient.getChargingPileBySiteId(tSettlementConfirm.getSiteId()).getData();
         BigDecimal bigDecimal2 = new BigDecimal("0");
         if (data2!=null && (!data2.isEmpty())){
         if (data2 != null && (!data2.isEmpty())) {
            for (TChargingPile tChargingPile : data2) {
               bigDecimal2 = bigDecimal2.add(tChargingPile.getRatedPower());
            }
            BigDecimal bigDecimal1 = new BigDecimal(data2.size()+"");
            BigDecimal bigDecimal1 = new BigDecimal(data2.size() + "");
            // 平均功率
            BigDecimal divide = bigDecimal2.divide(bigDecimal1, 2, RoundingMode.HALF_DOWN);
            // 充电量
@@ -3796,27 +3803,27 @@
            BigDecimal bigDecimal3 = new BigDecimal(data2.size());
            BigDecimal multiply = chargingElectronic1.multiply(new BigDecimal("24"));
            BigDecimal multiply1 = bigDecimal3.multiply(divide).multiply(new BigDecimal(temp));
            tSettlementConfirm.setRate(chargingElectronic1.divide(multiply1,2,RoundingMode.HALF_DOWN)+"");
         }else{
            tSettlementConfirm.setRate(chargingElectronic1.divide(multiply1, 2, RoundingMode.HALF_DOWN) + "");
         } else {
            tSettlementConfirm.setRate("");
         }
         for (TSettlementConfirm settlementConfirm : list2) {
            int value = parse.getMonth().getValue();
            settlementConfirm.setMonth(value);
            settlementConfirm.setIncome(settlementConfirm.getElectrovalence().add(settlementConfirm.getServiceCharge()));
            tSettlementConfirm.setMetering(tSettlementConfirm.getSupplyElectronic());
            if (tSettlementConfirm.getSiteId().equals(settlementConfirm.getSiteId())){
            if (tSettlementConfirm.getSiteId().equals(settlementConfirm.getSiteId())) {
               // 电站相同比较收入涨幅跌幅
               if (tSettlementConfirm.getIncome().compareTo(BigDecimal.ZERO)>0){
                  BigDecimal subtract = tSettlementConfirm.getIncome().subtract(settlementConfirm.getIncome()).divide(tSettlementConfirm.getIncome(),2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
                  tSettlementConfirm.setIncomePercentage(subtract+"%");
               }else {
                  tSettlementConfirm.setIncomePercentage("100"+"%");
               if (tSettlementConfirm.getIncome().compareTo(BigDecimal.ZERO) > 0) {
                  BigDecimal subtract = tSettlementConfirm.getIncome().subtract(settlementConfirm.getIncome()).divide(tSettlementConfirm.getIncome(), 2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
                  tSettlementConfirm.setIncomePercentage(subtract + "%");
               } else {
                  tSettlementConfirm.setIncomePercentage("100" + "%");
               }
               // 比较总利润 收入合计-成本合计
               BigDecimal subtract1 = tSettlementConfirm.getIncome().subtract(tSettlementConfirm.getCost());
               BigDecimal subtract2 = settlementConfirm.getIncome().subtract(settlementConfirm.getCost());
@@ -3824,7 +3831,8 @@
                     .divide(subtract2, 2, RoundingMode.HALF_DOWN)
                     .multiply(new BigDecimal("100"))
                     .setScale(2, RoundingMode.HALF_DOWN);
               tSettlementConfirm.setTotalPercentage(bigDecimal1+"%");            }
               tSettlementConfirm.setTotalPercentage(bigDecimal1 + "%");
            }
            beforeCost = beforeCost.add(settlementConfirm.getCost());
            beforeIncome = beforeIncome.add(settlementConfirm.getIncome());
         }
@@ -3859,22 +3867,22 @@
      tSettlementConfirm.setVipDiscount(vipDiscount);
      tSettlementConfirm.setCouponDiscount(couponDiscount);
      // 本月
      if (beforeIncome.compareTo(new BigDecimal("0")) == 0){
         tSettlementConfirm.setIncomePercentage(0+"%");
         tSettlementConfirm.setIncomePercentage(0+"%");
      }else{
         BigDecimal subtract = income.subtract(beforeIncome).divide(beforeIncome,2,RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
         tSettlementConfirm.setIncomePercentage(subtract+"%");
         tSettlementConfirm.setIncomePercentage(subtract+"%");
      if (beforeIncome.compareTo(new BigDecimal("0")) == 0) {
         tSettlementConfirm.setIncomePercentage(0 + "%");
         tSettlementConfirm.setIncomePercentage(0 + "%");
      } else {
         BigDecimal subtract = income.subtract(beforeIncome).divide(beforeIncome, 2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
         tSettlementConfirm.setIncomePercentage(subtract + "%");
         tSettlementConfirm.setIncomePercentage(subtract + "%");
      }
      // 比较总利润 收入合计-成本合计
      BigDecimal subtract1 = income.subtract(cost);
      BigDecimal subtract2 = beforeIncome.subtract(beforeCost);
      if (subtract2.compareTo(new BigDecimal("0")) == 0){
         tSettlementConfirm.setTotalPercentage(0+"%");
      }else{
         tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2,2, RoundingMode.HALF_DOWN).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"))+"%");
      if (subtract2.compareTo(new BigDecimal("0")) == 0) {
         tSettlementConfirm.setTotalPercentage(0 + "%");
      } else {
         tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2, 2, RoundingMode.HALF_DOWN).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100")) + "%");
      }
      tSettlementConfirm.setElectronicRefund(0);
      // 查询上次汇报数据 进行比对涨幅跌幅
@@ -3883,79 +3891,80 @@
      res.setList2(total);
      return res;
   }
   @Override
   public List<Map<String, Object>> countBySource(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
      return this.baseMapper.countBySource(siteIds,statisticsQueryDto);
      return this.baseMapper.countBySource(siteIds, statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> equipmentUserType1(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
      return this.baseMapper.equipmentUserType1(siteIds,statisticsQueryDto);
      return this.baseMapper.equipmentUserType1(siteIds, statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> equipmentUserType2(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
      return this.baseMapper.equipmentUserType2(siteIds,statisticsQueryDto);
      return this.baseMapper.equipmentUserType2(siteIds, statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> equipmentMapbroke1(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
      return this.baseMapper.equipmentMapbroke1(siteIds,statisticsQueryDto);
      return this.baseMapper.equipmentMapbroke1(siteIds, statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> equipmentMapbroke2(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
      return this.baseMapper.equipmentMapbroke2(siteIds,statisticsQueryDto);
      return this.baseMapper.equipmentMapbroke2(siteIds, statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> equipmentMapOut1(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
      return this.baseMapper.equipmentMapOut1(siteIds,statisticsQueryDto);
      return this.baseMapper.equipmentMapOut1(siteIds, statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> equipmentMapOut2(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
      return this.baseMapper.equipmentMapOut2(siteIds,statisticsQueryDto);
      return this.baseMapper.equipmentMapOut2(siteIds, statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> needElec(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
      return this.baseMapper.needElec(siteIds,statisticsQueryDto);
      return this.baseMapper.needElec(siteIds, statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> getHourType(List<Integer> siteIds, ChargingDetailQueryDto statisticsQueryDto) {
      return this.baseMapper.getHourType(siteIds,statisticsQueryDto);
      return this.baseMapper.getHourType(siteIds, statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> getDateType(List<Integer> siteIds, ChargingDetailQueryDto statisticsQueryDto) {
      return this.baseMapper.getDateType(siteIds,statisticsQueryDto);
      return this.baseMapper.getDateType(siteIds, statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> getMonthType(List<Integer> siteIds, ChargingDetailQueryDto statisticsQueryDto) {
      return this.baseMapper.getMonthType(siteIds,statisticsQueryDto);
      return this.baseMapper.getMonthType(siteIds, statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> getchargingCapacity(List<Integer> siteIds, ChargingDetailQueryDto statisticsQueryDto) {
      return this.baseMapper.getchargingCapacity(siteIds,statisticsQueryDto);
      return this.baseMapper.getchargingCapacity(siteIds, statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> countAllUserData() {
      return this.baseMapper.countAllUserData();
   }
   @Override
   public List<Map<String, Object>> needElec1(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
      return this.baseMapper.needElec1(siteIds,statisticsQueryDto);
      return this.baseMapper.needElec1(siteIds, statisticsQueryDto);
   }
   
   /**
    * 获取充电结束页面详情
    *
    * @param id
    * @return
    */
@@ -3964,7 +3973,7 @@
      EndOfChargePageInfo info = new EndOfChargePageInfo();
      TChargingOrder chargingOrder = this.getById(id);
      Long userId = tokenService.getLoginUserApplet().getUserId();
      if(!chargingOrder.getAppUserId().equals(userId)){
      if (!chargingOrder.getAppUserId().equals(userId)) {
         throw new RuntimeException("权限不足");
      }
      info.setId(id);
@@ -3987,7 +3996,7 @@
      info.setDuration(0 == hour ? String.format("%s分钟", second) : String.format("%s小时%s分钟", hour, second));
      return info;
   }
   @Override
   public Long countNoTag() {
      return this.baseMapper.countNoTag();
@@ -3997,27 +4006,27 @@
   @Override
   public List<TChargingOrder> getChargingOrder(TChargingOrderVo order) {
      LambdaQueryWrapper<TChargingOrder> queryWrapper = new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getDelFlag, 0);
      if(null != order.getChargingPileId()){
      if (null != order.getChargingPileId()) {
         queryWrapper.eq(TChargingOrder::getChargingPileId, order.getChargingPileId());
      }
      if(null != order.getChargingGunId()){
      if (null != order.getChargingGunId()) {
         queryWrapper.eq(TChargingOrder::getChargingGunId, order.getChargingGunId());
      }
      if(null != order.getStatus()){
      if (null != order.getStatus()) {
         queryWrapper.eq(TChargingOrder::getStatus, order.getStatus());
      }
      if(null != order.getAppUserId()){
      if (null != order.getAppUserId()) {
         queryWrapper.eq(TChargingOrder::getAppUserId, order.getAppUserId());
      }
      if(null != order.getStatusList()){
      if (null != order.getStatusList()) {
         queryWrapper.in(TChargingOrder::getStatus, order.getStatusList());
      }
      if(null != order.getEndMode()){
      if (null != order.getEndMode()) {
         queryWrapper.eq(TChargingOrder::getEndMode, order.getEndMode());
      }
      return this.list(queryWrapper.orderByDesc(TChargingOrder::getCreateTime));
   }
   @Override
   public Long countCar(List<String> brands) {
      return this.baseMapper.countCar(brands);
@@ -4026,6 +4035,7 @@
   
   /**
    * 添加三方平台充电订单数据
    *
    * @param query
    */
   @Override
@@ -4033,7 +4043,7 @@
      //检查当前枪是否是正在使用中
      TChargingOrder one = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getChargingGunId, query.getChargingGunId())
            .in(TChargingOrder::getStatus, Arrays.asList(1, 2, 3)).eq(TChargingOrder::getDelFlag, 0));
      if(null != one){
      if (null != one) {
         return R.fail("充电枪正在充电中,启动失败");
      }
      
@@ -4060,9 +4070,9 @@
      chargingOrder.setTripartitePlatformName(operator.getName());
      chargingOrder.setStartChargeSeq(query.getStartChargeSeq());
      //车辆信息
      if(StringUtils.hasLength(query.getPlateNum())){
      if (StringUtils.hasLength(query.getPlateNum())) {
         TAppUserCar appUserCar = appUserCarClient.getAppUserCarByLicensePlate(query.getPlateNum()).getData();
         if(null != appUserCar){
         if (null != appUserCar) {
            chargingOrder.setAppUserCarId(appUserCar.getId());
         }
         chargingOrder.setPlateNum(query.getPlateNum());
@@ -4076,7 +4086,7 @@
      this.save(chargingOrder);
      
      Integer accountingStrategyId = tChargingGun.getAccountingStrategyId();
      if(null == accountingStrategyId){
      if (null == accountingStrategyId) {
         Site site = siteClient.getSiteByIds(Arrays.asList(tChargingGun.getSiteId())).getData().get(0);
         //查询站点上面的计费策略
         accountingStrategyId = site.getAccountingStrategyId();
@@ -4137,6 +4147,7 @@
   
   /**
    * 三方平台停止充电操作
    *
    * @param startChargeSeq
    * @return
    */
@@ -4144,10 +4155,10 @@
   public R tripartitePlatformStopCharge(String startChargeSeq) {
      TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getStartChargeSeq, startChargeSeq));
      Integer status = order.getStatus();
      if(status != 3){
      if (status != 3) {
         return R.fail("还未开始充电");
      }
      if(status == 4 || status == 5){
      if (status == 4 || status == 5) {
         return R.fail("不能重复操作");
      }
      TChargingOrder chargingOrder = new TChargingOrder();
@@ -4163,7 +4174,7 @@
      TChargingGun chargingGun = chargingGunClient.getChargingGunById(order.getChargingGunId()).getData();
      //异步线程处理停机
      ExecutorService cachedThreadPool = Executors.newFixedThreadPool(1);
      cachedThreadPool.execute(()->{
      cachedThreadPool.execute(() -> {
         //调用硬件停止充电,停止成功后开始计算费用退款
         TChargingPile chargingPile = chargingPileClient.getChargingPileById(order.getChargingPileId()).getData();
         PlatformStopCharging platformStopCharging = new PlatformStopCharging();
@@ -4185,6 +4196,7 @@
   
   /**
    * 获取充电后没有扣除费用的数据
    *
    * @return
    */
   @Override
@@ -4204,8 +4216,8 @@
   
   
   /**
    *
    * 手动推送订单给第三方平台
    *
    * @param code
    * @return
    */
@@ -4220,13 +4232,11 @@
   }
   
   
   public R addChargingOrderSummaryData(){
   public R addChargingOrderSummaryData() {
      List<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list();
      List<TChargingOrder> list1 = this.list(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getDelFlag, 0));
      for (TChargingOrder chargingOrderVO : list1) {
         if(null == chargingOrderVO.getStatus() || 5 != chargingOrderVO.getStatus()){
         if (null == chargingOrderVO.getStatus() || 5 != chargingOrderVO.getStatus()) {
            continue;
         }
         List<TChargingOrderAccountingStrategy> list4 = list3.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderVO.getId())).collect(Collectors.toList());
@@ -4238,17 +4248,17 @@
         if (!chargingOrderVO.getOrderSource().equals(2)) {
            serviceMoney = serviceMoney.add(service_reduce);
            paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce);
         }else{
         } else {
            serviceMoney = serviceMoney.add(service_reduce.multiply(new BigDecimal("0.8")));
            paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")));
         }
         Long time = 0L;
         if (chargingOrderVO.getStartTime()!=null && chargingOrderVO.getEndTime()!=null){
         if (chargingOrderVO.getStartTime() != null && chargingOrderVO.getEndTime() != null) {
            LocalDateTime startTime = chargingOrderVO.getStartTime();
            LocalDateTime endTime = chargingOrderVO.getEndTime();
            // 计算时间差 单位秒
            long between = ChronoUnit.SECONDS.between(startTime, endTime);
            time+=between;
            time += between;
         }
         
         TChargingOrderSummaryData summaryData = new TChargingOrderSummaryData();
@@ -4262,7 +4272,7 @@
      }
      return R.ok();
   }
   /**
    * 大屏-新能源汽车电池安全检测次数统计
    */
@@ -4271,14 +4281,14 @@
      StatisticsOfBatteryVO vo = new StatisticsOfBatteryVO();
      //1.计算累计次数
      //查询该俩站点的快充和超充的充电枪id集合 site_id 25 26  charge_model 1 2
      R<List<Integer>> r = chargingGunClient.getGunIdsBySiteIdsAndChargeModels(Arrays.asList(25,26),Arrays.asList(1,2));
      if (r.getCode()!=200){
      R<List<Integer>> r = chargingGunClient.getGunIdsBySiteIdsAndChargeModels(Arrays.asList(25, 26), Arrays.asList(1, 2));
      if (r.getCode() != 200) {
         return R.ok(vo);
      }
      List<Integer> gunIds=r.getData();
      List<Integer> gunIds = r.getData();
      //统计
      Long total= 0L;
      if(gunIds!=null && !gunIds.isEmpty()) {
      Long total = 0L;
      if (gunIds != null && !gunIds.isEmpty()) {
         total = this.baseMapper.selectCount(new LambdaQueryWrapper<TChargingOrder>()
               .eq(TChargingOrder::getDelFlag, 0)//未删除
               .in(TChargingOrder::getStatus, Arrays.asList(3, 5))//充电中、已结束
@@ -4292,8 +4302,8 @@
      LocalDateTime endDate = today.minusDays(1).atTime(LocalTime.MAX);
      // 查询数据库
      List<OrderCountByDate> orderCounts = this.baseMapper.countOrdersByDate(startDate, endDate, gunIds);*/
      List<LocalDate> dates = new ArrayList<>();
      List<Integer> counts = new ArrayList<>();
      LocalDate today = LocalDate.now();
@@ -4303,13 +4313,13 @@
         LocalDateTime startOfDay = day.atStartOfDay();
         LocalDateTime endOfDay = day.atTime(LocalTime.MAX);
         //统计
         Long count=0L;
         if(gunIds!=null && !gunIds.isEmpty()){
         Long count = 0L;
         if (gunIds != null && !gunIds.isEmpty()) {
            count = this.baseMapper.selectCount(new LambdaQueryWrapper<TChargingOrder>()
                  .eq(TChargingOrder::getDelFlag,0)//未删除
                  .in(TChargingOrder::getStatus,Arrays.asList(3,5))//充电中、已结束
                  .in(TChargingOrder::getChargingGunId,gunIds)//符合条件的充电枪 站点 超充快充
                  .between(TChargingOrder::getCreateTime,startOfDay,endOfDay));//每天
                  .eq(TChargingOrder::getDelFlag, 0)//未删除
                  .in(TChargingOrder::getStatus, Arrays.asList(3, 5))//充电中、已结束
                  .in(TChargingOrder::getChargingGunId, gunIds)//符合条件的充电枪 站点 超充快充
                  .between(TChargingOrder::getCreateTime, startOfDay, endOfDay));//每天
         }
         dates.add(day);
         counts.add(count.intValue());
@@ -4318,16 +4328,18 @@
      vo.setCounts(counts);
      return R.ok(vo);
   }
   @Override
   public BigDecimal getSumDegreeBySiteIds(List<Integer> siteIds) {
      return this.baseMapper.getSumDegreeBySiteIds(siteIds);
   }
   
   
   /**
    * 获取启动失败且时间超过1小时的订单
    *
    * @return
    */
   @Override
@@ -4338,6 +4350,7 @@
   
   /**
    * 获取停止中的数据
    *
    * @return
    */
   @Override
@@ -4348,6 +4361,7 @@
   
   /**
    * 获取充电中的数据
    *
    * @return
    */
   @Override