puzhibing
2024-10-17 201ec7bf9f2b7dec65db6ed02ef6f67cb1dd5851
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -65,13 +65,12 @@
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.lang.reflect.InvocationTargetException;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.format.TextStyle;
import java.time.temporal.WeekFields;
@@ -146,9 +145,6 @@
   @Resource
   private AccountingStrategyDetailOrderClient accountingStrategyDetailOrderClient;
   @Resource
   private AccountingStrategyOrderClient accountingStrategyOrderClient;
   @Resource
   private AccountingStrategyClient accountingStrategyClient;
@@ -262,8 +258,8 @@
      }else{
         myChargingOrderInfo.setLicensePlate("无");
      }
      myChargingOrderInfo.setStartTime(chargingOrder.getStartTime().toInstant(ZoneOffset.of("+8")).toEpochMilli());
      myChargingOrderInfo.setEndTime(chargingOrder.getEndTime().toInstant(ZoneOffset.of("+8")).toEpochMilli());
      myChargingOrderInfo.setStartTime(chargingOrder.getStartTime().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond() * 1000);
      myChargingOrderInfo.setEndTime(chargingOrder.getEndTime().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond() * 1000);
      myChargingOrderInfo.setOrderAmount(chargingOrder.getOrderAmount());
      myChargingOrderInfo.setPaymentAmount(chargingOrder.getPaymentAmount());
      myChargingOrderInfo.setRechargeAmount(chargingOrder.getRechargeAmount());
@@ -295,7 +291,7 @@
         myChargingOrderInfo.setCurrentAndVoltage(currentAndVoltage);
         //在MongoDB中获取数据
         List<Integer> soc = dataList.stream().map(UploadRealTimeMonitoringData::getSoc).collect(Collectors.toList());
         List<BigDecimal> po = dataList.stream().map(s -> s.getOutput_current().multiply(s.getOutput_voltage()).divide(new BigDecimal(1000))).collect(Collectors.toList());
         List<BigDecimal> po = dataList.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<>();
@@ -308,7 +304,7 @@
         }
         myChargingOrderInfo.setPower(power);
      }
      myChargingOrderInfo.setActionable(myChargingOrderInfo.getEndTime() + 604800000L > System.currentTimeMillis() ? 0 : 1);
      myChargingOrderInfo.setActionable(myChargingOrderInfo.getEndTime() + 604800000L < System.currentTimeMillis() ? 0 : 1);
      return myChargingOrderInfo;
   }
   
@@ -892,13 +888,11 @@
    * @return
    */
   public AjaxResult chargingOrderStartupFailureWxRefund(String out_refund_no, String refund_id, String tradeState, String success_time){
      if("SUCCESS".equals(tradeState)){
         TChargingOrderRefund one = chargingOrderRefundService.getOne(new LambdaQueryWrapper<TChargingOrderRefund>().eq(TChargingOrderRefund::getRefundCode, out_refund_no));
         one.setRefundSerialNumber(refund_id);
         one.setRefundStatus(2);
         one.setRefundTime(LocalDateTime.now());
         chargingOrderRefundService.updateById(one);
      }
      TChargingOrderRefund one = chargingOrderRefundService.getOne(new LambdaQueryWrapper<TChargingOrderRefund>().eq(TChargingOrderRefund::getRefundCode, out_refund_no));
      one.setRefundSerialNumber(refund_id);
      one.setRefundStatus(2);
      one.setRefundTime(LocalDateTime.now());
      chargingOrderRefundService.updateById(one);
      return AjaxResult.success();
   }
