xuhy
2 天以前 185b90fbbd29bcf520456196d758079e60b325eb
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -4,6 +4,7 @@
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.account.api.feignClient.*;
import com.ruoyi.account.api.model.*;
@@ -17,6 +18,7 @@
import com.ruoyi.common.core.dto.ChargingOrderGroup;
import com.ruoyi.common.core.dto.ChargingPercentProvinceDto;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.domain.BasePojo;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.service.TokenService;
@@ -51,11 +53,14 @@
import com.ruoyi.order.service.TOrderEvaluateService;
import com.ruoyi.order.service.*;
import com.ruoyi.order.vo.EndOfChargePageInfo;
import com.ruoyi.order.vo.OrderCountByDate;
import com.ruoyi.order.vo.StatisticsOfBatteryVO;
import com.ruoyi.other.api.domain.*;
import com.ruoyi.order.vo.ChargingOrderListInfoVO;
import com.ruoyi.other.api.domain.TVip;
import com.ruoyi.other.api.feignClient.*;
import com.ruoyi.payment.api.feignClient.AliPaymentClient;
import com.ruoyi.payment.api.feignClient.H5AliPaymentClient;
import com.ruoyi.payment.api.feignClient.WxPaymentClient;
import com.ruoyi.payment.api.model.RefundReq;
import com.ruoyi.payment.api.model.RefundResp;
@@ -129,6 +134,8 @@
   
   @Resource
   private AliPaymentClient aliPaymentClient;
   @Resource
   private H5AliPaymentClient h5AliPaymentClient;
   @Resource
   private AppCouponClient appCouponClient;
@@ -210,6 +217,11 @@
   
   @Resource
   private TransactionRecordClient transactionRecordClient;
   @Resource
   private ITChargingOrderSummaryDataService chargingOrderSummaryDataService;
   @Resource
   private TOrderAppealService orderAppealService;
@@ -264,6 +276,7 @@
      TChargingOrder chargingOrder = this.getById(id);
      MyChargingOrderInfo myChargingOrderInfo = new MyChargingOrderInfo();
      myChargingOrderInfo.setId(id);
      myChargingOrderInfo.setChargingGunId(chargingOrder.getChargingGunId());
      myChargingOrderInfo.setCode(chargingOrder.getCode());
      myChargingOrderInfo.setCreateTime(chargingOrder.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
      myChargingOrderInfo.setStatus(chargingOrder.getStatus());
@@ -339,6 +352,9 @@
         myChargingOrderInfo.setPower(power);
      }
      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);
      return myChargingOrderInfo;
   }
   
@@ -411,6 +427,16 @@
               }
            }
         }
         if(3 == rechargePaymentType){
            AliQueryOrder data = h5AliPaymentClient.query(tChargingOrder.getCode()).getData();
            if(null != data){
               //支付失败,删除无效的订单
               String tradeStatus = data.getTradeStatus();
               if(null != tradeStatus && tradeStatus.equals("TRADE_CLOSED")){
                  this.removeById(tChargingOrder.getId());
               }
            }
         }
      }
      
      //检查当前枪是否是正在使用中
@@ -449,6 +475,21 @@
               if(trade_state.equals("WAIT_BUYER_PAY")){
                  //结束第三方支付,删除订单
                  aliPaymentClient.close(one.getCode());
                  this.removeById(one.getId());
               }
            }
         }
         if(3 == one.getRechargePaymentType()){
            AliQueryOrder data = h5AliPaymentClient.query(one.getCode()).getData();
            if(null != data){
               String trade_state = data.getTradeStatus();
               //支付失败,删除无效的订单
               if(trade_state.equals("TRADE_CLOSED")){
                  this.removeById(one.getId());
               }
               if(trade_state.equals("WAIT_BUYER_PAY")){
                  //结束第三方支付,删除订单
                  h5AliPaymentClient.close(one.getCode());
                  this.removeById(one.getId());
               }
            }
@@ -554,6 +595,20 @@
         AliPaymentResp data = aliPaymentClient.payment(req).getData();
         if(null != data){
            return AjaxResult.success(data);
         }
      }
      if(3 == addChargingOrder.getPaymentType()){
         AliPaymentReq req = new AliPaymentReq();
         req.setOutTradeNo(chargingOrder.getCode());
         req.setTotalAmount(addChargingOrder.getPaymentAmount().toString());
         req.setSubject("充电充值");
         req.setBuyerOpenId(appUser.getAliOpenid());
         req.setBody("充电充值");
         req.setNotifyUrl("/payment/aliH5/callBack");
         req.setReturnUrl(addChargingOrder.getReturnUrl());
         String data = h5AliPaymentClient.payment(req).getData();
         if(StringUtils.hasLength(data)){
            return AjaxResult.success("操作成功",data);
         }
      }
      throw new RuntimeException("无效的支付方式");
