puzhibing
2024-09-18 4b486f955cd3d36fa09e372c484b7a66711d7ec7
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -417,7 +417,7 @@
      //构建新的待支付订单
      SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
      TChargingOrder chargingOrder = new TChargingOrder();
      String code = "CD" + Math.random() * 1000 + sdf.format(new Date());
      String code = "CD" + Double.valueOf(Math.random() * 1000).intValue() + sdf.format(new Date());
      chargingOrder.setCode(code);
      chargingOrder.setOrderType(1);
      chargingOrder.setOrderClassification(1);
@@ -450,8 +450,14 @@
      this.save(chargingOrder);
      //添加订单的计费策略
      TAccountingStrategy accountingStrategy = accountingStrategyClient.getAccountingStrategyById(tChargingGun.getAccountingStrategyId()).getData();
      List<TAccountingStrategyDetail> strategyDetailList = accountingStrategyDetailClient.getListByAccountingStrategyId(tChargingGun.getAccountingStrategyId()).getData();
      Integer accountingStrategyId = tChargingGun.getAccountingStrategyId();
      if(null == accountingStrategyId){
         //查询站点上面的计费策略
         Site site = siteClient.getSiteByIds(Arrays.asList(tChargingGun.getSiteId())).getData().get(0);
         accountingStrategyId = site.getAccountingStrategyId();
      }
      TAccountingStrategy accountingStrategy = accountingStrategyClient.getAccountingStrategyById(accountingStrategyId).getData();
      List<TAccountingStrategyDetail> strategyDetailList = accountingStrategyDetailClient.getListByAccountingStrategyId(accountingStrategyId).getData();
      AccountingStrategyOrder accountingStrategyOrder = new AccountingStrategyOrder();
      BeanUtils.copyProperties(accountingStrategy, accountingStrategyOrder);
      accountingStrategyOrder.setChargingOrderId(chargingOrder.getId());
@@ -627,7 +633,7 @@
         TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
         chargingOrderRefund.setChargingOrderId(chargingOrder.getId());
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
         chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Math.random() * 1000));
         chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + Double.valueOf(Math.random() * 1000).intValue());
         chargingOrderRefund.setRefundAmount(rechargeAmount);
         chargingOrderRefund.setRefundStatus(1);
         chargingOrderRefund.setPayType(rechargePaymentType);
@@ -838,7 +844,7 @@
         }
         TAppUser appUser1 = appUserClient.getUserById(appUser.getInviteUserId()).getData();
         TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange();
         String code = Math.random() * 1000 + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
         String code = Double.valueOf(Math.random() * 1000).intValue() + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
         appUserIntegralChange.setCode(code);
         appUserIntegralChange.setAppUserId(appUser.getInviteUserId());
         appUserIntegralChange.setChangeType(5);
@@ -937,7 +943,7 @@
         TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
         chargingOrderRefund.setChargingOrderId(chargingOrder.getId());
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
         chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Math.random() * 1000));
         chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
         chargingOrderRefund.setRefundAmount(refundAmount);
         chargingOrderRefund.setRefundStatus(1);
         chargingOrderRefund.setPayType(rechargePaymentType);
