# Sport-Era 体育咨询AI平台 - 实现流程文档

> 版本：v1.1（Demo版）
> 日期：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路由规划

### 前台API（app/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 | 优化迭代 | 持续 | 性能优化+数据积累+模型调优 |