@@ -969,6 +1024,36 @@
               chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
            }
         }
         if(3 == rechargePaymentType){
            RefundReq dto = new RefundReq();
            dto.setOutTradeNo(chargingOrder.getCode());
            dto.setOutRequestNo(chargingOrderRefund.getCode());
            dto.setRefundAmount(rechargeAmount.toString());
            dto.setRefundReason("充电失败,取消充电订单");
            RefundResp resp = h5AliPaymentClient.refund(dto).getData();
            if(null != resp){
               chargingOrderRefundService.save(chargingOrderRefund);
               //回退会员折扣次数
               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){
                     data.setChargeNum(data.getChargeNum() + 1);
                     appUserVipDetailClient.updateAppUserVipDetail(data);
                  }
               }
               try {
                  Thread.sleep(1000);
               } catch (InterruptedException e) {
                  throw new RuntimeException(e);
               }
               chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
            }
         }
      }
   }
@@ -1036,7 +1121,24 @@
               chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
            }
         }
         if(3 == rechargePaymentType){
            RefundReq dto = new RefundReq();
            dto.setOutTradeNo(chargingOrder.getCode());
            dto.setOutRequestNo(chargingOrderRefund.getCode());
            dto.setRefundAmount(money.toString());
            dto.setRefundReason("充电完成退款");
            RefundResp resp = h5AliPaymentClient.refund(dto).getData();
            if(null != resp){
               chargingOrderRefundService.save(chargingOrderRefund);
               try {
                  Thread.sleep(1000);
               } catch (InterruptedException e) {
                  throw new RuntimeException(e);
               }
               chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
            }
         }
      }
   }
@@ -1399,13 +1501,12 @@
      if (siteIds.isEmpty())siteIds.add(-1);
      dto.setSiteIds(siteIds);
      List<ChargingOrderVO> list = this.baseMapper.chargingOrder(pageInfo,dto,startTime1,startTime2,endTime1,endTime2);
      List<ChargingOrderVO> list1 = this.baseMapper.chargingOrderNolimit(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 refundMoney = new BigDecimal("0");
       BigDecimal paymentMoney = new BigDecimal("0");
      List<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list();
@@ -1473,50 +1574,54 @@
         }
      }
      List<TChargingOrderRefund> chargingOrderRefunds = chargingOrderRefundService.lambdaQuery()
            .eq(TChargingOrderRefund::getRefundStatus,2).list();
//       BigDecimal total = new BigDecimal("0");
//       long time = 0L;
//       BigDecimal electronicMoney = new BigDecimal("0");
//       BigDecimal serviceMoney = new BigDecimal("0");
//       BigDecimal refundMoney = new BigDecimal("0");
//       BigDecimal paymentMoney = new BigDecimal("0");
      for (ChargingOrderVO chargingOrderVO : list1) {
         if(null == chargingOrderVO.getStatus() || 5 != chargingOrderVO.getStatus()){
            continue;
         }
         List<TChargingOrderAccountingStrategy> list4 = list3.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderVO.getId())).collect(Collectors.toList());
         BigDecimal electronic_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
         BigDecimal service_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
         BigDecimal chargingCapacity = list4.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
         electronicMoney = electronicMoney.add(electronic_reduce);
         total = total.add(chargingCapacity);
         if (!chargingOrderVO.getOrderSource().equals(2)) {
            serviceMoney = serviceMoney.add(service_reduce);
            paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce);
         }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 (chargingOrderVO.getStartTime()!=null && chargingOrderVO.getEndTime()!=null){
            LocalDateTime startTime = chargingOrderVO.getStartTime();
            LocalDateTime endTime = chargingOrderVO.getEndTime();
            // 计算时间差 单位秒
            long between = ChronoUnit.SECONDS.between(startTime, endTime);
            time+=between;
         }
         List<TChargingOrderRefund> list2 = chargingOrderRefunds.stream().filter(e -> e.getChargingOrderId() != null && e.getChargingOrderId().equals(chargingOrderVO.getId()))
               .collect(Collectors.toList());
         for (TChargingOrderRefund tChargingOrderRefund : list2) {
            refundMoney = refundMoney.add(tChargingOrderRefund.getRefundTotalAmount());
         }
//      List<TChargingOrderRefund> chargingOrderRefunds = chargingOrderRefundService.lambdaQuery()
//            .eq(TChargingOrderRefund::getRefundStatus,2).list();
       Map<String, Object> map = this.baseMapper.chargingOrderNolimit(dto,startTime1,startTime2,endTime1,endTime2);
