123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- const Transaction = require('../models/Transaction');
- const Group = require('../models/Group');
- // @desc 获取统计数据
- // @route GET /api/statistics
- // @access Private/Admin
- const getStatistics = async (req, res) => {
- try {
- // 获取最近7天的交易数据
- const endDate = new Date();
- const startDate = new Date();
- startDate.setDate(startDate.getDate() - 7);
- const transactions = await Transaction.findAll(
- { startDate, endDate },
- 1,
- 1000
- );
- // 处理交易数据,按日期分组
- const transactionData = {};
- const labels = [];
- const data = [];
- // 初始化最近7天的数据
- for (let i = 6; i >= 0; i--) {
- const date = new Date();
- date.setDate(date.getDate() - i);
- const dateStr = date.toISOString().split('T')[0];
- transactionData[dateStr] = 0;
- labels.push(dateStr);
- }
- // 统计每天的交易金额
- transactions.transactions.forEach(transaction => {
- const date = new Date(transaction.time).toISOString().split('T')[0];
- if (transactionData[date] !== undefined) {
- transactionData[date] += transaction.amount;
- }
- });
- // 转换为数组格式
- labels.forEach(label => {
- data.push(transactionData[label]);
- });
- // 获取群组统计数据
- const groups = await Group.findAll();
- const groupData = {
- labels: groups.map(group => group.groupName),
- data: groups.map(group => group.isActive ? 1 : 0)
- };
- res.json({
- transactions: {
- labels,
- data
- },
- groups: groupData
- });
- } catch (error) {
- console.error('获取统计数据失败:', error);
- res.status(500).json({ message: '服务器错误' });
- }
- };
- module.exports = {
- getStatistics
- };
|