Files
sbnews/docs/02-实现流程文档.md
T
2026-07-31 16:13:31 +08:00

679 lines
24 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Sport-Era 体育咨询AI平台 - 实现流程文档
> 版本:v1.1Demo版)
> 日期:2026-03-14
> 技术栈:ThinkPHP 8 + Vue 3 + UniApp + DeepSeek AI
---
## 一、技术架构总览
```
┌─────────────────────────────────────────────────┐
│ 客户端 │
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │ iOS │ │Android│ │ 鸿蒙 │ │ H5 │ │
│ └──┬───┘ └──┬───┘ └──┬───┘ └──┬───┘ │
│ └─────────┴─────────┴─────────┘ │
│ UniApp (Vue 3) │
├─────────────────────────────────────────────────┤
│ 管理后台: Vue 3 + Element Plus │
├─────────────────────────────────────────────────┤
│ API层: ThinkPHP 8 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ adminapi │ │ api │ │ AI Service│ │
│ └──────────┘ └──────────┘ └─────┬────┘ │
├──────────────────────────────────┼──────────────┤
│ 数据层 │ │
│ ┌──────┐ ┌──────┐ ┌──────┐ │ │
│ │MySQL │ │Redis │ │ 队列 │ │ │
│ └──────┘ └──────┘ └──────┘ │ │
├────────────────────────────────┼──────────────┤
│ 外部服务 │ │
│ ┌──────────┐ ┌──────────┐ │ │
│ │体育数据API│ │DeepSeek AI│◄──┘ │
│ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────┘
```
---
## 二、开发阶段规划
### 阶段一:基础架构(预计 2-3 周)
#### 1.1 数据库建表 + 爬虫服务
- 创建所有业务表(约40张新表)
- 执行SQL迁移脚本
- 验证表结构和关联关系
- **开发爬虫服务(SportCrawlerService)**,爬取网络真实数据填充数据库
- 爬虫服务与正式上线API服务共用数据清洗/入库逻辑,切换时仅替换数据源适配器
#### 1.2 用户体系扩展
**后端(server/app/**
```
app/common/model/user/
├── UserProfile.php # 用户扩展资料模型
├── UserLevel.php # 用户等级模型
├── UserVip.php # VIP订阅模型
├── UserExpert.php # 专家认证模型
└── UserCredit.php # 信誉评分模型
app/api/controller/user/
├── UserProfileController.php
├── UserLevelController.php
└── UserVipController.php
app/api/logic/user/
├── UserProfileLogic.php
├── UserLevelLogic.php
└── UserVipLogic.php
```
**前端(uniapp/src/**
```
pages/user/
├── profile/index.vue # 个人资料页
├── level/index.vue # 等级详情页
└── vip/index.vue # VIP订阅页
```
**开发顺序**
1. 创建用户扩展表 → Model → Logic → Controller → API路由
2. 前端个人资料页面
3. 等级经验值计算逻辑
4. VIP订阅流程
#### 1.3 头条资讯模块
**后端开发**
```
app/api/controller/article/
├── ArticleController.php # 复用已有,扩展AI分析接口
└── ArticleCateController.php # 复用已有
app/api/logic/article/
└── ArticleAiLogic.php # 新增 - AI导读分析逻辑
app/common/model/article/
└── ArticleAiAnalysis.php # 新增 - AI分析结果模型
app/adminapi/controller/article/
└── ArticleController.php # 复用已有 - 后台资讯管理
```
**前端开发**
```
uniapp/src/pages/
├── news/
│ ├── index.vue # 资讯列表
│ ├── detail.vue # 资讯详情
│ └── components/
│ ├── NewsCard.vue # 资讯卡片组件
│ └── AiAnalysis.vue # AI导读分析组件
```
**开发顺序**
1. 扩展资讯分类(体育相关分类)
2. 资讯列表/详情前端页面
3. AI导读分析接口(阶段三实现AI逻辑,此处先预留接口)
#### 1.4 赛事基础模块
**后端开发**
```
app/common/model/sport/
├── SportType.php # 运动类型
├── League.php # 联赛
├── Team.php # 球队
├── Match.php # 赛事
├── MatchOdds.php # 赔率
├── MatchStats.php # 赛事统计
├── MatchHistory.php # 历史交锋
├── Player.php # 球员
└── PlayerInjury.php # 伤停
app/api/controller/sport/
├── MatchController.php # 赛事接口
├── LeagueController.php # 联赛接口
└── TeamController.php # 球队接口
app/api/logic/sport/
├── MatchLogic.php
├── LeagueLogic.php
└── TeamLogic.php
app/common/service/sport/
├── SportDataService.php # 数据源统一接口(爬虫/API切换)
├── SportCrawlerService.php # 爬虫服务(Demo阶段主要数据源)
└── DataCleanerService.php # 数据清洗器(爬虫/API共用)
```
**前端开发**
```
uniapp/src/pages/
├── match/
│ ├── index.vue # 赛事列表(按日期)
│ ├── detail.vue # 赛事详情
│ └── components/
│ ├── MatchCard.vue # 赛事卡片
│ ├── OddsPanel.vue # 赔率面板
│ ├── ScoreBoard.vue # 比分板
│ └── HistoryTable.vue # 历史交锋表
├── league/
│ ├── index.vue # 联赛列表
│ └── detail.vue # 联赛详情(排名/赛程)
```
**开发顺序**
1. 运动类型/联赛/球队基础数据表和模型
2. 赛事CRUD接口
3. 爬虫服务开发(SportCrawlerService)爬取网络真实赛事数据
4. 数据清洗器(DataCleanerService)统一入库格式
5. 前端赛事列表/详情页面
6. 赔率/盘口展示
7. SportDataService 统一接口(正式上线时切换数据源适配器)
---
### 阶段二:社区与互动(预计 2-3 周)
#### 2.1 社区发帖系统
**后端开发**
```
app/common/model/community/
├── CommunityPost.php # 帖子
├── CommunityPostImage.php # 帖子图片
├── CommunityComment.php # 评论
├── CommunityLike.php # 点赞
├── CommunityTag.php # 标签
├── CommunityPostTag.php # 帖子标签关联
└── CommunityFollow.php # 关注
app/api/controller/community/
├── PostController.php # 帖子接口
├── CommentController.php # 评论接口
├── FollowController.php # 关注接口
└── TagController.php # 标签接口
app/api/logic/community/
├── PostLogic.php
├── CommentLogic.php
└── FollowLogic.php
```
**前端开发**
```
uniapp/src/pages/
├── community/
│ ├── index.vue # 社区首页(帖子列表)
│ ├── post_detail.vue # 帖子详情
│ ├── publish.vue # 发帖页面
│ └── components/
│ ├── PostCard.vue # 帖子卡片
│ ├── CommentList.vue # 评论列表
│ ├── ImageUpload.vue # 图片上传
│ └── TagSelector.vue # 标签选择器
```
**开发顺序**
1. 帖子CRUD → 评论 → 点赞 → 标签
2. 关注系统
3. 图片上传(战绩截图)
4. 推荐方案发布(关联赛事)
#### 2.2 跟单系统
**后端开发**
```
app/common/model/tipster/
├── TipsterPlan.php # 推荐方案
├── TipsterFollow.php # 跟单记录
├── TipsterStats.php # 推手统计
└── TipsterProfitLog.php # 盈亏日志
app/api/controller/tipster/
├── PlanController.php # 方案接口
├── FollowController.php # 跟单接口
└── StatsController.php # 统计接口
app/api/logic/tipster/
├── PlanLogic.php
├── FollowLogic.php
└── StatsLogic.php
```
**前端开发**
```
uniapp/src/pages/
├── tipster/
│ ├── index.vue # 推手列表/排行榜
│ ├── detail.vue # 推手详情(历史方案/盈亏曲线)
│ ├── plan_detail.vue # 方案详情
│ └── components/
│ ├── TipsterCard.vue # 推手卡片
│ ├── PlanCard.vue # 方案卡片
│ ├── ProfitChart.vue # 盈亏曲线图
│ └── FollowButton.vue # 跟单按钮
```
**开发顺序**
1. 推荐方案发布/展示
2. 跟单功能
3. 盈利统计和排行榜
4. 盈亏曲线图表
#### 2.3 专家认证
**后端**UserExpert 模型 + 认证申请/审核接口
**管理后台**:认证审核页面
**开发顺序**:认证申请接口 → 后台审核页面 → 前端申请页面
---
### 阶段三:AI智能模块(预计 3-4 周)
#### 3.1 AI基础服务层
**后端开发**
```
app/common/service/ai/
├── AiService.php # AI服务基类
├── DeepSeekClient.php # DeepSeek API客户端
├── AiCacheService.php # AI结果缓存服务
└── AiQueueService.php # AI异步队列服务
app/common/enum/
└── AiEnum.php # AI相关枚举(分析类型/状态等)
config/
└── ai.php # AI配置文件(从 la_ai_config 表读取,后台可配置)
```
**核心类设计**
```php
// DeepSeekClient.php - 核心调用类
class DeepSeekClient
{
private string $apiKey; // 从 la_ai_config 表读取,后台可配置
private string $baseUrl; // 从 la_ai_config 表读取
private string $model; // deepseek-chat / deepseek-reasoner,后台可切换
public function chat(string $systemPrompt, string $userMessage): array
public function chatStream(string $systemPrompt, string $userMessage): Generator
}
// AiService.php - 业务封装
class AiService
{
public static function analyzeArticle(int $articleId): array // 资讯AI分析
public static function predictMatch(int $matchId): array // 赛事预测
public static function analyzeCredibility(int $userId): array // 可信度分析
public static function analyzeLottery(array $params): array // 彩票概率分析
}
```
#### 3.2 AI资讯阅读助手
**Prompt设计**
```
系统角色:你是一位专业的体育资讯分析师。
任务:对以下体育资讯文章进行深度分析,输出JSON格式结果:
{
"summary": "3-5句话的摘要",
"key_points": ["重点1", "重点2", ...],
"risk_warnings": ["风险提示1", ...],
"opposite_views": ["反向观点1", ...],
"sentiment": {
"label": "positive/neutral/negative",
"confidence": 0.85
}
}
```
**开发顺序**
1. DeepSeekClient 封装(从 la_ai_config 读取配置)
2. 后台AI配置页面(API Key / 模型选择 / 参数调整 / 调用限制)
3. 资讯分析Prompt设计和调试
4. 结果缓存策略
5. 前端AI分析展示组件
6. 后台AI调用日志查看页面
#### 3.3 社区可信度分析模型
**数据采集**
```
用户ID →
├── 历史推荐方案列表 → 命中率计算
├── 盈亏记录 → 波动率计算
├── 发帖时间序列 → 稳定性计算
├── 帖子编辑记录 → 事后编辑检测
└── 赛果对比 → 偏离程度计算
```
**Prompt设计**
```
系统角色:你是体育社区内容审核AI。
输入数据:用户历史数据摘要(JSON格式)
任务:评估该用户的可信度,输出JSON:
{
"credibility_score": 75,
"risk_level": "medium",
"is_suspicious": false,
"analysis": "分析说明",
"dimension_scores": {
"hit_rate": 80,
"volatility": 70,
"stability": 85,
"rationality": 65,
"edit_integrity": 90,
"deviation": 70
}
}
```
**定时任务**:每日凌晨3点执行批量分析
**开发顺序**
1. 数据采集逻辑
2. Prompt设计和调优
3. 定时任务配置
4. 前端可信度标识展示
#### 3.4 赛事预测模型
**数据输入组装**
```php
// 组装赛事分析数据
$matchData = [
'home_team' => [...], // 主队近期数据
'away_team' => [...], // 客队近期数据
'head_to_head' => [...], // 历史交锋
'odds' => [...], // 当前赔率
'injuries' => [...], // 伤停信息
'xg_data' => [...], // xG数据
];
```
**开发顺序**
1. 赛事数据组装逻辑
2. 预测Prompt设计
3. 预测结果存储和展示
4. 前端预测报告页面
#### 3.5 彩票概率模型
**实现方式**:统计算法为主 + DeepSeek辅助分析
```
历史开奖数据 →
├── PHP统计计算(频率/遗漏值/冷热号)
├── DeepSeek分析趋势和异常模式
└── 蒙特卡洛模拟生成推荐组合
```
#### 3.6 个性化推荐流
**推荐因子**
- 用户浏览历史(赛事/资讯偏好)
- 关注的推手和球队
- AI分析结果质量评分
- 时效性(优先最新内容)
---
### 阶段四:变现与运营(预计 2-3 周)
#### 4.1 钱包管理
**后端开发**
```
app/common/model/wallet/
├── Wallet.php # 钱包
├── WalletLog.php # 钱包流水
├── WalletWithdraw.php # 提现记录
└── WalletAddress.php # 钱包地址
app/api/controller/wallet/
├── WalletController.php # 钱包接口
└── WithdrawController.php # 提现接口
app/api/logic/wallet/
├── WalletLogic.php
└── WithdrawLogic.php
app/adminapi/controller/wallet/
└── WithdrawController.php # 后台提现审核
```
**前端开发**
```
uniapp/src/pages/
├── wallet/
│ ├── index.vue # 钱包首页
│ ├── bill.vue # 账单记录
│ ├── withdraw.vue # 提现页面
│ └── address.vue # 地址管理
```
**开发顺序**
1. 钱包余额管理
2. 流水记录
3. 提现申请和审核流程
4. USTD地址管理
#### 4.2 分销管理
**后端开发**
```
app/common/model/distribution/
├── DistributionConfig.php # 分销配置
├── DistributionInvite.php # 邀请记录
├── DistributionTeam.php # 团队关系
└── DistributionSettlement.php # 结算记录
app/api/controller/distribution/
├── InviteController.php # 邀请接口
├── TeamController.php # 团队接口
└── SettlementController.php # 结算接口
app/api/logic/distribution/
├── InviteLogic.php # 邀请码生成/绑定逻辑
├── TeamLogic.php # 团队树形结构逻辑
└── SettlementLogic.php # 佣金计算/结算逻辑
```
**前端开发**
```
uniapp/src/pages/
├── distribution/
│ ├── index.vue # 分销中心
│ ├── invite.vue # 邀请页面(含二维码)
│ ├── team.vue # 团队列表
│ └── settlement.vue # 结算报表
```
**开发顺序**
1. 邀请码/链接生成
2. 注册绑定上级关系
3. 团队树形管理
4. 佣金计算逻辑
5. 月度自动结算定时任务
#### 4.3 平台首页聚合
**开发顺序**
1. 今日赛事聚合接口
2. 热门推荐接口
3. 盈利排行榜接口
4. AI精选分析展示
5. 首页UI整合
---
## 三、后台管理扩展
### 需要新增的管理后台页面
```
admin/src/views/
├── sport/ # 赛事管理
│ ├── type/index.vue # 运动类型管理
│ ├── league/index.vue # 联赛管理
│ ├── team/index.vue # 球队管理
│ ├── match/index.vue # 赛事管理
│ └── data_sync.vue # 数据同步管理
├── community/ # 社区管理
│ ├── post/index.vue # 帖子管理(审核/删除)
│ ├── comment/index.vue # 评论管理
│ ├── tag/index.vue # 标签管理
│ └── report.vue # 举报处理
├── tipster/ # 跟单管理
│ ├── plan/index.vue # 方案管理
│ ├── expert/index.vue # 专家认证审核
│ └── ranking.vue # 排行榜管理
├── ai/ # AI管理
│ ├── config.vue # AI配置(API Key/参数)
│ ├── analysis_log.vue # 分析日志
│ └── model_config.vue # 模型参数配置
├── wallet/ # 钱包管理
│ ├── withdraw/index.vue # 提现审核
│ └── log.vue # 流水查看
├── distribution/ # 分销管理
│ ├── config.vue # 分销配置
│ ├── team.vue # 团队查看
│ └── settlement.vue # 结算管理
└── user_ext/ # 用户扩展管理
├── level_config.vue # 等级配置
├── vip_config.vue # VIP配置
└── credit.vue # 信誉评分查看
```
---
## 四、API路由规划
### 前台APIapp/api
```
// 赛事模块
Route::group('sport', function () {
Route::get('match/list', 'sport.Match/list');
Route::get('match/detail', 'sport.Match/detail');
Route::get('match/odds', 'sport.Match/odds');
Route::get('match/history', 'sport.Match/history');
Route::get('league/list', 'sport.League/list');
Route::get('team/detail', 'sport.Team/detail');
});
// 社区模块
Route::group('community', function () {
Route::get('post/list', 'community.Post/list');
Route::get('post/detail', 'community.Post/detail');
Route::post('post/publish', 'community.Post/publish');
Route::post('post/like', 'community.Post/like');
Route::post('comment/add', 'community.Comment/add');
Route::post('follow/toggle', 'community.Follow/toggle');
});
// 跟单模块
Route::group('tipster', function () {
Route::get('plan/list', 'tipster.Plan/list');
Route::get('plan/detail', 'tipster.Plan/detail');
Route::post('plan/publish', 'tipster.Plan/publish');
Route::post('plan/follow', 'tipster.Follow/follow');
Route::get('stats/ranking', 'tipster.Stats/ranking');
});
// AI模块
Route::group('ai', function () {
Route::get('article/analysis', 'ai.Article/analysis');
Route::get('match/prediction', 'ai.Match/prediction');
Route::get('user/credibility', 'ai.User/credibility');
Route::get('lottery/analysis', 'ai.Lottery/analysis');
});
// 钱包模块
Route::group('wallet', function () {
Route::get('info', 'wallet.Wallet/info');
Route::get('log/list', 'wallet.Wallet/logList');
Route::post('withdraw/apply', 'wallet.Withdraw/apply');
Route::get('withdraw/list', 'wallet.Withdraw/list');
Route::post('address/save', 'wallet.Wallet/saveAddress');
});
// 分销模块
Route::group('distribution', function () {
Route::get('invite/code', 'distribution.Invite/code');
Route::get('invite/list', 'distribution.Invite/list');
Route::get('team/list', 'distribution.Team/list');
Route::get('settlement/list', 'distribution.Settlement/list');
});
```
---
## 五、定时任务清单
| 任务 | Cron表达式 | Demo阶段 | 说明 |
|------|-----------|----------|------|
| 赛事数据爬取 | */30 * * * * | ✅ 爬虫服务 | 每30分钟爬取赛事数据(Demo用爬虫,正式用API) |
| 赔率数据爬取 | 0 */2 * * * | ✅ 爬虫服务 | 每2小时爬取赔率变化 |
| 赛果更新 | 0 */1 * * * | ✅ 爬虫服务 | 每小时检查并更新赛果 |
| 资讯爬取 | 0 */4 * * * | ✅ 爬虫服务 | 每4小时爬取最新体育资讯 |
| 推荐方案结算 | 0 */1 * * * | ✅ 需要 | 每小时结算已结束赛事的方案 |
| AI可信度计算 | 0 3 * * * | ✅ 需要 | 每日凌晨3点批量计算信誉评分 |
| 用户等级计算 | 0 4 * * * | ✅ 需要 | 每日凌晨4点更新用户等级 |
| 分销佣金结算 | 0 2 1 * * | ✅ 需要 | 每月1日凌晨2点结算上月佣金 |
| AI分析报告生成 | 0 8 * * * | ✅ 需要 | 每日早8点生成当日赛事AI分析 |
| 盈利排行榜更新 | 0 */2 * * * | ✅ 需要 | 每2小时更新盈利排行 |
---
## 六、第三方服务集成
| 服务 | 用途 | Demo阶段 | 正式上线 |
|------|------|----------|----------|
| DeepSeek API | AI分析核心 | ✅ 真实接入(Key后台配置) | 同左 |
| 体育数据API | 赛事/赔率/比分 | ✅ 爬虫爬取真实数据 | 切换为付费API |
| 短信服务 | 注册/登录验证码 | ✅ 通用验证码0000 | 接入短信服务商 |
| 文件存储 | 图片/截图上传 | ✅ likeadmin已集成 | 同左(OSS) |
| 微信SDK | 小程序/公众号登录 | ✅ likeadmin已集成 | 同左 |
| 支付服务 | VIP订阅/方案购买 | ❌ 后台手动设置 | 接入支付渠道 |
| USTD提现 | 钱包提现 | ❌ 仅状态更新 | 接入链上转账 |
---
## 七、部署与同步流程
### 开发流程
```
本地开发(IDE) → Git Push(Gitee) → 服务器 Git Pull → 生效
```
### Git 部署(主要方式)
- 远程仓库:`https://gitee.com/phperbylyh/sport-era-service.git`
- 分支:`develop`
- 服务器更新命令(宝塔定时任务):
```bash
cd /www/wwwroot/sportera.gs-z.cn && chattr -i public/.user.ini 2>/dev/null && git -c safe.directory=/www/wwwroot/sportera.gs-z.cn fetch --all && echo "----- 更新内容 -----" && git -c safe.directory=/www/wwwroot/sportera.gs-z.cn log HEAD..origin/develop --oneline 2>&1 && echo "----- 变更文件 -----" && git -c safe.directory=/www/wwwroot/sportera.gs-z.cn diff --stat HEAD origin/develop 2>&1 && git -c safe.directory=/www/wwwroot/sportera.gs-z.cn reset --hard origin/develop 2>&1 && chattr +i public/.user.ini 2>/dev/null && echo "===== 部署完成: $(date) ====="
```
### SFTP 配置(辅助方式)
- 配置文件:`.winsurf/sftp.json`
- 自动上传:保存即同步
- 忽略文件:.git, .env, runtime, vendor
### 前端构建部署
```bash
# Admin后台
cd admin && npm run build # 输出到 server/public/admin/
# UniApp H5
cd uniapp && npm run build:h5 # 输出到 server/public/mobile/
# UniApp App
cd uniapp && npm run build:app # 生成原生App包
```
---
## 八、里程碑节点
| 里程碑 | 阶段 | 预计完成 | 交付物 |
|--------|------|----------|--------|
| M1 | 基础架构 | 第3周 | 数据库+爬虫服务+用户体系+资讯+赛事基础数据 |
| M2 | 社区上线 | 第6周 | 社区发帖+跟单+专家认证 |
| M3 | AI上线 | 第10周 | AI分析全功能+后台AI配置管理 |
| M4 | 商业闭环 | 第13周 | 钱包+分销+VIP+首页聚合 |
| **Demo交付** | **全部** | **第13周** | **完整功能Demo + 虚拟数据** |
| M5 | 正式上线 | 第15周 | 接入真实数据API+支付+USTD |
| M6 | 优化迭代 | 持续 | 性能优化+数据积累+模型调优 |