longz
2026-07-20 8c1b6f26fdd8429b9833211ef69165a0e2ff2712
fix: 补齐平台收入最新月份统计
2个文件已修改
50 ■■■■■ 已修改文件
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/controller/TChargingOrderControllerTest.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -1213,8 +1213,9 @@
        List<Integer> siteIds = resolvePlatformRevenueSiteIds(userId, sysUser, siteId);
        LocalDate sixBefore = PreviousSixMonths.get();
        //通过siteIds进行sql查询统计
        List<SixChargingDto> sixChargingDtos = generateLastSixMonths();
        List<SixChargingDto> chargingDtos = chargingOrderService.charge(sixBefore, siteIds, partnerView);
        LocalDate statisticsEndMonth = resolveStatisticsEndMonth(LocalDate.now(), chargingDtos);
        List<SixChargingDto> sixChargingDtos = generateLastSixMonths(statisticsEndMonth);
        for (SixChargingDto sixChargingDto : sixChargingDtos) {
            for (SixChargingDto chargingDto : chargingDtos) {
                if (sixChargingDto.getMonth().equals(chargingDto.getMonth())){
@@ -1230,12 +1231,15 @@
    public static List<SixChargingDto> generateLastSixMonths() {
        LocalDate today = LocalDate.now();
        return generateLastSixMonths(LocalDate.now());
    }
    static List<SixChargingDto> generateLastSixMonths(LocalDate endMonth) {
        List<SixChargingDto> months = new ArrayList<>();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM");
        for (int i = 5; i >= 0; i--) {
            LocalDate date = today.minusMonths(i);
            LocalDate date = endMonth.minusMonths(i);
            String month = date.format(formatter);
            SixChargingDto sixChargingDto = new SixChargingDto();
            sixChargingDto.setMonth(month);
@@ -1244,6 +1248,24 @@
        return months;
    }
    static LocalDate resolveStatisticsEndMonth(LocalDate currentDate, List<SixChargingDto> statistics) {
        if (statistics == null || statistics.isEmpty()) {
            return currentDate;
        }
        int nextMonth = currentDate.plusMonths(1).getMonthValue();
        boolean hasNextMonthData = statistics.stream()
                .map(SixChargingDto::getMonth)
                .filter(Objects::nonNull)
                .anyMatch(month -> {
                    try {
                        return Integer.parseInt(month) == nextMonth;
                    } catch (NumberFormatException ignored) {
                        return false;
                    }
                });
        return hasNextMonthData ? currentDate.plusMonths(1) : currentDate;
    }
    
    @RequiresPermissions(value = {"/platformRevenueAnalysis"}, logical = Logical.OR)
    @ResponseBody
ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/controller/TChargingOrderControllerTest.java
@@ -3,11 +3,17 @@
import com.ruoyi.account.api.feignClient.AppUserClient;
import com.ruoyi.order.api.query.ChargingOrderQuery;
import com.ruoyi.order.api.vo.TCharingOrderVO;
import com.ruoyi.order.dto.SixChargingDto;
import com.ruoyi.order.service.TChargingOrderService;
import org.junit.jupiter.api.Test;
import org.springframework.test.util.ReflectionTestUtils;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.same;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
@@ -17,6 +23,22 @@
class TChargingOrderControllerTest {
    @Test
    void latestAdjacentMonthDataMovesTheSixMonthWindowForward() {
        SixChargingDto june = new SixChargingDto();
        june.setMonth("06");
        SixChargingDto july = new SixChargingDto();
        july.setMonth("07");
        LocalDate endMonth = TChargingOrderController.resolveStatisticsEndMonth(
                LocalDate.of(2026, 6, 30), Arrays.asList(june, july));
        List<SixChargingDto> months = TChargingOrderController.generateLastSixMonths(endMonth);
        assertEquals(LocalDate.of(2026, 7, 30), endMonth);
        assertEquals(Arrays.asList("02", "03", "04", "05", "06", "07"),
                months.stream().map(SixChargingDto::getMonth).collect(java.util.stream.Collectors.toList()));
    }
    @Test
    void blankPhoneDoesNotExpandQueryToAllUserIds() {
        TChargingOrderService chargingOrderService = mock(TChargingOrderService.class);
        AppUserClient appUserClient = mock(AppUserClient.class);