@@ -995,7 +989,12 @@
            GetPlatformStopChargingReply query = new GetPlatformStopChargingReply();
            query.setCharging_gun_code(chargingGun.getCode());
            query.setCharging_pile_code(chargingPile.getCode());
            query.setEnd_time(chargingOrder.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            //将时间转换成UTC时间后查询数据(mongodb存储时间以UTC格式存储)
            ZoneId zoneId = ZoneId.systemDefault();
            ZonedDateTime zonedDateTime = ZonedDateTime.of(chargingOrder.getEndTime(), zoneId);
            ZonedDateTime endTime = zonedDateTime.withZoneSameInstant(ZoneId.of("UTC"));
            query.setEnd_time(endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            PlatformStopChargingReply reply = platformStopChargingReplyClient.getPlatformStopChargingReply(query).getData();
            log.error(code1 + ":-------------------查询远程停止充电应答-------------------");
            if(null == reply){
@@ -1410,6 +1409,7 @@
      PageInfo<ChargingOrderListVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
      List<ChargingOrderListVO> list = this.baseMapper.chargingList(pageInfo,dto,startTime1,startTime2,endTime1,endTime2);
      for (ChargingOrderListVO chargingOrderListVO : list) {
         chargingOrderListVO.setPaymentAmount(chargingOrderListVO.getResidualAmount()==null?chargingOrderListVO.getPaymentAmount():chargingOrderListVO.getPaymentAmount().subtract(chargingOrderListVO.getResidualAmount()));
         chargingOrderListVO.setUid(chargingOrderListVO.getId()+"");
         List<Integer> integers = new ArrayList<>();
         integers.add(chargingOrderListVO.getSiteId());
@@ -1453,7 +1453,7 @@
                     if (data4!=null && !data4.isEmpty()) chargingOrderListVO.setLicensePlate(data4.get(0).getLicensePlate());
                  }
               }
               if (data3 != null) chargingOrderListVO.setPhone(data3.getPhone());
               chargingOrderListVO.setPhone(data3.getPhone());
            }
         }
