Pu Zhibing
2025-12-11 3e1da3471f84635cea96b1785c92e248482a5b81
修改bug
12个文件已修改
751 ■■■■■ 已修改文件
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SettlementExportVO.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECPushUtil.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java 507 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java
@@ -241,6 +241,12 @@
    @ApiModelProperty(value = "实时需求电流")
    @TableField("need_elec")
    private BigDecimal needElec;
    @ApiModelProperty(value = "开始SOC")
    @TableField("start_soc")
    private BigDecimal startSoc;
    @ApiModelProperty(value = "结束SOC")
    @TableField("end_soc")
    private BigDecimal endSoc;
    @ApiModelProperty(value = "站点名称")
    @TableField(exist = false)
    private String siteName;
@@ -280,9 +286,6 @@
    @ApiModelProperty(value = "充电时长")
    @TableField(exist = false)
    private String chargingTime;
    @ApiModelProperty(value = "充电后soc")
    @TableField(exist = false)
    private String endSoc;
    @ApiModelProperty(value = "客户昵称")
    @TableField(exist = false)
    private String userName;
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SettlementExportVO.java
@@ -61,10 +61,6 @@
    @ApiModelProperty(value = "充电时长(分钟)")
    private String chargingSecond;
    @ApiModelProperty(value = "充电前soc")
    private String startSoc;
    @ApiModelProperty(value = "充电后soc")
    private String endSoc;
    @ApiModelProperty(value = "是否限制SOC")
    private String isSoc;
    @ApiModelProperty(value = "限制SOC方式")
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java
@@ -581,8 +581,8 @@
                            min = uploadRealTimeMonitoringData.getSoc();
                        }
                    }
                    settlementExportVO.setEndSoc(max+"");
                    settlementExportVO.setStartSoc(min+"");
                    settlementExportVO.setEndSoc(new BigDecimal(max));
                    settlementExportVO.setStartSoc(new BigDecimal(min));
                }
            }
            settlementExportVO.setIsSoc("否");
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java
@@ -2055,7 +2055,7 @@
                break;
        }
        supEquipChargeStatus.setCurrentA(chargingOrder.getCurrent());
        supEquipChargeStatus.setSOC(new BigDecimal(chargingOrder.getEndSoc()));
        supEquipChargeStatus.setSOC(chargingOrder.getEndSoc());
        supEquipChargeStatus.setStartTime(chargingOrder.getStartTime() != null ? chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : "");
        supEquipChargeStatus.setEndTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        supEquipChargeStatus.setTotalPower(chargingOrder.getElectrovalence());
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECPushUtil.java
@@ -159,7 +159,7 @@
        }
        supEquipChargeStatus.setCurrentA(chargingOrder.getCurrent());
        supEquipChargeStatus.setSOC(StringUtils.hasLength(chargingOrder.getEndSoc())?new BigDecimal(chargingOrder.getEndSoc()):new BigDecimal("1"));
        supEquipChargeStatus.setSOC(chargingOrder.getEndSoc());
        supEquipChargeStatus.setStartTime(chargingOrder.getStartTime() != null ? chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : "");
        supEquipChargeStatus.setEndTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        supEquipChargeStatus.setTotalPower(chargingOrder.getElectrovalence());
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java
@@ -2123,7 +2123,7 @@
                break;
        }
        supEquipChargeStatus.setCurrentA(chargingOrder.getCurrent());
        supEquipChargeStatus.setSOC(new BigDecimal(chargingOrder.getEndSoc()));
        supEquipChargeStatus.setSOC(chargingOrder.getEndSoc());
        supEquipChargeStatus.setStartTime(chargingOrder.getStartTime() != null ? chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : "");
        supEquipChargeStatus.setEndTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        supEquipChargeStatus.setTotalPower(chargingOrder.getElectrovalence());
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java
@@ -111,9 +111,8 @@
    @ApiOperation(value = "充电时段统计-导出", tags = {"管理后台-财务结算"})
    @PutMapping("/export")
    public void export(@RequestBody ChargingListQuery dto) {
        ChargingOrderTimeVO res = chargingOrderService.chargingList(dto);
        List<TChargingOrderExport> tChargingOrderExports = new ArrayList<>();
        List<ChargingOrderListVO> exportList = res.getExportList();
        List<ChargingOrderListVO> exportList = chargingOrderService.export(dto);
        int i = 1;
        List<TChargingGun> data = chargingGunClient.getAllGun().getData();
        List<Site> data9 = siteClient.getSiteAll().getData();
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
@@ -82,6 +82,13 @@
    List<Map<String, Object>> getYearData(@Param("start")LocalDateTime start,@Param("end")LocalDateTime end,@Param("siteIds")List<Integer> siteIds);
    List<ChargingOrderListVO> chargingList(@Param("pageInfo")PageInfo<ChargingOrderListVO> pageInfo, @Param("req") ChargingListQuery dto, @Param("startTime1")String startTime1, @Param("startTime2")String startTime2, @Param("endTime1")String endTime1, @Param("endTime2")String endTime2);
    List<Map<String, Object>> chargingList1(@Param("pageInfo")PageInfo<ChargingOrderListVO> pageInfo, @Param("req") ChargingListQuery dto, @Param("startTime1")String startTime1, @Param("startTime2")String startTime2, @Param("endTime1")String endTime1, @Param("endTime2")String endTime2);
    List<Map<String, Object>> chargingListSum(@Param("req") ChargingListQuery dto, @Param("startTime1")String startTime1, @Param("startTime2")String startTime2, @Param("endTime1")String endTime1, @Param("endTime2")String endTime2);
    List<ChargingOrderListVO> chargingListNoPage( @Param("req")ChargingListQuery dto, @Param("startTime1")String startTime1, @Param("startTime2")String startTime2, @Param("endTime1")String endTime1, @Param("endTime2")String endTime2);
    List<Map<String, Object>> getByDate(@Param("start")LocalDateTime start,@Param("end")LocalDateTime end,@Param("siteIds")List<Integer> siteIds);
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
@@ -168,6 +168,10 @@
    ChargingOrderTimeVO chargingList(ChargingListQuery dto);
    List<ChargingOrderListVO> export(ChargingListQuery dto);
    R payRefund(PayOrderRefundDto payOrderQueryDto);
    ChargingOrderListInfoVO chargingInfo(String uid);
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -1845,103 +1845,200 @@
        }
        dto.setSiteIds(siteIds);
        PageInfo<ChargingOrderListVO> pageInfo = new PageInfo<>(dto.getPageCurr(), dto.getPageSize());
        List<ChargingOrderListVO> list = this.baseMapper.chargingList(pageInfo, dto, startTime1, startTime2, endTime1, endTime2);
        List<Site> sites = siteClient.getSiteAll().getData();
        List<Long> collect1 = list.stream().map(ChargingOrderListVO::getId).collect(Collectors.toList());
        if(collect1.isEmpty()){
            collect1.add(-1L);
        }
        List<TChargingOrderAccountingStrategy> chargingOrderAccountingStrategies = chargingOrderAccountingStrategyService.list();
        for (ChargingOrderListVO chargingOrderListVO : list) {
//        List<ChargingOrderListVO> list = this.baseMapper.chargingList(pageInfo, dto, startTime1, startTime2, endTime1, endTime2);
//        List<Site> sites = siteClient.getSiteAll().getData();
//        List<Long> collect1 = list.stream().map(ChargingOrderListVO::getId).collect(Collectors.toList());
//        if(collect1.isEmpty()){
//            collect1.add(-1L);
//        }
//        List<TChargingOrderAccountingStrategy> chargingOrderAccountingStrategies = chargingOrderAccountingStrategyService.list();
//        for (ChargingOrderListVO chargingOrderListVO : list) {
//            if (roleType == 2) {
//                List<Boolean> data = partnerClient.getChargingListMenu(sysUser.getObjectId(), chargingOrderListVO.getSiteId()).getData();
//                chargingOrderListVO.setAuthInfo(data.get(0));
//                chargingOrderListVO.setAuthCurve(data.get(1));
//            }
//            chargingOrderListVO.setChargingCapacity(chargingOrderListVO.getElectricity());
//            BigDecimal bigDecimal = new BigDecimal("0.006");
//            if (chargingOrderListVO.getOrderAmount() != null) {
//                chargingOrderListVO.setCommissionAmount(chargingOrderListVO.getRechargeAmount().multiply(bigDecimal));
//            }
//            chargingOrderListVO.setPaymentAmount(chargingOrderListVO.getPaymentAmount());
//            chargingOrderListVO.setUid(chargingOrderListVO.getId() + "");
//            List<Integer> integers = new ArrayList<>();
//            integers.add(chargingOrderListVO.getSiteId());
//            Site site = sites.stream().filter(e -> e.getId().equals(chargingOrderListVO.getSiteId())).findFirst().orElse(null);
//            if (site != null) {
//                chargingOrderListVO.setSiteName(site.getName());
//            }
//            if (chargingOrderListVO.getChargingGunId() != null && chargingOrderListVO.getChargingPileId() != null) {
//                TChargingGun data1 = allGun.stream().filter(e -> e.getId().equals(chargingOrderListVO.getChargingGunId())).findFirst().orElse(null);
//                TChargingPile data2 = allPile.stream().filter(e -> e.getId().equals(chargingOrderListVO.getChargingPileId())).findFirst().orElse(null);
//                if (data2 != null && data1 != null) {
//                    chargingOrderListVO.setTerminalName(data2.getName() + "-" + data1.getName());
//                }
//            }
//            if (chargingOrderListVO.getStartTime() != null && chargingOrderListVO.getEndTime() != null) {
//                LocalDateTime startTime = chargingOrderListVO.getStartTime();
//                LocalDateTime endTime = chargingOrderListVO.getEndTime();
//                // 计算时间差 单位秒
//                long between = ChronoUnit.SECONDS.between(startTime, endTime);
//                chargingOrderListVO.setChargingSecond(between);
//            }
//            // 获取开始SOC 结束soc
//            if (chargingOrderListVO.getCode() != null) {
//                UploadRealTimeMonitoringData asc = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrderListVO.getCode(), "asc");
//                UploadRealTimeMonitoringData desc = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrderListVO.getCode(), "desc");
//                if(null != asc){
//                    chargingOrderListVO.setStartSoc(asc.getSoc().toString());
//                }
//                if(null != desc){
//                    chargingOrderListVO.setEndSoc(desc.getSoc().toString());
//                }
//            }
//
//            if (chargingOrderListVO.getAppUserId() != null) {
//                TAppUser data3 = appUserClient.getUserById(chargingOrderListVO.getAppUserId()).getData();
//                List<Long> carId = new ArrayList<>();
//                if (data3 != null) {
//                    if (chargingOrderListVO.getAppUserCarId() != null) {
//                        carId.add(chargingOrderListVO.getAppUserCarId());
//                        if (!carId.isEmpty()) {
//                            List<TAppUserCar> data4 = appUserCarClient.getCarByIds(carId).getData();
//                            if (data4 != null && !data4.isEmpty()) {
//                                chargingOrderListVO.setLicensePlate(data4.get(0).getLicensePlate());
//                            }
//                        }
//                    } else {
//                        chargingOrderListVO.setLicensePlate(chargingOrderListVO.getPlateNum());
//                    }
//                    chargingOrderListVO.setPhone(data3.getPhone());
//                }
//            }
//            List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategies.stream().filter(s->s.getChargingOrderId().equals(chargingOrderListVO.getId())).collect(Collectors.toList());
//            // 尖峰平谷充电量 度数
//            BigDecimal jian = new BigDecimal("0");
//            BigDecimal feng = new BigDecimal("0");
//            BigDecimal ping = new BigDecimal("0");
//            BigDecimal gu = new BigDecimal("0");
//            BigDecimal total = new BigDecimal("0");
//            for (TChargingOrderAccountingStrategy temp : list2) {
//                if (temp.getChargingCapacity() == null) {
//                    temp.setChargingCapacity(BigDecimal.ZERO);
//                }
//                switch (temp.getType()) {
//                    case 1:
//                        jian = jian.add(temp.getChargingCapacity());
//                        break;
//                    case 2:
//                        feng = feng.add(temp.getChargingCapacity());
//                        break;
//                    case 3:
//                        ping = ping.add(temp.getChargingCapacity());
//                        break;
//                    case 4:
//                        gu = gu.add(temp.getChargingCapacity());
//                        break;
//                }
//            }
//            total = total.add(jian).add(feng).add(ping).add(gu);
//            if (total.compareTo(new BigDecimal("0")) != 0) {
//                chargingOrderListVO.setElectronicProportion(
//                        jian.divide(total, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%(尖)/"
//                                + feng.divide(total, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%(峰)/"
//                                + ping.divide(total, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%(平)/"
//                                + gu.divide(total, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%(谷)");
//            } else {
//                chargingOrderListVO.setElectronicProportion(
//                        "0" + "%(尖)/" +
//                                "0" + "%(峰)/" +
//                                "0" + "%(平)/" +
//                                "0" + "%(谷)");
//            }
//            if (chargingOrderListVO.getOrderSource().equals(2)) {
//                chargingOrderListVO.setSharingAmount(chargingOrderListVO.getServiceCharge() != null ?
//                        chargingOrderListVO.getServiceCharge().multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_HALF_UP)
//                        : new BigDecimal("0"));
//            } else {
//                chargingOrderListVO.setSharingAmount(new BigDecimal("0"));
//            }
//        }
        List<ChargingOrderListVO> list = new ArrayList<>();
        List<Map<String, Object>> maps = this.baseMapper.chargingList1(pageInfo, dto, startTime1, startTime2, endTime1, endTime2);
        for (Map<String, Object> map : maps) {
            ChargingOrderListVO chargingOrderListVO = new ChargingOrderListVO();
            if (roleType == 2) {
                List<Boolean> data = partnerClient.getChargingListMenu(sysUser.getObjectId(), chargingOrderListVO.getSiteId()).getData();
                chargingOrderListVO.setAuthInfo(data.get(0));
                chargingOrderListVO.setAuthCurve(data.get(1));
            }
            chargingOrderListVO.setCode(map.get("code").toString());
            chargingOrderListVO.setSiteName(map.get("siteName").toString());
            chargingOrderListVO.setOrderType(map.get("orderType").toString());
            chargingOrderListVO.setTerminalName(map.get("terminalName").toString());
            chargingOrderListVO.setElectricity(null == map.get("electricity") ? BigDecimal.ZERO : new BigDecimal(map.get("electricity").toString()));
            chargingOrderListVO.setChargingCapacity(chargingOrderListVO.getElectricity());
            Object periodElectricPrice = map.get("periodElectricPrice");
            Object periodServicePrice = map.get("periodServicePrice");
            if(null != periodServicePrice){
                Integer orderSource = Integer.valueOf(map.get("orderSource").toString());
                if(2 == orderSource){
                    BigDecimal bigDecimal = new BigDecimal(periodServicePrice.toString()).multiply(new BigDecimal(0.8)).setScale(2, RoundingMode.HALF_EVEN);
                    chargingOrderListVO.setPaymentAmount(new BigDecimal(periodElectricPrice.toString()).add(bigDecimal));
                    BigDecimal sharingAmount = new BigDecimal(periodServicePrice.toString()).multiply(new BigDecimal(0.2)).setScale(2, RoundingMode.HALF_EVEN);
                    chargingOrderListVO.setSharingAmount(sharingAmount);
                }else{
                    chargingOrderListVO.setPaymentAmount(new BigDecimal(periodElectricPrice.toString()).add(new BigDecimal(periodServicePrice.toString())).setScale(2, RoundingMode.HALF_EVEN));
                    chargingOrderListVO.setSharingAmount(BigDecimal.ZERO);
                }
            }else{
                chargingOrderListVO.setPaymentAmount(BigDecimal.ZERO);
                chargingOrderListVO.setSharingAmount(BigDecimal.ZERO);
            }
            chargingOrderListVO.setElectrovalence(null == map.get("electrovalence") ? BigDecimal.ZERO : new BigDecimal(map.get("electrovalence").toString()));
            chargingOrderListVO.setServiceCharge(null == map.get("serviceCharge") ? BigDecimal.ZERO : new BigDecimal(map.get("serviceCharge").toString()));
            BigDecimal bigDecimal = new BigDecimal("0.006");
            if (chargingOrderListVO.getOrderAmount() != null) {
                chargingOrderListVO.setCommissionAmount(chargingOrderListVO.getRechargeAmount().multiply(bigDecimal));
            if (!"0".equals(map.get("rechargePaymentType").toString())) {
                chargingOrderListVO.setCommissionAmount(new BigDecimal(map.get("rechargeAmount").toString()).multiply(bigDecimal));
            }
            chargingOrderListVO.setPaymentAmount(chargingOrderListVO.getPaymentAmount());
            chargingOrderListVO.setUid(chargingOrderListVO.getId() + "");
            List<Integer> integers = new ArrayList<>();
            integers.add(chargingOrderListVO.getSiteId());
            Site site = sites.stream().filter(e -> e.getId().equals(chargingOrderListVO.getSiteId())).findFirst().orElse(null);
            if (site != null) {
                chargingOrderListVO.setSiteName(site.getName());
            if(null != map.get("tripartitePlatformName")){
                chargingOrderListVO.setTripartitePlatformName(map.get("tripartitePlatformName").toString());
            }
            if (chargingOrderListVO.getChargingGunId() != null && chargingOrderListVO.getChargingPileId() != null) {
                TChargingGun data1 = allGun.stream().filter(e -> e.getId().equals(chargingOrderListVO.getChargingGunId())).findFirst().orElse(null);
                TChargingPile data2 = allPile.stream().filter(e -> e.getId().equals(chargingOrderListVO.getChargingPileId())).findFirst().orElse(null);
                if (data2 != null && data1 != null) {
                    chargingOrderListVO.setTerminalName(data2.getName() + "-" + data1.getName());
                }
            if(null != map.get("startTime")){
                chargingOrderListVO.setStartTime(LocalDateTime.parse(map.get("startTime").toString(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            }
            if (chargingOrderListVO.getStartTime() != null && chargingOrderListVO.getEndTime() != null) {
                LocalDateTime startTime = chargingOrderListVO.getStartTime();
                LocalDateTime endTime = chargingOrderListVO.getEndTime();
                // 计算时间差 单位秒
                long between = ChronoUnit.SECONDS.between(startTime, endTime);
                chargingOrderListVO.setChargingSecond(between);
            if(null != map.get("endTime")){
                chargingOrderListVO.setEndTime(LocalDateTime.parse(map.get("endTime").toString(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            }
            // 获取开始SOC 结束soc
            if (chargingOrderListVO.getCode() != null) {
                UploadRealTimeMonitoringData asc = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrderListVO.getCode(), "asc");
                UploadRealTimeMonitoringData desc = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrderListVO.getCode(), "desc");
                if(null != asc){
                    chargingOrderListVO.setStartSoc(asc.getSoc().toString());
                }
                if(null != desc){
                    chargingOrderListVO.setEndSoc(desc.getSoc().toString());
                }
            if(null != map.get("chargingSecond")){
                chargingOrderListVO.setChargingSecond(Long.valueOf(map.get("chargingSecond").toString()));
            }else{
                chargingOrderListVO.setChargingSecond(0L);
            }
            if (chargingOrderListVO.getAppUserId() != null) {
                TAppUser data3 = appUserClient.getUserById(chargingOrderListVO.getAppUserId()).getData();
                List<Long> carId = new ArrayList<>();
                if (data3 != null) {
                    if (chargingOrderListVO.getAppUserCarId() != null) {
                        carId.add(chargingOrderListVO.getAppUserCarId());
                        if (!carId.isEmpty()) {
                            List<TAppUserCar> data4 = appUserCarClient.getCarByIds(carId).getData();
                            if (data4 != null && !data4.isEmpty()) {
                                chargingOrderListVO.setLicensePlate(data4.get(0).getLicensePlate());
                            }
                        }
                    } else {
                        chargingOrderListVO.setLicensePlate(chargingOrderListVO.getPlateNum());
                    }
                    chargingOrderListVO.setPhone(data3.getPhone());
                }
            if(null != map.get("startSoc")){
                chargingOrderListVO.setEndSoc(map.get("startSoc").toString());
            }
            List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategies.stream().filter(s->s.getChargingOrderId().equals(chargingOrderListVO.getId())).collect(Collectors.toList());
            // 尖峰平谷充电量 度数
            BigDecimal jian = new BigDecimal("0");
            BigDecimal feng = new BigDecimal("0");
            BigDecimal ping = new BigDecimal("0");
            BigDecimal gu = new BigDecimal("0");
            BigDecimal total = new BigDecimal("0");
            for (TChargingOrderAccountingStrategy temp : list2) {
                if (temp.getChargingCapacity() == null) {
                    temp.setChargingCapacity(BigDecimal.ZERO);
                }
                switch (temp.getType()) {
                    case 1:
                        jian = jian.add(temp.getChargingCapacity());
                        break;
                    case 2:
                        feng = feng.add(temp.getChargingCapacity());
                        break;
                    case 3:
                        ping = ping.add(temp.getChargingCapacity());
                        break;
                    case 4:
                        gu = gu.add(temp.getChargingCapacity());
                        break;
                }
            if(null != map.get("endSoc")){
                chargingOrderListVO.setEndSoc(map.get("endSoc").toString());
            }
            total = total.add(jian).add(feng).add(ping).add(gu);
            if(null != map.get("status")){
                chargingOrderListVO.setStatus(Integer.valueOf(map.get("status").toString()));
            }
            if(null != map.get("endMode")){
                chargingOrderListVO.setEndMode(Integer.valueOf(map.get("endMode").toString()));
            }
            if(null != map.get("phone")){
                chargingOrderListVO.setPhone(map.get("phone").toString());
            }
            if(null != map.get("licensePlate")){
                chargingOrderListVO.setLicensePlate(map.get("licensePlate").toString());
            }
            BigDecimal jian = null == map.get("jian") ? BigDecimal.ZERO : new BigDecimal(map.get("jian").toString());
            BigDecimal feng = null == map.get("feng") ? BigDecimal.ZERO : new BigDecimal(map.get("feng").toString());
            BigDecimal ping = null == map.get("ping") ? BigDecimal.ZERO : new BigDecimal(map.get("ping").toString());
            BigDecimal gu = null == map.get("gu") ? BigDecimal.ZERO : new BigDecimal(map.get("gu").toString());
            BigDecimal total = jian.add(feng).add(ping).add(gu);
            if (total.compareTo(new BigDecimal("0")) != 0) {
                chargingOrderListVO.setElectronicProportion(
                        jian.divide(total, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%(尖)/"
@@ -1955,44 +2052,10 @@
                                "0" + "%(平)/" +
                                "0" + "%(谷)");
            }
            if (chargingOrderListVO.getOrderSource().equals(2)) {
                chargingOrderListVO.setSharingAmount(chargingOrderListVO.getServiceCharge() != null ?
                        chargingOrderListVO.getServiceCharge().multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_HALF_UP)
                        : new BigDecimal("0"));
            } else {
                chargingOrderListVO.setSharingAmount(new BigDecimal("0"));
            }
            list.add(chargingOrderListVO);
        }
        // 不分页
        PageInfo<ChargingOrderListVO> pageInfo1 = new PageInfo<>(1, 999999999);
        List<ChargingOrderListVO> list1 = this.baseMapper.chargingList(pageInfo1, dto, startTime1, startTime2, endTime1, endTime2);
        for (ChargingOrderListVO chargingOrderListVO : list1) {
            List<Integer> integers = new ArrayList<>();
            integers.add(chargingOrderListVO.getSiteId());
            Site site = sites.stream().filter(e -> e.getId().equals(chargingOrderListVO.getSiteId())).findFirst().orElse(null);
            if (site != null) {
                chargingOrderListVO.setSiteName(site.getName());
            }
            if (chargingOrderListVO.getStartTime() != null && chargingOrderListVO.getEndTime() != null) {
                LocalDateTime startTime = chargingOrderListVO.getStartTime();
                LocalDateTime endTime = chargingOrderListVO.getEndTime();
                // 计算时间差 单位秒
                long between = ChronoUnit.SECONDS.between(startTime, endTime);
                chargingOrderListVO.setChargingSecond(between);
            }
            if (chargingOrderListVO.getChargingGunId() != null && chargingOrderListVO.getChargingPileId() != null) {
                TChargingGun data1 = allGun.stream().filter(e -> e.getId().equals(chargingOrderListVO.getChargingGunId())).findFirst().orElse(null);
                TChargingPile data2 = allPile.stream().filter(e -> e.getId().equals(chargingOrderListVO.getChargingPileId())).findFirst().orElse(null);
                if (data2 != null && data1 != null) {
                    chargingOrderListVO.setTerminalName(data2.getName() + "-" + data1.getName());
                }
            }
        }
        chargingOrderTimeVO.setExportList(list1);
        chargingOrderTimeVO.setOrderCount(list1.size());
        // 计算充电总度数
        BigDecimal electronic = new BigDecimal("0");
        // 支付金额
@@ -2016,72 +2079,25 @@
        BigDecimal feng = new BigDecimal("0");
        BigDecimal ping = new BigDecimal("0");
        BigDecimal gu = new BigDecimal("0");
        for (ChargingOrderListVO chargingOrderListVO : list1) {
            List<TChargingOrderAccountingStrategy> collect = chargingOrderAccountingStrategies.stream().filter(s -> s.getChargingOrderId().equals(chargingOrderListVO.getId())).collect(Collectors.toList());
            BigDecimal periodServicePrice = collect.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal periodElectricPrice = collect.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal chargingCapacity = collect.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
            electronic = electronic.add(chargingCapacity);
            electrovalence = electrovalence.add(periodElectricPrice);
            if (chargingOrderListVO.getOrderSource().equals(2)) {
                serviceCharge = serviceCharge.add(periodServicePrice.multiply(new BigDecimal("0.8")));
                paymentAmount = paymentAmount.add(periodElectricPrice).add(periodServicePrice.multiply(new BigDecimal("0.8")));
            } else {
                serviceCharge = serviceCharge.add(periodServicePrice);
                paymentAmount = paymentAmount.add(periodElectricPrice).add(periodServicePrice);
            }
            if (!chargingOrderListVO.getOrderSource().equals(2)) {
                for (TChargingOrderAccountingStrategy temp : collect) {
                    switch (temp.getType()) {
                        case 1:
                            jian = jian.add(temp.getChargingCapacity());
                            jianElectronic = jianElectronic.add(temp.getPeriodElectricPrice()).add(temp.getPeriodServicePrice());
                            jianService = jianService.add(temp.getPeriodServicePrice());
                            break;
                        case 2:
                            feng = feng.add(temp.getChargingCapacity());
                            fengElectronic = fengElectronic.add(temp.getPeriodElectricPrice()).add(temp.getPeriodServicePrice());
                            fengService = fengService.add(temp.getPeriodServicePrice());
                            break;
                        case 3:
                            ping = ping.add(temp.getChargingCapacity());
                            pingElectronic = pingElectronic.add(temp.getPeriodElectricPrice()).add(temp.getPeriodServicePrice());
                            pingService = pingService.add(temp.getPeriodServicePrice());
                            break;
                        case 4:
                            gu = gu.add(temp.getChargingCapacity());
                            guElectronic = guElectronic.add(temp.getPeriodElectricPrice()).add(temp.getPeriodServicePrice());
                            guService = guService.add(temp.getPeriodServicePrice());
                            break;
                    }
                }
            } else {
                for (TChargingOrderAccountingStrategy temp : collect) {
                    BigDecimal multiply = temp.getPeriodServicePrice().multiply(new BigDecimal("0.8"));
                    switch (temp.getType()) {
                        case 1:
                            jian = jian.add(temp.getChargingCapacity());
                            jianElectronic = jianElectronic.add(temp.getPeriodElectricPrice()).add(multiply);
                            jianService = jianService.add(multiply);
                            break;
                        case 2:
                            feng = feng.add(temp.getChargingCapacity());
                            fengElectronic = fengElectronic.add(temp.getPeriodElectricPrice()).add(multiply);
                            fengService = fengService.add(multiply);
                            break;
                        case 3:
                            ping = ping.add(temp.getChargingCapacity());
                            pingElectronic = pingElectronic.add(temp.getPeriodElectricPrice()).add(multiply);
                            pingService = pingService.add(multiply);
                            break;
                        case 4:
                            gu = gu.add(temp.getChargingCapacity());
                            guElectronic = guElectronic.add(temp.getPeriodElectricPrice()).add(multiply);
                            guService = guService.add(multiply);
                            break;
                    }
                }
            }
        List<Map<String, Object>> list1 = this.baseMapper.chargingListSum(dto, startTime1, startTime2, endTime1, endTime2);
        chargingOrderTimeVO.setOrderCount(list1.size());
        for (Map<String, Object> map : list1) {
            electronic = electronic.add(new BigDecimal(null == map.get("electronic") ? "0" : map.get("electronic").toString()));
            paymentAmount = paymentAmount.add(new BigDecimal(null == map.get("paymentAmount") ? "0" : map.get("paymentAmount").toString()));
            electrovalence = electrovalence.add(new BigDecimal(null == map.get("electrovalence") ? "0" : map.get("electrovalence").toString()));
            serviceCharge = serviceCharge.add(new BigDecimal(null == map.get("serviceCharge") ? "0" : map.get("serviceCharge").toString()));
            jianElectronic = jianElectronic.add(new BigDecimal(null == map.get("jianElectronic") ? "0" : map.get("jianElectronic").toString()));
            fengElectronic = fengElectronic.add(new BigDecimal(null == map.get("fengElectronic") ? "0" : map.get("fengElectronic").toString()));
            pingElectronic = pingElectronic.add(new BigDecimal(null == map.get("pingElectronic") ? "0" : map.get("pingElectronic").toString()));
            guElectronic = guElectronic.add(new BigDecimal(null == map.get("guElectronic") ? "0" : map.get("guElectronic").toString()));
            jianService = jianService.add(new BigDecimal(null == map.get("jianService") ? "0" : map.get("jianService").toString()));
            fengService = fengService.add(new BigDecimal(null == map.get("fengService") ? "0" : map.get("fengService").toString()));
            pingService = pingService.add(new BigDecimal(null == map.get("pingService") ? "0" : map.get("pingService").toString()));
            guService = guService.add(new BigDecimal(null == map.get("guService") ? "0" : map.get("guService").toString()));
            jian = jian.add(new BigDecimal(null == map.get("jian") ? "0" : map.get("jian").toString()));
            feng = feng.add(new BigDecimal(null == map.get("feng") ? "0" : map.get("feng").toString()));
            ping = ping.add(new BigDecimal(null == map.get("ping") ? "0" : map.get("ping").toString()));
            gu = gu.add(new BigDecimal(null == map.get("gu") ? "0" : map.get("gu").toString()));
        }
        
        chargingOrderTimeVO.setChargingCapacity(electronic.setScale(2, BigDecimal.ROUND_HALF_EVEN));
@@ -2130,6 +2146,115 @@
        pageInfo.setRecords(list);
        chargingOrderTimeVO.setList(pageInfo);
        return chargingOrderTimeVO;
    }
    @Override
    public List<ChargingOrderListVO> export(ChargingListQuery dto) {
        String startTime1 = null;
        String startTime2 = null;
        String endTime1 = null;
        String endTime2 = null;
        List<TChargingGun> allGun = chargingGunClient.getAllGun().getData();
        List<TChargingPile> allPile = chargingGunClient.getAllPile().getData();
        if (StringUtils.hasLength(dto.getStartTime())) {
            String[] split = dto.getStartTime().split(" - ");
            startTime1 = split[0];
            startTime2 = split[1];
        }
        if (StringUtils.hasLength(dto.getPhone())) {
            List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData();
            if (data != null) {
                if (!data.isEmpty()) {
                    dto.setUserIds(data);
                }
            } else {
                dto.setUserIds(new ArrayList<Long>());
            }
            if (dto.getUserIds().isEmpty()) {
                List<Long> carIds = dto.getUserIds();
                carIds.add(-1L);
                dto.setUserIds(carIds);
            }
        }
        if (StringUtils.hasLength(dto.getLicensePlate())) {
            List<Long> data = appUserCarClient.getAppUserCarByLicensePlates(dto.getLicensePlate()).getData();
            if (data != null) {
                if (!data.isEmpty()) {
                    dto.setCarIds(data);
                }
            } else {
                dto.setCarIds(new ArrayList<Long>());
            }
            if (dto.getCarIds().isEmpty()) {
                List<Long> carIds = dto.getCarIds();
                carIds.add(-1L);
                dto.setCarIds(carIds);
            }
        }
        Long userId = tokenService.getLoginUser().getUserid();
        // 查询当前登陆人按钮权限
        SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
        Integer roleType = sysUser.getRoleType();
        //如果没传siteId,获取当前登陆人所有的siteIds
        List<Integer> siteIds = new ArrayList<>();
        if (dto.getSiteId() == null) {
            if (userId != null) {
                List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
                for (GetSiteListDTO datum : data) {
                    siteIds.add(datum.getId());
                }
            }
        } else {
            siteIds.add(dto.getSiteId());
        }
        if (siteIds.isEmpty()) {
            siteIds.add(-1);
        } else {
            if (roleType == 2) {
                List<Integer> integers = new ArrayList<>();
                for (Integer siteId : siteIds) {
                    // 校验有没有这个站点的权限
                    List<Boolean> t1 = partnerClient.getChargingOrderMenu(sysUser.getObjectId(), siteId).getData();
                    Boolean b = t1.get(1);
                    if (b) {
                        integers.add(siteId);
                    }
                }
                siteIds = integers;
            }
        }
        dto.setSiteIds(siteIds);
        List<Site> sites = siteClient.getSiteAll().getData();
        // 不分页
        PageInfo<ChargingOrderListVO> pageInfo1 = new PageInfo<>(1, 999999999);
        List<ChargingOrderListVO> list1 = this.baseMapper.chargingList(pageInfo1, dto, startTime1, startTime2, endTime1, endTime2);
        for (ChargingOrderListVO chargingOrderListVO : list1) {
            List<Integer> integers = new ArrayList<>();
            integers.add(chargingOrderListVO.getSiteId());
            Site site = sites.stream().filter(e -> e.getId().equals(chargingOrderListVO.getSiteId())).findFirst().orElse(null);
            if (site != null) {
                chargingOrderListVO.setSiteName(site.getName());
            }
            if (chargingOrderListVO.getStartTime() != null && chargingOrderListVO.getEndTime() != null) {
                LocalDateTime startTime = chargingOrderListVO.getStartTime();
                LocalDateTime endTime = chargingOrderListVO.getEndTime();
                // 计算时间差 单位秒
                long between = ChronoUnit.SECONDS.between(startTime, endTime);
                chargingOrderListVO.setChargingSecond(between);
            }
            if (chargingOrderListVO.getChargingGunId() != null && chargingOrderListVO.getChargingPileId() != null) {
                TChargingGun data1 = allGun.stream().filter(e -> e.getId().equals(chargingOrderListVO.getChargingGunId())).findFirst().orElse(null);
                TChargingPile data2 = allPile.stream().filter(e -> e.getId().equals(chargingOrderListVO.getChargingPileId())).findFirst().orElse(null);
                if (data2 != null && data1 != null) {
                    chargingOrderListVO.setTerminalName(data2.getName() + "-" + data1.getName());
                }
            }
        }
        return list1;
    }
    
    
@@ -2563,7 +2688,11 @@
            List<UploadRealTimeMonitoringData> dataList = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrder.getCode());
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            chargingOrder.setStartTime(LocalDateTime.parse(sdf.format(dataList.get(dataList.size() - 1).getCreate_time()), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            if(dataList.isEmpty()){
                chargingOrder.setStartTime(LocalDateTime.parse(vo.getStart_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
            }else{
                chargingOrder.setStartTime(LocalDateTime.parse(sdf.format(dataList.get(dataList.size() - 1).getCreate_time()), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            }
            chargingOrder.setEndTime(LocalDateTime.parse(vo.getEnd_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
            chargingOrder.setStatus(5);
            chargingOrder.setOrderAmount(orderAmount.setScale(2, RoundingMode.HALF_EVEN));
@@ -2639,6 +2768,14 @@
            chargingOrder.setPaymentAmount(payAmount.setScale(2, RoundingMode.HALF_EVEN));
            chargingOrder.setRefundAmount(refundAmount.setScale(2, RoundingMode.HALF_EVEN));
            chargingOrder.setRefundStatus(1);
            UploadRealTimeMonitoringData asc = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrder.getCode(), "asc");
            UploadRealTimeMonitoringData desc = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrder.getCode(), "desc");
            if(null != asc){
                chargingOrder.setStartSoc(new BigDecimal(asc.getSoc()));
            }
            if(null != desc){
                chargingOrder.setEndSoc(new BigDecimal(desc.getSoc()));
            }
            this.updateById(chargingOrder);
            redisService.setCacheObject("chargingOrderStatus:" + vo.getTransaction_serial_number(), 5, 100L, TimeUnit.SECONDS);
            
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java
@@ -190,7 +190,11 @@
                    if(null == order.getStartTime()){
                        List<UploadRealTimeMonitoringData> dataList = uploadRealTimeMonitoringDataService.getDataByOrderCode(order.getCode());
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        order.setStartTime(LocalDateTime.parse(sdf.format(dataList.get(dataList.size() - 1).getCreate_time()), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault())));
                        if(dataList.isEmpty()){
                            order.setStartTime(LocalDateTime.parse(one.getStart_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS").withZone(ZoneId.systemDefault())));
                        }else{
                            order.setStartTime(LocalDateTime.parse(sdf.format(dataList.get(dataList.size() - 1).getCreate_time()), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault())));
                        }
                    }
                    if(null == order.getEndTime()){
                        order.setEndTime(LocalDateTime.parse(one.getEnd_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS").withZone(ZoneId.systemDefault())));
@@ -215,7 +219,11 @@
                    if(null == order.getStartTime()){
                        List<UploadRealTimeMonitoringData> dataList = uploadRealTimeMonitoringDataService.getDataByOrderCode(order.getCode());
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        order.setStartTime(LocalDateTime.parse(sdf.format(dataList.get(dataList.size() - 1).getCreate_time()), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault())));
                        if(dataList.isEmpty()){
                            order.setStartTime(LocalDateTime.parse(one.getStart_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS").withZone(ZoneId.systemDefault())));
                        }else{
                            order.setStartTime(LocalDateTime.parse(sdf.format(dataList.get(dataList.size() - 1).getCreate_time()), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault())));
                        }
                    }
                    if(null == order.getEndTime()){
                        order.setEndTime(LocalDateTime.parse(one.getEnd_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS").withZone(ZoneId.systemDefault())));
@@ -588,6 +596,14 @@
            order.setPaymentAmount(payAmount.setScale(2, RoundingMode.HALF_EVEN));
            order.setRefundAmount(refundAmount.setScale(2, RoundingMode.HALF_EVEN));
            order.setRefundStatus(1);
            UploadRealTimeMonitoringData asc = uploadRealTimeMonitoringDataService.getDataByOrderCode(order.getCode(), "asc");
            UploadRealTimeMonitoringData desc = uploadRealTimeMonitoringDataService.getDataByOrderCode(order.getCode(), "desc");
            if(null != asc){
                order.setStartSoc(new BigDecimal(asc.getSoc()));
            }
            if(null != desc){
                order.setEndSoc(new BigDecimal(desc.getSoc()));
            }
            chargingOrderService.updateById(order);
            order = chargingOrderService.getById(order.getId());
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
@@ -1033,6 +1033,193 @@
        and t1.start_time IS NOT NULL
        order by t1.create_time desc
    </select>
    <select id="chargingList1" resultType="map">
        select
        aa.id,
        aa.`code`,
        aa.siteName,
        aa.orderType,
        aa.terminalName,
        aa.electricity,
        aa.rechargeAmount,
        aa.rechargePaymentType,
        aa.paymentAmount,
        aa.electrovalence,
        aa.serviceCharge,
        aa.orderSource,
        aa.tripartitePlatformName,
        aa.startTime,
        aa.endTime,
        aa.chargingSecond,
        aa.startSoc,
        aa.endSoc,
        aa.`status`,
        aa.endMode,
        aa.phone,
        aa.licensePlate,
        SUM(aa.period_electric_price) as periodElectricPrice,
        SUM(aa.period_service_price) as periodServicePrice,
        SUM(aa.jian) as jian,
        SUM(aa.feng) as feng,
        SUM(aa.ping) as ping,
        SUM(aa.gu) as gu
        from (
            select
            b.id,
            b.`code`,
            c.`name` as siteName,
            b.order_type as orderType,
            CONCAT(d.`name`, '-', e.`name`) as terminalName,
            b.electricity,
            b.recharge_amount as rechargeAmount,
            b.recharge_payment_type as rechargePaymentType,
            b.payment_amount as paymentAmount,
            b.electrovalence,
            b.service_charge as serviceCharge,
            b.order_source as orderSource,
            b.tripartite_platform_name as tripartitePlatformName,
            DATE_FORMAT(b.start_time, '%Y-%m-%d %H:%i:%s') as startTime,
            DATE_FORMAT(b.end_time, '%Y-%m-%d %H:%i:%s') as endTime,
            (UNIX_TIMESTAMP(b.end_time) - UNIX_TIMESTAMP(b.start_time)) as chargingSecond,
            b.start_soc as startSoc,
            b.end_soc as endSoc,
            b.`status`,
            b.end_mode as endMode,
            f.phone,
            g.license_plate as licensePlate,
            a.period_electric_price,
            a.period_service_price,
            CASE WHEN a.type = 1 THEN a.charging_capacity ELSE 0 END as jian,
            CASE WHEN a.type = 2 THEN a.charging_capacity ELSE 0 END as feng,
            CASE WHEN a.type = 3 THEN a.charging_capacity ELSE 0 END as ping,
            CASE WHEN a.type = 4 THEN a.charging_capacity ELSE 0 END as gu
            from `charging_pile_order`.t_charging_order_accounting_strategy a
            left join `charging_pile_order`.t_charging_order b on (a.charging_order_id = b.id)
            left join `charging_pile_service`.t_site c on (b.site_id = c.id)
            left join `charging_pile_service`.t_charging_pile d on (b.charging_pile_id = d.id)
            left join `charging_pile_service`.t_charging_gun e on (b.charging_gun_id = e.id)
            left join `charging_pile_account`.t_app_user f on (b.app_user_id = f.id)
            left join `charging_pile_account`.t_app_user_car g on (b.app_user_car_id = g.id)
            where b.del_flag = 0 and b.recharge_payment_status = 2
            <if test="null != req.code and req.code!=''">
                and b.code LIKE CONCAT('%',#{req.code},'%')
            </if>
            <if test="null != req.carIds and req.carIds.size()>0">
                and b.app_user_car_id in
                <foreach collection="req.carIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </if>
            <if test="null != req.userIds and req.userIds.size()>0">
                and b.app_user_id in
                <foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </if>
            <if test="null != req.siteIds and req.siteIds.size()>0">
                and b.site_id in
                <foreach collection="req.siteIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </if>
            <if test="req.orderType != null ">
                and b.order_type = #{req.orderType}
            </if>
            <if test="req.status != null ">
                and b.status = #{req.status}
            </if>
            <if test="req.status != null ">
                and b.status = #{req.status}
            </if>
            <if test="req.siteId != null ">
                and b.site_id = #{req.siteId}
            </if>
            <if test="startTime1 != null and startTime1!=''">
                and (b.create_time between #{startTime1} and #{startTime2})
            </if>
            <if test="endTime1 != null and endTime1!=''">
                and (b.end_time between #{endTime1} and #{endTime2})
            </if>
            and b.start_time IS NOT NULL
        ) as aa group by aa.id, aa.`code`, aa.siteName, aa.orderType, aa.terminalName, aa.electricity, aa.rechargeAmount, aa.paymentAmount, aa.electrovalence, aa.serviceCharge, aa.tripartitePlatformName,
        aa.startTime, aa.endTime, aa.chargingSecond, aa.startSoc, aa.endSoc, aa.`status`, aa.endMode, aa.phone, aa.licensePlate, aa.orderSource, aa.rechargePaymentType order by aa.startTime desc
    </select>
    <select id="chargingListSum" resultType="map">
        select
        a.id,
        sum(a.charging_capacity) as electronic,
        sum(a.period_electric_price) as electrovalence,
        sum(CASE WHEN a.order_source = 2 THEN a.period_service_price * 0.8 ELSE a.period_service_price END) as serviceCharge,
        sum(a.period_electric_price + (CASE WHEN a.order_source = 2 THEN a.period_service_price * 0.8 ELSE a.period_service_price END)) as paymentAmount,
        sum(CASE WHEN a.type = 1 THEN a.period_electric_price ELSE 0 END) as jianElectronic,
        sum(CASE WHEN a.type = 2 THEN a.period_electric_price ELSE 0 END) as fengElectronic,
        sum(CASE WHEN a.type = 3 THEN a.period_electric_price ELSE 0 END) as pingElectronic,
        sum(CASE WHEN a.type = 4 THEN a.period_electric_price ELSE 0 END) as guElectronic,
        sum(CASE WHEN a.order_source = 2 and a.type = 1 THEN a.period_service_price * 0.8 WHEN a.order_source != 2 and a.type = 1 THEN a.period_service_price ELSE 0 END) as jianService,
        sum(CASE WHEN a.order_source = 2 and a.type = 2 THEN a.period_service_price * 0.8 WHEN a.order_source != 2 and a.type = 2 THEN a.period_service_price ELSE 0 END) as fengService,
        sum(CASE WHEN a.order_source = 2 and a.type = 3 THEN a.period_service_price * 0.8 WHEN a.order_source != 2 and a.type = 3 THEN a.period_service_price ELSE 0 END) as pingService,
        sum(CASE WHEN a.order_source = 2 and a.type = 4 THEN a.period_service_price * 0.8 WHEN a.order_source != 2 and a.type = 4 THEN a.period_service_price ELSE 0 END) as guService,
        sum(CASE WHEN a.type = 1 THEN a.charging_capacity ELSE 0 END) as jian,
        sum(CASE WHEN a.type = 2 THEN a.charging_capacity ELSE 0 END) as feng,
        sum(CASE WHEN a.type = 3 THEN a.charging_capacity ELSE 0 END) as ping,
        sum(CASE WHEN a.type = 4 THEN a.charging_capacity ELSE 0 END) as gu
        from (
            select co.id,coas.type, coas.charging_capacity, coas.period_electric_price, coas.period_service_price, co.order_source
            from t_charging_order_accounting_strategy coas
            left join t_charging_order co on (coas.charging_order_id = co.id)
            where co.del_flag = 0 and co.recharge_payment_status = 2
            <if test="null != req.code and req.code!=''">
                and co.code LIKE CONCAT('%',#{req.code},'%')
            </if>
            <if test="null != req.carIds and req.carIds.size()>0">
                and co.app_user_car_id in
                <foreach collection="req.carIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </if>
            <if test="null != req.userIds and req.userIds.size()>0">
                and co.app_user_id in
                <foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </if>
            <if test="null != req.siteIds and req.siteIds.size()>0">
                and co.site_id in
                <foreach collection="req.siteIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </if>
            <if test="req.orderType != null ">
                and co.order_type = #{req.orderType}
            </if>
            <if test="req.status != null ">
                and co.status = #{req.status}
            </if>
            <if test="req.status != null ">
                and co.status = #{req.status}
            </if>
            <if test="req.siteId != null ">
                and co.site_id = #{req.siteId}
            </if>
            <if test="startTime1 != null and startTime1!=''">
                and (co.create_time between #{startTime1} and #{startTime2})
            </if>
            <if test="endTime1 != null and endTime1!=''">
                and (co.end_time between #{endTime1} and #{endTime2})
            </if>
            and co.start_time IS NOT NULL order by co.create_time desc
        ) as a group by a.id
    </select>
    <select id="chargingListNoPage" resultType="com.ruoyi.order.api.vo.ChargingOrderListVO">
        select t1.* from t_charging_order t1
        where 1=1