statisticsController.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. const Transaction = require('../models/Transaction');
  2. const Group = require('../models/Group');
  3. // @desc 获取统计数据
  4. // @route GET /api/statistics
  5. // @access Private/Admin
  6. const getStatistics = async (req, res) => {
  7. try {
  8. // 获取最近7天的交易数据
  9. const endDate = new Date();
  10. const startDate = new Date();
  11. startDate.setDate(startDate.getDate() - 7);
  12. const transactions = await Transaction.findAll(
  13. { startDate, endDate },
  14. 1,
  15. 1000
  16. );
  17. // 处理交易数据,按日期分组
  18. const transactionData = {};
  19. const labels = [];
  20. const data = [];
  21. // 初始化最近7天的数据
  22. for (let i = 6; i >= 0; i--) {
  23. const date = new Date();
  24. date.setDate(date.getDate() - i);
  25. const dateStr = date.toISOString().split('T')[0];
  26. transactionData[dateStr] = 0;
  27. labels.push(dateStr);
  28. }
  29. // 统计每天的交易金额
  30. transactions.transactions.forEach(transaction => {
  31. const date = new Date(transaction.time).toISOString().split('T')[0];
  32. if (transactionData[date] !== undefined) {
  33. transactionData[date] += transaction.amount;
  34. }
  35. });
  36. // 转换为数组格式
  37. labels.forEach(label => {
  38. data.push(transactionData[label]);
  39. });
  40. // 获取群组统计数据
  41. const groups = await Group.findAll();
  42. const groupData = {
  43. labels: groups.map(group => group.groupName),
  44. data: groups.map(group => group.isActive ? 1 : 0)
  45. };
  46. res.json({
  47. transactions: {
  48. labels,
  49. data
  50. },
  51. groups: groupData
  52. });
  53. } catch (error) {
  54. console.error('获取统计数据失败:', error);
  55. res.status(500).json({ message: '服务器错误' });
  56. }
  57. };
  58. module.exports = {
  59. getStatistics
  60. };