transactionController.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. const Transaction = require('../models/Transaction');
  2. const Group = require('../models/Group');
  3. // @desc 获取交易列表
  4. // @route GET /api/transactions
  5. // @access Private
  6. const getTransactions = async (req, res) => {
  7. try {
  8. const { page = 1, limit = 10, startDate, endDate, type, groupId } = req.query;
  9. const result = await Transaction.findAll(
  10. { startDate, endDate, type, groupId },
  11. parseInt(page),
  12. parseInt(limit)
  13. );
  14. res.json(result);
  15. } catch (error) {
  16. res.status(500).json({ message: '服务器错误' });
  17. }
  18. };
  19. // @desc 创建交易
  20. // @route POST /api/transactions
  21. // @access Private
  22. const createTransaction = async (req, res) => {
  23. try {
  24. const { groupId, type, amount } = req.body;
  25. const group = await Group.findByGroupId(groupId);
  26. if (!group) {
  27. return res.status(404).json({ message: '群组不存在' });
  28. }
  29. const id = await Transaction.create({
  30. groupId,
  31. groupName: group.group_name,
  32. type,
  33. amount
  34. });
  35. const transaction = await Transaction.findById(id);
  36. res.status(201).json(transaction);
  37. } catch (error) {
  38. res.status(500).json({ message: '服务器错误' });
  39. }
  40. };
  41. // @desc 删除交易
  42. // @route DELETE /api/transactions/:id
  43. // @access Private
  44. const deleteTransaction = async (req, res) => {
  45. try {
  46. const transaction = await Transaction.findById(req.params.id);
  47. if (!transaction) {
  48. return res.status(404).json({ message: '交易不存在' });
  49. }
  50. await Transaction.delete(req.params.id);
  51. res.json({ message: '交易已删除' });
  52. } catch (error) {
  53. res.status(500).json({ message: '服务器错误' });
  54. }
  55. };
  56. // @desc 获取仪表板数据
  57. // @route GET /api/transactions/dashboard
  58. // @access Private
  59. const getDashboardData = async (req, res) => {
  60. try {
  61. const data = await Transaction.getDashboardData();
  62. res.json(data);
  63. } catch (error) {
  64. res.status(500).json({ message: '服务器错误' });
  65. }
  66. };
  67. // @desc 导出交易数据
  68. // @route GET /api/transactions/export
  69. // @access Private
  70. const exportTransactions = async (req, res) => {
  71. try {
  72. const { startDate, endDate, type, groupId } = req.query;
  73. const result = await Transaction.findAll(
  74. { startDate, endDate, type, groupId },
  75. 1,
  76. 1000000 // 导出所有数据
  77. );
  78. // 生成 CSV 数据
  79. const csvData = [
  80. ['时间', '群组', '类型', '金额'].join(','),
  81. ...result.transactions.map(t => [
  82. new Date(t.time).toLocaleString(),
  83. t.group_name,
  84. t.type === 'deposit' ? '入款' : '下发',
  85. t.amount.toFixed(2)
  86. ].join(','))
  87. ].join('\n');
  88. res.setHeader('Content-Type', 'text/csv');
  89. res.setHeader('Content-Disposition', 'attachment; filename=transactions.csv');
  90. res.send(csvData);
  91. } catch (error) {
  92. res.status(500).json({ message: '服务器错误' });
  93. }
  94. };
  95. module.exports = {
  96. getTransactions,
  97. createTransaction,
  98. deleteTransaction,
  99. getDashboardData,
  100. exportTransactions
  101. };