//      for (ChargingOrderVO chargingOrderVO : list1) {
//         if(null == chargingOrderVO.getStatus() || 5 != chargingOrderVO.getStatus()){
//            continue;
//         }
//         List<TChargingOrderAccountingStrategy> list4 = list3.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderVO.getId())).collect(Collectors.toList());
//         BigDecimal electronic_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
//         BigDecimal service_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
//         BigDecimal chargingCapacity = list4.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
//         electronicMoney = electronicMoney.add(electronic_reduce);
//         total = total.add(chargingCapacity);
//         if (!chargingOrderVO.getOrderSource().equals(2)) {
//            serviceMoney = serviceMoney.add(service_reduce);
//            paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce);
//         }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 (chargingOrderVO.getStartTime()!=null && chargingOrderVO.getEndTime()!=null){
//            LocalDateTime startTime = chargingOrderVO.getStartTime();
//            LocalDateTime endTime = chargingOrderVO.getEndTime();
//            // 计算时间差 单位秒
//            long between = ChronoUnit.SECONDS.between(startTime, endTime);
//            time+=between;
//         }
////         List<TChargingOrderRefund> list2 = chargingOrderRefunds.stream().filter(e -> e.getChargingOrderId() != null && e.getChargingOrderId().equals(chargingOrderVO.getId()))
////               .collect(Collectors.toList());
////         for (TChargingOrderRefund tChargingOrderRefund : list2) {
////            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{
         tCharingOrderVO.setTotal(BigDecimal.ZERO);
         tCharingOrderVO.setTime(0L);
         tCharingOrderVO.setIncome(BigDecimal.ZERO);
         tCharingOrderVO.setElectronicMoney(BigDecimal.ZERO);
         tCharingOrderVO.setServiceMoney(BigDecimal.ZERO);
      }
      tCharingOrderVO.setTotal(total);
      tCharingOrderVO.setTime(time);
      tCharingOrderVO.setIncome(paymentMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
      tCharingOrderVO.setElectronicMoney(electronicMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
      tCharingOrderVO.setServiceMoney(serviceMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
      pageInfo.setRecords(list);
      tCharingOrderVO.setList(pageInfo);
        return tCharingOrderVO;
@@ -2616,9 +2721,51 @@
                  this.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
               }
            }
            if(3 == rechargePaymentType){
               RefundReq dto = new RefundReq();
               dto.setOutTradeNo(chargingOrder.getCode());
               dto.setOutRequestNo(chargingOrderRefund.getRefundCode());
               dto.setRefundAmount(refundAmount.toString());
               dto.setRefundReason("充电完成退款");
               RefundResp resp = h5AliPaymentClient.refund(dto).getData();
               if(null != resp){
                  chargingOrderRefundService.save(chargingOrderRefund);
                  this.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
               }
            }
         }
      }
      //添加汇总统计数据
      List<TChargingOrderAccountingStrategy> list4 = chargingOrderAccountingStrategyService.list(new QueryWrapper<TChargingOrderAccountingStrategy>().eq("charging_order_id", chargingOrder.getId()));
      BigDecimal electronic_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
      BigDecimal service_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
      BigDecimal chargingCapacity = list4.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
      BigDecimal serviceMoney = BigDecimal.ZERO;
      BigDecimal paymentMoney = BigDecimal.ZERO;
      long time = 0;
      if (!chargingOrder.getOrderSource().equals(2)) {
         serviceMoney = serviceMoney.add(service_reduce);
         paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce);
      }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){
         LocalDateTime startTime = chargingOrder.getStartTime();
         LocalDateTime endTime = chargingOrder.getEndTime();
         // 计算时间差 单位秒
         time = ChronoUnit.SECONDS.between(startTime, endTime);
      }
      TChargingOrderSummaryData summaryData = new TChargingOrderSummaryData();
      summaryData.setChargingOrderId(chargingOrder.getId());
      summaryData.setChargingCapacity(chargingCapacity);
      summaryData.setChargingDuration(time);
      summaryData.setIncome(paymentMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
      summaryData.setElectricPrice(electronic_reduce.setScale(2, BigDecimal.ROUND_HALF_EVEN));
      summaryData.setServicePrice(serviceMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
      chargingOrderSummaryDataService.save(summaryData);
      return R.ok();
   }
   
@@ -2787,6 +2934,21 @@
               }
            }
            if(3 == tChargingOrder.getRechargePaymentType()){
               RefundReq dto = new RefundReq();
               dto.setOutTradeNo(tChargingOrder.getCode());
               dto.setOutRequestNo(tChargingOrder.getCode());
               dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString());
               dto.setRefundReason("取消订单");
               RefundResp resp = h5AliPaymentClient.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 (payOrderQueryDto.getType()==2){
            TShoppingOrder tChargingOrder = shoppingOrderService.getById(payOrderQueryDto.getOrderId());
@@ -2854,6 +3016,20 @@
                  shoppingOrderRefundService.save(chargingOrderRefund);
               }
            }
            if(3 == tChargingOrder.getPaymentType()){
               RefundReq dto = new RefundReq();
               dto.setOutTradeNo(tChargingOrder.getCode());
               dto.setOutRequestNo(tChargingOrder.getCode());
               dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString());
               dto.setRefundReason("取消订单");
               RefundResp resp = h5AliPaymentClient.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);
               }
            }
         }