@@ -1384,6 +1390,22 @@
      TChargingOrder chargingOrder= this.getById(uid);
      ChargingOrderListInfoVO chargingOrderListInfoVO = new ChargingOrderListInfoVO();
      chargingOrderListInfoVO.setElectrovalence(chargingOrder.getElectrovalence());
      chargingOrderListInfoVO.setServiceCharge(chargingOrder.getServiceCharge());
      if (chargingOrder.getElectrovalence()!=null && chargingOrder.getServiceCharge()!=null){
         chargingOrderListInfoVO.setTotal(chargingOrder.getElectrovalence().add(chargingOrder.getServiceCharge()));
      }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){
            chargingOrderListInfoVO.setRealTotal(chargingOrderListInfoVO.getTotal().subtract(chargingOrder.getCouponDiscountAmount()).subtract(chargingOrder.getVipDiscountAmount()).subtract(chargingOrder.getSharingAmount()).subtract(chargingOrder.getCommissionAmount()));
         }else{
            chargingOrderListInfoVO.setRealTotal(chargingOrderListInfoVO.getTotal());
         }
      }else{
         chargingOrderListInfoVO.setRealTotal(new BigDecimal("0"));
      }
      chargingOrderListInfoVO.setCode(chargingOrder.getCode());
      List<Site> data = siteClient.getSiteByIds(Arrays.asList(chargingOrder.getSiteId())).getData();
      if (!data.isEmpty()){
@@ -1589,7 +1611,7 @@
         }
         TAppUser appUser1 = appUserClient.getUserById(appUser.getInviteUserId()).getData();
         TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange();
         String code = Math.random() * 1000 + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
         String code = Double.valueOf(Math.random() * 1000).intValue() + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
         appUserIntegralChange.setCode(code);
         appUserIntegralChange.setAppUserId(appUser.getInviteUserId());
         appUserIntegralChange.setChangeType(5);
@@ -1695,7 +1717,7 @@
            chargingOrderRefund.setRefundTime(LocalDateTime.now());
            chargingOrderRefund.setCode(tChargingOrder.getCode());
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
            chargingOrderRefund.setRefundCode("GDF" + sdf.format(new Date()) + (Math.random() * 1000));
            chargingOrderRefund.setRefundCode("GDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
            chargingOrderRefund.setRefundTitle("后台退款");
            chargingOrderRefund.setRefundContent("后台退款");
            chargingOrderRefund.setRefundReason("后台退款");
@@ -1782,18 +1804,25 @@
      String startTime = dto.getStartTime();
      String endTime = dto.getEndTime();
      // 将这两个时间转化为localDateTime
      tSettlementConfirm.setStartTime(LocalDateTime.parse(startTime));
      tSettlementConfirm.setEndTime(LocalDateTime.parse(endTime));
      // 创建 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())
            .eq("recharge_payment_status",2);
      switch (dto.getType()){
         case 1:
            eq.between("start_time", startTime, endTime);
            eq.between("start_time", localDateTime, localDateTime1);
            break;
         case 2:
            eq.between("end_time", startTime, endTime);
            eq.between("end_time", localDateTime, localDateTime1);
            break;
      }
      List<TChargingOrder> tChargingOrders = this.baseMapper.selectList(eq);
@@ -1817,13 +1846,23 @@
      BigDecimal paymentAmount = new BigDecimal("0");
      for (TChargingOrder tChargingOrder : tChargingOrders) {
         // 累加充电总度数
         chargingElectronic = chargingElectronic.add(tChargingOrder.getChargingCapacity());
         if (tChargingOrder.getChargingCapacity()!=null){
            chargingElectronic = chargingElectronic.add(tChargingOrder.getChargingCapacity());
         }
         // 累加分佣
         sharingAmount = sharingAmount.add(tChargingOrder.getSharingAmount());
         if (tChargingOrder.getSharingAmount()!=null) {
            sharingAmount = sharingAmount.add(tChargingOrder.getSharingAmount());
         }
         // 累加电费
         if (tChargingOrder.getElectrovalence()!=null) {
         electrovalence = electrovalence.add(tChargingOrder.getElectrovalence());
         }
         // 累加服务费
         serviceCharge = serviceCharge.add(tChargingOrder.getServiceCharge());
         if (tChargingOrder.getServiceCharge()!=null){
            serviceCharge = serviceCharge.add(tChargingOrder.getServiceCharge());
         }
         // 累加会员折扣
         if (tChargingOrder.getVipDiscountAmount()!=null){
            vipDiscount = vipDiscount.add(tChargingOrder.getVipDiscountAmount());
@@ -1832,11 +1871,13 @@
         if (tChargingOrder.getCouponDiscountAmount()!=null){
            couponDiscount = couponDiscount.add(tChargingOrder.getCouponDiscountAmount());
         }
         if (tChargingOrder.getRefundStatus() == 2){
         if (tChargingOrder.getRefundStatus()!=null &&tChargingOrder.getRefundStatus() == 2){
            // 如果成功退款 那么减去退款金额
            paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount().subtract(tChargingOrder.getRefundAmount()));
         }else{
            paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount());
            if (tChargingOrder.getPaymentAmount()!=null){
               paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount());
            }
         }
      }
      // 三方交易手续费 三方收费*0.6%
