diff --git a/src/main/java/com/mini/capi/api/biz/appController.java b/src/main/java/com/mini/capi/api/biz/appController.java index 0591900..bf5a79a 100644 --- a/src/main/java/com/mini/capi/api/biz/appController.java +++ b/src/main/java/com/mini/capi/api/biz/appController.java @@ -1,16 +1,22 @@ package com.mini.capi.api.biz; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.mini.capi.biz.domain.ErpPeriodSummaryAccountWeekView; import com.mini.capi.biz.domain.ErpPeriodSummaryAccountYearView; +import com.mini.capi.biz.domain.ErpPeriodSummaryView; import com.mini.capi.biz.service.ErpPeriodSummaryAccountWeekViewService; import com.mini.capi.biz.service.ErpPeriodSummaryAccountYearViewService; +import com.mini.capi.biz.service.ErpPeriodSummaryViewService; import com.mini.capi.model.ApiResult; import com.mini.capi.model.ChartResult; +import com.mini.capi.utils.DateUtils; import jakarta.annotation.Resource; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; + import java.util.ArrayList; import java.util.List; @@ -19,6 +25,10 @@ import java.util.List; public class appController { + @Resource + private ErpPeriodSummaryViewService summaryViewService; + + @Resource private ErpPeriodSummaryAccountWeekViewService weekViewService; @@ -26,6 +36,24 @@ public class appController { private ErpPeriodSummaryAccountYearViewService yearViewService; + /** + * 实时汇总 + */ + @GetMapping("getSummaryChart") + public ApiResult getSummaryChart(String cycleType) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (StringUtils.hasText(cycleType)) { + queryWrapper.eq("cycle_type", cycleType); + String cycleCode = DateUtils.calculateStartCycleCode(cycleType); + if (cycleCode != null) { + queryWrapper.ge("cycle_code", cycleCode); + } + } + List summaryViews = summaryViewService.list(queryWrapper); + return ApiResult.success(summaryViews); + } + + /** * 账号周汇总 */ diff --git a/src/main/java/com/mini/capi/utils/DateUtils.java b/src/main/java/com/mini/capi/utils/DateUtils.java index 3105ead..c1cc989 100644 --- a/src/main/java/com/mini/capi/utils/DateUtils.java +++ b/src/main/java/com/mini/capi/utils/DateUtils.java @@ -1,63 +1,66 @@ package com.mini.capi.utils; -import com.mini.capi.model.DateInfo; + import java.time.LocalDate; -import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class DateUtils { - /** - * 格式化当前日期 - * - * @param pattern 格式模式 - * @return 格式化后的日期字符串 - */ - public static String formatCurrentDate(String pattern) { - return LocalDateTime.now().format(DateTimeFormatter.ofPattern(pattern)); + // 日期格式化器(线程安全,复用提升性能) + private static final DateTimeFormatter DAY_FORMATTER = DateTimeFormatter.ISO_LOCAL_DATE; // yyyy-MM-dd + private static final DateTimeFormatter MONTH_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM"); // yyyy-MM + + + public static String calculateStartCycleCode(String cycleType) { + // 默认使用当前日期计算,留参便于测试时指定日期 + return calculateStartCycleCode(cycleType, LocalDate.now()); } /** - * 格式化指定日期 + * 重载方法:支持指定基准日期计算起始cycleCode(便于测试) * - * @param date 日期 - * @param pattern 格式模式 - * @return 格式化后的日期字符串 + * @param cycleType 周期类型(D:日, M:月, Q:季度, Y:年) + * @param baseDate 基准日期(以此日期为起点计算时间范围) + * @return 起始cycleCode(符合对应格式),未识别类型返回null */ - public static String formatDate(LocalDateTime date, String pattern) { - if (date == null) { - return ""; + public static String calculateStartCycleCode(String cycleType, LocalDate baseDate) { + if (baseDate == null) { + throw new IllegalArgumentException("基准日期不能为null"); } - return date.format(DateTimeFormatter.ofPattern(pattern)); + if (cycleType == null) { + return null; + } + + return switch (cycleType) { + case "D" -> + // 日:最近30天,格式 yyyy-MM-dd + baseDate.minusDays(30).format(DAY_FORMATTER); + case "M" -> + // 月:最近1年,格式 yyyy-MM + baseDate.minusYears(1).format(MONTH_FORMATTER); + case "Q" -> + // 季度:最近3年,格式 yyyy-Qx + getQuarterCycleCode(baseDate.minusYears(3)); + case "Y" -> + // 年:最近6年,格式 yyyy + String.valueOf(baseDate.minusYears(6).getYear()); + default -> + // 未识别的周期类型,返回null + null; + }; } - - public static String getSevenDaysAgo() { - // 获取当前日期 - LocalDate today = LocalDate.now(); - // 减去7天 - LocalDate sevenDaysAgo = today.minusDays(7); - // 格式化日期为yyyymmdd - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); - return sevenDaysAgo.format(formatter); + /** + * 计算指定日期对应的季度cycleCode(格式:yyyy-Qx) + * + * @param date 日期 + * @return 季度cycleCode(如2023-Q3) + */ + private static String getQuarterCycleCode(LocalDate date) { + int month = date.getMonthValue(); // 1-12月 + int quarter = (month - 1) / 3 + 1; + return String.format("%d-Q%d", date.getYear(), quarter); } - - public static DateInfo getDates() { - // 获取当前日期 - LocalDate today = LocalDate.now(); - // 1. 获取昨天(yyyyMMdd) - LocalDate yesterday = today.minusDays(1); - String yesterdayStr = yesterday.format(DateTimeFormatter.ofPattern("yyyyMMdd")); - // 2. 获取当月(yyyyMM) - String currentMonthStr = today.format(DateTimeFormatter.ofPattern("yyyyMM")); - // 3. 获取当前季度(yyyyQ1-Q4) - int quarter = (today.getMonthValue() - 1) / 3 + 1; - String currentQuarterStr = today.format(DateTimeFormatter.ofPattern("yyyy")) + "Q" + quarter; - // 4. 获取当前年度(yyyy) - String currentYearStr = today.format(DateTimeFormatter.ofPattern("yyyy")); - DateInfo dateInfo = new DateInfo(yesterdayStr, currentMonthStr, currentQuarterStr, currentYearStr); - return dateInfo; - } }