Pu Zhibing
2025-02-14 95da1e36eaad95a0701c7b6f44534054d217557f
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java
@@ -107,6 +107,14 @@
        Long userId = tokenService.getLoginUser().getUserid();
        // 查询当前登陆人按钮权限
        SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
        List<Site> siteList = siteClient.getSiteAll().getData();
        List<TChargingGun> gunList = chargingGunClient.getAllGun().getData();
        List<TChargingPile> pileList = chargingGunClient.getAllPile().getData();
        List<TAppUser> userList = appUserClient.getAllUser().getData();
        List<TAppUserCar> carList = appUserCarClient.getAllCar().getData();
        List<TChargingOrder> total = chargingOrderList.selectList(new LambdaQueryWrapper<>(TChargingOrder.class)
                .eq(TChargingOrder::getRechargePaymentStatus, 2));
        List<TChargingOrderRefund> totalRefund = chargingOrderRefundService.lambdaQuery().eq(TChargingOrderRefund::getRefundStatus, 2).list();
        Integer roleType = sysUser.getRoleType();
        List<Integer> siteIds = new ArrayList<>();
            //如果没传siteId,获取当前登陆人所有的siteIds
@@ -142,9 +150,8 @@
        PageInfo<ChargingBillListVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
        PageInfo<ChargingBillListVO> pageInfo1 = new PageInfo<>(1,9999999);
        List<ChargingBillListVO> list = this.baseMapper.chargingBillList1(pageInfo,dto,startTime1,startTime2);
        List<ChargingBillListVO> list1 = this.baseMapper.chargingBillList1(pageInfo1,dto,startTime1,startTime2);
        List<ChargingBillListVO> list1 = this.baseMapper.chargingBillList1Nolimt(dto,startTime1,startTime2);
        BigDecimal paymentAmountTotal = new BigDecimal("0");
        BigDecimal orderAmountTotal = new BigDecimal("0");
