refactor(backend): 重构动物相关 API 接口

- 更新了动物数据结构和相关类型定义
- 优化了动物列表、详情、创建、更新和删除接口
- 新增了更新动物状态接口
- 移除了与认领记录相关的接口
-调整了 API 响应结构
This commit is contained in:
ylweng
2025-08-31 23:26:25 +08:00
parent 5b5d65e072
commit cbee609e78
25 changed files with 3232 additions and 375 deletions

View File

@@ -0,0 +1,164 @@
// 系统统计服务
const database = require('../../config/database');
class SystemStatsService {
/**
* 获取系统统计数据
* @returns {Promise<Object>} 系统统计数据
*/
async getSystemStats() {
try {
// 获取用户总数
const userCountResult = await database.query('SELECT COUNT(*) as count FROM users');
const userCount = userCountResult[0].count;
// 获取商家总数
const merchantCountResult = await database.query('SELECT COUNT(*) as count FROM merchants');
const merchantCount = merchantCountResult[0].count;
// 获取旅行计划总数
const travelCountResult = await database.query('SELECT COUNT(*) as count FROM travel_plans');
const travelCount = travelCountResult[0].count;
// 获取动物总数
const animalCountResult = await database.query('SELECT COUNT(*) as count FROM animals');
const animalCount = animalCountResult[0].count;
// 获取订单总数
const orderCountResult = await database.query('SELECT COUNT(*) as count FROM orders');
const orderCount = orderCountResult[0].count;
// 获取今日新增用户数
const todayUserCountResult = await database.query(
'SELECT COUNT(*) as count FROM users WHERE DATE(created_at) = CURDATE()'
);
const todayUserCount = todayUserCountResult[0].count;
// 获取今日新增订单数
const todayOrderCountResult = await database.query(
'SELECT COUNT(*) as count FROM orders WHERE DATE(ordered_at) = CURDATE()'
);
const todayOrderCount = todayOrderCountResult[0].count;
return {
userCount,
merchantCount,
travelCount,
animalCount,
orderCount,
todayUserCount,
todayOrderCount
};
} catch (error) {
throw new Error(`获取系统统计数据失败: ${error.message}`);
}
}
/**
* 获取用户统计信息
* @returns {Promise<Object>} 用户统计数据
*/
async getUserStats() {
try {
// 用户总数
const totalResult = await database.query('SELECT COUNT(*) as total FROM users');
// 按用户类型统计
const byTypeResult = await database.query(`
SELECT
user_type,
COUNT(*) as count
FROM users
GROUP BY user_type
`);
// 按注册时间统计近7天
const byDateResult = await database.query(`
SELECT
DATE(created_at) as date,
COUNT(*) as count
FROM users
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY)
GROUP BY DATE(created_at)
ORDER BY date ASC
`);
return {
total: totalResult[0].total,
byType: byTypeResult,
byDate: byDateResult
};
} catch (error) {
throw new Error(`获取用户统计数据失败: ${error.message}`);
}
}
/**
* 获取订单统计信息
* @returns {Promise<Object>} 订单统计数据
*/
async getOrderStats() {
try {
// 订单总数和总金额
const totalResult = await database.query(`
SELECT
COUNT(*) as total,
COALESCE(SUM(total_amount), 0) as totalAmount
FROM orders
`);
// 按状态统计
const byStatusResult = await database.query(`
SELECT
status,
COUNT(*) as count
FROM orders
GROUP BY status
`);
// 按日期统计近7天
const byDateResult = await database.query(`
SELECT
DATE(ordered_at) as date,
COUNT(*) as count,
COALESCE(SUM(total_amount), 0) as amount
FROM orders
WHERE ordered_at >= DATE_SUB(NOW(), INTERVAL 7 DAY)
GROUP BY DATE(ordered_at)
ORDER BY date ASC
`);
return {
total: totalResult[0].total,
totalAmount: parseFloat(totalResult[0].totalAmount || 0),
byStatus: byStatusResult,
byDate: byDateResult
};
} catch (error) {
throw new Error(`获取订单统计数据失败: ${error.message}`);
}
}
/**
* 获取系统信息
* @returns {Promise<Object>} 系统信息
*/
async getSystemInfo() {
try {
// 数据库信息
const dbInfo = await database.query('SELECT VERSION() as version');
return {
nodeVersion: process.version,
platform: process.platform,
arch: process.arch,
uptime: Math.floor(process.uptime()),
databaseVersion: dbInfo[0].version
};
} catch (error) {
throw new Error(`获取系统信息失败: ${error.message}`);
}
}
}
module.exports = new SystemStatsService();