Pu Zhibing
2024-11-01 a8996df2df6a108be7db1cdb42cee31e12d59245
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -187,6 +187,9 @@
   
   @Resource
   private SecurityDetectionClient securityDetectionClient;
   @Resource
   private BmsDemandAndChargerExportationClient bmsDemandAndChargerExportationClient;
   //计数器
   private Map<String, Integer> counter_map = new HashMap<>();
@@ -256,11 +259,13 @@
      myChargingOrderInfo.setChargeMode(chargingGun.getChargeMode());
      String name = chargingGunClient.getAllName(chargingOrder.getChargingGunId()).getData();
      myChargingOrderInfo.setName(name);
      if(null != chargingOrder.getAppUserCarId()){
         TAppUserCar tAppUserCar = appUserCarClient.getCarByIds(Arrays.asList(chargingOrder.getAppUserCarId())).getData().get(0);
         myChargingOrderInfo.setLicensePlate(tAppUserCar.getLicensePlate());
      }else{
         myChargingOrderInfo.setLicensePlate("无");
      if(Objects.nonNull(chargingOrder.getAppUserCarId())){
         TAppUserCar tAppUserCar = appUserCarClient.getCarById(chargingOrder.getAppUserCarId().toString()).getData();
         if(null != tAppUserCar){
            myChargingOrderInfo.setLicensePlate(tAppUserCar.getLicensePlate());
         }else{
            myChargingOrderInfo.setLicensePlate("无");
         }
      }
      myChargingOrderInfo.setStartTime(chargingOrder.getStartTime().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond() * 1000);
      myChargingOrderInfo.setEndTime(chargingOrder.getEndTime().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond() * 1000);
@@ -387,7 +392,7 @@
      TChargingOrder one = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getChargingGunId, addChargingOrder.getId())
            .in(TChargingOrder::getStatus, Arrays.asList(1, 2, 3)).eq(TChargingOrder::getDelFlag, 0));
      if(null != one){
         return AjaxResult.error("充电枪正在充电桩中,启动失败");
         return AjaxResult.error("充电枪正在充电中,启动失败");
      }
      //查询当前充电枪是否有正在支付的订单
      one = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getChargingGunId, addChargingOrder.getId())
@@ -447,6 +452,7 @@
      chargingOrder.setVipDiscountAmount(BigDecimal.ZERO);
      chargingOrder.setOrderSource(0);
      chargingOrder.setTitle("【充电桩充电】" + chargingPile.getNumber() + "号桩/" + tChargingGun.getCode() + "号枪");
      chargingOrder.setStatus(1);
      
      Site site = siteClient.getSiteByIds(Arrays.asList(tChargingGun.getSiteId())).getData().get(0);
      Integer accountingStrategyId = tChargingGun.getAccountingStrategyId();
@@ -686,9 +692,6 @@
      String key = "AQJC_" + chargingOrder.getChargingGunId();
      List<PlatformStartChargingReply> data = platformStartChargingReplyClient.getPlatformStartChargingReply(code).getData();
      log.error(code + ":-------------------开始检查调起充电结果-------------------" + data.toString());
      if(null == data || data.size() == 0){
         return false;
      }
      if(data.size() != 0){
         PlatformStartChargingReply platformStartChargingReply = data.get(1);
         Integer startup_result = platformStartChargingReply.getStartup_result();
@@ -737,7 +740,7 @@
            counter = (null == counter ? 0 : counter) + 1;
            boot_failed_map.put(code, counter);
            //启动失败
            preChargeCheck1.setStartupSuccess(3);
            preChargeCheck1.setStartupSuccess(1);
            preChargeCheck1.setFailureCause(0);
            redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
            return false;
@@ -981,16 +984,17 @@
      chargingOrder.setId(Long.valueOf(id));
      chargingOrder.setAppUserId(order.getAppUserId());
      chargingOrder.setEndTime(LocalDateTime.now());
      chargingOrder.setStatus(4);
      chargingOrder.setEndMode(1);
      this.updateById(chargingOrder);
      
      String code1 = chargingOrder.getCode();
      TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
      String code1 = order.getCode();
      TChargingGun chargingGun = chargingGunClient.getChargingGunById(order.getChargingGunId()).getData();
      //异步线程处理停机
      ExecutorService cachedThreadPool = Executors.newFixedThreadPool(1);
      cachedThreadPool.execute(()->{
         //调用硬件停止充电,停止成功后开始计算费用退款
         TChargingPile chargingPile = chargingPileClient.getChargingPileById(chargingOrder.getChargingPileId()).getData();
         TChargingPile chargingPile = chargingPileClient.getChargingPileById(order.getChargingPileId()).getData();
         PlatformStopCharging platformStopCharging = new PlatformStopCharging();
         platformStopCharging.setCharging_pile_code(chargingPile.getCode());
         platformStopCharging.setCharging_gun_code(chargingGun.getCode());
@@ -1102,12 +1106,12 @@
            String code = Double.valueOf(Math.random() * 1000).intValue() + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
            appUserIntegralChange.setCode(code);
            appUserIntegralChange.setAppUserId(appUser1.getId());
            appUserIntegralChange.setChangeType(5);
            appUserIntegralChange.setChangeType(4);
            appUserIntegralChange.setHistoricalIntegral(appUser1.getPoints());
            appUserIntegralChange.setCurrentIntegral(appUser1.getPoints() + num1);
            appUserIntegralChange.setCreateTime(LocalDateTime.now());
            appUserIntegralChange.setOrderCode(chargingOrder.getCode());
            appUserIntegralChange.setExtension(chargingOrder.getId().toString());
            appUserIntegralChange.setExtension(appUser.getId().toString());
            appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange);
            
            appUser1.setPoints(appUser1.getPoints() + num1);
@@ -1733,6 +1737,10 @@
         chargingOrder.setChargingCapacity(query.getCharging_degree());
         chargingOrder.setElectricity(query.getCharging_degree());
         chargingOrder.setTotalElectricity(new BigDecimal(100 - query.getSoc()));
         BmsDemandAndChargerExportation data = bmsDemandAndChargerExportationClient.getBmsDemandAndChargerExportation(chargingOrder.getCode()).getData();
         if(null != data){
            chargingOrder.setNeedElec(data.getBms_current_requirements());
         }
         this.updateById(chargingOrder);
      }
   }
