添加赔率

This commit is contained in:
hajimi
2026-07-11 11:19:43 +08:00
parent c9ac46faa7
commit 3a5d571e53
29 changed files with 3006 additions and 542 deletions
+266 -6
View File
@@ -13,6 +13,266 @@
## 一、已完成事项
### 86. 赛事中心赛程 / 直播 / 赔率统一组件
- 状态:代码已修改,待构建与页面验证 - 时间:2026-07-11
完成内容:
- 用户端赛事中心新增 `MatchCenterTabsPanel.vue`,在当前页面内容区域统一切换“赛程 / 直播 / 赔率”,不再因点击三个 Tab 显示世界杯主题组件。
- 赛程 Tab 迁移并保留原赛事列表、运动分类、联赛筛选、进行中/未开始/已结束分组和已结束赛事分页;运动与联赛分类条仅在赛程显示。
- 直播 Tab 新增 `/api/match/liveCards` 通用接口,基于 `la_match_live` 关联可见且未结束的赛事,前端不显示运动或联赛分类筛选。
- 赔率 Tab 新增 `/api/match/odds` 通用接口,只保留滚球盘/今日盘/早盘以及联赛/球队关键词搜索,并将赔率与普通站内赛事进行详情匹配。
- 世界杯专题卡仍进入原世界杯专题页;`worldCupLiveCards``worldCupOdds` 原接口与专题功能保持兼容。
涉及模块:
- `server/app/api/controller/MatchController.php`
- `server/app/common/service/match/MatchLiveService.php`
- `uniapp/src/api/match.ts`
- `uniapp/src/packages_match/components/MatchCenterPanel.vue`
- `uniapp/src/packages_match/components/MatchCenterTabsPanel.vue`
验证说明:
- 已完成静态改动范围和模板标签完整性检查。
- 按当前项目规范和用户要求,本次未执行 PHP 语法检查、前端构建、浏览器验证、提交或部署。
### 85. 球探世界杯赔率线路
- 状态:已完成 - 时间:2026-07-11
完成内容:
- `match_odds` 多平台抓取任务新增球探线路,默认读取 `https://zq.titan007.com/cn/CupMatch/75.html`
- 新增 `TitanOddsClient`,从杯赛页面动态识别赛季、联赛 ID 和赛程脚本,再请求公开的 `LeagueOddsAjax` 赔率数据接口。
- 球探盘口按页面默认 Crown 公司整理:亚让/大小球公司 ID 为 `3`,胜平负公司 ID 为 `545`;全部公司原始赔率同时保存在 `raw_data`
- 球探数据使用 `source_site=titan007` 写入 `la_match_odds`,平台名称在用户端和管理端统一显示为“球探”。
- HG 与球探改为独立抓取来源,单个来源失败不会阻断另一个来源入库;球探相关参数支持通过 `TITAN_ODDS_*` 环境变量覆盖。
- 多平台赔率聚合键调整为“主客队 + 比赛月日”,兼容 HG 与球探不同的联赛名和时间文本格式,使同场比赛可以展示多个平台。
涉及模块:
- `docker/crawler/titan_odds.py`
- `docker/crawler/match_odds.py`
- `docker/crawler/docker/entrypoint.sh`
- `docker/.env.docker.example`
- `docker/crawler/tests/test_titan_odds.py`
- `docker/crawler/tests/test_match_odds.py`
- `server/app/api/controller/MatchController.php`
- `server/app/adminapi/lists/match/MatchOddsLists.php`
验证说明:
- 已分析球探页面、赛程脚本和公开赔率接口的实时响应格式。
- 按当前项目规范,本次未执行测试、提交或部署命令。
### 84. 赛事中心世界杯快捷 Tab
- 状态:已完成 - 时间:2026-07-10
完成内容:
- 用户端赛事中心 `topic-entry` 下方新增“赛程 / 直播 / 赔率”三项世界杯快捷入口。
- 快捷入口复用世界杯专题页现有 Tab 状态,分别打开 `schedule``live``odds`,不新增接口和页面路由。
- 原世界杯入口卡片继续默认进入赛程页,保持现有点击行为。
验证记录:
- 已执行 `npm run build:h5`H5 构建通过。
- 已在本地 `http://localhost:5177/packages_match/pages/worldcup` 点击“其他赛事”后验证快捷 Tab 展示,并点击“赔率”确认可进入世界杯赔率列表。
- 已执行项目部署脚本,同步到测试服运行目录,自动提交 `c9ac46f`
### 83. 管理端赛事赔率列表
- 状态:已完成 - 时间:2026-07-10
完成内容:
- 管理端在“赛事管理”菜单下新增“赔率列表”,对应组件 `match/odds/index`,菜单权限为 `match.matchOdds/index`
- 后端新增 `/adminapi/match.matchOdds/lists` 只读列表接口,基于 `la_match_odds` 展示第三方赔率记录,默认过滤没有任何盘口值的空赔率记录。
- 赔率列表支持按平台、盘口类型、运动类型、联赛名称、球队/时间/来源ID 关键词筛选,并动态返回平台选项,便于后续接入多个赔率平台。
- 管理端页面展示平台、盘口、运动、联赛、比赛双方、独赢、让球、大小球、半场独赢、玩法数量、来源ID、更新时间和来源线路。
- 新增幂等菜单 SQL `docs/sql/insert_menu_match_odds.sql`,用于将“赔率列表”和隐藏查询权限挂到“赛事管理”下。
验证记录:
- 已执行 `php -l server\app\adminapi\controller\match\MatchOddsController.php``php -l server\app\adminapi\lists\match\MatchOddsLists.php`,语法检查通过。
- 已在 `admin` 目录执行 `npm run build`,管理端构建通过;构建产生的 `server/public/admin` 哈希产物已恢复,避免混入源码改动。
- 已通过部署脚本将新增后端接口同步到测试服运行目录,并通过后台 API 写入菜单,确认“赔率列表”位于“赛事管理”下。
- 已请求 `https://test-server.sbnews.net/adminapi/match.matchOdds/lists?page_no=1&page_size=5&sport_type=FT&has_odds=1`,接口返回 200,当前有赔率记录 48 条。
- 已在本地管理端 `http://localhost:5176/match/match_odds` 验证页面渲染,菜单显示“赔率列表”,表格展示“滚球”平台赔率数据。
### 82. 世界杯专题赔率 Tab
- 状态:已完成 - 时间:2026-07-09
完成内容:
- 后端新增 `/api/match/worldCupOdds` 接口,以 `la_match_odds` 赔率抓取结果为主数据源按比赛聚合返回,不强制绑定世界杯赛程;赛程匹配仅用于补充图标、状态和详情跳转。
- 新增 `MatchOdds` 模型读取第三方赔率表,当前 `source_site=hg` 前端展示为“滚球”,盘口类型展示为滚球盘/今日盘/早盘。
- 用户端世界杯专题页在“比分和赛程”和“排名”之间新增“赔率”Tab,按赔率比赛卡片展示联赛、时间、主客队、平台、更新时间、独赢、让球、大小球赔率。
- 赔率 Tab 支持按盘口类型筛选,并可通过关键词搜索联赛、主队、客队;后端接口同步支持 `show_type``source_site``keyword` 参数。
- 后端会剔除没有任何盘口值的平台和比赛,避免前台展示只有赛程信息但没有赔率的空卡片。
- 赔率比赛可匹配站内世界杯赛事时保留比赛详情跳转;未匹配站内赛事时仅展示第三方赔率。
验证记录:
- 已执行 `php -l server\app\api\controller\MatchController.php``php -l server\app\common\model\match\MatchOdds.php`,语法检查通过。
- 已执行 `npm run build:h5`H5 构建通过。
- 已请求 `https://test-server.sbnews.net/api/match/worldCupOdds?limit=300`,接口返回 200,当前可取到 45 场有盘口值的足球赔率,空赔率比赛为 0。
- 已在本地 H5 `http://localhost:8991/packages_match/pages/worldcup?tab=odds` 验证“赔率”Tab 渲染,页面展示 45 张有盘口值的赔率比赛卡,包含“滚球”平台及独赢/让球/大小球赔率。
### 81. 第三方赛事赔率定时抓取
- 状态:已完成 - 时间:2026-07-09
完成内容:
- Docker crawler 新增 `match_odds` 任务,支持依次尝试多条第三方线路,登录后拉取赛事赔率 XML,并同步到 `la_match_odds`
- 新增 `la_match_odds` 表,按 `source_site + source_match_id` 唯一更新,保存联赛、主客队、让球、大小球、独赢、半场赔率、来源原始节点和规范化盘口 JSON。
- 赔率账号、密码、线路、运动类型、盘口范围均通过 `ODDS_*` / `HG_ODDS_*` 环境变量配置,未硬编码到代码或文档。
- `docker/crawler/config/crawler_tasks.yaml` 注册 `match_odds`,默认每 5 分钟执行;`entrypoint.sh` 已把 `ODDS_` / `HG_ODDS_` 环境变量写入 cron 环境文件。
- `docs/sql/create_match_odds_table.sql``docs/sql/insert_crontab_match_odds.sql` 已补齐幂等初始化脚本,`sbnews.sql` 已同步表结构。
验证记录:
- 已执行 `python -m unittest docker.crawler.tests.test_match_odds`5 个用例通过。
- 已执行 `python -m unittest docker.crawler.tests.test_docker_task_runner`7 个用例通过。
- 已执行 `python -m py_compile docker/crawler/match_odds.py docker/crawler/main.py`,语法检查通过。
- 已在测试库执行建表和定时任务 SQL,确认 `la_match_odds` 存在,`la_dev_crontab``crawler match_odds` 任务 ID 为 47。
- 已进行真实线路抓取验证:来源 `https://205.201.0.120/`,最近一次抓取成功入库 65 场,跳过当前账号不可用/无日期组合 28 项,失败 0 项;测试库累计足球赔率 70 场(滚球 8、今日 62)。
### 80. AI分析统一请求接口与免费次数扣减
- 状态:已完成 - 时间:2026-07-05
完成内容:
- 后端新增 `AiAnalysisRequestService`,统一承接赛事分段/完整预测、资讯分析、社区帖子分析、彩票总分析、彩票模块分析、用户可信度分析,并由 `/api/ai/analyze` 统一分发。
- 后端新增 `la_ai_quota_unlock` 通用解锁表和 `AiQuotaUnlock` 模型,按 `analysis_type + analysis_key` 记录用户已解锁内容;同一比赛、文章、帖子、同一彩种最新期彩票分析重复查看不再重复扣减。
- `AiQuotaService` 扩展为统一扣次服务:普通用户每日免费 3 次,VIP 展示 999 次;通用入口扣次成功后返回 `remain_count``charged``unlocked`
- 兼容旧接口:`/api/ai/*``/api/lottery/ai*``/api/community/aiAnalysis` 均改为代理到统一服务,避免旧页面绕过扣次。
- 用户端 `uniapp/src/api/ai.ts` 新增 `requestAiAnalysis`,彩票、社区、赛事、资讯等 API 封装已统一走 `/api/ai/analyze`;页面接收 `remain_count` 后同步刷新免费剩余次数展示。
涉及模块:
- `server/app/api/controller/AiController.php`
- `server/app/api/controller/LotteryController.php`
- `server/app/api/controller/CommunityController.php`
- `server/app/common/service/ai/AiAnalysisRequestService.php`
- `server/app/common/service/ai/AiQuotaService.php`
- `server/app/common/model/ai/AiQuotaUnlock.php`
- `server/app/common/model/ai/AiUnlock.php`
- `uniapp/src/api/ai.ts`
- `uniapp/src/api/lottery.ts`
- `uniapp/src/api/community.ts`
- `uniapp/src/pages/ai_analysis/ai_analysis.vue`
- `uniapp/src/pages/match_detail/match_detail.vue`
- `uniapp/src/pages/lottery_analysis/lottery_analysis.vue`
- `uniapp/src/packages_lottery/pages/index.vue`
- `uniapp/src/packages_lottery/pages/draw_list.vue`
- `docs/sql/create_ai_quota_unlock.sql`
- `sbnews.sql`
验证记录:
- 已执行 `php -l` 检查 `AiController.php``LotteryController.php``CommunityController.php``AiQuotaService.php``AiAnalysisRequestService.php``AiQuotaUnlock.php``AiUnlock.php`,均通过。
- 已在测试库执行幂等建表,确认 `la_ai_quota_unlock` 已存在。
- 已执行 `npm run build:h5`H5 构建通过并复制产物到 `server/public/mobile`
- 已执行源码搜索,确认用户端 AI 分析 API 封装不再请求旧的 `/ai/matchPredict``/ai/articleAnalysis``/lottery/aiPredict``/community/aiAnalysis` 等分析入口。
### 79. AI分析入口与每日免费额度统一整理
- 状态:已完成 - 时间:2026-07-05
完成内容:
- 梳理系统内 AI 分析入口:用户端赛事分段预测、资讯深度解读、社区帖子分析、彩票总分析/模块分析/独立预测页;管理端包含 AI 配置、AI 分析记录、AI 日志、知识库相关配置与查询记录。
- 后端新增 `AiQuotaService`,统一维护 AI 每日免费次数为 3 次、VIP 剩余额度展示为 999,并复用到用户 VIP 信息和赛事 AI 解锁扣次逻辑,避免后续多处硬编码。
- 用户端新增 `uniapp/src/config/ai.ts`,统一维护“每日免费3次AI分析”文案和默认剩余额度;赛事、资讯、AI 分析页、彩票分析页、彩票首页、开奖列表的免费额度展示已统一读取该配置。
- 已将测试库/运行库未删除用户的 `ai_free_count` 恢复为 3`ai_free_date` 恢复为 2026-07-05。
涉及模块:
- `server/app/common/service/ai/AiQuotaService.php`
- `server/app/common/model/user/User.php`
- `server/app/common/model/ai/AiUnlock.php`
- `uniapp/src/config/ai.ts`
- `uniapp/src/pages/ai_analysis/ai_analysis.vue`
- `uniapp/src/pages/match_detail/match_detail.vue`
- `uniapp/src/pages/news_detail/news_detail.vue`
- `uniapp/src/pages/lottery_analysis/lottery_analysis.vue`
- `uniapp/src/packages_lottery/pages/index.vue`
- `uniapp/src/packages_lottery/pages/draw_list.vue`
验证记录:
- 已执行源码搜索,确认 AI 免费次数默认值集中在后端 `AiQuotaService::DAILY_FREE_COUNT`、前端 `AI_DAILY_FREE_COUNT` 和 SQL 表结构默认值 3。
- 已执行数据库恢复脚本,确认未删除用户 `224/224` 均恢复为今日剩余 3 次。
### 78. 安卓端新闻详情正文渲染修复
- 状态:已完成 - 时间:2026-07-05
完成内容:
- 排查 `/pages/news_detail/news_detail` 安卓端详情正文不显示,确认接口 `/api/article/detail` 正常返回 `content`,问题集中在 App 端富文本渲染链路。
- 修复正文图片 HTML 归一化:自闭合 `<img ... />` 追加 `referrerpolicy` 和样式前会先移除末尾 `/`,避免生成 `<img ... / referrerpolicy=...>` 这类畸形标签。
- 非 H5 端正文块改为使用项目已有 `u-parse` 解析 HTML,并补充移动端正文标签样式,降低 App `rich-text` 直接消费 HTML 字符串导致的空白风险;H5 端保留原 `v-html` 渲染。
涉及模块:
- `uniapp/src/pages/news_detail/news_detail.vue`
验证记录:
- 已用测试服文章 `id=2430879` 确认详情接口返回正文 `content`
- 已执行一次性静态检查,确认 App 端使用 `u-parse` 且图片归一化不再保留错误斜杠。
- 已执行 `npm run build:app`App 目标构建通过。
- 已执行 `npm run build:h5`H5 构建通过;构建生成的 `server/public/mobile` 哈希产物已清理回构建前状态,避免混入源码修复。
- 已执行项目约定部署命令,部署脚本自动提交 `074aa7a` 并同步到 `/www/wwwroot/api.sbnews.net`
### 77. 新闻详情底部评论操作区优化
- 状态:已完成 - 时间:2026-07-04
完成内容:
- 用户端新闻详情页 `/pages/news_detail/news_detail` 底部操作区已移除“不喜欢”入口,不再展示点踩按钮和点踩数量。
- 评论输入入口改为带图标、主提示和讨论数副提示的胶囊布局,右侧仅保留点赞、收藏、分享三个固定宽度操作,降低底栏拥挤和文字溢出风险。
- 点赞数增加万级与 `999+` 展示兜底,无点赞时显示“点赞”,保持操作含义清晰。
涉及模块:
- `uniapp/src/pages/news_detail/news_detail.vue`
验证记录:
- 已执行 `npm run build:h5`H5 构建通过,构建产物已复制到 `server/public/mobile`
### 76. 世界杯直播卡展示主播与房间信息
- 状态:已完成 - 时间:2026-07-03
完成内容:
- 前台 `/api/match/worldCupLiveCards` 增加透出 `la_match_live` 中的主播与房间字段:`anchor_name``anchor_avatar``room_view_count``room_focus_count``room_notice`
- 用户端世界杯直播卡片 `worldcup-live-card__meta` 改为展示主播头像/昵称、观看数、关注数和直播间公告,人数支持万级格式化并提供空值兜底。
- `WorldCupLiveCardItem` 类型已同步补齐上述字段,避免后续调用方继续依赖索引签名。
涉及模块:
- `server/app/common/service/match/MatchLiveService.php`
- `uniapp/src/api/match.ts`
- `uniapp/src/packages_match/components/WorldCupPanel.vue`
验证记录:
- 已执行 `php -l server/app/common/service/match/MatchLiveService.php`PHP 语法检查通过。
- 已执行 `npm run build:h5`H5 构建通过;构建生成的 `server/public/mobile` 哈希产物已恢复,避免混入源码改动。
- 已执行项目约定部署命令,部署脚本自动提交 `b1539d9` 并同步到 `/www/wwwroot/api.sbnews.net`
### 75. 管理端直播管理接入 la_match_live
- 状态:已完成 - 时间:2026-07-01
完成内容:
- 管理端新增独立“直播管理”页面,放在“赛事管理”一级菜单下,数据以 `la_match_live` 为主表展示。
- 后台列表支持按赛事ID、线路标题、播放类型、抓取状态、来源域名、热门标记筛选,并展示 `play_type``iframe_url``source_domain``source_is_hot``fetch_status_text` 等 HTML/视频流线路字段。
- `MatchLiveLists` 不再在未传 `match_id` 时强制追加 `match_id=0`,因此菜单入口可以直接分页查看全部直播线路;从赛事列表点“直播线路”仍可带 `match_id` 进入单场筛选。
- `insert_menu_match_live.sql` 已调整为将 `match.matchLive/index` 挂到 `paths='match'` 的赛事管理目录下,菜单名为“直播管理”,并设为显示。
- 已构建管理端并覆盖测试服后台静态产物,旧后台产物备份为 `/www/wwwroot/test-server.sbnews.net/server/public/admin.bak-20260701151143`
涉及模块:
- `admin/src/views/match/live/index.vue`
- `admin/src/views/match/lists/components/MatchLiveTable.vue`
- `admin/src/api/match.ts`
- `server/app/adminapi/lists/match/MatchLiveLists.php`
- `server/app/adminapi/logic/match/MatchLiveLogic.php`
- `docs/sql/insert_menu_match_live.sql`
- `qa/frontend/test_admin_match_live_management_static.py`
验证记录:
- 已先新增 `qa/frontend/test_admin_match_live_management_static.py` 红灯检查,修改前因直播页仍依赖单场赛事上下文失败。
- 已执行 `C:\Python311\python.exe qa/frontend/test_admin_match_live_management_static.py`,静态检查通过。
- 已执行 `php -l server/app/adminapi/lists/match/MatchLiveLists.php``php -l server/app/adminapi/logic/match/MatchLiveLogic.php`PHP 语法检查通过。
- 已在 `admin` 目录执行 `npm run build`,管理端构建通过,产物复制到 `server/public/admin`
- 已在测试服执行菜单 SQL,确认 `直播管理` 的父级为 `赛事管理``is_show=1`,超级管理员角色已拥有 `index/detail/add/edit/delete` 5 个权限节点。
- 已验证 `https://test-admin.sbnews.net/` 返回 200,构建产物中可检索到“直播管理”。
- 本次未执行自动部署脚本:当前工作区存在任务前已有的无关未提交改动,部署脚本会自动暂存/提交发布范围内容;本次按用户要求直接将相关源码、SQL 与构建产物同步到测试服。
### 74. 赛事直播流定时抓取恢复与 Docker 调度优化
- 状态:已完成 - 时间:2026-06-21
@@ -127,7 +387,7 @@
- 根目录部署默认范围继续包含 `server/``uniapp/``admin/``docker/`,并默认排除 `docker/.env``docker/.env.docker``docker/crawler/venv``docker/crawler/logs``docker/crawler/data``test_output.txt` 与临时脚本,避免密钥、日志、缓存和样例输出进入发布包。
- 默认发布范围内如仍存在 `admin` 这类 root gitlink,部署脚本会跳过该 gitlink 的自动提交 pathspec,但仍从当前工作区把源码补进发布包,避免自动提交阶段被 gitlink 卡住。
- `docker/crawler/Dockerfile` 在镜像构建时会把 `/app/docker/entrypoint.sh` 的 CRLF 换行归一为 LF,避免 Windows 上传后入口脚本报 `/usr/bin/env: 'bash\r': No such file or directory`
- `.vscode/sftp.json` 新增 `docker` 上传配置,远端目录为 `/www/wwwroot/test-server.sbnews.net/docker`,并忽略 Docker 密钥与 crawler 运行态目录。
- `.vscode/sftp.json` 新增 `docker` 上传配置,远端目录为 `/www/wwwroot/api.sbnews.net/docker`,并忽略 Docker 密钥与 crawler 运行态目录。
- `README.md` 已同步 Docker 爬虫源码目录、任务清单路径、默认发布目录结构和服务器 `CRAWLER_DIR` 注意事项。
涉及模块:
@@ -144,8 +404,8 @@
验证记录:
- 已执行 `git diff --check -- docker/docker-compose.crawler.yml docker/.env.example docker/.gitignore docker/crawler/.dockerignore docker/crawler/.gitignore scripts/deploy-server.ps1 README.md 业务进度管理.md`,未发现空白错误。
- 已执行 `deploy-server.ps1` PowerShell 语法解析检查,通过。
- 已在临时 Git 克隆中执行 `powershell -ExecutionPolicy Bypass -File .\scripts\deploy-server.ps1 -RemoteDir /www/wwwroot/test-server.sbnews.net -DryRun`,确认全量包默认包含 `server``uniapp``admin``docker`,且未上传到服务器。
- 已在临时 Git 克隆中执行 `powershell -ExecutionPolicy Bypass -File .\scripts\deploy-server.ps1 -AutoIncremental -AutoIncrementalCommits 3 -RemoteDir /www/wwwroot/test-server.sbnews.net -DryRun`,确认迁移提交范围会上传 `docker/crawler` 源码并跳过 `docker/crawler/data``logs``venv``test_output.txt` 等运行态/输出文件。
- 已在临时 Git 克隆中执行 `powershell -ExecutionPolicy Bypass -File .\scripts\deploy-server.ps1 -RemoteDir /www/wwwroot/api.sbnews.net -DryRun`,确认全量包默认包含 `server``uniapp``admin``docker`,且未上传到服务器。
- 已在临时 Git 克隆中执行 `powershell -ExecutionPolicy Bypass -File .\scripts\deploy-server.ps1 -AutoIncremental -AutoIncrementalCommits 3 -RemoteDir /www/wwwroot/api.sbnews.net -DryRun`,确认迁移提交范围会上传 `docker/crawler` 源码并跳过 `docker/crawler/data``logs``venv``test_output.txt` 等运行态/输出文件。
- 本机未安装 `docker` 命令,因此未在本机执行 `docker compose -f docker-compose.crawler.yml config`;该项需要在服务器或已安装 Docker 的环境验证。
### 68. 默认部署切换为根目录同时上传 server、uniapp 与 admin
@@ -168,7 +428,7 @@
- 已在临时最小 Git 仓库执行默认 `powershell -ExecutionPolicy Bypass -File .\scripts\deploy-server.ps1 -DryRun -RemoteDir /tmp/test`,修改前日志只出现 `server` 打包,确认红灯。
- 修改后已在临时最小 Git 仓库执行默认 `powershell -ExecutionPolicy Bypass -File .\scripts\deploy-server.ps1 -DryRun -AutoIncremental -AutoIncrementalCommits 3 -RemoteDir /tmp/test`,日志已同时出现 `server/app/ok.txt``uniapp/src/App.vue``admin/src/main.ts` 的增量变更,确认根目录模式能同时覆盖三套源码。
- 已补跑 `powershell -ExecutionPolicy Bypass -File .\scripts\deploy-server.ps1 -SourceDir server -DryRun -RemoteDir /tmp/test`,确认显式单独发布 `server` 的老用法仍可继续使用。
- 已在真实仓库执行 `powershell -ExecutionPolicy Bypass -File .\scripts\deploy-server.ps1 -DryRun -AutoIncremental -AutoIncrementalCommits 3 -RemoteDir /www/wwwroot/test-server.sbnews.net`,日志出现 `root gitlink include paths will be copied from working tree: admin``+ admin/`,确认 `admin` 仍是 gitlink 记录时也会被补进增量包。
- 已在真实仓库执行 `powershell -ExecutionPolicy Bypass -File .\scripts\deploy-server.ps1 -DryRun -AutoIncremental -AutoIncrementalCommits 3 -RemoteDir /www/wwwroot/api.sbnews.net`,日志出现 `root gitlink include paths will be copied from working tree: admin``+ admin/`,确认 `admin` 仍是 gitlink 记录时也会被补进增量包。
- 已在真实仓库执行默认全量 DryRun,日志显示 `working tree include paths: server uniapp admin`,确认全量包也会同时包含三套源码。
### 67. 部署脚本支持发布 uniapp 源码到服务器
@@ -254,7 +514,7 @@
- 已执行 `C:\Python311\python.exe -m py_compile server/public/dongqiudi-crawler/ai_comment_dispatch.py server/public/dongqiudi-crawler/main.py server/public/dongqiudi-crawler/scripts/docker_task_runner.py qa/backend/test_ai_comment_dispatch_static.py`Python 语法检查通过。
- 已在测试库执行 `docs/sql/create_ai_comment_task.sql``docs/sql/insert_ai_comment_config.sql``docs/sql/disable_article_ai_comment_crontab.sql`,确认 `la_ai_comment_task` 建表成功、`auto_comment_*` 配置写入成功,旧 `article_ai_comment` 定时任务已停用。
- 已用远端测试库配置手动执行一轮 `ai_comment_dispatch` 最小联调,临时将单轮条数压到 2,实际成功创建 2 条任务:`article_id=2044144``post_id=5924`,均已写入对应评论表并将文章/帖子 `comment_count` 回写为 `1`
- 已在测试服 `/www/wwwroot/test-server.sbnews.net/docker` 执行 `sudo docker compose -f docker-compose.crawler.yml build crawler` 并强制删除旧 `sport-era-crawler` 容器后重新 `up -d --no-deps crawler`,当前 `sport-era-crawler` 已切到新容器并正常运行。
- 已在测试服 `/www/wwwroot/api.sbnews.net/docker` 执行 `sudo docker compose -f docker-compose.crawler.yml build crawler` 并强制删除旧 `sport-era-crawler` 容器后重新 `up -d --no-deps crawler`,当前 `sport-era-crawler` 已切到新容器并正常运行。
- 已确认运行中容器内 `/etc/cron.d/sport-era-crawler` 已渲染 `ai_comment_dispatch``*/10 * * * *` 任务,且容器内可直接 `import ai_comment_dispatch`
### 64. AI助手资讯类联网检索接入
@@ -683,7 +943,7 @@
- `README.md`
验证记录:
- 已先执行 `powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\deploy-server.ps1 -AutoIncremental -AutoIncrementalCommits 2 -RemoteDir /www/wwwroot/test-server.sbnews.net -DryRun`,修改前因参数不存在失败,确认覆盖新行为。
- 已先执行 `powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\deploy-server.ps1 -AutoIncremental -AutoIncrementalCommits 2 -RemoteDir /www/wwwroot/api.sbnews.net -DryRun`,修改前因参数不存在失败,确认覆盖新行为。
- 修改后已执行自定义 2 个提交 dry-run,日志显示 `auto incremental commits: 2`,只打包不上传。
- 修改后已执行默认自动增量 dry-run,日志显示 `auto incremental commits: 1`,原命令兼容。
- 已验证单独传 `-AutoIncrementalCommits` 且不带 `-AutoIncremental` 会报错阻止误用。