@@ -2912,6 +3088,20 @@
            dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString());
            dto.setRefundReason("取消订单");
            RefundResp resp = aliPaymentClient.refund(dto).getData();
            if(null != resp){
               tChargingOrder.setRefundStatus(2);
               tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
               vipOrderService.updateById(tChargingOrder);
               vipOrderRefundService.save(chargingOrderRefund);
            }
         }
         if(3 == tChargingOrder.getPaymentType()){
            RefundReq dto = new RefundReq();
            dto.setOutTradeNo(tChargingOrder.getCode());
            dto.setOutRequestNo(tChargingOrder.getCode());
            dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString());
            dto.setRefundReason("取消订单");
            RefundResp resp = h5AliPaymentClient.refund(dto).getData();
            if(null != resp){
               tChargingOrder.setRefundStatus(2);
               tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
@@ -3984,4 +4174,110 @@
      tcecClient.notificationChargeOrderInfo(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
      return R.ok();
   }
   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()){
            continue;
         }
         List<TChargingOrderAccountingStrategy> list4 = list3.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderVO.getId())).collect(Collectors.toList());
         BigDecimal electronic_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
         BigDecimal service_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
         BigDecimal chargingCapacity = list4.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
         BigDecimal serviceMoney = new BigDecimal("0");
         BigDecimal paymentMoney = new BigDecimal("0");
         if (!chargingOrderVO.getOrderSource().equals(2)) {
            serviceMoney = serviceMoney.add(service_reduce);
            paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce);
         }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){
            LocalDateTime startTime = chargingOrderVO.getStartTime();
            LocalDateTime endTime = chargingOrderVO.getEndTime();
            // 计算时间差 单位秒
            long between = ChronoUnit.SECONDS.between(startTime, endTime);
            time+=between;
         }
         TChargingOrderSummaryData summaryData = new TChargingOrderSummaryData();
         summaryData.setChargingOrderId(chargingOrderVO.getId());
         summaryData.setChargingCapacity(chargingCapacity);
         summaryData.setChargingDuration(time);
         summaryData.setIncome(paymentMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
         summaryData.setElectricPrice(electronic_reduce.setScale(2, BigDecimal.ROUND_HALF_EVEN));
         summaryData.setServicePrice(serviceMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
         chargingOrderSummaryDataService.save(summaryData);
      }
      return R.ok();
   }
   /**
    * 大屏-新能源汽车电池安全检测次数统计
    */
   @Override
   public R<StatisticsOfBatteryVO> getStatisticsOfBattery() {
      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){
         return R.ok(vo);
      }
      List<Integer> gunIds=r.getData();
      //统计
      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))//充电中、已结束
               .in(TChargingOrder::getChargingGunId, gunIds));//符合条件的充电枪
      }
      vo.setTotal(total.intValue());
      //2.折线图
   /*   // 计算日期范围:前七天(不含今日)直接查找数据量太大,内存报错
      LocalDate today = LocalDate.now();
      LocalDateTime startDate = today.minusDays(7).atStartOfDay();
      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();
      // 直接查找数据量太大,内存报错,分每天查找
      for (int i = 7; i >= 1; i--) {//升序
         LocalDate day = today.minusDays(i);
         LocalDateTime startOfDay = day.atStartOfDay();
         LocalDateTime endOfDay = day.atTime(LocalTime.MAX);
         //统计
         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));//每天
         }
         dates.add(day);
         counts.add(count.intValue());
      }
      vo.setDates(dates);
      vo.setCounts(counts);
      return R.ok(vo);
   }
   @Override
   public BigDecimal getSumDegreeBySiteIds(List<Integer> siteIds) {
      return this.baseMapper.getSumDegreeBySiteIds(siteIds);
   }
}