7.1 KiB
7.1 KiB
服务器售卖功能实现说明
功能概述
本次更新为项目添加了完整的服务器售卖功能,包括管理员端和用户端的所有必要功能。
实现的功能
1. 后端实现
1.1 数据库模型
Server 模型 (model/server.go)
- 服务器配置表,用于管理可售卖的服务器
- 字段:
id: 主键title: 服务器标题config: 配置信息(文本)price: 价格(元)duration: 有效时长(天)status: 状态(1-启用,2-禁用)description: 服务器描述stock: 库存数量(-1表示无限)created_time: 创建时间updated_time: 更新时间
PurchasedServer 模型 (model/purchased_server.go)
- 已购服务器表,记录用户购买的服务器
- 字段:
id: 主键user_id: 用户IDserver_id: 服务器配置IDserver_title: 服务器标题(冗余字段)server_config: 服务器配置(冗余字段)price: 购买价格duration: 购买时长(天)purchase_time: 购买时间expire_time: 到期时间status: 状态(1-正常,2-已过期)trade_no: 交易单号
1.2 控制器 (controller/server.go)
管理员功能:
GetAllServers: 获取所有服务器配置(分页)SearchServers: 搜索服务器配置GetServer: 获取单个服务器配置AddServer: 添加服务器配置UpdateServer: 更新服务器配置DeleteServer: 删除服务器配置GetAllPurchasedServers: 获取所有已购服务器(分页,含用户名)SearchPurchasedServers: 搜索已购服务器DeletePurchasedServer: 删除已购服务器记录
用户功能:
GetEnabledServers: 获取启用的服务器列表PurchaseServer: 购买服务器(扣除用户额度)GetUserPurchasedServers: 获取用户已购服务器列表
1.3 API 路由 (router/api-router.go)
/api/server/
- GET / # 获取所有服务器(管理员)
- GET /search # 搜索服务器(管理员)
- GET /:id # 获取单个服务器(管理员)
- POST / # 添加服务器(管理员)
- PUT / # 更新服务器(管理员)
- DELETE /:id # 删除服务器(管理员)
- GET /enabled # 获取启用的服务器(用户)
- POST /purchase # 购买服务器(用户)
- GET /purchased/self # 获取用户已购服务器(用户)
- GET /purchased # 获取所有已购服务器(管理员)
- GET /purchased/search # 搜索已购服务器(管理员)
- DELETE /purchased/:id # 删除已购服务器(管理员)
2. 前端实现
2.1 管理员页面
服务器管理页面 (web/src/pages/Server/index.js)
- 组件:
ServersTable(web/src/components/table/ServersTable.js) - 功能:
- 查看所有服务器配置
- 搜索服务器
- 添加新服务器
- 编辑服务器配置
- 删除服务器
- 显示服务器状态、价格、库存等信息
已售服务器列表 (web/src/pages/PurchasedServer/index.js)
- 组件:
PurchasedServersTable(web/src/components/table/PurchasedServersTable.js) - 功能:
- 查看所有已售服务器
- 搜索已购服务器(按用户ID或服务器标题)
- 查看服务器配置
- 显示用户名、购买时间、到期时间等
- 删除已购服务器记录
2.2 用户页面
服务器购买页面 (web/src/pages/ServerShop/index.js)
- 功能:
- 展示所有可购买的服务器(卡片式布局)
- 显示服务器标题、价格、有效期、库存
- 显示服务器配置预览
- 购买确认对话框
- 购买成功后显示完整配置信息
- 自动扣除用户额度
我的服务器页面 (web/src/pages/MyServers/index.js)
- 功能:
- 查看用户已购买的所有服务器
- 显示购买时间、到期时间、剩余天数
- 状态标识(正常/已过期)
- 点击查看完整服务器配置
- 到期提醒(7天内显示橙色标签)
2.3 路由和导航
路由配置 (web/src/App.js)
/console/server: 服务器管理(管理员)/console/purchased-server: 已售服务器列表(管理员)/console/server-shop: 服务器购买(用户)/console/my-servers: 我的服务器(用户)
侧边栏导航 (web/src/components/layout/SiderBar.js)
- 管理员菜单:
- 服务器管理
- 已售服务器
- 个人中心菜单:
- 服务器购买
- 我的服务器
图标配置 (web/src/helpers/render.js)
- 使用 Lucide React 的 Server 图标
- 紫色主题色 (#8B5CF6)
业务逻辑
购买流程
- 用户在"服务器购买"页面浏览可用服务器
- 点击"立即购买"按钮
- 系统显示确认对话框,包含价格和有效期信息
- 用户确认后:
- 检查服务器状态和库存
- 计算需要扣除的额度(价格 × QuotaPerUnit)
- 检查用户额度是否足够
- 扣除用户额度
- 创建已购服务器记录
- 更新库存(如果不是无限库存)
- 记录操作日志
- 购买成功后显示服务器配置信息
额度计算
- 服务器价格以人民币(元)为单位
- 购买时将价格转换为系统额度:
额度 = 价格 × QuotaPerUnit - 使用
decimal包进行精确的浮点数计算
数据冗余
- 已购服务器表中保存了服务器标题和配置的副本
- 即使原服务器配置被删除或修改,用户已购买的服务器信息仍然保留
数据库迁移
已在 model/main.go 中添加了自动迁移:
Server表PurchasedServer表
系统启动时会自动创建这两张表。
安全性
- 所有管理员接口都使用
middleware.AdminAuth()保护 - 所有用户接口都使用
middleware.UserAuth()保护 - 购买时进行额度检查和库存检查
- 使用事务保证数据一致性(在额度扣除失败时回滚)
UI/UX 特性
- 响应式设计,支持不同屏幕尺寸
- 使用 Semi Design 组件库,保持与项目整体风格一致
- 卡片式布局展示服务器,直观美观
- 实时显示剩余天数和过期状态
- 搜索和分页功能,方便管理大量数据
- 友好的确认对话框和成功提示
扩展性
该实现具有良好的扩展性,可以轻松添加:
- 服务器分类
- 优惠券/折扣功能
- 自动续费
- 服务器到期提醒(邮件/站内信)
- 更多的服务器配置字段
- 批量操作功能
测试建议
- 测试管理员创建、编辑、删除服务器配置
- 测试用户购买服务器(正常流程)
- 测试额度不足时的购买失败
- 测试库存为0时无法购买
- 测试已禁用服务器无法购买
- 测试服务器配置的查看功能
- 测试搜索和分页功能
- 测试过期服务器的状态显示
注意事项
- 确保
common.QuotaPerUnit配置正确 - 购买时会记录操作日志,可在日志页面查看
- 服务器配置可以包含任意文本,建议使用 JSON 或 YAML 格式
- 库存设置为 -1 表示无限库存
- 到期时间自动计算:购买时间 + 时长(天)× 86400 秒