优化AI,使用qwen
This commit is contained in:
@@ -1,94 +1,422 @@
|
||||
# 涓氬姟杩涘害绠$悊
|
||||
# 业务进度管理
|
||||
|
||||
> 鏈枃浠剁敤浜庤窡韪?Sport Era 椤圭洰鎵€鏈夊姛鑳芥ā鍧楃殑寮€鍙戠姸鎬併€佸緟鍔炰簨椤逛笌閬垮潙璁板綍銆傛瘡瀹屾垚涓€涓姛鑳芥垨鍙戠幇涓€涓潙锛屽強鏃跺湪瀵瑰簲绔犺妭杩藉姞銆?
|
||||
## 鐩綍
|
||||
> 本文档用于跟踪 Sport Era 项目所有功能模块的开发状态、待办事项与避坑记录。每完成一个功能或发现一个坑,及时在对应章节追加。
|
||||
|
||||
- [涓€銆佸凡瀹屾垚浜嬮」](#涓€宸插畬鎴愪簨椤?
|
||||
- [浜屻€佽繘琛屼腑浜嬮」](#浜岃繘琛屼腑浜嬮」)
|
||||
- [涓夈€佸緟鍔炰簨椤筣(#涓夊緟鍔炰簨椤?
|
||||
- [鍥涖€侀伩鍧戣褰昡(#鍥涢伩鍧戣褰?
|
||||
## 目录
|
||||
|
||||
- [一、已完成事项](#一已完成事项)
|
||||
- [二、进行中事项](#二进行中事项)
|
||||
- [三、待办事项](#三待办事项)
|
||||
- [四、避坑记录](#四避坑记录)
|
||||
|
||||
---
|
||||
|
||||
## 涓€銆佸凡瀹屾垚浜嬮」
|
||||
## 一、已完成事项
|
||||
|
||||
### 1. 椤圭洰鍩虹鏂囨。涓庡崗浣滃崗璁?
|
||||
- 鐘舵€侊細宸插畬鎴?- 鏃堕棿锛?026-05-07
|
||||
### 25. 社区帖子 RAG 生成模型切换到 Qwen3.7
|
||||
|
||||
瀹屾垚鍐呭锛?
|
||||
- 鍒涘缓鏍圭洰褰?`AGENTS.md`锛岃褰曢」鐩妧鏈爤銆佸瓙妯″潡鍒嗗伐銆佹暟鎹簱鍩哄噯涓庡崗浣滆鑼冦€?- 鍒涘缓 `server/AGENTS.md`銆乣admin/AGENTS.md`銆乣uniapp/AGENTS.md`銆乣pc/AGENTS.md`銆乣qa/AGENTS.md`銆?- 鍒涘缓 `涓氬姟杩涘害绠$悊.md` 鍜?`璁捐绋挎槧灏?md`锛屼綔涓哄悗缁繘搴︿笌璁捐绋挎槧灏勭淮鎶ゅ叆鍙c€?
|
||||
娑夊強妯″潡锛?
|
||||
- 状态:已完成 - 时间:2026-06-10
|
||||
|
||||
完成内容:
|
||||
- 排查 `/api/community/aiAnalysis` 仍返回 `DeepSeek 返回异常: Insufficient Balance` 的原因,确认图片识别已走 DashScope Qwen,但帖子 RAG 最终 JSON 生成仍复用默认 DeepSeek 配置。
|
||||
- 已将 `KbRagService::analyzePost()` 的最终生成阶段改为 DashScope OpenAI 兼容接口,模型固定为 `qwen3.7-plus`,使用 `server/.env` 的 `DASHSCOPE_API_KEY`。
|
||||
- `DeepSeekClient` 作为 OpenAI 兼容 HTTP 客户端保留,但现在会按调用方传入的 `provider_label` 返回错误提示;帖子分析失败时将显示 `DashScope(Qwen)`,不再误导为 DeepSeek。
|
||||
- `AiService::saveResult()` 已改为记录下游返回的真实模型名,帖子 AI 日志会写入 `qwen3.7-plus`。
|
||||
|
||||
涉及模块:
|
||||
- `server/app/common/service/ai/KbRagService.php`
|
||||
- `server/app/common/service/ai/DeepSeekClient.php`
|
||||
- `server/app/common/service/ai/AiService.php`
|
||||
|
||||
### 24. 社区帖子 AI 分析改为统一分析页并显示分析计时
|
||||
|
||||
- 状态:已完成 - 时间:2026-06-10
|
||||
|
||||
完成内容:
|
||||
- 社区列表页与首页社区流中的六合彩帖子 `AI分析` 入口已改为直接跳转统一分析页 `/pages/ai_analysis/ai_analysis?type=post&id=...`,不再先进帖子详情页再等待页内分析。
|
||||
- 帖子详情页中的 `AI分析` 按钮也已切换为直接跳统一分析页;旧的 `show_ai=1` 链路改为兼容重定向,避免历史入口失效。
|
||||
- 统一分析页已新增 `post` 类型支持,接入 `/api/community/aiAnalysis`,并展示帖子卡片、综合结论、下期预测、可信线索、风险提示、相似历史和知识库证据。
|
||||
- AI 分析加载阶段新增“分析用时 `0m1s`”计时显示;赛事分段分析的后续阶段 loading 也会继续显示累计分析时长,避免长耗时场景下用户无感等待。
|
||||
|
||||
涉及模块:
|
||||
- `uniapp/src/pages/ai_analysis/ai_analysis.vue`
|
||||
- `uniapp/src/packages_community/pages/post_detail.vue`
|
||||
- `uniapp/src/packages_community/pages/index.vue`
|
||||
- `uniapp/src/pages/empty/empty.vue`
|
||||
|
||||
### 23. 六合图片分析升级到 Qwen3.7 并移除代码内密钥
|
||||
|
||||
- 状态:已完成 - 时间:2026-06-10
|
||||
|
||||
完成内容:
|
||||
- `AiService::analyzeLotteryPostImages()` 已将 DashScope 视觉模型从旧版 `qwen-vl-max-latest` 切换为新版统一多模态模型 `qwen3.7-plus`,继续沿用 OpenAI 兼容接口 `https://dashscope.aliyuncs.com/compatible-mode`。
|
||||
- 移除了 `AiService` 中硬编码的 DashScope API Key,改为统一从 `server/.env` 的 `DASHSCOPE_API_KEY` 读取,避免密钥继续直接写入代码文件。
|
||||
- 同步补充 `server/.example.env` 的 DashScope Key 占位配置,便于后续环境初始化和部署时对齐。
|
||||
|
||||
涉及模块:
|
||||
- `server/app/common/service/ai/AiService.php`
|
||||
- `server/.env`
|
||||
- `server/.example.env`
|
||||
|
||||
### 22. 六合图片分析 404 链路修复
|
||||
|
||||
- 状态:已完成 - 时间:2026-06-09
|
||||
|
||||
完成内容:
|
||||
- 排查 `/api/community/translatePost` 在 `旧澳六合/新澳六合` 图片分析分支返回 `HTTP 404` 的问题,确认不是帖子不存在,而是 Qwen 视觉模型请求地址被拼成了 `.../v1/v1/chat/completions`。
|
||||
- 已将 `AiService` 中 DashScope 兼容接口基地址收敛为 `https://dashscope.aliyuncs.com/compatible-mode`,并在 `DeepSeekClient` 中补充聊天接口地址规范化,兼容 `base_url` 传入根地址、`/v1` 地址或完整 `/chat/completions` 地址,避免后续再次重复拼接。
|
||||
- 同步把多模型错误提示统一改为带 provider 名称返回,后续如果 DashScope/Qwen 鉴权或模型权限异常,接口会更容易直接看出来自哪个下游。
|
||||
|
||||
涉及模块:
|
||||
- `server/app/common/service/ai/AiService.php`
|
||||
- `server/app/common/service/ai/DeepSeekClient.php`
|
||||
|
||||
### 21. 六合图片分析切换到 DashScope Qwen 视觉模型
|
||||
|
||||
- 状态:已完成 - 时间:2026-06-09
|
||||
|
||||
完成内容:
|
||||
- `AiService::analyzeLotteryPostImages()` 已按当前需求固定改为调用阿里云 DashScope OpenAI 兼容接口,不再读取后台 `lottery_image_analysis_*` 或 `deepseek_vision_model` 配置。
|
||||
- 当前六合彩图片分析分支硬编码使用 `Qwen` 视觉模型 `qwen-vl-max-latest`,兼容接口基地址统一为 `https://dashscope.aliyuncs.com/compatible-mode`,由客户端自动补齐聊天接口路径,并使用指定的 DashScope API Key。
|
||||
- 错误提示中的 provider 标识已改为 `DashScope(Qwen)`,方便后续定位图片分析失败是否来自 Qwen 视觉链路。
|
||||
- 同步收紧图片分析提示词,新增“先过滤噪音再逐项分析”的规则,只保留当期号码、图表结论、推荐组合等有效信息,忽略水印、口号、装饰边框、重复标题和低置信度杂讯。
|
||||
|
||||
涉及模块:
|
||||
- `server/app/common/service/ai/AiService.php`
|
||||
|
||||
### 20. 六合帖子 `translatePost` 收紧为纯图片分析
|
||||
|
||||
- 状态:已完成 - 时间:2026-06-09
|
||||
|
||||
完成内容:
|
||||
- `/api/community/translatePost` 对 `新澳六合 / 旧澳六合` 已改为只走当前帖子图片分析,不再接受旧版六合彩分析缓存直接命中。
|
||||
- 新增 `lottery_analysis_source=image_only` 与 `lottery_analysis_images_hash` 标记,只有明确由当前帖子图片生成的分析结果才会复用;旧缓存或图片已变更时会重新按图片分析。
|
||||
- 移除了六合彩图片分析失败时写入“虚拟历史分析文案”的兜底逻辑,当前图片无法识别时接口会直接返回失败,避免返回看似真实、实则并非基于当前图片的内容。
|
||||
- 同步收紧图片分析提示词,明确禁止引用往期内容、历史期数、知识库信息或模型记忆;社区列表侧也只展示 `image_only` 来源的六合彩分析结果。
|
||||
|
||||
涉及模块:
|
||||
- `server/app/api/controller/CommunityController.php`
|
||||
- `server/app/api/lists/community/CommunityPostLists.php`
|
||||
- `server/app/common/service/ai/AiService.php`
|
||||
|
||||
### 19. 社区帖子分支链路收紧为“普通/特朗普/六合”三类
|
||||
|
||||
- 状态:已完成 - 时间:2026-06-09
|
||||
|
||||
完成内容:
|
||||
- 重新梳理社区帖子链路后,已将普通帖子、特朗普帖子、`新澳六合/旧澳六合` 帖子的入口分支彻底拆开:普通帖子不再显示或触发 AI 分析;特朗普帖子只保留本地 `MTranServer` 翻译链路;六合帖子才显示 AI 入口。
|
||||
- `post-card`、`/pages/empty/empty`、社区分包列表页、帖子详情页已统一按 `旧澳六合/新澳六合` 标签控制 `AI` 按钮和 `show_ai=1` 跳转,避免普通帖误入 `/api/community/aiAnalysis`。
|
||||
- 后端 `CommunityController::aiAnalysis()` 已改为只接受六合帖,并在进入知识库分析前先确保 `lottery_analysis_content` 已由视觉模型完成图片识别;`translatePost()` 的彩票图片分析分支也同步从泛 `彩票` 收紧为 `a6/xa6`。
|
||||
- `KbRagService::analyzePost()` 与 `AiService::analyzePost()` 已补强:当前帖子本身只要识别为 `a6/xa6` 就稳定输出 `next_prediction`,并跳过缺少预测字段的旧缓存,避免仍回落到历史错误结果。
|
||||
|
||||
涉及模块:
|
||||
- `uniapp/src/pages/empty/empty.vue`
|
||||
- `uniapp/src/packages_community/pages/index.vue`
|
||||
- `uniapp/src/packages_community/components/post-card.vue`
|
||||
- `uniapp/src/packages_community/pages/post_detail.vue`
|
||||
- `server/app/api/controller/CommunityController.php`
|
||||
- `server/app/api/lists/community/CommunityPostLists.php`
|
||||
- `server/app/common/service/ai/AiService.php`
|
||||
- `server/app/common/service/ai/KbRagService.php`
|
||||
|
||||
### 18. 世界杯资讯与特朗普帖子翻译切换 GPT-4o
|
||||
|
||||
- 状态:已完成 - 时间:2026-06-09
|
||||
|
||||
完成内容:
|
||||
- 世界杯资讯翻译链路已改为按文章分类识别:当资讯属于“世界杯”分类时,`ArticleLogic::translate()` 与 `autoTranslateArticle()` 会优先走 `GPT-4o` 翻译,不影响其他资讯仍沿用原有翻译模型。
|
||||
- 特朗普帖子翻译链路已改为按帖子标签识别:社区列表自动预热、帖子详情自动补翻译、`/api/community/translatePost` 手动翻译这 3 条路径,命中“特朗普”标签时统一走 `GPT-4o`。
|
||||
- 在 AI 配置层新增 `openai_api_key / openai_base_url / openai_translation_model` 约定,并补充幂等 SQL `docs/sql/insert_ai_translation_gpt4o_config.sql`;后台知识库配置列表已放开 `openai_%` 配置项,便于直接维护 `GPT-4o` 翻译参数。
|
||||
- 同步把 OpenAI 兼容翻译调用的错误文案改成按 provider 显示,避免 `GPT-4o` 未配置时仍提示成 `DeepSeek API Key未配置`。
|
||||
|
||||
涉及模块:
|
||||
- `server/app/common/service/ai/DeepSeekClient.php`
|
||||
- `server/app/common/service/ai/AiService.php`
|
||||
- `server/app/api/logic/ArticleLogic.php`
|
||||
- `server/app/api/controller/CommunityController.php`
|
||||
- `server/app/api/lists/community/CommunityPostLists.php`
|
||||
- `server/app/adminapi/lists/ai/KbConfigLists.php`
|
||||
- `docs/sql/insert_ai_translation_gpt4o_config.sql`
|
||||
|
||||
### 17. 定时任务企业微信告警接入
|
||||
|
||||
- 状态:已完成 - 时间:2026-06-08
|
||||
|
||||
完成内容:
|
||||
- 为 crawler 本地配置增加 `alert.dispatch_enabled / alert.wecom_webhook / alert.cooldown_seconds`,企业微信告警改走固定群机器人 Webhook,本地维护,不做后台配置页。
|
||||
- 新增统一告警表 `la_crontab_alert`,并在 Python `Database` 与 PHP `CrontabAlertService` 中同时补上建表与读写逻辑,支持告警创建、30 分钟冷却、成功恢复后自动关闭。
|
||||
- `main.py` 已增加 `TASK_ALERT_POLICY` 与标准化运行摘要;已启用的 `crawler` 任务按“采集型 saved_required / 维护型 saved_if_candidates / error_report 跳过自告警”规则统一落库告警。
|
||||
- `ErrorCollector` 已扩展为记录单次运行的 `404 / 5xx / 网络异常` 统计;`error_report` 任务已改为读取 `la_crontab_alert` 并尝试分发企业微信消息。
|
||||
- 非 `crawler` 的 PHP 定时任务(如 `sms_verify`、`worldcup_article_translate`)已通过 `Crontab.php` 接入同一张告警表,仅在执行异常时产生 `command_exception` 告警。
|
||||
- 已新增幂等 SQL `server/public/dongqiudi-crawler/update_crontab_error_report.sql`,并已把测试服现有 `error_report` 任务频率从 `*/5 * * * *` 调整为 `*/1 * * * *`。
|
||||
|
||||
涉及模块:
|
||||
- `server/public/dongqiudi-crawler/config/settings.yaml`
|
||||
- `server/public/dongqiudi-crawler/main.py`
|
||||
- `server/public/dongqiudi-crawler/src/core/error_collector.py`
|
||||
- `server/public/dongqiudi-crawler/src/core/alert_manager.py`
|
||||
- `server/public/dongqiudi-crawler/src/storage/database.py`
|
||||
- `server/public/dongqiudi-crawler/src/scheduler/task_runner.py`
|
||||
- `server/app/common/command/Crontab.php`
|
||||
- `server/app/common/service/crontab/CrontabAlertService.php`
|
||||
- `server/public/dongqiudi-crawler/update_crontab_error_report.sql`
|
||||
|
||||
### 16. 资讯无正文默认稿子并禁止发布
|
||||
|
||||
- 状态:已完成 - 时间:2026-06-07
|
||||
|
||||
完成内容:
|
||||
- 为爬虫侧新增 `article_publish_helper.py`,统一判断资讯正文是否达到可发布标准;没有拉到正文、只有 RSS 摘要或占位文本的文章,采集入库时默认写成稿子状态(`is_show=0`)。
|
||||
- `article_fetcher.py` 已调整为优先处理稿子状态或正文明显不足的资讯;抓到真实正文后会自动写回 `content`,同时将文章切回发布状态并重置 `content_retry`。
|
||||
- `nba_news.py`、`cba_news.py`、`crypto_news.py`、`lottery_news.py`、`hkjc_lottery_news.py`、`taiwan_lottery_news.py`、`fifa_worldcup_news.py` 已统一接入该规则,避免后续新采文章在正文未完成时直接暴露到前台。
|
||||
- 后台 `ArticleLogic` / `ArticleController` 已增加发布拦截:手动新增、编辑或切换状态时,如果正文未达到发布标准,会直接返回“暂不能发布,请先保存为稿子”。
|
||||
- 已在测试服先行回退当前可见的 NBA / CBA 占位稿:示例 `1903906`、`1915226` 的公开详情现已返回空数据,不再继续对前台暴露无正文资讯。
|
||||
|
||||
涉及模块:
|
||||
- `server/public/dongqiudi-crawler/article_publish_helper.py`
|
||||
- `server/public/dongqiudi-crawler/article_fetcher.py`
|
||||
- `server/public/dongqiudi-crawler/nba_news.py`
|
||||
- `server/public/dongqiudi-crawler/cba_news.py`
|
||||
- `server/public/dongqiudi-crawler/crypto_news.py`
|
||||
- `server/public/dongqiudi-crawler/lottery_news.py`
|
||||
- `server/public/dongqiudi-crawler/hkjc_lottery_news.py`
|
||||
- `server/public/dongqiudi-crawler/taiwan_lottery_news.py`
|
||||
- `server/public/dongqiudi-crawler/fifa_worldcup_news.py`
|
||||
- `server/app/common/model/article/Article.php`
|
||||
- `server/app/adminapi/logic/article/ArticleLogic.php`
|
||||
- `server/app/adminapi/controller/article/ArticleController.php`
|
||||
|
||||
### 15. NBA / CBA 资讯正文抓取补回退链路
|
||||
|
||||
- 状态:已完成 - 时间:2026-06-07
|
||||
|
||||
完成内容:
|
||||
- 继续排查发现,NBA / CBA 资讯列表入库后,详情正文并不是完全没跑,而是由 `article_content_fetch` 每轮按分类各抓 `3` 条慢慢补;因此刚采集完的一大批文章会先以 RSS 摘要占位,随后逐轮补正文。
|
||||
- 测试服执行日志确认 `article_content_fetch` 一直在跑,但部分 Google News 解码后的真实地址(如 `m.sohu.com`、`sports.sina.cn`、`sports.cctv.com`)在 `scrapling Fetcher` 路径下会返回 `HTTP 403`,导致正文抓取失败并累计 `content_retry`。
|
||||
- 已为 `server/public/dongqiudi-crawler/article_fetcher.py` 增加 `requests + BeautifulSoup` 回退抓取链路:当 `scrapling` 返回 `403` 或抛异常时,改用普通请求抓页面并复用同一套正文抽取规则,降低这类站点的正文缺失率。
|
||||
- 同步补充 `server/public/dongqiudi-crawler/requirements.txt` 的 `beautifulsoup4` 依赖声明,避免后续环境重装时漏掉回退解析库。
|
||||
|
||||
涉及模块:
|
||||
- `server/public/dongqiudi-crawler/article_fetcher.py`
|
||||
- `server/public/dongqiudi-crawler/requirements.txt`
|
||||
|
||||
### 14. NBA / CBA 资讯定时任务补注册与恢复拉取
|
||||
|
||||
- 状态:已完成 - 时间:2026-06-07
|
||||
|
||||
完成内容:
|
||||
- 排查发现 `server/public/dongqiudi-crawler/main.py`、`nba_news.py`、`cba_news.py` 代码入口都已存在,`article_content_fetch` 也已覆盖 `cid=17/18` 的正文补全,但测试服 `la_dev_crontab` 中缺少 `nba_news`、`cba_news` 两个定时任务,所以后台从未自动触发 NBA / CBA 资讯采集。
|
||||
- 已补充幂等 SQL `insert_crontab_nba_news.sql`、`insert_crontab_cba_news.sql`,分别注册 `crawler nba_news` 和 `crawler cba_news`。
|
||||
- 已在测试服后台实际创建两条任务,当前执行规则分别为 `10 * * * *`(NBA)和 `20 * * * *`(CBA),状态均为“运行”。
|
||||
- 已手动验证一次:NBA 任务成功抓取 100 条,新增 99 条;CBA 任务成功抓取 169 条,新增 152 条。
|
||||
- 已继续验证正文抓取链路:`article_content_fetch` 在 2026-06-07 00:50 自动处理了新入库的 NBA / CBA 文章,成功补全 4 篇正文;另有 2 篇源站返回 HTTP 403,已按现有 `content_retry` 机制记录重试。
|
||||
|
||||
涉及模块:
|
||||
- `server/public/dongqiudi-crawler/main.py`
|
||||
- `server/public/dongqiudi-crawler/nba_news.py`
|
||||
- `server/public/dongqiudi-crawler/cba_news.py`
|
||||
- `server/public/dongqiudi-crawler/article_fetcher.py`
|
||||
- `server/public/dongqiudi-crawler/insert_crontab_nba_news.sql`
|
||||
- `server/public/dongqiudi-crawler/insert_crontab_cba_news.sql`
|
||||
|
||||
### 13. 赛事 AI 分段分析接入知识库召回
|
||||
|
||||
- 状态:已完成 - 时间:2026-06-06
|
||||
|
||||
完成内容:
|
||||
- 排查发现 `/api/ai/matchPredictSection` 原链路只会组装 `match_info / head_to_head / home_recent / away_recent` 后直接调用 `DeepSeekClient::chatJson()`,并不会进入知识库检索层。
|
||||
- 现已为赛事分析补充 `KbRagService::analyzeMatch()` 与 `analyzeMatchSection()`,先根据主队、客队、联赛名到知识库中召回相关资讯/帖子,再把召回证据与结构化交手记录、近期战绩、赔率一起交给 LLM。
|
||||
- `AiService::predictMatch()` 与 `predictMatchSection()` 已切换到赛事专用 RAG 链路,返回结果增加 `evidence_list / similar_history / from_kb / retrieval_meta` 等知识库增强字段。
|
||||
- 为避免旧的赛事分段缓存继续短路新链路,当前逻辑只接受带知识库字段痕迹的新缓存;老缓存会自动跳过并重新走 RAG 生成。
|
||||
- 当前赛事 RAG 仍未把 `match_event / match_history / match_recent` 建成独立知识库 domain,交手记录和近期战绩继续直接从业务表读取;知识库侧主要召回相关资讯与帖子。
|
||||
|
||||
涉及模块:
|
||||
- `server/app/common/service/ai/AiService.php`
|
||||
- `server/app/common/service/ai/KbRagService.php`
|
||||
- `server/app/common/service/ai/KbService.php`
|
||||
- `server/app/api/controller/AiController.php`
|
||||
|
||||
### 12. 全站 AI 知识库与 RAG 分析底座
|
||||
|
||||
- 状态:已完成 - 时间:2026-06-06
|
||||
|
||||
完成内容:
|
||||
- 新增 AI 知识库底座表设计与 SQL:`la_ai_kb_document`、`la_ai_kb_chunk`、`la_ai_kb_sync_job`、`la_ai_kb_query_log`,并补充知识库菜单与 Embedding / KB 配置初始化 SQL。
|
||||
- 后端新增 `KbService / KbSyncService / EmbeddingClient / KbRagService`,支持资讯、帖子、彩票历史内容统一建档、切片、Embedding、全文候选、向量重排、规则混排和查询日志记录。
|
||||
- 新增控制台命令 `php think kb:rebuild` 与 `php think kb:consume`,支持全量回填与增量消费;文章新增/编辑/上下架、帖子发布/删除/翻译缓存更新已接入同步任务队列,彩票历史通过消费命令补录扫描。
|
||||
- 现有 `AiService` 已接入知识库增强分析:资讯分析、彩票总分析、彩票分模块分析统一增加 `from_kb / evidence_list / similar_history / retrieval_meta`;新增帖子专属接口 `GET /api/community/aiAnalysis?post_id={id}`。
|
||||
- 管理后台新增知识库配置、知识文档、同步任务、查询日志页面与对应 API,且扩展了 AI 分析记录 / AI 日志类型展示。
|
||||
- 新增 `qa/backend/test_kb_article_analysis.py` 与 `qa/backend/test_kb_post_analysis.py` 作为知识库增强接口的最小冒烟脚本。
|
||||
|
||||
涉及模块:
|
||||
- `server/app/common/model/ai/*`
|
||||
- `server/app/common/service/ai/*`
|
||||
- `server/app/common/command/KbRebuild.php`
|
||||
- `server/app/common/command/KbConsume.php`
|
||||
- `server/app/api/controller/CommunityController.php`
|
||||
- `server/app/common/service/ai/AiService.php`
|
||||
- `server/app/adminapi/controller/ai/*`
|
||||
- `admin/src/views/ai/*`
|
||||
- `docs/sql/create_ai_kb_tables.sql`
|
||||
- `docs/sql/insert_ai_kb_config.sql`
|
||||
- `docs/sql/insert_menu_ai_kb.sql`
|
||||
- `qa/backend/test_kb_article_analysis.py`
|
||||
- `qa/backend/test_kb_post_analysis.py`
|
||||
|
||||
### 11. 彩票资讯远程图片代理中转
|
||||
|
||||
- 状态:已完成 - 时间:2026-06-03
|
||||
|
||||
完成内容:
|
||||
- 为前台资讯接口补充 `ArticleImageProxyService`,对白名单内的香港赛马会与台湾彩券远程图片生成站内代理地址。
|
||||
- 新增公开接口 `/api/article/imageProxy`,由服务器代拉 `res.hkjc.com`、`cdn.taiwanlottery.com.tw` 等远程图片并回传,规避国内客户端无法直连的问题。
|
||||
- `ArticleLogic::detail()` 与 `ArticleLists::lists()` 已统一接入代理改写,老文章无需重采即可让详情正文图片和列表封面图走服务器中转。
|
||||
- 代理按 `ext.source` 白名单控制,仅对 `hkjc_racingnews`、`taiwan_lottery` 两类彩票资讯生效,降低 SSRF 风险。
|
||||
|
||||
涉及模块:
|
||||
- `server/app/common/service/article/ArticleImageProxyService.php`
|
||||
- `server/app/api/controller/ArticleController.php`
|
||||
- `server/app/api/logic/ArticleLogic.php`
|
||||
- `server/app/api/lists/article/ArticleLists.php`
|
||||
|
||||
### 1. 项目基础文档与协作协议
|
||||
- 状态:已完成 - 时间:2026-05-07
|
||||
|
||||
完成内容:
|
||||
- 创建根目录 `AGENTS.md`,记录项目技术栈、子模块分工、数据库基准与协作规范。
|
||||
- 创建 `server/AGENTS.md`、`admin/AGENTS.md`、`uniapp/AGENTS.md`、`pc/AGENTS.md`、`qa/AGENTS.md`。
|
||||
- 创建 `业务进度管理.md` 和 `设计稿映射.md`,作为后续进度与设计稿映射维护入口。
|
||||
涉及模块:
|
||||
- `AGENTS.md`
|
||||
- `server/AGENTS.md`
|
||||
- `admin/AGENTS.md`
|
||||
- `uniapp/AGENTS.md`
|
||||
- `pc/AGENTS.md`
|
||||
- `qa/AGENTS.md`
|
||||
- `涓氬姟杩涘害绠$悊.md`
|
||||
- `璁捐绋挎槧灏?md`
|
||||
- `业务进度管理.md`
|
||||
- `设计稿映射.md`
|
||||
|
||||
### 2. 鏂伴椈鐖櫕鏂囩珷鍏ュ簱鍘婚噸
|
||||
### 2. 新闻爬虫文章入库去重
|
||||
|
||||
- 鐘舵€侊細宸插畬鎴?- 鏃堕棿锛?026-05-09
|
||||
- 状态:已完成 - 时间:2026-05-09
|
||||
|
||||
瀹屾垚鍐呭锛?
|
||||
- 鍦ㄦ噦鐞冨笣鐖櫕鍏叡鍏ュ簱鏂规硶 `upsert_articles` 涓鍔犲悓鍒嗙被鏍囬鍘婚噸锛岄樆姝笉鍚?`article_id` 鐨勫悓鏍囬鏂囩珷閲嶅鍐欏叆銆?- 鏂伴椈鍜岃棰戦噰闆嗕换鍔℃寜宸茬煡棰戦亾浼犲叆瀵瑰簲鏂囩珷鍒嗙被 `cid`锛屽噺灏戞柊澧?`cid=0` 鏁版嵁銆?- 瀵瑰凡瀛樺湪 `article_id` 涓旀棫鍒嗙被涓?`cid=0` 鐨勬暟鎹紝鍚庣画甯︽纭垎绫诲啀娆″叆搴撴椂鍙縼绉诲埌姝g‘鍒嗙被銆?
|
||||
娑夊強妯″潡锛?
|
||||
完成内容:
|
||||
- 在懂球帝爬虫公共入库方法 `upsert_articles` 中增加同分类标题去重,阻止不同 `article_id` 的同标题文章重复写入。
|
||||
- 新闻和视频采集任务按已知频道传入对应文章分类 `cid`,减少新增 `cid=0` 数据。
|
||||
- 对已存在 `article_id` 且旧分类为 `cid=0` 的数据,后续带正确分类再次入库时可迁移到正确分类。
|
||||
涉及模块:
|
||||
- `server/public/dongqiudi-crawler/src/storage/database.py`
|
||||
- `server/public/dongqiudi-crawler/src/scheduler/task_runner.py`
|
||||
|
||||
### 3. Truth Social 瀹氭椂浠诲姟鍏ュ彛鏁寸悊
|
||||
### 3. Truth Social 定时任务入口整理
|
||||
|
||||
- 鐘舵€侊細宸插畬鎴?- 鏃堕棿锛?026-05-09
|
||||
- 状态:已完成 - 时间:2026-05-09
|
||||
|
||||
瀹屾垚鍐呭锛?
|
||||
- 鍚庡彴瀹氭椂浠诲姟 `truth_social` 鏀逛负鎵ц `public/dongqiudi-crawler/main.py truth_social`銆?- 绉婚櫎鏃х殑 `server/public/truth-social` 鐙珛閲囬泦鐩綍锛岄伩鍏嶇户缁淮鎶や袱濂楃壒鏈楁櫘娑堟伅閲囬泦浠g爜銆?
|
||||
娑夊強妯″潡锛?
|
||||
完成内容:
|
||||
- 后台定时任务 `truth_social` 改为执行 `public/dongqiudi-crawler/main.py truth_social`。
|
||||
- 移除旧的 `server/public/truth-social` 独立采集目录,避免继续维护两套特朗普消息采集代码。
|
||||
涉及模块:
|
||||
- `server/app/adminapi/logic/crontab/CrontabLogic.php`
|
||||
- `server/public/dongqiudi-crawler/truth_social.py`
|
||||
|
||||
### 4. 49瀹濆吀褰╃エ绀惧尯鐖櫕鎺ュ叆
|
||||
### 4. 49宝典彩票社区爬虫接入
|
||||
|
||||
- 鐘舵€侊細宸插畬鎴?- 鏃堕棿锛?026-05-11
|
||||
- 状态:已完成 - 时间:2026-05-11
|
||||
|
||||
瀹屾垚鍐呭锛?
|
||||
- 鏂板 `lottery_community` 鐖櫕鍏ュ彛锛屾媺鍙?49瀹濆吀棣栭〉 Astro props 鏁版嵁骞惰В鏋愬紑濂栦笌鍥惧簱璧勬枡銆?- 鑷姩鍒涘缓鎴栧鐢ㄧぞ鍖烘爣绛?`褰╃エ`锛岃嚜鍔ㄥ垱寤烘垨澶嶇敤鍙戝竷鐢ㄦ埛 `lottery_publisher`銆?- 鎸?`origin_id` 瀵瑰僵绁ㄧぞ鍖哄笘瀛愬仛骞傜瓑鏂板/鏇存柊锛屽苟鍚屾甯栧瓙鍥剧墖鍜屾爣绛惧叧鑱斻€?- 鎺ュ叆 ThinkPHP `crawler` 鍛戒护鐧藉悕鍗曞拰 Python 涓诲叆鍙e懡浠ゆ槧灏勩€?- 鎻愪緵骞傜瓑 SQL 娉ㄥ唽瀹氭椂浠诲姟 `crawler lottery_community`銆?- 淇 49瀹濆吀鍝嶅簲涓枃瑙g爜鍜屽浘搴撳浘鐗囧煙鍚嶈鍒欙紝`prod/` 鍥剧墖璧勬簮鏀圭敤鍙洿鎺ヨ闂殑 `tk2cdn-ali.tprswe.com`銆?
|
||||
娑夊強妯″潡锛?
|
||||
完成内容:
|
||||
- 新增 `lottery_community` 爬虫入口,拉取 49宝典首页 Astro props 数据并解析开奖与图库资料。
|
||||
- 自动创建或复用社区标签 `彩票`,自动创建或复用发布用户 `lottery_publisher`。
|
||||
- 按 `origin_id` 对彩票社区帖子做幂等新增/更新,并同步帖子图片和标签关联。
|
||||
- 接入 ThinkPHP `crawler` 命令白名单和 Python 主入口命令映射。
|
||||
- 提供幂等 SQL 注册定时任务 `crawler lottery_community`。
|
||||
- 修复 49宝典响应中文解码和图库图片域名规则,`prod/` 图片资源改用可直接访问的 `tk2cdn-ali.tprswe.com`。
|
||||
涉及模块:
|
||||
- `server/public/dongqiudi-crawler/lottery_community.py`
|
||||
|
||||
### 10. 彩票 AI 趋势分析坏缓存容错
|
||||
|
||||
- 状态:已完成 - 时间:2026-06-03
|
||||
|
||||
完成内容:
|
||||
- 排查 `/api/lottery/aiTrend?code=XOMLHC` 时发现,当前问题不是彩种不存在,也不是当前 DeepSeek key 鉴权失败,而是命中了 `la_ai_analysis` 中一条 `type=4` 的成功缓存,但该缓存 `result` 实际是 JSON 字符串 `\"\"`,`json_decode(..., true)` 后得到的是字符串而不是数组。
|
||||
- `server/app/common/service/ai/AiService.php` 的 `analyzeLotteryModule()` 已补充防守:彩票 AI 模块缓存只有在解码后为非空数组时才视为有效;若模型返回的 `parsed` 不是数组或为空,也不再写入“成功缓存”,而是按格式异常处理。
|
||||
- 这样可以避免旧的坏缓存继续让 `LotteryController::aiTrend()`、`aiHotCold()`、`aiStats()`、`aiColorZodiac()` 走到 `$this->data(string)` 并触发类型错误。
|
||||
|
||||
涉及模块:
|
||||
- `server/app/common/service/ai/AiService.php`
|
||||
|
||||
### 9. 世界杯资讯翻译预热限制为列表前 50 条
|
||||
|
||||
- 状态:已完成 - 时间:2026-06-03
|
||||
|
||||
完成内容:
|
||||
- 调整 `server/app/common/command/WorldcupArticleTranslate.php`,世界杯英文资讯翻译预热不再全量扫描全部文章。
|
||||
- 预热范围改为按前台资讯列表同口径排序:`published_at desc, id desc`,仅处理用户当前最先看到的前 50 条世界杯资讯。
|
||||
- 这样可以在 AI key 恢复后优先补齐前台首屏和专题页最靠前文章的翻译缓存,避免一次性处理历史文章拖慢恢复。
|
||||
|
||||
涉及模块:
|
||||
- `server/app/common/command/WorldcupArticleTranslate.php`
|
||||
|
||||
### 9. 世界杯比赛详情接口默认直播链接
|
||||
|
||||
- 状态:已完成 - 时间:2026-06-03
|
||||
|
||||
完成内容:
|
||||
- `server/app/api/controller/MatchController.php` 在前台 `/api/match/detail` 接口中为世界杯比赛补充默认直播链接。
|
||||
- 当赛事 `league_name=世界杯` 或 `competition_id=61` 且数据库 `live_url` 为空时,接口响应中的 `live_url` 默认返回 `https://sports.cctv.com/?spm=C28340.P9mj1V5B06xk.E2XVQsMhlk44.7`。
|
||||
- 默认值仅在接口响应层兜底,不写回数据库;后台已维护的 `live_url` 仍优先返回,用户端继续只消费接口返回字段。
|
||||
|
||||
涉及模块:
|
||||
- `server/app/api/controller/MatchController.php`
|
||||
- `admin/src/views/match/lists/index.vue`
|
||||
- `uniapp/src/pages/match_detail/match_detail.vue`
|
||||
- `server/public/dongqiudi-crawler/main.py`
|
||||
- `server/app/common/command/CrawlerCommand.php`
|
||||
- `server/public/dongqiudi-crawler/insert_crontab_lottery_community.sql`
|
||||
|
||||
### 5. 椤圭洰绾ф枃妗e綊妗e埌鏍圭洰褰?
|
||||
- 鐘舵€侊細宸插畬鎴?- 鏃堕棿锛?026-05-14
|
||||
### 5. 项目级文档归档到根目录
|
||||
- 状态:已完成 - 时间:2026-05-14
|
||||
|
||||
瀹屾垚鍐呭锛?
|
||||
- 灏嗛」鐩骇鏂囨。 `01-浜у搧鏂规鏂囨。.md`銆乣02-瀹炵幇娴佺▼鏂囨。.md`銆乣鐖櫕浠诲姟鑴氭湰鏂囨。.md` 浠?`docs/` 鐩綍绉诲姩鍒伴」鐩牴鐩綍缁熶竴缁存姢銆?- 鍦ㄦ牴鐩綍 `AGENTS.md` 涓ˉ鍏呴」鐩骇鏂囨。瀛樻斁瑙勫垯锛屾槑纭崗浣滅被涓庝笟鍔$被鎬绘枃妗i粯璁ゆ斁鏍圭洰褰曘€?- 鍚屾淇鏂囨。寮曠敤璺緞锛岄伩鍏嶅悗缁户缁紩鐢ㄦ棫鐨?`docs/` 璺緞銆?
|
||||
娑夊強妯″潡锛?
|
||||
完成内容:
|
||||
- 将项目级文档 `01-产品方案文档.md`、`02-实现流程文档.md`、`爬虫任务脚本文档.md` 从 `docs/` 目录移动到项目根目录统一维护。
|
||||
- 在根目录 `AGENTS.md` 中补充项目级文档存放规则,明确协作类与业务类总文档默认放根目录。
|
||||
- 同步修正文档引用路径,避免后续继续引用旧的 `docs/` 路径。
|
||||
涉及模块:
|
||||
- `AGENTS.md`
|
||||
- `涓氬姟杩涘害绠$悊.md`
|
||||
- `01-浜у搧鏂规鏂囨。.md`
|
||||
- `02-瀹炵幇娴佺▼鏂囨。.md`
|
||||
- `鐖櫕浠诲姟鑴氭湰鏂囨。.md`
|
||||
- `业务进度管理.md`
|
||||
- `01-产品方案文档.md`
|
||||
- `02-实现流程文档.md`
|
||||
- `爬虫任务脚本文档.md`
|
||||
|
||||
### 6. FIFA 涓栫晫鏉祫璁畾鏃堕噰闆嗘帴鍏?
|
||||
- 鐘舵€侊細宸插畬鎴?- 鏃堕棿锛?026-05-15
|
||||
### 6. FIFA 世界杯资讯定时采集接入
|
||||
- 状态:已完成 - 时间:2026-05-15
|
||||
|
||||
瀹屾垚鍐呭锛?
|
||||
- 鏂板 FIFA 涓栫晫鏉祫璁埇铏叆鍙?`fifa_worldcup_news`锛岄€氳繃 FIFA CXM API 鎷夊彇涓栫晫鏉〉闈㈡柊闂诲尯鍧楁暟鎹€?- 澧炲姞涓栫晫鏉枃绔犲垎绫诲箓绛夊垱寤?澶嶇敤閫昏緫锛岄粯璁ゅ垎绫诲悕涓?`涓栫晫鏉痐锛屽苟鑷姩鍚敤鏄剧ず銆?- 鏂板瀹氭椂浠诲姟娉ㄥ唽 SQL `insert_crontab_fifa_worldcup_news.sql`锛岄噰鐢?`crawler fifa_worldcup_news` 鍔ㄤ綔骞舵寜 10 鍒嗛挓鎵ц銆?- 灏嗗悗绔畾鏃朵换鍔¤皟搴﹂摼璺墿灞曞埌 `fifa_worldcup_news`锛屾部鐢ㄧ幇鏈?crawler 寮傛鎵ц妯″紡銆?- 宸查獙璇?FIFA API 鍙繑鍥?20 鏉′笘鐣屾澂璧勮锛涙湰鍦板畬鏁村啓搴撻獙璇佸洜 crawler 褰撳墠鏁版嵁搴撻厤缃寚鍚?`127.0.0.1` 涓?MySQL 鎷掔粷杩炴帴锛岄渶鍦ㄦ湇鍔″櫒/鍙敤鏁版嵁搴撶幆澧冩墽琛屻€?
|
||||
娑夊強妯″潡锛?
|
||||
完成内容:
|
||||
- 新增 FIFA 世界杯资讯爬虫入口 `fifa_worldcup_news`,通过 FIFA CXM API 拉取世界杯页面新闻区块数据。
|
||||
- 增加世界杯文章分类幂等创建/复用逻辑,默认分类名为 `世界杯`,并自动启用显示。
|
||||
- 新增定时任务注册 SQL `insert_crontab_fifa_worldcup_news.sql`,采用 `crawler fifa_worldcup_news` 动作并按 10 分钟执行。
|
||||
- 将后端定时任务调度链路扩展到 `fifa_worldcup_news`,沿用现有 crawler 异步执行模式。
|
||||
- 已验证 FIFA API 可返回 20 条世界杯资讯;本地完整写库验证因 crawler 当前数据库配置指向 `127.0.0.1` 而 MySQL 拒绝连接,需在服务器/可用数据库环境执行。
|
||||
涉及模块:
|
||||
- `server/public/dongqiudi-crawler/fifa_worldcup_news.py`
|
||||
- `server/public/dongqiudi-crawler/main.py`
|
||||
- `server/public/dongqiudi-crawler/insert_crontab_fifa_worldcup_news.sql`
|
||||
- `server/app/common/command/CrawlerCommand.php`
|
||||
- `server/app/adminapi/logic/crontab/CrontabLogic.php`
|
||||
|
||||
### 7. 鎳傜悆甯濅笘鐣屾澂涓撳睘閲囬泦涓庣敤鎴风涓栫晫鏉腑蹇?
|
||||
- 鐘舵€侊細宸插畬鎴?- 鏃堕棿锛?026-05-15
|
||||
### 7. 懂球帝世界杯专属采集与用户端世界杯中心
|
||||
- 状态:已完成 - 时间:2026-05-15
|
||||
|
||||
瀹屾垚鍐呭锛?
|
||||
- 鏂板 `dqd_worldcup` 涓撳睘閲囬泦浠诲姟锛屽浐瀹氭姄鍙栨噦鐞冨笣 2026 涓栫晫鏉?`standing / schedule / person_ranking(goals|assists)`銆?- 涓栫晫鏉禌绋嬪啓鍏?`la_match`锛岀粺涓€浣跨敤 `league_name=涓栫晫鏉痐銆乣competition_id=61`銆乣sport_type=1`锛屽苟淇濈暀 `round_name` 涓?`stage`銆?- 鏂板涓栫晫鏉紦瀛樿〃 `la_worldcup_standing`銆乣la_worldcup_person_ranking`锛屼繚鐣欏皬缁勭Н鍒嗘鍜岀悆鍛樻缁撴瀯銆?- 鏂板骞傜瓑 SQL `insert_crontab_dqd_worldcup.sql`锛岃嚜鍔ㄥ垱寤哄苟鍚敤瓒崇悆浜岀骇鍒嗙被鈥滀笘鐣屾澂鈥濓紝鍚屾椂娉ㄥ唽 `crawler dqd_worldcup` 瀹氭椂浠诲姟銆?- `MatchController` 鏂板 `worldCupStandings`銆乣worldCupRankings`銆乣worldCupSchedule` 3 涓墠鍙版帴鍙o紝渚涚敤鎴风涓栫晫鏉腑蹇冧娇鐢ㄣ€?- 鐢ㄦ埛绔?`pages/match/match` 鍦ㄢ€滆冻鐞?> 涓栫晫鏉€濆垎绫讳笅鏂板鈥滆禌绋嬪闃靛浘鈥濋《閮ㄥ叆鍙e崱锛屽苟鏂板 `packages_match/pages/worldcup` 涓栫晫鏉笓灞為〉锛屾彁渚涒€滃闃靛浘 / 绉垎姒?/ 灏勬墜姒?/ 鍔╂敾姒?/ 璧涚▼鈥? 涓?tab銆?- 宸插湪娴嬭瘯搴撴墽琛?SQL 骞舵墜鍔ㄨ窇閫氫竴娆¢噰闆嗭紝褰撳墠鍐欏叆缁撴灉涓猴細`la_match` 104 鍦恒€乣la_worldcup_standing` 48 鏉°€乣la_worldcup_person_ranking` 鐨?`goals/assists` 鏆備负绌恒€?- 宸查獙璇佹祴璇曟湇 `/api/match/leagues` 鍜?`/api/match/lists?league_name=涓栫晫鏉痐 鍙繑鍥炰笘鐣屾澂鍒嗙被涓庤禌绋嬶紱`worldCupStandings / worldCupRankings / worldCupSchedule` 浠嶉渶绛夊緟鍚庣鑷姩鍚屾鍒版祴璇曟湇鍚庡啀鍋氭渶缁堣仈璋冦€?
|
||||
娑夊強妯″潡锛?
|
||||
完成内容:
|
||||
- 新增 `dqd_worldcup` 专属采集任务,固定抓取懂球帝 2026 世界杯 `standing / schedule / person_ranking(goals|assists)`。
|
||||
- 世界杯赛程写入 `la_match`,统一使用 `league_name=世界杯`、`competition_id=61`、`sport_type=1`,并保留 `round_name` 为 `stage`。
|
||||
- 新增世界杯缓存表 `la_worldcup_standing`、`la_worldcup_person_ranking`,保留小组积分榜和球员榜结构。
|
||||
- 新增幂等 SQL `insert_crontab_dqd_worldcup.sql`,自动创建并启用足球二级分类"世界杯",同时注册 `crawler dqd_worldcup` 定时任务。
|
||||
- `MatchController` 新增 `worldCupStandings`、`worldCupRankings`、`worldCupSchedule` 3 个前台接口,供用户端世界杯中心使用。
|
||||
- 用户端 `pages/match/match` 在"足球 > 世界杯"分类下新增"赛程对阵图"顶部入口卡,并新增 `packages_match/pages/worldcup` 世界杯专属页,提供"对阵图 / 积分榜 / 射手榜 / 助攻榜 / 赛程" 5 个 tab。
|
||||
- 已在测试库执行 SQL 并手动跑通一次采集,当前写入结果为:`la_match` 104 场、`la_worldcup_standing` 48 条、`la_worldcup_person_ranking` 的 `goals/assists` 暂为空。
|
||||
- 已验证测试服 `/api/match/leagues` 和 `/api/match/lists?league_name=世界杯` 可返回世界杯分类与赛程;`worldCupStandings / worldCupRankings / worldCupSchedule` 仍需等待后端自动同步到测试服后再做最终联调。
|
||||
涉及模块:
|
||||
- `server/public/dongqiudi-crawler/dqd_worldcup.py`
|
||||
- `server/public/dongqiudi-crawler/main.py`
|
||||
- `server/public/dongqiudi-crawler/insert_crontab_dqd_worldcup.sql`
|
||||
@@ -98,171 +426,19 @@
|
||||
- `server/app/api/controller/MatchController.php`
|
||||
- `uniapp/src/api/match.ts`
|
||||
- `uniapp/src/pages/match/match.vue`
|
||||
- `uniapp/src/packages_match/pages/worldcup.vue`
|
||||
- `uniapp/src/pages.json`
|
||||
|
||||
### 8. 璧涗簨涓績椤堕儴涓栫晫鏉笓棰樺叆鍙d紭鍖?
|
||||
- 鐘舵€侊細宸插畬鎴?- 鏃堕棿锛?026-05-20
|
||||
### 8. 49宝典新澳六合/旧奥六合爬取 API 格式适配修复
|
||||
|
||||
瀹屾垚鍐呭锛?
|
||||
- 鍙傝€冧笘鐣屾澂涓撻璁捐绋匡紝灏嗙敤鎴风 `pages/match/match` 鐨勪笘鐣屾澂鍏ュ彛浠庤禌浜嬪垪琛ㄥ尯涓婄Щ鍒伴〉闈㈠ご閮紝鏀惧湪鏍囬涓庤繍鍔ㄥ垎绫讳箣闂淬€?- 鏂板叆鍙f敼涓鸿摑鑹蹭笓棰樺崱鏍峰紡锛屽睍绀?`2026骞村浗闄呰冻鑱斾笘鐣屾澂` 涓庤禌浜嬫椂闂村尯闂达紝鐐瑰嚮缁х画璺宠浆鐜版湁涓栫晫鏉笓灞為〉銆?- 绉婚櫎鍘熷厛浠呭湪鈥滆冻鐞?> 涓栫晫鏉€濆垎绫讳笅鏄剧ず鐨勫垪琛ㄥ唴鍏ュ彛锛岄伩鍏嶅悓椤甸噸澶嶅嚭鐜颁袱涓笘鐣屾澂鍏ュ彛銆?- 璋冩暣璧涗簨椤靛垪琛ㄩ珮搴﹁绠楅€昏緫锛屾敼涓烘寜瀹為檯澶撮儴楂樺害鍥炵畻锛岄伩鍏嶆柊澧炰笓棰樺崱鍚庨伄鎸″垎绫绘潯鎴栧帇缂╁垪琛ㄥ尯鍩熴€?- 宸插畬鎴?`npm run build:h5` 鏋勫缓锛屽苟閫氳繃娴忚鍣ㄥ湪鏈湴 H5 楠岃瘉涓撻鍏ュ彛宸插嚭鐜板湪璧涗簨椤甸《閮ㄣ€?
|
||||
娑夊強妯″潡锛?
|
||||
- `uniapp/src/pages/match/match.vue`
|
||||
- `涓氬姟杩涘害绠$悊.md`
|
||||
- `璁捐绋挎槧灏?md`
|
||||
- 状态:已完成 - 时间:2026-06-01
|
||||
|
||||
### 9. 涓栫晫鏉笓棰橀〉鎺掑悕瀵艰埅缁勪欢鍖?
|
||||
- 鐘舵€侊細宸插畬鎴?- 鏃堕棿锛?026-05-20
|
||||
|
||||
瀹屾垚鍐呭锛?
|
||||
- 鍙傝€冧笘鐣屾澂涓撻椤碘€滄帓鍚嶁€濊璁$锛屽皢鎺掑悕鍖轰粠 `worldcup.vue` 椤甸潰鍐呰仈缁撴瀯鎷嗗垎涓虹嫭绔嬬粍浠躲€?- 鏂板鎺掑悕瀵艰埅缁勪欢 `RankingNav.vue`锛岀粺涓€鎵胯浇 `绉垎姒?/ 灏勬墜姒?/ 鍔╂敾姒渀 鍒囨崲銆?- 鏂板绉垎姒滅粍浠?`StandingsPanel.vue`锛屽崟鐙礋璐e垎缁勬爣棰樸€佽〃澶翠笌鐞冮槦绉垎琛ㄦ牸娓叉煋銆?- 鏂板鐞冨憳姒滅粍浠?`PlayerRankingPanel.vue`锛屽崟鐙礋璐e皠鎵嬫涓庡姪鏀绘鍒楄〃娓叉煋銆?- 绉垎姒滃竷灞€鎸変笓棰樿璁$缁嗗寲涓衡€滅悆闃熷浐瀹氬湪宸︺€佸満娆?鑳滃钩璐?杩涘け/绉垎闆嗕腑鍦ㄥ彸鈥濈殑鍙屽尯鍧楄〃鏍肩粨鏋勶紝绉诲姩绔〃澶翠笌鏁版嵁鍒椾繚鎸佸榻愩€?- `worldcup.vue` 鍙繚鐣欎笓棰樹富瀵艰埅銆佹暟鎹姞杞戒笌 ranking 缁勪欢璋冨害锛岄檷浣庨〉闈㈣€﹀悎锛屼究浜庡悗缁户缁寜璁捐绋跨粏鍖栨鍗曟牱寮忋€?- 宸叉墽琛?`npm run build:h5` 骞堕€氳繃鏈湴 H5 鏍¢獙鈥滄帓鍚嶁€濋〉鍙甯稿睍绀虹粍浠跺寲鍚庣殑瀵艰埅涓庣Н鍒嗘鍐呭銆?
|
||||
娑夊強妯″潡锛?
|
||||
- `uniapp/src/packages_match/pages/worldcup.vue`
|
||||
- `uniapp/src/packages_match/pages/worldcup/components/ranking/RankingNav.vue`
|
||||
- `uniapp/src/packages_match/pages/worldcup/components/ranking/StandingsPanel.vue`
|
||||
- `uniapp/src/packages_match/pages/worldcup/components/ranking/PlayerRankingPanel.vue`
|
||||
- `涓氬姟杩涘害绠$悊.md`
|
||||
|
||||
### 10. 涓栫晫鏉笓棰橀〉瀵归樀鍥炬寜鐪熷疄鐞冮槦鏄犲皠
|
||||
- 鐘舵€侊細宸插畬鎴?- 鏃堕棿锛?026-05-20
|
||||
|
||||
瀹屾垚鍐呭锛?- 鐢ㄦ埛绔?`packages_match/pages/worldcup` 瀵归樀鍥鹃〉鏂板鍩轰簬 `worldCupStandings` 鐨勫垎缁勫悕娆$储寮曪紝灏?`A1/A2/.../L4` 鐩存帴鏄犲皠涓哄綋鍓嶇Н鍒嗘涓殑鐪熷疄鐞冮槦鍚嶇О涓庨槦寰姐€?- `1/16鍐宠禌` 涓殑绗笁鍚嶇粍鍚堝崰浣嶇锛堝 `A3/B3/C3/D3/F3`锛夋敼涓洪€愰」鏇挎崲鍚庡啀鎷兼帴灞曠ず锛岄伩鍏嶇户缁樉绀哄瓧姣嶅崰浣嶇銆?- 瀵逛粛鐒舵槸鈥滅X鍦鸿儨鑰?璐ヨ€呪€濈殑鍚庣画杞鍗犱綅淇濇寔鍘熸牱锛屼笉浼€犳湭浜х敓鐨勬檵绾х粨鏋滐紱瀵规棤娉曠‘瀹氱湡瀹為槦寰界殑缁勫悎鍗犱綅涓嶅啀鏄剧ず榛樿鍗犱綅鍥俱€?- 涓哄鐞冮槦缁勫悎鍚嶇О澧炲姞涓よ灞曠ず鏍峰紡锛岄伩鍏嶉暱鏂囨湰鍦ㄤ笓棰樺闃靛崱鐗囦腑琚崟琛屾埅鏂€?- 宸叉墽琛?`uniapp` 鏋勫缓楠岃瘉锛歚npm run build:h5` 閫氳繃銆?
|
||||
娑夊強妯″潡锛?- `uniapp/src/packages_match/pages/worldcup.vue`
|
||||
- `涓氬姟杩涘害绠$悊.md`
|
||||
|
||||
### 11. 鐭俊鍔╂墜鍚屾鐭俊涓庢潵鐢佃褰曞叆搴?
|
||||
- 鐘舵€侊細宸插畬鎴?- 鏃堕棿锛?026-05-22
|
||||
|
||||
瀹屾垚鍐呭锛?
|
||||
- 鎵╁睍 `/api/sms/uploadSms`锛屽悓鏃舵帴鏀舵墜鏈虹涓婁紶鐨?`smsList` 涓?`callList`锛岀粺涓€鍐欏叆 `la_sms_upload`銆?- 淇濇寔鐭俊楠岃瘉鐮侀摼璺吋瀹癸細鐭俊璁板綍浠嶆部鐢?`type=1/2`銆乣status=0/1`锛涙潵鐢佃褰曚娇鐢?`type=11/13/15` 鍖哄垎鈥滃凡鎺?鏈帴/鎷掓帴鈥濓紝骞朵娇鐢?`status=2` 琛ㄧず鈥滀笉閫傜敤鈥濄€?- 鐧诲綍/缁戞墜鏈哄彿鐨勭煭淇¢獙璇佺爜鏍¢獙瑙勫垯璋冩暣涓猴細鍙 `la_sms_upload` 涓瓨鍦ㄨ鎵嬫満鍙风殑浠绘剰涓婁紶璁板綍锛屽嵆瑙嗕负楠岃瘉閫氳繃锛屼笉鍐嶈姹傜煭淇″唴瀹逛笌杈撳叆楠岃瘉鐮佸畬鍏ㄥ尮閰嶏紝涔熶笉鍐嶉檺鍒?7 澶╁唴鎴栫煭淇$被鍨嬨€?- 鍔╂墜绔噰闆嗚寖鍥存敹绱т负锛氱煭淇″彧涓婁紶鏀跺埌鐨勭煭淇★紝鏉ョ數鍙笂浼犳墦杩涙潵鐨勫彿鐮侊紝杩囨护鑷繁鍙戝嚭鍘荤殑鐭俊鍜屼富鍔ㄦ嫧鍑虹殑閫氳瘽璁板綍銆?- 鍔╂墜绔仮澶嶆潵鐢电湡瀹炰笂浼狅紝涓嶅啀灏嗘潵鐢佃姹傛寜鈥滅煭淇″垪琛ㄤ负绌衡€濊浣滆烦杩囷紝骞跺鍔犲姪鎵嬬璇锋眰/鍝嶅簲鎵撳嵃锛屼究浜庢帓鏌ュ疄闄呬笂浼犲唴瀹广€?- 绠$悊绔€滅郴缁熻缃?-> 绯荤粺缁存姢 -> 楠岃瘉鐮佲€濆垪琛ㄥ悓姝ユ敮鎸佸睍绀烘潵鐢佃褰曪紝鏂板鈥滆褰曠被鍨嬧€濆垪锛屽苟琛ュ厖鈥滀笉閫傜敤鈥濈姸鎬佸睍绀恒€?- 鏂板 SQL 鑴氭湰 `docs/sql/alter_la_sms_upload_for_call_records.sql`锛岀敤浜庡皢 `la_sms_upload.status` 娉ㄩ噴鎵╁睍涓?`0=寰呴獙璇?1=宸蹭娇鐢?2=涓嶉€傜敤`銆?
|
||||
娑夊強鏁版嵁搴撳彉鏇达細
|
||||
|
||||
- `la_sms_upload.status`
|
||||
|
||||
娑夊強妯″潡锛?
|
||||
- `server/app/api/controller/SmsController.php`
|
||||
- `server/app/api/logic/LoginLogic.php`
|
||||
- `server/app/api/logic/UserLogic.php`
|
||||
- `server/app/adminapi/lists/setting/SmsUploadLists.php`
|
||||
- `admin/src/views/setting/system/sms_upload.vue`
|
||||
- `sport-era-msg/pages/index/index.vue`
|
||||
- `sport-era-msg/pages/logs/logs.vue`
|
||||
- `docs/sql/alter_la_sms_upload_for_call_records.sql`
|
||||
- `涓氬姟杩涘害绠$悊.md`
|
||||
|
||||
---
|
||||
|
||||
### 12. 鐢ㄦ埛椤垫湭璁惧瘑鐮佹彁绀?- 2026-05-23锛歚uniapp/src/pages/user/user.vue` 鍦ㄨ繘鍏モ€滄垜鐨勨€濋〉闈㈡椂琛ュ厖鏈缃瘑鐮佹彁绀哄脊绐楋紱褰?`has_password` 涓?`0` 鏃讹紝鎻愮ず鐢ㄦ埛灏藉揩淇敼鐧诲綍瀵嗙爜锛屽苟灞曠ず鎵嬫満鍙峰悗 6 浣嶄綔涓哄垵濮嬪瘑鐮佽鏄庛€?- 2026-05-23锛歚server/app/api/validate/LoginAccountValidate.php` 鏀寔绌哄瘑鐮佺敤鎴蜂娇鐢ㄦ墜鏈哄彿鍚?6 浣嶇洿鎺ョ櫥褰曪紝閬垮厤鍒濆鍖栬处鍙疯璇垽涓衡€滅敤鎴蜂笉瀛樺湪鈥濄€?
|
||||
### 13. 涓栫晫鏉〉闈富瀵艰埅榛樿绱㈠紩
|
||||
- 2026-05-23锛歚uniapp/src/packages_match/pages/worldcup.vue` 鐨勪富瀵艰埅榛樿绱㈠紩璋冩暣涓虹 0 椤癸紝椤甸潰杩涘叆鏃堕粯璁ゅ仠鐣欏湪棣栦釜 tab銆?
|
||||
### 14. 涓栫晫鏉笓棰樻柊闂绘潵婧愬悓姝ラ椤靛垎绫?- 2026-05-23锛歚uniapp/src/pages/match/match.vue` 璺宠浆涓栫晫鏉笓棰橀〉鏃舵惡甯﹂椤佃В鏋愬埌鐨?`涓栫晫鏉痐 鍒嗙被 `cid`锛宍uniapp/src/packages_match/pages/worldcup.vue` 浼樺厛浣跨敤璇?`cid` 鎷夊彇鏂伴椈锛屼繚璇佷笓棰樻柊闂绘潵婧愪笌棣栭〉涓栫晫鏉垎绫讳竴鑷淬€?
|
||||
### 15. 鏂伴椈璧勮 AI 缈昏瘧
|
||||
- 2026-05-23锛歚server/app/api/controller/ArticleController.php` 鏂板 `/article/translate` 缈昏瘧鎺ュ彛锛宍server/app/api/logic/ArticleLogic.php` 澶嶇敤 `AiService` 鐢熸垚骞剁紦瀛樻枃绔犵炕璇戠粨鏋滃埌 `ext`銆?- 2026-05-23锛歚uniapp/src/pages/news_detail/news_detail.vue` 鍦ㄦ柊闂昏鎯呴〉鏂板 AI 缈昏瘧鍏ュ彛銆佸姞杞芥€佷笌缈昏瘧缁撴灉灞曠ず鍖猴紝`uniapp/src/api/news.ts` 琛ュ厖瀵瑰簲璇锋眰灏佽銆?
|
||||
### 16. 涓栫晫鏉笓棰樻柊闂诲垪琛?AI 缈昏瘧
|
||||
- 2026-05-23锛歚uniapp/src/components/news-card/news-card.vue` 澧炲姞鍙€?AI 缈昏瘧瑙﹀彂鍏ュ彛锛屼笘鐣屾澂涓撻鏂伴椈鍒楄〃鍙湪鍗$墖鍐呯偣鎸夌炕璇戞寜閽€?- 2026-05-23锛歚uniapp/src/packages_match/pages/worldcup.vue` 鎺ユ敹缈昏瘧浜嬩欢骞朵互寮圭獥灞曠ず缈昏瘧缁撴灉锛屼繚鎸佸叾浠栨柊闂诲垪琛ㄩ粯璁や笉鍙樸€?### 17. 绀惧尯棣栭〉鐗规湕鏅垎绫?AI 缈昏瘧澶嶇敤
|
||||
- 2026-05-23锛歚uniapp/src/packages_community/pages/index.vue` 缁х画澶嶇敤 `post-card` 鍗$墖娓叉煋锛岀ぞ鍖洪椤垫棤闇€鍗曠嫭鎷嗗垎 AI 鍏ュ彛閫昏緫銆?- 2026-05-23锛歚uniapp/src/packages_community/components/post-card.vue` 灏?`鐗规湕鏅甡 鏍囩绾冲叆 AI 缈昏瘧鍏ュ彛鍒ゆ柇锛屾部鐢ㄥ笘瀛愮炕璇戝脊绐楀睍绀烘柟寮忋€?### 18. 璧勮 AI 缈昏瘧鏀逛负绉垎纭娴佺▼
|
||||
- 2026-05-23锛歚server/app/api/controller/ArticleController.php` 鐨?`/article/translate` 鏀逛负鐧诲綍鍚庡彲鐢紝骞舵敮鎸?`article_id/id + confirm` 鐨勭Н鍒嗙‘璁ゅ弬鏁般€?- 2026-05-23锛歚server/app/api/logic/ArticleLogic.php` 涓鸿祫璁炕璇戣ˉ榻?`needs_payment` 鎺㈡祴銆佺Н鍒嗘墸鍑忋€佺炕璇戠紦瀛樺鐢ㄤ笌宸蹭粯璐圭敤鎴风紦瀛樿鍙栥€?- 2026-05-23锛歚uniapp/src/api/news.ts`銆乣uniapp/src/pages/news_detail/news_detail.vue`銆乣uniapp/src/packages_match/pages/worldcup.vue` 鏀逛负涓庣ぞ鍖虹炕璇戜竴鑷寸殑 `POST + confirm` 璋冪敤鏂瑰紡锛岀炕璇戝墠鍏堟彁绀虹櫥褰曞苟鍦ㄧ‘璁ゅ悗鎵gН鍒嗐€?### 19. 璧涗簨璇︽儏鏂板绗笁鏂圭洿鎾叆鍙?- 2026-05-23锛歚server/app/api/controller/MatchController.php` 澶嶇敤 `la_match_data.raw_data` 涓殑鐩存挱婧愭枃鏈紝鍚戣鎯呮帴鍙hˉ鍏?`living_tv` 瀛楁锛屼究浜庡墠绔睍绀虹洿鎾潵婧愯鏄庛€?- 2026-05-23锛歚uniapp/src/pages/match_detail/match_detail.vue` 鏂板鈥滅洿鎾€濆叆鍙e崱鐗囷紝鐐瑰嚮鍚庨€氳繃鐜版湁 `webview` 椤甸潰璺宠浆鍒版噦鐞冨笣绗笁鏂圭洿鎾鎯呴〉銆?
|
||||
### 20. 绠$悊绔禌浜嬬洿鎾摼鎺ョ紪杈?- 2026-05-23锛歚admin/src/views/match/lists/index.vue` 鍦ㄨ禌浜嬬紪杈戝脊绐椾腑鏂板 `live_url` 杈撳叆椤癸紝鐢ㄤ簬缁存姢绗笁鏂圭洿鎾摼鎺ャ€?- 2026-05-23锛歚server/app/adminapi/logic/match/MatchLogic.php` 鍏佽璧涗簨缂栬緫鍐欏叆 `live_url`锛宍uniapp/src/pages/match_detail/match_detail.vue` 浼樺厛璇诲彇璇ュ瓧娈典綔涓虹洿鎾叆鍙h烦杞湴鍧€銆?- 2026-05-23锛氭柊澧?`docs/sql/alter_la_match_add_live_url.sql`锛岀敤浜庣粰 `la_match` 琛ュ厖 `live_url` 瀛楁銆?- 2026-05-23锛氬凡鍚屾娴嬭瘯搴?`sbnews.la_match.live_url` 瀛楁锛岀‘璁?`/adminapi/match.match/edit` 鍙甯歌惤搴撱€?
|
||||
### 21. 璧涗簨璇︽儏鐩存挱鍏ュ彛浠呭湪鏈夐摼鎺ユ椂灞曠ず
|
||||
- 2026-05-23锛歚uniapp/src/pages/match_detail/match_detail.vue` 灏嗙洿鎾叆鍙f敹鏁涗负浠呭湪 `match.live_url` 瀛樺湪鏃跺睍绀猴紝涓嶅啀涓烘棤閾炬帴璧涗簨鑷姩鍏滃簳绗笁鏂圭洿鎾湴鍧€銆?
|
||||
### 22. 涓栫晫鏉笓棰樻瘮璧涘崱鐗囪烦杞鎯?- 2026-05-23锛歚uniapp/src/packages_match/pages/worldcup.vue` 鐨勮禌绋嬪崱鐗囧拰瀵归樀鍥惧崱鐗囩粺涓€鏀寔鐐瑰嚮璺宠浆 `pages/match_detail/match_detail`锛屾柟渚夸粠涓栫晫鏉笓棰樼洿鎺ヨ繘鍏ユ瘮璧涜鎯呴〉銆?
|
||||
### 23. 杩戞湡韪╁潙涓庢枃妗e悓姝?- 2026-05-24锛氬皢鏈璋冭瘯杩囩▼涓‘璁ょ殑鍧戠偣鍚屾鍒?`sport-era-project-dev` 鎶€鑳芥枃妗e拰鍚勭骇 `AGENTS.md`锛岃ˉ鍏?`Validate::only()` 涓嶈繃婊よ姹傚弬鏁般€乣la_match.live_url` 蹇呴』鍏堣ˉ搴撱€佷笘鐣屾澂涓撻椤靛叆鍙d竴鑷存€т互鍙婃瀯寤轰骇鐗╀笉瑕佹贩鍏ユ彁浜ょ瓑娉ㄦ剰浜嬮」銆?
|
||||
## 浜屻€佽繘琛屼腑浜嬮」
|
||||
|
||||
鏆傛棤銆?
|
||||
---
|
||||
|
||||
## 涓夈€佸緟鍔炰簨椤?
|
||||
### 1. 涓氬姟妯″潡杩涘害琛ュ綍
|
||||
|
||||
- 浼樺厛绾э細涓?- 鍒涘缓鏃堕棿锛?026-05-07
|
||||
|
||||
寰呯‘璁わ細
|
||||
|
||||
- 鏍规嵁鐜版湁 `01-浜у搧鏂规鏂囨。.md`銆乣02-瀹炵幇娴佺▼鏂囨。.md` 鍜屽綋鍓嶄唬鐮佺姸鎬侊紝琛ュ綍宸插畬鎴愪笟鍔℃ā鍧椼€?- 鎸夋ā鍧楁⒊鐞嗗悗绔帴鍙c€佺鐞嗗悗鍙伴〉闈€乽niapp 椤甸潰銆丳C 椤甸潰褰撳墠瀹屾垚搴︺€?
|
||||
### 2. 璁捐绋挎槧灏勮ˉ褰?
|
||||
- 浼樺厛绾э細涓?- 鍒涘缓鏃堕棿锛?026-05-07
|
||||
|
||||
寰呯‘璁わ細
|
||||
|
||||
- 纭褰撳墠璁捐绋垮钩鍙般€侀」鐩摼鎺ュ拰椤甸潰鑺傜偣鍚嶇О銆?- 灏嗛椤点€佹柊闂诲垪琛ㄣ€佹柊闂昏鎯呫€佷釜浜轰腑蹇冦€丄I 鍒嗘瀽绛夐〉闈笌瀹炵幇璺緞寤虹珛鏄犲皠銆?
|
||||
---
|
||||
|
||||
## 鍥涖€侀伩鍧戣褰?
|
||||
### 1. ThinkPHP 鏃堕棿瀛楁鑷姩杞崲
|
||||
|
||||
- BaseModel 瀛愮被鏌ヨ鍚?`create_time` / `update_time` 宸叉寜閰嶇疆杞负鏃ユ湡瀛楃涓层€?- 涓嶈瀵硅繖浜涘瓧娈靛啀娆℃墜鍔?`date()` 杞崲锛岄伩鍏嶅瓧绗︿覆寮鸿浆鏁存暟瀵艰嚧鏄剧ず涓?1970-01-01銆?
|
||||
### 2. MySQL 淇濈暀瀛?
|
||||
- 鍘熺敓 SQL 涓?`system`銆乣order`銆乣group`銆乣key` 绛夊瓧娈靛繀椤讳娇鐢ㄥ弽寮曞彿鍖呰9銆?
|
||||
### 3. 閫楀彿鍒嗛殧杈撳叆娓呯悊
|
||||
|
||||
- 鎵嬫満鍙枫€佸叧閿瘝绛夐€楀彿鍒嗛殧杈撳叆锛屾彁浜ゅ墠蹇呴』鎵ц `split 鈫?trim 鈫?filter(Boolean) 鈫?join`銆?
|
||||
### 4. 澶栫珯鍥剧墖闃茬洍閾?
|
||||
- 鏂伴椈璇︽儏绛夊瘜鏂囨湰涓殑澶栫珯鍥剧墖濡傚嚭鐜?403锛屼紭鍏堝湪鍓嶇娓叉煋灞傝缃?`referrerpolicy="no-referrer"`銆?- 涓嶆搮鑷竻娲楀浘鐗?URL 鍙傛暟鎴栨敼鍐欏師濮嬭矾寰勩€?
|
||||
### 5. 娴嬭瘯鏈嶅姟鍣ㄤ唬鐮佸悓姝?
|
||||
- 涓嶉€氳繃 WSL `sshpass` / `scp` 涓婁紶涓氬姟浠g爜銆?- 椤圭洰浠g爜鏇存柊鐢辩敤鎴烽€氳繃 SFTP 绛夋柟寮忓鐞嗐€?
|
||||
### 6. 鏂板瀛楁涓庤仈鍔ㄥ叆鍙f帓鏌?
|
||||
- `Validate::only()` 鍙檺鍒舵牎楠屽瓧娈碉紝涓嶄細杩囨护璇锋眰鍙傛暟锛涙柊澧炲瓧娈靛繀椤诲悓鏃舵牳瀵?validate銆乴ogic銆乵odel銆佷繚瀛樼櫧鍚嶅崟鍜屾暟鎹簱鍒椼€?- `adminapi/match.match/edit` 鍐欏叆澶辫触鍏堢湅琛ㄧ粨鏋勶紝涓嶈鎶婃祴璇曞簱缂哄垪璇垽鎴愪笟鍔¢€昏緫閿欒銆?- 涓栫晫鏉笓棰橀〉銆佹瘮璧涜鎯呴〉鐨勫叆鍙e拰鏄剧ず瑙勫垯瑕佷竴璧锋敼锛岀洿鎾叆鍙e彧鍦?`match.live_url` 鏈夊€兼椂灞曠ず銆?- 鏋勫缓浜х墿濡?`server/public/admin`銆乣server/public/mobile` 涓嶈娣疯繘鎻愪氦锛屾彁浜ゅ墠鍏堟竻鐞嗕复鏃舵埅鍥惧拰鐢熸垚鏂囦欢銆?
|
||||
---
|
||||
|
||||
## 鏂囨。缁存姢瑙勮寖
|
||||
|
||||
1. **姣忓畬鎴愪竴涓?issue / 鍔熻兘鐐?鈫?绔嬪嵆杩藉姞鍒般€屽凡瀹屾垚浜嬮」銆?*銆?2. **姣忓彂鐜颁竴涓潙 鈫?绔嬪嵆杩藉姞鍒般€岄伩鍧戣褰曘€?*銆?3. **姣忓懆娓呯悊涓€娆°€岃繘琛屼腑銆嶄笌銆屽緟鍔炪€嶇姸鎬?*銆?4. **绔犺妭搴忓彿杩炵画閫掑锛屼笉閲嶆帓**锛屼繚鐣欏巻鍙插彲杩芥函銆?5. **娑夊強鏁版嵁搴撳彉鏇村繀椤诲垪鍑鸿〃鍚嶅拰瀛楁**銆?
|
||||
### 24. 涓栫晫鏉笓棰樻柊闂昏嚜鍔ㄧ炕璇戝睍绀?- 2026-05-28锛歚uniapp/src/packages_match/pages/worldcup.vue` 鐨勬柊闂诲尯鏀逛负鑷姩璇锋眰 `/article/translate` 骞剁洿鎺ュ睍绀轰腑鏂囩炕璇戯紝涓撻椤典笉鍐嶅睍绀烘樉寮?AI 缈昏瘧鍏ュ彛锛屼粎淇濈暀缈昏瘧缁撴灉灞曠ず銆?
|
||||
|
||||
### 25. 鏂囩珷鍒楄〃鎺ュ彛鑷姩缈昏瘧鍥炰紶
|
||||
- 2026-05-28锛歚/api/article/lists` 鍦?`cid=22` 鏃朵細鑷姩璇诲彇鎴栫敓鎴愭枃绔犺瘧鏂囧苟鍐欏叆 `ext.translated_content`锛屾帴鍙g洿鎺ュ洖浼犱腑鏂囩炕璇戯紱`packages_match/pages/worldcup` 鍙栨秷鍓嶇浜屾缈昏瘧璇锋眰锛屽彧娑堣垂鍚庣杩斿洖缁撴灉銆?
|
||||
|
||||
### 26. 棣栭〉涓庢枃绔犺鎯呯洿鎺ュ睍绀轰腑鏂囩炕璇?
|
||||
- 2026-05-28锛歚server/app/api/logic/ArticleLogic.php 琛ュ厖璇︽儏鎺ュ彛鐨? ranslated_content 鏈敤鎴风墝鏈熷叆鍙岀洿鎺ュ洖浼犵紦瀛樼粨鏋滐紝棣栭〉鍒楄〃鍗$墖缁х画澶嶇敤 ranslated_content 鏄剧ず涓枃缈昏瘧銆?
|
||||
- 2026-05-28锛歚uniapp/src/pages/news_detail/news_detail.vue 鍘绘帀鎵嬪姩缈昏瘧鎸夐挳鍜屽弽澶嶈姹傛祦绋嬶紝鏀逛负鐩存帴灞曠ず鎺ュ彛杩斿洖鐨勪腑鏂囩炕璇戝唴瀹癸紝涓栫晫鏉垪琛ㄥ崱鐗囧悓姝ョ粦瀹? ranslated_content銆?
|
||||
|
||||
### 27. 首页资讯卡片翻译块独立成行
|
||||
- 2026-05-28锛歚uniapp/src/components/feed-card/feed-card.vue鍜?uniapp/src/components/feed-video-card/feed-video-card.vue 灏? ranslated_content 绉诲埌鍥剧墖/瑙嗛鍖哄潡涔嬩笅鐨勭嫭绔嬪叏瀹藉埗琛岋紝閬垮厤缈昏瘧鍐呭鍗犳帀宸﹀彸鍒楀鑷村浘鐗囪鍘嬬缉鍒颁竴渚э紝鍚屾椂淇濇寔鍗$墖绮惧捐灞曠ず銆?
|
||||
|
||||
### 28. 世界杯英文资讯定时翻译预热
|
||||
- 2026-05-28:新增 server/app/common/command/WorldcupArticleTranslate.php,用于定时扫描世界杯分类文章并仅在疑似英文且未缓存翻译时调用 ArticleLogic::autoTranslateArticle() 落库。
|
||||
- 2026-05-28:将命令注册到 server/config/console.php,并新增 docs/sql/insert_crontab_worldcup_article_translate.sql,可将任务加入 la_dev_crontab 统一调度。
|
||||
- 2026-05-28:翻译判定会先排除包含中文字符的内容,避免非英文资讯误入 AI 翻译流程。
|
||||
|
||||
### 29. 世界杯社区内容精选区
|
||||
- 2026-05-28:曾在 uniapp/src/packages_community/pages/index.vue 顶部新增世界杯精选社区区块,用于预热世界杯社区内容。
|
||||
- 2026-05-28:已根据最新需求撤回顶部精选区,首页恢复为原先的分类流展示。
|
||||
- 2026-05-28:新增 docs/sql/seed_worldcup_community_posts.sql,可快速插入 3 条世界杯社区种子帖子并关联 世界杯 标签。
|
||||
|
||||
### 30. 世界杯英文文章翻译定时任务入库
|
||||
- 2026-05-28:已将 `worldcup_article_translate` 预热命令写入远端 `la_dev_crontab`,表达式为 `*/10 * * * *`,用于定时补齐世界杯英文文章的翻译缓存。
|
||||
- 2026-05-28:已移除命令内的 50 条限制,避免只覆盖最新内容导致旧文章长期未翻译。
|
||||
|
||||
### 31. 赛事详情页头部优化
|
||||
- 2026-05-29:将 `uniapp/src/pages/match_detail/match_detail.vue` 顶部导航抽离为 `uniapp/src/components/match-detail-header/match-detail-header.vue`,页面只保留返回、标题、副标题和分享入口。
|
||||
- 2026-05-29:移除了赛事详情页顶部的 hero 摘要区,保留比赛信息卡、直播、阵容和 AI 分析主体内容不变。
|
||||
|
||||
### 32. 非 TabBar 页自定义底栏白屏修复
|
||||
- 2026-05-29:修正 `uniapp/src/components/tabbar/tabbar.vue` 对 `hide-tab-bar` 的使用,仅在原生 TabBar 页启用,避免在 `packages_match/pages/index` 这类普通页面触发 `hideTabBar:fail not TabBar page`。
|
||||
- 2026-05-29:该问题会在赛事入口页产生未处理 rejection,表现为点击赛事后页面白屏或异常闪烁,现已收敛。
|
||||
|
||||
### 33. iOS 赛事入口兼容修复
|
||||
- 2026-05-29:将 `uniapp/src/packages_match/components/MatchCenterPanel.vue` 的 `Object.values(...).flat()` 改为手动合并数组,避免老版本 iOS WebView 不支持 `flat()` 时在赛事入口直接白屏。
|
||||
- 2026-05-29:同步将 `uniapp/src/packages_match/pages/index.vue` 与 `uniapp/src/packages_match/pages/worldcup.vue` 的壳组件导入统一为绝对路径,减少子包页面在 App/iOS 端的解析歧义。
|
||||
|
||||
### 34. 赛事详情页返回赛事中心浮动入口
|
||||
- 2026-05-29:在 `uniapp/src/pages/match_detail/match_detail.vue` 右下角新增“赛事中心”浮动圆圈,点击后优先 `switchTab` 返回 `pages/match/match`,失败时回退 `reLaunch`。
|
||||
|
||||
### 35. 世界杯英文翻译预热容错调整
|
||||
- 2026-05-29:将 `server/app/common/command/WorldcupArticleTranslate.php` 的英文判定阈值放宽,并改为按文章 `id` 升序处理,减少正常英文世界杯稿件被误判为“非英文”而跳过的情况。
|
||||
- 2026-05-29:世界杯文章列表页本身只读取 `ext.translated_content`,如果宿主机没有持续运行 `php think crontab` 或 `/crontab` 调度入口,未触发预热的文章就会一直保持空翻译状态。
|
||||
|
||||
### 36. 世界杯专题新闻翻译摘要预览
|
||||
- 2026-05-29:`uniapp/src/components/feed-card/feed-card.vue` 与 `uniapp/src/components/feed-video-card/feed-video-card.vue` 的首页世界杯翻译区改为摘要预览,不再全量展开正文。
|
||||
- 2026-05-29:`uniapp/src/packages_match/components/WorldCupPanel.vue` 的世界杯专题新闻列表翻译块同步改为摘要预览,保持卡片高度稳定,避免整段译文撑开列表。
|
||||
|
||||
### 37. 世界杯翻译展示纯文本换行化
|
||||
- 2026-05-29:将世界杯专题右上角入口调整为“其他赛事”,点击后回到赛事中心视图,并移除原右下角悬浮返回按钮。
|
||||
- 2026-05-29:`uniapp/src/components/feed-card/feed-card.vue`、`uniapp/src/components/feed-video-card/feed-video-card.vue`、`uniapp/src/pages/news_detail/news_detail.vue`、`uniapp/src/packages_community/components/post-card.vue`、`uniapp/src/packages_community/pages/post_detail.vue` 的翻译展示统一改为原文后换行的纯文本译文,去掉独立 AI 翻译框/卡片。
|
||||
- 2026-05-29:`server/app/api/controller/CommunityController.php` 补充了特朗普帖子详情的翻译缓存兜底,确保列表与详情都能直接拿到 `translated_content`。
|
||||
|
||||
### 38. 资讯 AI 评论任务入库
|
||||
- 2026-05-29:新增 `article_ai_comment` 控制台命令、`la_article_ai_comment_task` 任务队列表以及 `docs/sql/insert_crontab_article_ai_comment.sql`,用于轮询并投放资讯 AI 评论。
|
||||
- 2026-05-29:新增虚拟账号池复用逻辑,账号使用 `ai_comment_` 前缀、昵称使用 `AI评论员` 前缀,避免额外扩张用户表结构。
|
||||
- 2026-05-29:AI 评论内容通过 `AiService::generateArticleComment()` 基于标题、摘要和正文生成专业评论,到点后再落库到 `la_article_comment` 并同步评论数。
|
||||
完成内容:
|
||||
- 发现新澳六合(xa6)和旧奥六合(a6)的 draw 类型帖子自 2026-05-29 起停止更新,根源为第三方 API 变更响应格式。
|
||||
- 字段变更:开奖号码数组从 `openCode` 迁移到 `currentResult`,期号从 `issue` 迁移到 `currentCompleteIssue`/`currentIssue`。
|
||||
- 字段编码:五行由中文(金木水火土)变为字母编码(j/m/s/h/t),单双由中文(单双)变为字母编码(o/e),大小由中文(大小)变为字母编码(b/s),颜色新增 R/G/B 编码。
|
||||
- 时间格式:开奖时间从时间戳变为 `"Y-m-d H:i:s"` 字符串格式。
|
||||
- 修复 `lottery_community.py` 的 `build_draw_post` 函数,添加 `WUXING_MAP`、`ODD_EVEN_MAP`、`SIZE_MAP` 等映射表,增强 `color_text` 函数支持 R/G/B 编码,增强 `format_time` 函数支持字符串时间格式。
|
||||
- 修复后的代码在 2026-05-31 18:10 的执行中成功同步:xa6 新增 92 条(含 1 条 draw + 91 条 gallery),a6 更新 101 条。
|
||||
- 数据库验证:xa6 和 a6 的 draw 类型均已同步到最新 2026151 期,gallery 类型同步到最新数据。
|
||||
- 注意:2026149-2026150 期因 API 格式变更期间不可回溯(API 只返回当前期),已无法补回。
|
||||
涉及模块:
|
||||
- `server/public/dongqiudi-crawler/lottery_community.py`
|
||||
|
||||
Reference in New Issue
Block a user