@@ -1696,107 +1696,25 @@
    * @param query
    */
   @Override
   @GlobalTransactional(rollbackFor = Exception.class)
   public void chargeMonitoring(UploadRealTimeMonitoringDataQuery query) {
      if(com.ruoyi.common.core.utils.StringUtils.isNotEmpty(query.getTransaction_serial_number())){
         //获取当前的计费策略
         TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, query.getTransaction_serial_number()));
         AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderClient.getNowAccountingStrategyDetailOrder(chargingOrder.getId()).getData();
         TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = chargingOrderAccountingStrategyService.getOne(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>()
               .eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()).orderByDesc(TChargingOrderAccountingStrategy::getCreateTime).last(" limit 0, 1"));
         if(null == chargingOrderAccountingStrategy){
            chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy();
            chargingOrderAccountingStrategy.setChargingOrderId(chargingOrder.getId());
            chargingOrderAccountingStrategy.setAccountingStrategyDetailId(strategyDetail.getId());
            chargingOrderAccountingStrategy.setType(strategyDetail.getType());
            chargingOrderAccountingStrategy.setStartTime(chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("HH:mm")));
            chargingOrderAccountingStrategy.setEndTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm")));
            chargingOrderAccountingStrategy.setElectrovalence(strategyDetail.getElectrovalence());
            chargingOrderAccountingStrategy.setServiceCharge(strategyDetail.getServiceCharge());
            chargingOrderAccountingStrategy.setCostServiceCharge(strategyDetail.getCostServiceCharge());
            //已充电总度数
            BigDecimal charging_degree = query.getCharging_degree();
            BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(charging_degree);
            BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(charging_degree);
            BigDecimal serviceCharge = originalServicePrice;
            //计算优惠金额
            if(null != chargingOrder.getVipDiscount()){
               serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount().divide(new BigDecimal(10)));
            }
            chargingOrderAccountingStrategy.setChargingCapacity(charging_degree);
            chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc);
            chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge);
            chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice);
            chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
            chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy);
         }else{
            if(chargingOrderAccountingStrategy.getAccountingStrategyDetailId().equals(strategyDetail.getId())){
               //已充电总度数
               BigDecimal charging_degree = query.getCharging_degree();
               BigDecimal chargingCapacity = chargingOrderAccountingStrategy.getChargingCapacity();
               //计算本阶段充电度数
               BigDecimal subtract = charging_degree.subtract(chargingCapacity);
               //计算本阶段费用
               BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(subtract);
               BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(subtract);
               BigDecimal serviceCharge = originalServicePrice;
               //计算优惠金额
               if(null != chargingOrder.getVipDiscount()){
                  serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount().divide(new BigDecimal(10)));
               }
               //将本阶段的费用增加到总费用中
               electrovalenc = electrovalenc.add(chargingOrderAccountingStrategy.getPeriodElectricPrice());
               originalServicePrice = originalServicePrice.add(chargingOrderAccountingStrategy.getPeriodOriginalServicePrice());
               serviceCharge = serviceCharge.add(chargingOrderAccountingStrategy.getPeriodServicePrice());
               chargingOrderAccountingStrategy.setChargingCapacity(charging_degree);
               chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc);
               chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge);
               chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice);
               chargingOrderAccountingStrategy.setEndTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm")));
               chargingOrderAccountingStrategyService.updateById(chargingOrderAccountingStrategy);
            }else{
               chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy();
               chargingOrderAccountingStrategy.setChargingOrderId(chargingOrder.getId());
               chargingOrderAccountingStrategy.setAccountingStrategyDetailId(strategyDetail.getId());
               chargingOrderAccountingStrategy.setType(strategyDetail.getType());
               chargingOrderAccountingStrategy.setStartTime(chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("HH:mm")));
               chargingOrderAccountingStrategy.setEndTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm")));
               chargingOrderAccountingStrategy.setElectrovalence(strategyDetail.getElectrovalence());
               chargingOrderAccountingStrategy.setServiceCharge(strategyDetail.getServiceCharge());
               chargingOrderAccountingStrategy.setCostServiceCharge(strategyDetail.getCostServiceCharge());
               //已充电总度数
               BigDecimal charging_degree = query.getCharging_degree();
               BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(charging_degree);
               BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(charging_degree);
               BigDecimal serviceCharge = originalServicePrice;
               //计算优惠金额
               if(null != chargingOrder.getVipDiscount()){
                  serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount().divide(new BigDecimal(10)));
               }
               chargingOrderAccountingStrategy.setChargingCapacity(charging_degree);
               chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc);
               chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge);
               chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice);
               chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
               chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy);
            }
         }
         List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>()
               .eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()));
         //总充电金额
         BigDecimal t = BigDecimal.ZERO;
         for (TChargingOrderAccountingStrategy coas : list) {
            t = t.add(coas.getPeriodServicePrice()).add(coas.getPeriodElectricPrice());
         }
         BigDecimal residualAmount = chargingOrder.getRechargeAmount().subtract(t).setScale(4, RoundingMode.HALF_EVEN);
         BigDecimal residualAmount = chargingOrder.getRechargeAmount().add(chargingOrder.getVipDiscountAmount()).subtract(query.getPaid_amount());
         chargingOrder.setResidualAmount(residualAmount);
         if(query.getOutput_current().compareTo(BigDecimal.ZERO) != 0){
            BigDecimal divide = query.getOutput_current().multiply(query.getOutput_voltage()).divide(new BigDecimal(1000));
            BigDecimal divide = (query.getOutput_current().multiply(query.getOutput_voltage())).divide(new BigDecimal(1000));
            chargingOrder.setChargingPower(divide);
            chargingOrder.setCurrent(query.getOutput_current());
            chargingOrder.setVoltage(query.getOutput_voltage());
            chargingOrder.setPower(query.getOutput_current().multiply(query.getOutput_voltage()));
            chargingOrder.setPower(divide);
            chargingOrder.setNeedElec(query.getOutput_current());
            TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
            chargingGun.setChargingPower(divide);
            chargingGun.setSoc(query.getSoc());
            chargingGunClient.updateChargingGunById(chargingGun);
         }
         chargingOrder.setElectricity(query.getCharging_degree());
         chargingOrder.setTotalElectricity(new BigDecimal(100 - query.getSoc()));