@@ -1852,34 +1893,36 @@
      tSettlementConfirm.setVipDiscount(vipDiscount);
      tSettlementConfirm.setCouponDiscount(couponDiscount);
      tSettlementConfirm.setSiteId(dto.getSiteId());
      tSettlementConfirm.setMeteringElectronic(dto.getData().getMeteringElectronic());
      tSettlementConfirm.setChargingElectronic(chargingElectronic);
      tSettlementConfirm.setLossElectronic(dto.getData().getLossElectronic());
      tSettlementConfirm.setIncome(chargingElectronic.add(serviceCharge));
      tSettlementConfirm.setVenue(dto.getData().getVenue());
      tSettlementConfirm.setMetering(dto.getData().getMetering());
      tSettlementConfirm.setClean(dto.getData().getClean());
      tSettlementConfirm.setMaintain(dto.getData().getMaintain());
      tSettlementConfirm.setCost(dto.getData().getVenue().add(dto.getData().getClean()).add(dto.getData().getMaintain()));
      tSettlementConfirm.setProfitMoney(new BigDecimal("0"));
      tSettlementConfirm.setNewMoney(new BigDecimal("0"));
      tSettlementConfirm.setNewSettlement(new BigDecimal("0"));
      tSettlementConfirm.setVipDiscount(vipDiscount);
      tSettlementConfirm.setCouponDiscount(couponDiscount);
      tSettlementConfirm.setSupplyElectronic(dto.getData().getSupplyElectronic());
      tSettlementConfirm.setType(dto.getType());
      tSettlementConfirm.setProportionPartner(dto.getData().getProportionPartner());
      tSettlementConfirm.setProportionMoney(dto.getData().getProportionMoney());
      tSettlementConfirm.setTotalElectronic(dto.getData().getTotalElectronic());
      tSettlementConfirm.setTotalService(dto.getData().getTotalService());
      tSettlementConfirm.setRemark(dto.getData().getRemark());
      tSettlementConfirm.setServicePartner(dto.getData().getServicePartner());
      tSettlementConfirm.setServiceMoney(dto.getData().getServiceMoney());
      tSettlementConfirm.setTotalService(dto.getData().getTotalService());
      tSettlementConfirm.setServiceRemark(dto.getData().getServiceRemark());
      tSettlementConfirm.setDistribution(dto.getData().getDistribution());
      tSettlementConfirm.setIncome(dto.getData().getElectrovalence().add(dto.getData().getServiceCharge()));
      if (dto.getState() == 2){
         tSettlementConfirm.setSupplyElectronic(dto.getSupplyElectronic());
         tSettlementConfirm.setVenue(dto.getVenue());
         tSettlementConfirm.setMetering(dto.getMetering());
         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());
         tSettlementConfirm.setTotalElectronic(dto.getTotalElectronic());
         tSettlementConfirm.setTotalService(dto.getTotalService());
         tSettlementConfirm.setRemark(dto.getRemark());
         tSettlementConfirm.setServicePartner(dto.getServicePartner());
         tSettlementConfirm.setServiceMoney(dto.getServiceMoney());
         tSettlementConfirm.setTotalService(dto.getTotalService());
         tSettlementConfirm.setServiceRemark(dto.getServiceRemark());
         tSettlementConfirm.setDistribution(dto.getDistribution());
         tSettlementConfirm.setIncome(dto.getElectrovalence().add(dto.getServiceCharge()));
         tSettlementConfirm.setCost(dto.getVenue().add(dto.getClean()).add(dto.getMaintain()));
         tSettlementConfirmMapper.insert(tSettlementConfirm);
      }
      return tSettlementConfirm;
