puzhibing
2026-09-01 955ff3b528ed9e47efa9c1d9a3a7f61c80830695
feat: add VIN order period counts
4个文件已修改
32 ■■■■■ 已修改文件
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TVinChargingOrderMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TVinChargingOrderServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TVinChargingOrderMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/mapper/VinChargingOrderMapperStructureTest.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TVinChargingOrderMapper.java
@@ -19,5 +19,7 @@
    Map<String, Object> summary(@Param("query") VinChargingOrderQuery query);
    List<Map<String, Object>> countAccountingStrategies(@Param("chargingOrderIds") List<Long> chargingOrderIds);
    List<Map<String, Object>> accountingStrategyList(@Param("chargingOrderId") Long chargingOrderId);
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TVinChargingOrderServiceImpl.java
@@ -152,6 +152,17 @@
        if (list == null || list.isEmpty()) {
            return;
        }
        List<Long> orderIds = list.stream().map(ChargingOrderVO::getId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
        Map<Long, Integer> periodCounts = new HashMap<>();
        if (!orderIds.isEmpty()) {
            for (Map<String, Object> item : baseMapper.countAccountingStrategies(orderIds)) {
                Number chargingOrderId = (Number) item.get("chargingOrderId");
                Number periodCount = (Number) item.get("periodCount");
                if (chargingOrderId != null && periodCount != null) {
                    periodCounts.put(chargingOrderId.longValue(), periodCount.intValue());
                }
            }
        }
        List<Integer> siteIds = list.stream().map(ChargingOrderVO::getSiteId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
        List<Integer> gunIds = list.stream().map(ChargingOrderVO::getChargingGunId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
        Map<Integer, Site> sites = siteIds.isEmpty() ? Collections.emptyMap()
@@ -168,12 +179,7 @@
            if (item.getStartTime() != null && item.getEndTime() != null) {
                item.setChargingSecond(ChronoUnit.SECONDS.between(item.getStartTime(), item.getEndTime()));
            }
            UploadRealTimeMonitoringData data = monitoringDataService.getLastDataById(item.getCode());
            if (data != null) {
                item.setChargeCurrent(data.getOutput_current());
                item.setChargeVoltage(data.getOutput_voltage());
                item.setChargePower(data.getPower());
            }
            item.setCount(periodCounts.getOrDefault(item.getId(), 0));
            item.setPlatformIncome(BigDecimal.ZERO);
            item.setPartnerIncome(BigDecimal.ZERO);
        }
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TVinChargingOrderMapper.xml
@@ -47,6 +47,16 @@
        <include refid="queryCondition"/>
    </select>
    <select id="countAccountingStrategies" resultType="java.util.LinkedHashMap">
        SELECT charging_order_id AS chargingOrderId, COUNT(1) AS periodCount
        FROM t_vin_charging_order_accounting_strategy
        WHERE charging_order_id IN
        <foreach collection="chargingOrderIds" item="chargingOrderId" open="(" separator="," close=")">
            #{chargingOrderId}
        </foreach>
        GROUP BY charging_order_id
    </select>
    <select id="accountingStrategyList" resultType="java.util.LinkedHashMap">
        SELECT id, charging_order_id AS chargingOrderId, accounting_strategy_detail_id AS accountingStrategyDetailId,
               start_time AS startTime, end_time AS endTime, type, electrovalence,
ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/mapper/VinChargingOrderMapperStructureTest.java
@@ -29,6 +29,8 @@
        assertTrue(mapper.contains("query.platenum"));
        assertTrue(mapper.contains("query.phone"));
        assertTrue(mapper.contains("query.siteids"));
        assertTrue(mapper.contains("countaccountingstrategies"));
        assertTrue(mapper.contains("group by charging_order_id"));
        assertFalse(mapper.contains("t_card_"));
        assertFalse(mapper.contains("from t_charging_order "));
    }