v3.4.9 — 新增服务器组功能与库存管理
🚀 新功能
服务器组管理
新增完整的服务器组功能,支持多节点分组管理:
- 商品可绑定服务器组:不再局限于单台服务器,商品可直接关联一个服务器组
三种分配策略:
random随机 — 从有库存的服务器中随机选择sequential轮流 — 选择当前活跃实例最少的服务器least最少负载 — 选择库存剩余最多的服务器
- 原子扣库存:开通时自动扣减选中服务器的库存,删除时自动归还
- 服务器组 CRUD:独立的管理界面,支持按插件筛选、一服一组约束
服务器库存管理
- 每台服务器独立维护库存字段
- 开通时原子扣减(
stock - 1),防止超卖 - 业务终止时自动归还库存(
stock + 1) - 商品编辑页库存实时展示
🔧 功能增强
商品编辑 — 服务器配置重构
- 支持 单服务器 / 服务器组 二选一切换
- 选择服务器组时自动加载组内对应的插件配置字段
- 切换方式时自动清空对方值,避免数据冲突
- 增加红字警告提示,防止误操作影响已有业务
服务器删除保护
- 有活跃主机的服务器禁止删除
- 被商品绑定的服务器禁止删除
- 被服务器组引用的服务器禁止删除
- 增加删除前后事件钩子(
server.before_delete/server.after_delete)
服务器组删除保护
- 被商品使用的服务器组禁止删除
- 增加删除前后事件钩子(
server_group.before_delete/server_group.after_delete)
🏗 架构重构
服务器解析统一入口
将所有散落在各处的 $product->server 直接调用,统一收口到两个方法:
Plugins::serverFromHost($host)— 优先读host.server_id,兼容旧数据Plugins::serverFromProduct($product)— 兼容单服务器和服务器组
涉及 11 个文件 的重构替换,包括:HostPlugins、HostFrontendService、HostDetailController、Clientarea、API 插件路由等。
Host 模型新增方法
$host->getServer()— 获取主机对应的服务器$host->getPluginName()— 获取主机对应的插件名
🐛 问题修复
- 修复多处
$product->server直接访问关联属性可能导致的异常 - 修复
getData('server_id')在字段不存在时抛异常的问题 - 修复 skymnbt 插件重构后前端重置密码按钮 key 大小写不匹配问题
⚠️ 升级注意
- 数据库需执行新增表结构变更(详见升级包中的 SQL 脚本)
- 商品如果之前绑定的是单服务器,升级后无影响
- 新增的服务器组 不会自动迁移 已有商品的绑定关系,需手动调整
- 更新后请清除系统缓存
chat_bubble_outline 评论