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