@@ -1843,25 +1761,6 @@
         return;
      }
      
      //先判断总的充电度数是否和总报文消息中的数据相同,不相同等待30s
      UploadRealTimeMonitoringData uploadRealTimeMonitoringData = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrder.getCode()).getData();
      if(null != uploadRealTimeMonitoringData){
         for (int i = 0; i < 30; i++) {
            List<TChargingOrderAccountingStrategy> list1 = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()));
            BigDecimal reduce = list1.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal charging_degree = uploadRealTimeMonitoringData.getCharging_degree();
            if(charging_degree.compareTo(reduce) != 0){
               try {
                  Thread.sleep(1000);
               } catch (InterruptedException e) {
                  throw new RuntimeException(e);
               }
            }else{
               break;
            }
         }
      }
      //计算用户标签
      editUserTag(chargingOrder);
      //用户推荐奖励
@@ -1870,17 +1769,88 @@
      //如果使用优惠券需要判断优惠券是否满足使用条件
      //根据实际的充电金额计算退款金额   退回费用=(原金额/总金额)*(总金额-实际充电金额)
      //退款金额=优惠券金额+剩余充电金额
      List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()));
      BigDecimal periodElectricPrice_total = BigDecimal.ZERO;
      BigDecimal periodServicePrice_total = BigDecimal.ZERO;
      BigDecimal total = BigDecimal.ZERO;
      for (TChargingOrderAccountingStrategy chargingOrderAccountingStrategy : list) {
         BigDecimal periodElectricPrice = chargingOrderAccountingStrategy.getPeriodElectricPrice();
         BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodOriginalServicePrice();
         periodElectricPrice_total = periodElectricPrice_total.add(periodElectricPrice);
         periodServicePrice_total = periodServicePrice_total.add(periodServicePrice);
         total = total.add(periodElectricPrice).add(periodServicePrice);
      //获取订单的计费策略
      List<AccountingStrategyDetailOrder> accountingStrategyDetailOrderList = accountingStrategyDetailOrderClient.getAllAccountingStrategyDetailOrder(chargingOrder.getId()).getData();
      AccountingStrategyDetailOrder accountingStrategyDetailOrder = accountingStrategyDetailOrderList.get(accountingStrategyDetailOrderList.size() - 1);
      if(accountingStrategyDetailOrder.getEndTime().equals("00:00")){
         accountingStrategyDetailOrder.setEndTime("24:00");
      }
      chargingOrderAccountingStrategyService.remove(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()));
      for (int i = 0; i < 12; i++) {
         Class<? extends TransactionRecordMessageVO> clazz = vo.getClass();
         try {
            Object invoke1 = clazz.getMethod("getTime" + (i + 1)).invoke(vo);
            if(null != invoke1){
               String[] split = invoke1.toString().split("-");
               AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.stream().filter(s -> s.getStartTime().equals(split[0]) && s.getEndTime().equals(split[1])).findFirst().get();
               //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
               Object invoke = null;
               switch (strategyDetail.getType()){
                  case 1:
                     //充电度数
                     invoke = clazz.getMethod("getSharp_peak_charge" + (i + 1)).invoke(vo);
                     break;
                  case 2:
                     //充电度数
                     invoke = clazz.getMethod("getPeak_charge" + (i + 1)).invoke(vo);
                     break;
                  case 3:
                     //充电度数
                     invoke = clazz.getMethod("getFlat_peak_charge" + (i + 1)).invoke(vo);
                     break;
                  case 4:
                     //充电度数
                     invoke = clazz.getMethod("getLow_peak_charge" + (i + 1)).invoke(vo);
                     break;
               }
               if(null == invoke || invoke.toString().equals("0")){
                  continue;
               }
               BigDecimal Sharp_peak_charge = new BigDecimal(invoke.toString());
               TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy();
               chargingOrderAccountingStrategy.setChargingOrderId(chargingOrder.getId());
               chargingOrderAccountingStrategy.setAccountingStrategyDetailId(strategyDetail.getId());
               chargingOrderAccountingStrategy.setType(strategyDetail.getType());
               chargingOrderAccountingStrategy.setStartTime(chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("HH:mm")));
               chargingOrderAccountingStrategy.setEndTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm")));
               chargingOrderAccountingStrategy.setElectrovalence(strategyDetail.getElectrovalence());
               chargingOrderAccountingStrategy.setServiceCharge(strategyDetail.getServiceCharge());
               chargingOrderAccountingStrategy.setCostServiceCharge(strategyDetail.getCostServiceCharge());
               //已充电总度数
               BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(Sharp_peak_charge);
               BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(Sharp_peak_charge);
               BigDecimal serviceCharge = originalServicePrice;
               //计算优惠金额
               if(null != chargingOrder.getVipDiscount()){
                  serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount().divide(new BigDecimal(10)));
               }
               chargingOrderAccountingStrategy.setChargingCapacity(Sharp_peak_charge);
               chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc);
               chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge);
               chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice);
               chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
               chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy);
               BigDecimal periodElectricPrice = chargingOrderAccountingStrategy.getPeriodElectricPrice();
               BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodOriginalServicePrice();
               periodElectricPrice_total = periodElectricPrice_total.add(periodElectricPrice);
               periodServicePrice_total = periodServicePrice_total.add(periodServicePrice);
               total = total.add(periodElectricPrice).add(periodServicePrice);
            }
         } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
         } catch (InvocationTargetException e) {
            throw new RuntimeException(e);
         } catch (NoSuchMethodException e) {
            throw new RuntimeException(e);
         }
      }
      //原金额
      BigDecimal rechargeAmount = chargingOrder.getRechargeAmount();
      BigDecimal vipDiscountAmount = chargingOrder.getVipDiscountAmount();
