diff --git a/cds-fontend-2025.V1/src/service/api/statistics/statistics.ts b/cds-fontend-2025.V1/src/service/api/statistics/statistics.ts index b91b74c..b6ae785 100644 --- a/cds-fontend-2025.V1/src/service/api/statistics/statistics.ts +++ b/cds-fontend-2025.V1/src/service/api/statistics/statistics.ts @@ -26,3 +26,32 @@ export function getMktPieData(startDate: string,endDate: string) { params: {startDate,endDate} }); } + + + +/** 获取汇总用户卡片数据 */ +export function getSummaryCardData(startDate: string,endDate: string) { + return request({ + url: '/common/statistics/getSummaryCardData', + method: 'get', + params: {startDate,endDate} + }); +} + +/** 获取汇总用户line数据 */ +export function getSummaryLineData(startDate: string,endDate: string) { + return request({ + url: '/common/statistics/getSummaryLineData', + method: 'get', + params: {startDate,endDate} + }); +} + +/** 获取汇总用户pie数据 */ +export function getSummaryPieData(startDate: string,endDate: string) { + return request({ + url: '/common/statistics/getSummaryPieData', + method: 'get', + params: {startDate,endDate} + }); +} diff --git a/cds-fontend-2025.V1/src/views/home/index.vue b/cds-fontend-2025.V1/src/views/home/index.vue index 9f29c98..5df7817 100644 --- a/cds-fontend-2025.V1/src/views/home/index.vue +++ b/cds-fontend-2025.V1/src/views/home/index.vue @@ -3,10 +3,13 @@ import { computed, onMounted, ref, watch } from 'vue'; import { useAppStore } from '@/store/modules/app'; import HeaderBanner from './modules/header-banner.vue'; import CardData from './modules/card-data.vue'; +import CardDataSummary from './modules/card-data-summary.vue'; import CardDataMkt from './modules/card-data-mkt.vue'; import LineChart from './modules/line-chart.vue'; +import LineChartSummary from './modules/line-chart-summary.vue'; import LineChartMkt from './modules/line-chart-mkt.vue'; import PieChart from './modules/pie-chart.vue'; +import PieChartSummary from './modules/pie-chart-summary.vue'; import PieChartMkt from './modules/pie-chart-mkt.vue'; import ProjectNews from './modules/project-news.vue'; import CreativityBanner from './modules/creativity-banner.vue'; @@ -74,7 +77,11 @@ onMounted(() => { @date-change="handleDateChange" @quick-change="setDateRange" /> - + @@ -84,7 +91,9 @@ onMounted(() => { v-if="userInfo.user.userCategory === '0'" :date-range="dateRange" /> - + @@ -93,7 +102,9 @@ onMounted(() => { v-if="userInfo.user.userCategory === '0'" :date-range="dateRange" /> - + diff --git a/cds-fontend-2025.V1/src/views/home/modules/card-data-summary.vue b/cds-fontend-2025.V1/src/views/home/modules/card-data-summary.vue new file mode 100644 index 0000000..3f02b6f --- /dev/null +++ b/cds-fontend-2025.V1/src/views/home/modules/card-data-summary.vue @@ -0,0 +1,306 @@ + + + + + diff --git a/cds-fontend-2025.V1/src/views/home/modules/line-chart-summary.vue b/cds-fontend-2025.V1/src/views/home/modules/line-chart-summary.vue new file mode 100644 index 0000000..9acf2e0 --- /dev/null +++ b/cds-fontend-2025.V1/src/views/home/modules/line-chart-summary.vue @@ -0,0 +1,177 @@ + + + + + diff --git a/cds-fontend-2025.V1/src/views/home/modules/pie-chart-summary.vue b/cds-fontend-2025.V1/src/views/home/modules/pie-chart-summary.vue new file mode 100644 index 0000000..ff55c7c --- /dev/null +++ b/cds-fontend-2025.V1/src/views/home/modules/pie-chart-summary.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/statistics/controller/StatisticsController.java b/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/statistics/controller/StatisticsController.java index 52f365b..9a9de4b 100644 --- a/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/statistics/controller/StatisticsController.java +++ b/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/statistics/controller/StatisticsController.java @@ -2,9 +2,7 @@ package org.dromara.statistics.controller; import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; -import org.dromara.statistics.domain.vo.MktCardVo; -import org.dromara.statistics.domain.vo.MktLineVo; -import org.dromara.statistics.domain.vo.MktPieVo; +import org.dromara.statistics.domain.vo.*; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -14,9 +12,7 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; +import java.util.*; /** * 统计分析控制器 @@ -129,4 +125,121 @@ public class StatisticsController { return R.ok(data); } + + + + // 汇总卡片数据接口 + @GetMapping("/getSummaryCardData") + public R> getSummaryCardData(String startDate, String endDate) { + System.out.println("获取汇总卡片数据: " + startDate + " 至 " + endDate); + + // 计算日期范围天数 + LocalDate start = LocalDate.parse(startDate); + LocalDate end = LocalDate.parse(endDate); + long days = ChronoUnit.DAYS.between(start, end) + 1; + + // 根据天数调整比例 (最大不超过2倍) + double multiplier = Math.min(1 + days / 30.0, 2.0); + + // 创建模拟数据 + Map data = new HashMap<>(); + + // 基础值 + int[] baseValues = {400, 4000, 16, 66}; + String[] keys = {"staffCount", "mpsCount", "busiCount", "customerCount"}; + + Random random = new Random(); + for (int i = 0; i < keys.length; i++) { + // 基础值乘以倍数,并添加随机波动 + int value = (int) Math.round(baseValues[i] * multiplier * (0.9 + 0.2 * random.nextDouble())); + data.put(keys[i], value); + } + + return R.ok(data); + } + + + // 汇总趋势数据接口 (同比环比) + @GetMapping("/getSummaryLineData") + public R getSummaryLineData(String startDate, String endDate) { + System.out.println("获取汇总趋势数据: " + startDate + " 至 " + endDate); + + // 解析日期范围 + LocalDate start = LocalDate.parse(startDate); + LocalDate end = LocalDate.parse(endDate); + + // 生成日期列表 + List dates = new ArrayList<>(); + List yoyData = new ArrayList<>(); // 同比数据 + List momData = new ArrayList<>(); // 环比数据 + + // 随机数生成器 + Random random = new Random(); + double baseValue = 5000 + random.nextInt(3000); // 基础值范围5000-8000 + + // 遍历日期范围 + for (LocalDate date = start; !date.isAfter(end); date = date.plusDays(1)) { + // 添加格式化日期 (MM/dd) + dates.add(date.format(DateTimeFormatter.ofPattern("MM/dd"))); + + // 生成模拟数据 - 基于基础值波动 + double dailyBase = baseValue * (0.9 + 0.2 * random.nextDouble()); + + // 同比数据:较去年同期的变化 + double yoyValue = dailyBase * (0.8 + 0.4 * random.nextDouble()); + + // 环比数据:较前一日的变化 + double momValue = dailyBase * (0.85 + 0.3 * random.nextDouble()); + + yoyData.add(Math.round(yoyValue * 100.0) / 100.0); + momData.add(Math.round(momValue * 100.0) / 100.0); + + // 更新基础值用于下一天 + baseValue = dailyBase * (0.95 + 0.1 * random.nextDouble()); + } + + // 创建返回对象 + SummaryLineVo summaryLineVo = new SummaryLineVo(); + summaryLineVo.setDates(dates); + summaryLineVo.setYoyData(yoyData); + summaryLineVo.setMomData(momData); + + return R.ok(summaryLineVo); + } + + // 汇总饼图数据接口 + @GetMapping("/getSummaryPieData") + public R> getSummaryPieData(String startDate, String endDate) { + System.out.println("获取汇总饼图数据: " + startDate + " 至 " + endDate); + + // 创建模拟数据 + List data = new ArrayList<>(); + + // 产品类型及其基础值 + String[] productTypes = {"智E通", "社保类", "公积金", "代收付"}; + int[] baseValues = {20, 10, 40, 30}; + + // 计算日期范围天数 + LocalDate start = LocalDate.parse(startDate); + LocalDate end = LocalDate.parse(endDate); + long days = ChronoUnit.DAYS.between(start, end) + 1; + + // 根据天数调整比例 (最大不超过2倍) + double multiplier = Math.min(1 + days / 30.0, 2.0); + + // 生成模拟数据 + Random random = new Random(); + for (int i = 0; i < productTypes.length; i++) { + SummaryPieVo item = new SummaryPieVo(); + item.setName(productTypes[i]); + + // 基础值乘以倍数,并添加随机波动 + int value = (int) Math.round(baseValues[i] * multiplier * (0.9 + 0.2 * random.nextDouble())); + item.setValue(value); + + data.add(item); + } + + return R.ok(data); + } } diff --git a/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/statistics/domain/vo/SummaryLineVo.java b/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/statistics/domain/vo/SummaryLineVo.java new file mode 100644 index 0000000..b217035 --- /dev/null +++ b/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/statistics/domain/vo/SummaryLineVo.java @@ -0,0 +1,26 @@ +package org.dromara.statistics.domain.vo; + +import lombok.Data; + +import java.util.List; + +/** + * 营销线图数据VO + */ +@Data +public class SummaryLineVo { + /** + * 日期列表 (格式: MM/dd) + */ + private List dates; + + /** + * 同比数据 (与去年同期比较) + */ + private List yoyData; + + /** + * 环比数据 (与前一日比较) + */ + private List momData; +} diff --git a/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/statistics/domain/vo/SummaryPieVo.java b/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/statistics/domain/vo/SummaryPieVo.java new file mode 100644 index 0000000..537ec63 --- /dev/null +++ b/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/statistics/domain/vo/SummaryPieVo.java @@ -0,0 +1,19 @@ +package org.dromara.statistics.domain.vo; + +import lombok.Data; + +/** + * 营销线图数据VO + */ +@Data +public class SummaryPieVo { + /** + * 产品名称 + */ + private String name; + + /** + * 产品数量/占比值 + */ + private Integer value; +}