@@ -1891,14 +1934,15 @@
      List<TSettlementConfirm> list = tSettlementConfirmMapper.settlementList(pageInfo,dto);
      for (TSettlementConfirm tSettlementConfirm : list) {
         tSettlementConfirm.setUid(tSettlementConfirm.getId().toString());
         Partner data = siteClient.getPartnerR(tSettlementConfirm.getPartnerId()).getData();
         List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(tSettlementConfirm.getSiteId())).getData();
         if (!data1.isEmpty()){
            tSettlementConfirm.setSiteName(data1.get(0).getName());
            Partner data = siteClient.getPartnerR(data1.get(0).getPartnerId()).getData();
            if (data!=null){
               tSettlementConfirm.setPartnerName(data.getName());
            }
         }
         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);
@@ -1906,7 +1950,7 @@
      }
      pageInfo.setRecords(list);
      return null;
      return pageInfo;
   }
   @Override
@@ -2015,7 +2059,7 @@
         for (TChargingPile datum : data) {
            bigDecimal = bigDecimal.add(datum.getRatedPower());
         }
         BigDecimal bigDecimal1 = bigDecimal.divide(new BigDecimal(data.size())).setScale(2, RoundingMode.HALF_DOWN);
         tSettlementConfirm.setIncome(tSettlementConfirm.getElectrovalence().add(tSettlementConfirm.getServiceCharge()));
         // todo 计算利用率 该电站充电桩本月利用率:
@@ -2066,13 +2110,23 @@
      tSettlementConfirm.setVipDiscount(vipDiscount);
      tSettlementConfirm.setCouponDiscount(couponDiscount);
      // 本月
      BigDecimal subtract = income.subtract(beforeIncome).divide(beforeIncome).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
      tSettlementConfirm.setIncomePercentage(subtract+"%");
      if (beforeIncome.compareTo(new BigDecimal("0")) == 0){
         tSettlementConfirm.setIncomePercentage(0+"%");
         tSettlementConfirm.setIncomePercentage(0+"%");
      }else{
         BigDecimal subtract = income.subtract(beforeIncome).divide(beforeIncome).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
         tSettlementConfirm.setIncomePercentage(subtract+"%");
         tSettlementConfirm.setIncomePercentage(subtract+"%");
      }
      // 比较总利润 收入合计-成本合计
      BigDecimal subtract1 = income.subtract(cost);
      BigDecimal subtract2 = beforeIncome.subtract(beforeCost);
      tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"))+"%");
      tSettlementConfirm.setIncomePercentage(subtract+"%");
      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.setElectronicRefund(0);
      // 查询上次汇报数据 进行比对涨幅跌幅
      total.add(tSettlementConfirm);
@@ -2081,6 +2135,71 @@
      return res;
   }
   @Override
   public List<Map<String, Object>> countBySource(List<Integer> siteIds) {
      return this.baseMapper.countBySource(siteIds);
   }
   @Override
   public List<Map<String, Object>> equipmentUserType1(List<Integer> siteIds, ChargingStatisticsQueryDto 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);
   }
   @Override
   public List<Map<String, Object>> equipmentMapbroke1(List<Integer> siteIds, ChargingStatisticsQueryDto 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);
   }
   @Override
   public List<Map<String, Object>> equipmentMapOut1(List<Integer> siteIds, ChargingStatisticsQueryDto 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);
   }
   @Override
   public List<Map<String, Object>> needElec(List<Integer> siteIds, ChargingStatisticsQueryDto 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);
   }
   @Override
   public List<Map<String, Object>> getDateType(List<Integer> siteIds, ChargingDetailQueryDto 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);
   }
   @Override
   public List<Map<String, Object>> getchargingCapacity(List<Integer> siteIds, ChargingDetailQueryDto statisticsQueryDto) {
      return this.baseMapper.getchargingCapacity(siteIds,statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> countAllUserData() {
      return this.baseMapper.countAllUserData();
   }
   public static void main(String[] args) {
//      String format = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));
//      String format1 = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));