新增图表接口

This commit is contained in:
2025-11-11 20:55:08 +08:00
parent 36aa3cc07b
commit bae6724e3b
2 changed files with 75 additions and 44 deletions

View File

@@ -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<ErpPeriodSummaryView> 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<ErpPeriodSummaryView> summaryViews = summaryViewService.list(queryWrapper);
return ApiResult.success(summaryViews);
}
/**
* 账号周汇总
*/

View File

@@ -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;
}
}