| 项目 | 详情 |
|---|---|
| 审查日期 | 2026年5月19日 |
| 审查范围 | 模块划分、路由设计、数据库设计、多租户隔离、设计模式 |
| 发现问题数 | 32个 |
| 高风险 | 8个 |
| 中风险 | 15个 |
| 低风险 | 9个 |
| 模块 | 域名映射 | 职责 | 控制器数 | 完整度 |
|---|---|---|---|---|
| admin | admin.* | 后台管理系统 | 99 | ✅ 完整 |
| api | sdkapi.* | SDK客户端接口 | 79 | ⚠️ 缺Service |
| common | 禁止访问 | 公共基础层 | - | ✅ 完整 |
| complex | jhgame.* | 聚合渠道接入 | 19 | ❌ 缺Model/Service |
| guildapi | cpsapi.* | CPS渠道商API | 28 | ❌ 缺Model/Service |
| mcpsapi | mcpsapi.* | MCPS渠道商API | 16 | ❌ 缺Model/Service |
| home | www.* | PC官网 | 16 | ✅ 完整 |
| mobile | m.* | 移动端官网 | 14 | ✅ 完整 |
| service | - | 独立服务层 | - | ✅ 12个服务 |
| crontab | - | 定时任务 | 3 | ⚠️ 简单 |
| command | - | 命令行入口 | 1 | ⚠️ 简单 |
┌─────────────────────────────────────┐
│ common (公共基础层) │
│ Model(140+) / Logic / Library / │
│ Service / Factory / Contracts │
└──────────┬──────────────────────────┘
│
┌──────────┬───────────┼───────────┬──────────┬──────────┐
▼ ▼ ▼ ▼ ▼ ▼
┌──────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌──────┐ ┌───────┐
│admin │ │ api │ │guildapi│ │mcpsapi │ │ home │ │mobile │
└──────┘ └────────┘ └────────┘ └────────┘ └──────┘ └───────┘
│
▼
┌──────────────────┐
│ complex │
│ (53个渠道适配器) │
└──────────────────┘
common/model 包含 140+ 个模型,承载全部业务模型common.php 包含 1800+ 行全局函数guildapi/ChannelSettle.php.bakguildapi/ChannelWithdraw.php.bakservice/GamePayService_bak.phpservice/MemberCoinService_bak.php| 域名 | 模块 | 用途 |
|---|---|---|
| sdkapi.* | api | SDK核心接口 |
| t.* | api | 推广短链 |
| cpsapi.* | guildapi | CPS API |
| mcpsapi.* | mcpsapi | MCPS API |
| jhgame.* | complex | 聚合游戏 |
| www.* | home | PC官网 |
| m.* | mobile | 手机端 |
| admin.* | admin | 后台管理 |
| * | home | 默认(通配) |
文件:route.php:156-157
Route::get('test_pay', 'Api/Index/pay'); // 测试支付!
Route::get('notify', 'Api/Index/notify'); // 通知回调!
文件:route.php:68,87
$arrAlias = db('nw_promotion_short_link')->where([...])->find();
* 通配域名风险文件:route.php:27
'*' => 'home'
/{controller}/{action} 格式问题示例:
'/tgy' → "推广页"拼音缩写
'syxy' → "使用协议"拼音缩写
'zhaq' → "账户安全"拼音缩写
'kf'/'kc' → "客服"/"课程"拼音缩写
问题:gift/index 路由在第 248 行直接覆盖了第 202 行的定义
mp/get_wxmp_code, mp/get_pay 等| 分类 | 数量 | 代表模型 |
|---|---|---|
| 游戏相关 | 32 | Game, GameInfo, GameServer |
| 渠道相关 | 28 | Channel, ChannelGame, ChannelDivide |
| 用户/会员 | 15 | Members, MemberCoinInfo |
| 支付/财务 | 18 | Pay, PayCpinfo, CoinTransfer |
| 福利系统 | 8 | Welfare, WelfareGrant |
| 系统配置 | 12 | Setting, Admin, Department |
| 日志记录 | 10 | Loginlog, Operatelog |
| Complex聚合 | 8 | ComplexMembers, ComplexPay |
| 其他业务 | 16 | SdkGameList, Libao, Gift |
cy_* 前缀: 约 95 个表 (游戏核心业务)
nw_* 前缀: 约 56 个表 (渠道/扩展业务)
\think\Model,无自定义基类// 当前:手动 JOIN
->join('cy_gameinfo b', 'a.id=b.game_id')
// 建议:模型关联
public function gameInfo() {
return $this->hasOne('GameInfo', 'game_id');
}
| 方式 | 使用情况 |
|---|---|
| SoftDelete trait | 仅 1 处(已注释) |
isdelete 字段 |
部分模型 |
flag 字段 |
部分模型 |
| 无软删除 | 大部分模型 |
| 方式 | 模型数量 |
|---|---|
| autoWriteTimestamp=true | ~20 |
| dateFormat=false | ~15 |
| 手动 getter 转换 | ~30 |
| 无时间戳处理 | ~86 |
game_id vs gameidcreate_time vs createtimechannel_id vs channelidcy_* 和 nw_* 混用┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Channel │────▶│ Members │────▶│ Pay │
│ (渠道表) │ │ (用户表) │ │ (支付表) │
└─────────────┘ └─────────────┘ └─────────────┘
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ ChannelGame │ │MemberCoinInfo│ │ PayCpinfo │
│ (渠道游戏) │ │ (平台币记录)│ │(支付回调) │
└─────────────┘ └─────────────┘ └─────────────┘
│
▼
┌─────────────┐ ┌─────────────┐
│ Game │────▶│ GameInfo │
│ (游戏表) │ │ (游戏详情) │
└─────────────┘ └─────────────┘
│
▼
┌─────────────┐
│ GameServer │
│ (区服表) │
└─────────────┘
// 渠道ID隔离 - 出现在约 40+ 个表中
channel_id
// 游戏ID隔离 - 出现在约 50+ 个表中
game_id / gameid
// 查询时手动添加条件
->where('channel_id', $channelId)
->where(['game_id' => $gameid])
// 渠道层级查询
->where(['channel.id_path' => ['LIKE', '%,' . $channelId . ',%']])
Channel表字段:
- id
- parent_id (父渠道)
- level (1=会长, 2=子会长, 3=推广员)
- id_path (路径: ,1,2,3,)
channel_id 和 game_id 条件// 建议:创建 MultiTenant Trait
trait MultiTenant {
public function scopeChannel($query, $channelId) {
return $query->where('channel_id', $channelId);
}
public function scopeGame($query, $gameId) {
return $query->where('game_id', $gameId);
}
}
实现位置:common/factory/Pay.php
Pay::createPayment($way) → switch-case 创建支付实例
├── LdysPay (联动优势)
├── QzlPay (趣支付)
├── YyYbPay (优亿支付)
├── XtyPay (喜钛游)
├── SywPay (十一玩)
└── AliPay (支付宝)
问题:
switch-case 硬编码,违反开闭原则建议:改为注册式工厂
实现位置:api/complex/ComplexInterface.php + 50+ 个渠道实现类
ComplexInterface (接口)
├── checkLogin() - 登录验证
├── paySign() - 签名验证
├── getData() - 数据转换
├── getFail() - 失败响应
└── getSuccess() - 成功响应
问题:
实现位置:service/ 目录(12 个服务类)
| 服务类 | 职责 | 行数 |
|---|---|---|
| GamePayService | 游戏支付业务 | 629 |
| PayService | 支付渠道对接 | 943 |
| MemberCoinService | 平台币充值 | - |
| RetaineService | 留存数据统计 | - |
问题:
实现位置:common/exception/Http.php
问题:
实现位置:common.php 中的 log_message() 函数
使用情况:418 处调用,按模块分目录存储
问题:
现状:
tags.php 定义了行为钩子,但全部为空数组| 维度 | 评分 | 说明 |
|---|---|---|
| 架构分层 | ⭐⭐⭐ | Controller → Service → Logic → Model,但层次混乱 |
| 设计模式运用 | ⭐⭐⭐ | 工厂+策略模式较好,但缺少 Repository、Event |
| 代码复用 | ⭐⭐ | 大量重复代码(支付初始化、渠道选择) |
| 可测试性 | ⭐ | 直接依赖实例化,无依赖注入 |
| 异常处理 | ⭐⭐ | 分散处理,无统一错误码 |
| 序号 | 问题 | 位置 |
|---|---|---|
| 1 | 测试路由生产环境暴露 | route.php:156-157 |
| 2 | 路由文件中直接查询数据库 | route.php:68,87 |
| 3 | guildapi 与 mcpsapi 大量重复 | 14+ 个同名控制器 |
| 4 | common 模块职责过重 | 1800+ 行全局函数 |
| 5 | complex 模块缺少 Model/Service | 19 个控制器直接操作数据库 |
| 6 | 无统一模型基类 | 151 个模型各自为政 |
| 7 | 关联关系严重缺失 | 仅 4 个模型定义关联 |
| 8 | * 通配域名风险 |
route.php:27 |
| 序号 | 问题 | 数量/位置 |
|---|---|---|
| 1 | v1/v2 API 无显式路由 | api 模块 |
| 2 | 路由文件臃肿 | 445 行 |
| 3 | 路由命名不规范 | 多处拼音缩写 |
| 4 | 路由冲突 | gift/index |
| 5 | api 模块 service 层薄弱 | 79 controller / 4 service |
| 6 | home/mobile 高度重复 | 12 个同名控制器 |
| 7 | 软删除不一致 | 多种方式并存 |
| 8 | 时间戳处理混乱 | 4 种方式并存 |
| 9 | 字段命名不一致 | game_id vs gameid |
| 10 | 多租户隔离手动 WHERE | 全局 |
| 11 | 工厂模式违反开闭原则 | Pay.php |
| 12 | 策略模式缺少抽象基类 | ComplexInterface |
| 13 | 服务层职责过重 | PayService 943 行 |
| 14 | 异常处理不统一 | 全局 |
| 15 | 事件机制未启用 | tags.php |
| 序号 | 问题 |
|---|---|
| 1 | 域名判断使用 HTTP_HOST |
| 2 | 支付接口无域名约束 |
| 3 | 存在 .bak 备份文件 |
| 4 | 日志格式不统一 |
| 5 | 缺少请求 ID 追踪 |
| 6 | 表前缀混乱 |
| 7 | 缺少 Repository 层 |
| 8 | 缺少依赖注入 |
| 9 | MLBB 下载路由无参数验证 |
test_pay 和 notify 路由application/
├── common/
│ ├── model/ # 仅共享模型(10-20个)
│ ├── base/ # BaseController, BaseModel, BaseLogic
│ ├── trait/ # MultiTenant, SoftDelete 等
│ ├── event/ # 事件定义
│ └── exception/ # 业务异常类
├── admin/
│ ├── controller/
│ ├── model/ # Admin 专属模型
│ ├── service/
│ └── validate/
├── api/
│ ├── v1/
│ │ ├── controller/
│ │ └── service/
│ ├── v2/
│ │ ├── controller/
│ │ └── service/
│ └── complex/ # 渠道适配器
├── guildapi/ # 合并 mcpsapi
│ ├── controller/
│ └── service/
└── route/
├── route.php # 入口
├── route_api.php
├── route_admin.php
├── route_home.php
└── route_guild.php
审查报告生成时间:2026年5月19日