puzhibing
2026-03-20 de654376b37dfb7c08a920187d7c7cb132b3967a
修改时段统计时间维度
3个文件已修改
214 ■■■■■ 已修改文件
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
@@ -90,6 +90,9 @@
    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);
    Map<String, Object> chargingListSum1(@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/impl/TChargingOrderServiceImpl.java
@@ -1866,124 +1866,6 @@
        }
        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) {
//            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);
@@ -2081,14 +1963,7 @@
        }
        // 计算充电总度数
        BigDecimal electronic = new BigDecimal("0");
        // 支付金额
        BigDecimal paymentAmount = new BigDecimal("0");
        // 电费
        BigDecimal electrovalence = new BigDecimal("0");
        // 服务费
        BigDecimal serviceCharge = new BigDecimal("0");
        // 尖峰平谷充电到账
        BigDecimal jianElectronic = new BigDecimal("0");
        BigDecimal fengElectronic = new BigDecimal("0");
@@ -2105,15 +1980,10 @@
        BigDecimal ping = new BigDecimal("0");
        BigDecimal gu = new BigDecimal("0");
        List<Map<String, Object>> list1 = this.baseMapper.chargingListSum(dto, startTime1, startTime2, endTime1, endTime2);
        chargingOrderTimeVO.setOrderCount(list1.size());
        for (Map<String, Object> map : list1) {
            if(null == map){
                continue;
            }
            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()));
@@ -2127,7 +1997,20 @@
            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()));
        }
        Map<String, Object> map = this.baseMapper.chargingListSum1(dto, startTime1, startTime2, endTime1, endTime2);
        System.err.println("充电时段统计-查询参数:" + JSON.toJSONString(dto));
        System.err.println("充电时段统计-汇总数据:" + JSON.toJSONString(map));
        //订单数量
        int orderCount = Integer.parseInt(map.get("orderCount").toString());
        // 计算充电总度数
        BigDecimal electronic = new BigDecimal(map.get("electronic").toString());
        // 支付金额
        BigDecimal paymentAmount = new BigDecimal(map.get("paymentAmount").toString());
        // 电费
        BigDecimal electrovalence = new BigDecimal(map.get("electrovalence").toString());
        // 服务费
        BigDecimal serviceCharge = new BigDecimal(map.get("serviceCharge").toString());
        chargingOrderTimeVO.setOrderCount(orderCount);
        chargingOrderTimeVO.setChargingCapacity(electronic.setScale(2, BigDecimal.ROUND_HALF_EVEN));
        chargingOrderTimeVO.setPaymentAmount(paymentAmount.setScale(2, BigDecimal.ROUND_HALF_EVEN));
        chargingOrderTimeVO.setElectrovalence(electrovalence.setScale(2, BigDecimal.ROUND_HALF_EVEN));
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
@@ -1179,12 +1179,9 @@
                and b.site_id = #{req.siteId}
            </if>
            <if test="startTime1 != null and startTime1!=''">
                and (b.create_time between #{startTime1} and #{startTime2})
                and (b.create_time between #{startTime1} and #{startTime2}) and (b.end_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
            and b.start_time IS NOT NULL and b.end_time is not null
        ) as aa group by aa.id, aa.`code`, aa.siteId, 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>
@@ -1250,16 +1247,63 @@
                and co.site_id = #{req.siteId}
            </if>
            <if test="startTime1 != null and startTime1!=''">
                and (co.create_time between #{startTime1} and #{startTime2})
                and (co.create_time between #{startTime1} and #{startTime2}) and (co.end_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
            and co.start_time IS NOT NULL and co.end_time is not null
        ) as a group by a.id
    </select>
    <select id="chargingListSum1" resultType="map">
        select
        count(a.id) as orderCount,
        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
        from (
        select co.id,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.siteId != null ">
            and co.site_id = #{req.siteId}
        </if>
        <if test="startTime1 != null and startTime1!=''">
            and (co.create_time between #{startTime1} and #{startTime2}) and (co.end_time between #{startTime1} and #{startTime2})
        </if>
        and co.start_time IS NOT NULL and co.end_time is not null
        ) as a
    </select>
    <select id="chargingListNoPage" resultType="com.ruoyi.order.api.vo.ChargingOrderListVO">