@@ -156,6 +163,7 @@
        BigDecimal chargingCapacityTotal = new BigDecimal("0");
        BigDecimal discountTotal = new BigDecimal("0");
        int orderCount = 0;
        for (ChargingBillListVO chargingBillListVO : list) {
            if (roleType==2){
@@ -192,23 +200,19 @@
            chargingBillListVO.setUid(chargingBillListVO.getId().toString());
            // 根据账单的出账时间 查询上个月的充电订单
            LocalDateTime localDate = chargingBillListVO.getBillTime().minusMonths(1);
//            LocalDateTime localDate = chargingBillListVO.getBillTime().minusDays(1);
            // 账单周期
            chargingBillListVO.setBillWeek(localDate.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM")));
            // 获取 LocalDate 对象
            LocalDate date = localDate.toLocalDate();
//            // 获取该月份的第一天
            LocalDate firstDayOfMonth = date.withDayOfMonth(1);
            // 获取该月份的最后一天
            LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
            QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
                    .between("pay_time", firstDayOfMonth.atTime(0, 0, 0), lastDayOfMonth.atTime(23, 59, 59))
                    .eq("status", 5)
                    .eq("recharge_payment_status", 2);
            if (chargingBillListVO.getType() == 2) {
                eq.eq("site_id", chargingBillListVO.getSiteId());
            }
            List<TChargingOrder> tChargingOrders = chargingOrderList.selectList(eq);
            LocalDateTime lastDayOfMonth = localDate.with(TemporalAdjusters.lastDayOfMonth());
            LocalDateTime firstDayOfMonth = localDate.with(TemporalAdjusters.firstDayOfMonth());
            List<TChargingOrder> tChargingOrders = total.stream().filter(e -> chargingBillListVO.getType() == 2 ?
                    e.getSiteId().equals(chargingBillListVO.getSiteId()) : true &&
                    e.getPayTime().isBefore(lastDayOfMonth.withHour(23).withMinute(59).withSecond(59))
                    && e.getPayTime().isAfter(firstDayOfMonth.withHour(0).withMinute(0).withSecond(0))).collect(Collectors.toList());
            int chargingSecond = 0;
            BigDecimal paymentAmount = new BigDecimal("0");
            BigDecimal rechargeAmount = new BigDecimal("0");
@@ -223,12 +227,12 @@
            chargingBillVO.setCategory("");
            chargingBillVO.setExportList(tChargingOrders);
            for (TChargingOrder tChargingOrder : tChargingOrders) {
                List<Site> data = siteClient.getSiteByIds(Arrays.asList(tChargingOrder.getSiteId())).getData();
                if (!data.isEmpty()){
                    chargingBillVO.setSiteName(data.get(0).getName());
                Site site1 = siteList.stream().filter(site -> site.getId().equals(tChargingOrder.getSiteId())).findFirst().orElse(null);
                if (site1!=null){
                    chargingBillVO.setSiteName(site1.getName());
                }
                TChargingPile data1 = chargingPileClient.getChargingPileById(tChargingOrder.getChargingPileId()).getData();
                TChargingGun data2 = chargingGunClient.getChargingGunById(tChargingOrder.getChargingGunId()).getData();
                TChargingPile data1 = pileList.stream().filter(e -> e.getId().equals(tChargingOrder.getChargingPileId())).findFirst().orElse(null);
                TChargingGun data2 = gunList.stream().filter(e -> e.getId().equals(tChargingOrder.getChargingGunId())).findFirst().orElse(null);
                if (data1!=null && data2!=null){
                    tChargingOrder.setTerminalName(data1.getName()+data2.getName());
                    tChargingOrder.setTerminalCode(data2.getCode());
@@ -287,37 +291,39 @@
                tChargingOrder.setDiscount(tChargingOrder.getCouponDiscountAmount()!=null?tChargingOrder.getCouponDiscountAmount().toString():"0");
                UploadRealTimeMonitoringData data5 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(tChargingOrder.getCode()).getData();
                if (data5!=null){
                    if (data5.getTime_remaining()!=null){
                        chargingSecond+=data5.getTime_remaining()*60;
                    }
                    Integer cumulativeChargingTime = data5.getCumulative_charging_time();
                    // 将其转化为xx小时xx分钟xx秒显示 如果是0小时则不展示小时 如果是0分钟则不展示分钟
                    if (cumulativeChargingTime!=null){
                        // 计算小时、分钟和秒
                        int hours = cumulativeChargingTime / 60;
                        int minutes = cumulativeChargingTime % 60;
                        int seconds = 0; // 如果没有秒数,则默认是0
                        StringBuilder result = new StringBuilder();
                        if (hours > 0) {
                            result.append(hours).append("小时");
                        }
                        if (minutes > 0) {
                            result.append(minutes).append("分钟");
                        }
                        if (seconds > 0 || result.length() == 0) { // 如果秒数大于0,或者小时和分钟都为0,则显示秒数
                            result.append(seconds).append("秒");
                        }
                        tChargingOrder.setChargingTime(result.toString());
                    }
                    tChargingOrder.setEndSoc(data5.getSoc().toString());
                }
                if (tChargingOrder.getStartTime()!=null && tChargingOrder.getEndTime()!=null){
                    LocalDateTime startTime = tChargingOrder.getStartTime();
                    LocalDateTime endTime = tChargingOrder.getEndTime();
                    // 计算时间差 单位秒
                    long between = ChronoUnit.SECONDS.between(startTime, endTime);
                    chargingSecond+=between;
                    // 将其转化为xx小时xx分钟xx秒显示 如果是0小时则不展示小时 如果是0分钟则不展示分钟
                TAppUser data3 = appUserClient.getUserById(tChargingOrder.getAppUserId()).getData();
                    // 计算小时、分钟和秒
                    long hours = between / 60 / 60;
                    long minutes = (between % 3600) / 60;
                    long seconds = between % 60; // 如果没有秒数,则默认是0
                    StringBuilder result = new StringBuilder();
                    if (hours > 0) {
                        result.append(hours).append("小时");
                    }
                    if (minutes > 0) {
                        result.append(minutes).append("分钟");
                    }
                    if (seconds > 0 || result.length() == 0) { // 如果秒数大于0,或者小时和分钟都为0,则显示秒数
                        result.append(seconds).append("秒");
                    }
                    tChargingOrder.setChargingTime(result.toString());
                }
                TAppUser data3 = userList.stream().filter(e -> e.getId().equals(tChargingOrder.getAppUserId())).findFirst().orElse(null);
                if (tChargingOrder.getAppUserCarId()!=null){
                    List<TAppUserCar> data4 = appUserCarClient.getCarByIds(Arrays.asList(tChargingOrder.getAppUserCarId())).getData();
                    if (!data4.isEmpty()){
                        tChargingOrder.setLicensePlate(data4.get(0).getLicensePlate());
                        tChargingOrder.setVehicleModel(data4.get(0).getVehicleModel());
                    TAppUserCar data4 = carList.stream().filter(e -> e.getId().equals(tChargingOrder.getAppUserCarId())).findFirst().orElse(null);
                    if (data4!=null){
                        tChargingOrder.setLicensePlate(data4.getLicensePlate());
                        tChargingOrder.setVehicleModel(data4.getVehicleModel());
                    }
                }else{
                    tChargingOrder.setLicensePlate(tChargingOrder.getPlateNum());
@@ -338,12 +344,9 @@
                if (tChargingOrder.getRechargeAmount()!=null){
                    rechargeAmount = rechargeAmount.add(tChargingOrder.getRechargeAmount());
                }
                List<TChargingOrderRefund> list2 = chargingOrderRefundService.lambdaQuery().eq(TChargingOrderRefund::getRefundStatus, 2)
                        .eq(TChargingOrderRefund::getChargingOrderId, tChargingOrder.getId()).list();
                List<TChargingOrderRefund> list2 = totalRefund.stream().filter(e -> e.getChargingOrderId().equals(tChargingOrder.getId())).collect(Collectors.toList());
                for (TChargingOrderRefund tChargingOrderRefund : list2) {
                    if (tChargingOrderRefund.getRefundStatus()==2){
                        refundAmount = refundAmount.add(tChargingOrderRefund.getRefundTotalAmount());
                    }
                }
                // 累加累计服务费
                if (tChargingOrder.getServiceCharge()!=null){
@@ -351,7 +354,7 @@
                }
                // 累加平台手续费
                if (tChargingOrder.getOrderAmount()!=null){
                    commissionAmount = commissionAmount.add(tChargingOrder.getPaymentAmount().multiply(BigDecimal.valueOf(0.006))
                    commissionAmount = commissionAmount.add(tChargingOrder.getRechargeAmount().multiply(BigDecimal.valueOf(0.006))
                            .setScale(2,BigDecimal.ROUND_DOWN));
                }
                // 累加平台分佣
@@ -383,14 +386,14 @@
            chargingBillListVO.setCommissionAmount(commissionAmount == null?BigDecimal.ZERO:commissionAmount.setScale(2,BigDecimal.ROUND_DOWN));
            chargingBillListVO.setSharingAmount(sharingAmount == null?BigDecimal.ZERO:sharingAmount);
            chargingBillListVO.setChargingCapacity(chargingCapacity == null?BigDecimal.ZERO:chargingCapacity);
            chargingBillListVO.setBillMoney(rechargeAmount.subtract(refundAmount==null?BigDecimal.ZERO:refundAmount)
            chargingBillListVO.setBillMoney(orderAmount
                            .subtract(commissionAmount.setScale(2,BigDecimal.ROUND_DOWN)).subtract(sharingAmount).setScale(2, BigDecimal.ROUND_DOWN));
            switch (chargingBillListVO.getType()){
                case 1:
                    chargingBillListVO.setSiteName("全站");
                    break;
                case 2:
                    Site site = siteClient.getSiteByIds(Arrays.asList(chargingBillListVO.getSiteId())).getData().get(0);
                    Site site = siteList.stream().filter(e -> e.getId().equals(chargingBillListVO.getSiteId())).findFirst().orElse(null);
                    if (site!=null){
                        chargingBillListVO.setSiteName(site.getName());
                    }
@@ -418,23 +421,19 @@
            chargingBillVO.setBillWeek(billTime.minusMonths(1).format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM")));
            chargingBillListVO.setUid(chargingBillListVO.getId().toString());
            // 根据账单的出账时间 查询上个月的充电订单
            LocalDateTime localDate = chargingBillListVO.getBillTime().minusMonths(1);
            // 账单周期
            chargingBillListVO.setBillWeek(localDate.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM")));
            // 获取 LocalDate 对象
            LocalDate date = localDate.toLocalDate();
            // 获取该月份的第一天
            LocalDate firstDayOfMonth = date.withDayOfMonth(1);
//            // 获取该月份的第一天
            // 获取该月份的最后一天
            LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
            QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
                    .between("create_time", firstDayOfMonth, lastDayOfMonth)
                    .eq("status", 5)
                    .eq("recharge_payment_status", 2);
            if (chargingBillListVO.getType() == 2) {
                eq.eq("site_id", chargingBillListVO.getSiteId());
            }
            List<TChargingOrder> tChargingOrders = chargingOrderList.selectList(eq);
            LocalDateTime lastDayOfMonth = localDate.with(TemporalAdjusters.lastDayOfMonth());
            LocalDateTime firstDayOfMonth = localDate.with(TemporalAdjusters.firstDayOfMonth());
            List<TChargingOrder> tChargingOrders = total.stream().filter(e -> chargingBillListVO.getType() == 2 ?
                    e.getSiteId().equals(chargingBillListVO.getSiteId()) : true &&
                    e.getPayTime().isBefore(lastDayOfMonth.withHour(23).withMinute(59).withSecond(59))
                    && e.getPayTime().isAfter(firstDayOfMonth.withHour(0).withMinute(0).withSecond(0))).collect(Collectors.toList());
            tChargingOrders1.addAll(tChargingOrders);
            orderCount+=tChargingOrders.size();
            chargingBillVO.setCategory("");
@@ -452,8 +451,7 @@
                if (tChargingOrder.getElectrovalence()!=null){
                    electrovalenceTotal = electrovalenceTotal.add(tChargingOrder.getElectrovalence());
                }
                List<TChargingOrderRefund> list2 = chargingOrderRefundService.lambdaQuery().eq(TChargingOrderRefund::getChargingOrderId, tChargingOrder.getId())
                        .eq(TChargingOrderRefund::getRefundStatus, 2).list();
                List<TChargingOrderRefund> list2 = totalRefund.stream().filter(e -> e.getChargingOrderId().equals(tChargingOrder.getId())).collect(Collectors.toList());
                for (TChargingOrderRefund tChargingOrderRefund : list2) {
                    refundAmountTotal =refundAmountTotal.add(tChargingOrderRefund.getRefundAmount());
                    tChargingOrder.setRefundAmount(tChargingOrderRefund.getRefundAmount());
@@ -468,7 +466,7 @@
                }
                // 累加平台手续费
                if (tChargingOrder.getOrderAmount()!=null){
                    commissionAmountTotal = commissionAmountTotal.add(tChargingOrder.getPaymentAmount().multiply(new BigDecimal("0.006"))
                    commissionAmountTotal = commissionAmountTotal.add(tChargingOrder.getRechargeAmount().multiply(new BigDecimal("0.006"))
                            .setScale(2,BigDecimal.ROUND_DOWN));
                }
                // 累加平台分佣
@@ -492,7 +490,7 @@
        chargingBillVO.setOrderCount(i);
        chargingBillVO.setChargingCapacity(chargingCapacityTotal);
        chargingBillVO.setPaymentAmount(paymentAmountTotal);
        chargingBillVO.setOrderAmount(paymentAmountTotal.subtract(refundAmountTotal).subtract(commissionAmountTotal).subtract(sharingAmountTotal));
        chargingBillVO.setOrderAmount(orderAmountTotal.subtract(commissionAmountTotal).subtract(sharingAmountTotal));
        chargingBillVO.setElectrovalence(electrovalenceTotal);
        chargingBillVO.setServiceCharge(serviceChargeTotal);
        chargingBillVO.setOrderCount(orderCount);
@@ -641,7 +639,6 @@
            chargingBillListVO.setUid(chargingBillListVO.getId().toString());
            // 根据账单的出账时间 查询上个月的充电订单
            LocalDateTime localDate = chargingBillListVO.getBillTime().minusMonths(1);
//            LocalDateTime localDate = chargingBillListVO.getBillTime().minusDays(1);
            // 账单周期
            chargingBillListVO.setBillWeek(localDate.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM")));
            // 获取 LocalDate 对象
@@ -649,13 +646,6 @@
            // 获取该月份的最后一天
            LocalDateTime lastDayOfMonth = localDate.with(TemporalAdjusters.lastDayOfMonth());
            LocalDateTime firstDayOfMonth = localDate.with(TemporalAdjusters.firstDayOfMonth());
//            QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
//                    .between("pay_time", firstDayOfMonth.withHour(0).withMinute(0).withSecond(0), lastDayOfMonth.withHour(23).withMinute(59).withSecond(59))
//                    .eq("recharge_payment_status", 2);
//            if (chargingBillListVO.getType() == 2) {
//                eq.eq("site_id", chargingBillListVO.getSiteId());
//            }
//            List<TChargingOrder> tChargingOrders = chargingOrderList.selectList(eq);
            List<TChargingOrder> tChargingOrders = total.stream().filter(e -> chargingBillListVO.getType() == 2 ?
                    e.getSiteId().equals(chargingBillListVO.getSiteId()) : true &&
                    e.getPayTime().isBefore(lastDayOfMonth.withHour(23).withMinute(59).withSecond(59))
@@ -790,7 +780,7 @@
                }
                // 累加平台手续费
                if (tChargingOrder.getOrderAmount()!=null){
                    commissionAmount = commissionAmount.add(tChargingOrder.getPaymentAmount().multiply(BigDecimal.valueOf(0.006))
                    commissionAmount = commissionAmount.add(tChargingOrder.getRechargeAmount().multiply(BigDecimal.valueOf(0.006))
                            .setScale(2,BigDecimal.ROUND_DOWN));
                }
                // 累加平台分佣
@@ -859,13 +849,6 @@
            // 获取该月份的最后一天
            LocalDateTime lastDayOfMonth = localDate.with(TemporalAdjusters.lastDayOfMonth());
            LocalDateTime firstDayOfMonth = localDate.with(TemporalAdjusters.firstDayOfMonth());
//            QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
//                    .between("pay_time", firstDayOfMonth.withHour(0).withMinute(0).withSecond(0), lastDayOfMonth.withHour(23).withMinute(59).withSecond(59))
//                    .eq("recharge_payment_status", 2);
//            if (chargingBillListVO.getType() == 2) {
//                eq.eq("site_id", chargingBillListVO.getSiteId());
//            }
//            List<TChargingOrder> tChargingOrders = chargingOrderList.selectList(eq);
            List<TChargingOrder> tChargingOrders = total.stream().filter(e -> chargingBillListVO.getType() == 2 ?
                    e.getSiteId().equals(chargingBillListVO.getSiteId()) : true &&
                    e.getPayTime().isBefore(lastDayOfMonth.withHour(23).withMinute(59).withSecond(59))
@@ -905,8 +888,8 @@
                }
                // 累加平台手续费
                if (tChargingOrder.getOrderAmount()!=null){
                    commissionAmount = commissionAmount.add(tChargingOrder.getPaymentAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN));
                    commissionAmountTotal = commissionAmountTotal.add(tChargingOrder.getPaymentAmount().multiply(new BigDecimal("0.006"))
                    commissionAmount = commissionAmount.add(tChargingOrder.getRechargeAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN));
                    commissionAmountTotal = commissionAmountTotal.add(tChargingOrder.getRechargeAmount().multiply(new BigDecimal("0.006"))
                            .setScale(2,BigDecimal.ROUND_DOWN));
                }
                // 累加平台分佣