@@ -1772,7 +1780,7 @@
   public void endChargeBillingCharge(TransactionRecordMessageVO vo) {
      TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, vo.getTransaction_serial_number()));
      Integer status = chargingOrder.getStatus();
      if(status == 4 || status == 5){
      if(status == 5){
         return;
      }
      
@@ -1865,9 +1873,7 @@
      } catch (ParseException e) {
         throw new RuntimeException(e);
      }
      System.err.println(start.getTime() + "\n" + end.getTime() + "\n" + lists.get(0).getStart() + "\n" + lists.get(0).getEnd());
      for (AccountingStrategyDetailOrderVo strategyDetail : lists) {
         BigDecimal sharp_peak_charge = strategyDetail.getChargingCapacity();
         TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy();
@@ -1900,16 +1906,16 @@
            serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount()).setScale(2, RoundingMode.DOWN);
         }
         chargingOrderAccountingStrategy.setChargingCapacity(sharp_peak_charge);
         chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc);
         chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge);
         chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice);
         chargingOrderAccountingStrategy.setVipDiscountAmount(vipDiscountAmount);
         chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc.setScale(2, RoundingMode.DOWN));
         chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge.setScale(2, RoundingMode.DOWN));
         chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice.setScale(2, RoundingMode.DOWN));
         chargingOrderAccountingStrategy.setVipDiscountAmount(vipDiscountAmount.setScale(2, RoundingMode.DOWN));
         chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
         chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy);
         
         periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc);
         periodServicePrice_total = periodServicePrice_total.add(originalServicePrice);
         total = total.add(electrovalenc.add(originalServicePrice));
         periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc.setScale(2, RoundingMode.DOWN));
         periodServicePrice_total = periodServicePrice_total.add(originalServicePrice.setScale(2, RoundingMode.DOWN));
         total = total.add(electrovalenc.add(originalServicePrice.setScale(2, RoundingMode.DOWN)));
      }
      
      
@@ -1959,13 +1965,13 @@
      if(null == chargingOrder.getEndMode()){
         order.setEndMode(1);
      }
      order.setResidualAmount(rechargeAmount.subtract(total));
      order.setResidualAmount(rechargeAmount.subtract(total).setScale(2, RoundingMode.DOWN));
      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.setElectrovalence(periodElectricPrice_total);
      order.setOrderAmount(orderAmount.setScale(2, RoundingMode.DOWN));
      order.setVipDiscountAmount(discountAmount.setScale(2, RoundingMode.DOWN));
      order.setElectrovalence(periodElectricPrice_total.setScale(2, RoundingMode.DOWN));
      order.setChargingCapacity(vo.getTotal_electricity());
      order.setElectricity(vo.getTotal_electricity());
      
@@ -2030,9 +2036,9 @@
         }
      }
      
      order.setServiceCharge(periodServicePrice_total);
      order.setPaymentAmount(payAmount);
      order.setRefundAmount(refundAmount);
      order.setServiceCharge(periodServicePrice_total.setScale(2, RoundingMode.DOWN));
      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());
@@ -2046,8 +2052,8 @@
            BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodServicePrice();
            BigDecimal multiply = couponDiscountAmount.multiply(periodServicePrice.divide(reduce, new MathContext(4, RoundingMode.HALF_EVEN)));
            periodServicePrice = periodServicePrice.subtract(multiply);
            chargingOrderAccountingStrategy.setPeriodServicePrice(periodServicePrice);
            chargingOrderAccountingStrategy.setCouponDiscountAmount(multiply);
            chargingOrderAccountingStrategy.setPeriodServicePrice(periodServicePrice.setScale(2, RoundingMode.DOWN));
            chargingOrderAccountingStrategy.setCouponDiscountAmount(multiply.setScale(2, RoundingMode.DOWN));
         }
         chargingOrderAccountingStrategyService.updateBatchById(list);
      }