@@ -1927,12 +1897,15 @@
      if(null == chargingOrder.getEndMode()){
         order.setEndMode(1);
      }
      order.setEndTime(LocalDateTime.now());
      order.setResidualAmount(rechargeAmount.subtract(total));
      order.setStartTime(LocalDateTime.parse(vo.getStart_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
      order.setEndTime(LocalDateTime.parse(vo.getEnd_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
      order.setStatus(5);
      order.setOrderAmount(orderAmount);
      order.setVipDiscountAmount(discountAmount);
      order.setServiceCharge(periodServicePrice_total);
      order.setElectrovalence(periodElectricPrice_total);
      order.setOrderAmount(orderAmount.setScale(2, RoundingMode.DOWN));
      order.setVipDiscountAmount(discountAmount.setScale(2, RoundingMode.DOWN));
      order.setServiceCharge(periodServicePrice_total.setScale(2, RoundingMode.DOWN));
      order.setElectrovalence(periodElectricPrice_total.setScale(2, RoundingMode.DOWN));
      order.setChargingCapacity(vo.getTotal_electricity());
      
      //计算优惠券
      if(null != chargingOrder.getAppCouponId()){
@@ -1969,8 +1942,8 @@
            }
         }
      }
      order.setPaymentAmount(payAmount);
      order.setRefundAmount(refundAmount);
      order.setPaymentAmount(payAmount.setScale(2, RoundingMode.DOWN));
      order.setRefundAmount(refundAmount.setScale(2, RoundingMode.DOWN));
      order.setRefundStatus(1);
      this.updateById(order);
      chargingOrder = this.getById(order.getId());
@@ -1978,6 +1951,8 @@
      // 将枪状态重置为空闲
      TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
      chargingGun.setStatus(2);
      chargingGun.setChargingPower(BigDecimal.ZERO);
      chargingGun.setSoc(0);
      chargingGunClient.updateChargingGunById(chargingGun);
      
      //添加积分
@@ -2192,10 +2167,10 @@
               RefundResp resp = aliPaymentClient.refund(dto).getData();
               if(null != resp){
                  SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE");
                  tChargingOrder.setRefundStatus(2);
                  tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
                  chargingOrderRefund.setRefundStatus(2);
                  chargingOrderRefund.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
                  this.baseMapper.updateById(tChargingOrder);
                     chargingOrderRefundService.save(chargingOrderRefund);
                  chargingOrderRefundService.save(chargingOrderRefund);
               }
            }
@@ -2505,9 +2480,13 @@
         if (!data1.isEmpty()){
            tSettlementConfirm.setSiteName(data1.get(0).getName());
         }
         meteringElectronic = meteringElectronic.add(tSettlementConfirm.getMeteringElectronic());
         chargingElectronic = chargingElectronic.add(tSettlementConfirm.getChargingElectronic());
         lossElectronic = lossElectronic.add(tSettlementConfirm.getLossElectronic());
         if (tSettlementConfirm.getMeteringElectronic()!=null){
            meteringElectronic = meteringElectronic.add(tSettlementConfirm.getMeteringElectronic());
            chargingElectronic = chargingElectronic.add(tSettlementConfirm.getChargingElectronic());
         }
         if (tSettlementConfirm.getLossElectronic()!=null){
            lossElectronic = lossElectronic.add(tSettlementConfirm.getLossElectronic());
         }
         income = income.add(tSettlementConfirm.getIncome());
         venue = venue.add(tSettlementConfirm.getVenue());
         metering = metering.add(tSettlementConfirm.getMetering());
@@ -2571,13 +2550,22 @@
            settlementConfirm.setIncome(settlementConfirm.getElectrovalence().add(settlementConfirm.getServiceCharge()));
            if (tSettlementConfirm.getSiteId().equals(settlementConfirm.getSiteId())){
               // 电站相同比较收入涨幅跌幅
               BigDecimal subtract = tSettlementConfirm.getIncome().subtract(settlementConfirm.getIncome()).divide(tSettlementConfirm.getIncome()).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
               tSettlementConfirm.setIncomePercentage(subtract+"%");
               if (tSettlementConfirm.getIncome().compareTo(BigDecimal.ZERO)>0){
                  BigDecimal subtract = tSettlementConfirm.getIncome().subtract(settlementConfirm.getIncome()).divide(tSettlementConfirm.getIncome()).setScale(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());
               tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"))+"%");
            }
               BigDecimal bigDecimal1 = subtract1.subtract(subtract2)
                     .divide(subtract2, 2, RoundingMode.HALF_DOWN)
                     .multiply(new BigDecimal("100"))
                     .setScale(2, RoundingMode.HALF_DOWN);
               tSettlementConfirm.setTotalPercentage(bigDecimal1+"%");            }
            beforeCost = beforeCost.add(settlementConfirm.getCost());
            beforeIncome = beforeIncome.add(settlementConfirm.getIncome());
@@ -2627,7 +2615,7 @@
      if (subtract2.compareTo(new BigDecimal("0")) == 0){
         tSettlementConfirm.setTotalPercentage(0+"%");
      }else{
         tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"))+"%");
         tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2,2, RoundingMode.HALF_DOWN).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"))+"%");
      }
      tSettlementConfirm.setElectronicRefund(0);
      // 查询上次汇报数据 进行比对涨幅跌幅
@@ -2731,7 +2719,7 @@
      info.setEndDay(endTime.format(DateTimeFormatter.ofPattern("MM月dd日")) + " 周" + endTime.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.SIMPLIFIED_CHINESE));
      info.setEndHour(endTime.format(DateTimeFormatter.ofPattern("HH:mm")));
      int hour = endTime.getHour() - startTime.getHour();
      int second = endTime.getSecond() - startTime.getSecond();
      int second = endTime.getMinute() - startTime.getMinute();
      info.setDuration(0 == hour ? String.format("%s分钟", second) : String.format("%s小时%s分钟", hour, second));
      return info;
   }