文档:清理旧 ASP/数据导入相关内容,重写注意事项为全新项目视角

This commit is contained in:
2026-02-28 14:13:00 +08:00
parent ff097cce3c
commit 95dd259913

View File

@@ -1,7 +1,6 @@
# ChatRoom 开发计划与注意事项
> **技术栈**Laravel 12 · PHP 8.4 · Laravel Reverb (WebSocket) · Redis · MySQL 8.0 · Laravel Horizon
> **原项目**`/Users/pllx/Web/chat/hp0709`VBScript ASP + MS Access 聊天室)
> **目标域名**`http://chatroom.test`Herd 自动配置)| `https://chat.ay.lc`(生产环境)
---
@@ -463,8 +462,6 @@ routes/
- [ ] **滚动公告管理**(后台 CRUD`ScrollAd` 模型已建,界面待完成)
- [ ] **好友系统**`FriendCall` / `FriendRequest` 模型已建Controller 待完成)
- [ ] **婚姻系统**`Marriage` 模型已建,界面待完成)
- [ ] **历史数据迁移**(从 Access 导入旧用户数据GBK→UTF-8 转换)
- [ ] **密码兼容过渡**(旧 MD5 用户登录时自动升级为 bcrypt
- [ ] **单元测试**(核心 Service 层测试覆盖率)
- [ ] **Flash 游戏替代**`game/``pig/` 等 .swf 文件,考虑 HTML5/Canvas 重写)
@@ -472,39 +469,32 @@ routes/
## 七、注意事项
### 7.1 密码兼容策略
### 7.1 密码策略
- 导入旧数据时,`password` 字段存原始 MD5 值32位字符串
- 登录时双模式验证:`md5($input) === $storedPass` 成功后升级为 `bcrypt`
- 新注册用户直接用 `bcrypt``Hash::make()`
- 所有用户密码使用 `bcrypt``Hash::make()`
- 登录时使用 `Hash::check()` 验证
### 7.2 字符编码
### 7.2 实时推送机制
- 原 Access 数据库为 **GBK 编码**
- 所有 MySQL 表必须 `utf8mb4_unicode_ci`
- 导入历史数据前转换:
```bash
iconv -f GBK -t UTF-8 原文件.csv > 目标文件_utf8.csv
```
**聊天室所有状态变更均通过 Reverb WebSocket 广播**,无需轮询刷新。
### 7.3 REFRESH.ASP 已废弃
> [!NOTE]
> 历史上基于 `<meta http-equiv=refresh>` 的 6秒刷新方案已被完全取代任何涉及聊天室状态更新的功能都应通过 Event → Broadcasting 实现,**禁止在实现中引入轮询逻辑**。
原系统的 6 秒 `<meta http-equiv=refresh>` **完全由 Reverb WebSocket 实时推送取代**,无需任何轮询逻辑。
### 7.3 Redis 状态层设计
### 7.4 Application 对象替代
| 数据 | Redis Key 格式 | 说明 |
| ------------ | ------------------------- | -------------------------- |
| 在线用户列表 | `room:{id}:users` Hash | 值为用户信息 JSON |
| 消息环形缓冲 | `room:{id}:messages` List | 最多保留 200 条 |
| 房间基本信息 | `room:{id}:info` String | JSON 快照 |
| 并发锁 | `Cache::lock("key", 10)` | 使用 `->block(5, fn)` 实现 |
| 原 ASP | Laravel 替代 |
| ------------------------------- | --------------------------------------------- |
| `Application("_user_list")` | `Redis::hgetall("room:{id}:users")` |
| `Application("_says")` 环形缓冲 | `Redis::lrange("room:{id}:messages", 0, 199)` |
| `Application("_room_list")` | `Redis::get("room:{id}:info")` + `rooms` 表 |
| `Application.Lock/Unlock` | `Cache::lock("key", 10)->block(5, fn)` |
### 7.5 Flash 游戏(暂不处理)
### 7.4 Flash 游戏(暂不处理)
`game/``pig/``Gupiao/` 等目录内的 `.swf` Flash 文件现代浏览器已不支持,**本期不做转换**。
### 7.6 AI 机器人多厂商支持
### 7.5 AI 机器人多厂商支持
`AiChatService` 支持以下 Provider通过 `ai_provider_configs` 后台配置切换:
@@ -514,7 +504,7 @@ routes/
| `deepseek` | `deepseek-chat` | 国产低成本,兼容 OpenAI 接口 |
| `gemini` | `gemini-1.5-flash` | Google Gemini |
### 7.7 商店商品类型说明
### 7.6 商店商品类型说明
| type | slug 示例 | 说明 |
| ---------- | ---------------- | ---------------------- |
@@ -524,7 +514,7 @@ routes/
---
### 7.8 积分流水系统 — 开发者使用指南 ⭐
### 7.7 积分流水系统 — 开发者使用指南 ⭐
> [!IMPORTANT]
> **铁律**:所有涉及修改用户 `exp_num`(经验)、`jjb`(金币)、`meili`(魅力)的操作,
@@ -675,8 +665,3 @@ php artisan horizon:terminate
# 清理所有缓存
php artisan optimize:clear
```
---
> 原 ASP 源码参考路径:`/Users/pllx/Web/chat/hp0709/`
> 数据库 SQL 参考:`/Users/pllx/Web/chat/hp0709_php/database.sql`