@@ -2110,7 +2116,7 @@
         chargingOrderRefund.setRefundTitle("充电完成退款");
         chargingOrderRefund.setRefundContent("充电完成退款");
         chargingOrderRefund.setRefundReason("充电完成退款");
         chargingOrderRefund.setRefundRemark("实际充电消费金额:" + refundAmount);
         chargingOrderRefund.setRefundRemark("实际充电消费金额:" + chargingOrder.getPaymentAmount());
         chargingOrderRefund.setRefundTotalAmount(refundAmount);
         chargingOrderRefund.setPayAmount(rechargeAmount);
         if(1 == rechargePaymentType){
@@ -2243,6 +2249,9 @@
            if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount())==-1){
               return R.fail("退款金额需小于支付金额");
            }
            if ((tChargingOrder.getRechargeAmount().subtract(payOrderQueryDto.getRefundAmount()).compareTo(tChargingOrder.getPaymentAmount()))==0){
               tChargingOrder.setStatus(5);
            }
            TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
@@ -2309,6 +2318,10 @@
            if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount())==-1){
               return R.fail("退款金额需小于支付金额");
            }
            if ((tChargingOrder.getPaymentAmount().subtract(payOrderQueryDto.getRefundAmount()).compareTo(tChargingOrder.getPaymentAmount()))==0){
               tChargingOrder.setStatus(5);
            }
            TShoppingOrderRefund chargingOrderRefund = new TShoppingOrderRefund();
            chargingOrderRefund.setShoppingOrderId(tChargingOrder.getId());
            chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount());
@@ -2359,9 +2372,7 @@
                  tChargingOrder.setRefundStatus(2);
                  tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
                  if (payOrderQueryDto.getRefundAmount().compareTo(tChargingOrder.getPaymentAmount())==0){
                     tChargingOrder.setStatus(5);
                  }
                  shoppingOrderService.updateById(tChargingOrder);
                  shoppingOrderRefundService.save(chargingOrderRefund);
@@ -2376,6 +2387,8 @@
         if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount())==-1){
            return R.fail("退款金额需小于支付金额");
         }
         TVipOrderRefund chargingOrderRefund = new TVipOrderRefund();
         chargingOrderRefund.setVipOrderId(tChargingOrder.getId());
         chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount());
@@ -2455,7 +2468,7 @@
      }
      TChargingOrder one = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserCarId, appUserCar.getId())
            .eq(TChargingOrder::getDelFlag, 0).gt(TChargingOrder::getStartTime, query.getStartTime())
            .eq(TChargingOrder::getRechargePaymentStatus, 2).ne(TChargingOrder::getStatus, -1));
            .eq(TChargingOrder::getRechargePaymentStatus, 2).ne(TChargingOrder::getStatus, 5));
      return one;
   }
@@ -2588,7 +2601,7 @@
         tSettlementConfirm.setRemark(dto.getRemark());
         tSettlementConfirm.setServicePartner(dto.getServicePartner());
         tSettlementConfirm.setServiceMoney(dto.getServiceMoney());
         BigDecimal subtract = new BigDecimal("1").subtract(dto.getProportionPartner());
         BigDecimal subtract = new BigDecimal("1").subtract(dto.getProportionPartner().multiply(new BigDecimal("0.01")));
         // 总电损费用
         BigDecimal divide = tSettlementConfirm.getProportionMoney().divide(subtract, 2, RoundingMode.HALF_DOWN);
         // 平台承担电损
@@ -2750,10 +2763,17 @@
         }
         // 充电总时长
         Long temp = 0L;
         Long temp = 1L;
         if (StringUtils.hasLength(stringBuilder.toString())){
            List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getOrderInfoByCodes(stringBuilder.substring(0,stringBuilder.length()-1)).getData();
            temp+=(data6.stream().mapToLong(UploadRealTimeMonitoringData::getCumulative_charging_time).sum()*60);
            String substring = stringBuilder.substring(0, stringBuilder.length() - 1);
            for (String s : substring.split(",")) {
               UploadRealTimeMonitoringData data6 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(s).getData();
               if (data6!=null){
                  temp+=(data6.getCumulative_charging_time()*60);
               }
            }
         }
         List<TChargingPile> data = siteClient.getPileListBySiteId(tSettlementConfirm.getSiteId()).getData();
         // 计算充电桩的功率平均值
@@ -2793,7 +2813,7 @@
            if (tSettlementConfirm.getSiteId().equals(settlementConfirm.getSiteId())){
               // 电站相同比较收入涨幅跌幅
               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"));
                  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"+"%");
@@ -2999,4 +3019,9 @@
      }
      return this.list(queryWrapper.orderByDesc(TChargingOrder::getCreateTime));
   }
   @Override
   public Long countCar(List<String> brands) {
      return this.baseMapper.countCar(brands);
   }
}