# Batata — 骏九文化 · 网络小说内容管理系统

基于 **PHP + MongoDB** 构建的网络小说网站管理系统，为骏九文化传媒提供小说发布、内容管理、用户管理及服务器运维等一站式解决方案。

## 技术栈

| 层级 | 技术 |
|------|------|
| 后端语言 | PHP 7.4+ |
| 数据库 | MongoDB 4.0+ |
| PHP MongoDB 驱动 | `mongodb/mongodb` (PHP Library) + 原生 Driver |
| 前端框架 | Bootstrap 3 / Tailwind CSS (CDN) |
| JavaScript | jQuery, Chart.js, Resumable.js, WebSocket |
| 依赖管理 | Composer |
| 其他库 | SimplePie (RSS 解析), Parsedown (Markdown), TCPDF (PDF 生成) |

## 目录结构

```
batata/
├── api/                     # API 接口层
│   ├── header.php           # 全局配置、工具函数库
│   ├── bookinfo.php         # 书籍详情 API
│   ├── chapter.php          # 章节内容 API
│   ├── feed.php             # RSS Feed 生成
│   ├── download/            # 小说 TXT 文件存储目录
│   ├── images/              # 书籍封面图
│   ├── tomato_*.php         # 番茄小说平台 API 适配
│   └── list.php             # 书籍列表 API
│
├── blog/                    # 管理后台模块
│   ├── sign_in.php          # 登录
│   ├── sign_up.php          # 注册
│   ├── UserManager.php      # 用户管理类（MongoDB 操作）
│   ├── article.php          # 文章详情页
│   ├── article_admin.php    # 文章管理（CRUD）
│   ├── novel_admin.php      # 小说管理（含七猫+番茄书籍信息头）
│   ├── chapter_admin.php    # 章节管理
│   ├── user_admin.php       # 用户管理
│   └── vendor/              # blog 模块 Composer 依赖
│
├── mongo/                   # MongoDB 可视化管理工具
│   ├── index.php            # 数据库浏览器
│   ├── view.php             # 集合/文档查看器
│   └── server.php           # 服务器状态
│
├── mongodb/                 # MongoDB 集合 Schema 定义
│   ├── article_db/          # 文章/小说/章节/评论集合
│   ├── images_db/           # 图片集合
│   ├── rss_feed/            # RSS 订阅集合
│   ├── user_management/     # 用户集合
│   └── test/                # 测试数据集合
│
├── websocket/               # WebSocket 实时通信
│   ├── api.php              # WebSocket 服务端逻辑
│   └── index.php            # WebSocket 客户端页面
│
├── filetransfer/            # 局域网文件传输（PairDrop 风格）
├── vendor/                  # 项目级 Composer 依赖（SimplePie）
│
├── css/                     # 样式文件（Bootstrap, Font Awesome, 自定义）
├── js/                      # JavaScript 库
├── images/ / fonts/ / icons/# 静态资源
├── backups/ / restores/     # 备份与恢复目录
├── upload/ / temp/          # 上传与临时文件
│
├── index.php                # 首页（新闻资讯/企业文化/服务展示）
├── read.php                 # 小说阅读器
├── flashx.php               # 快传（文件分享）
├── filemanager.php          # 服务器文件管理器
├── works_admin.php          # 作品管理（TXT 文件编辑）
├── image_admin.php          # 图片管理
├── backup.php               # 全站备份（文件 + MongoDB）
├── migrate.php              # 数据导入/迁移
├── openapi.php              # 开放 API 调试台
├── resumable_upload.php     # 断点续传后端（Resumable.js 协议）
├── rss.php                  # RSS 订阅管理
├── products.php             # 作品展示页
├── markdown.php             # Markdown 编辑器
├── mdreader.php             # Markdown 阅读器
├── status.php               # 服务器监控仪表盘
├── monitor.php              # 服务器指标 API
├── mongo.php                # MongoDB 状态监控
├── system.php               # 系统信息
├── player.php / play.php    # 媒体播放器
├── download.php             # 下载管理
├── cloudclip.php            # 云剪贴板
├── joinus.php               # 招聘页面
├── aboutus.php              # 关于我们
└── sample.php               # 文章详情/模板页
```

## 核心功能

### 小说管理
- 小说 TXT 文件导入与章节自动分割
- 番茄小说（Tomato）平台 API 对接，支持章节列表同步
- 七猫小说（Qimao）平台 API 对接，支持 MD5 签名鉴权
- 章节按卷管理（`getVolumeByChapterID`）
- 小说元数据管理（书名、作者、分类、字数、创作状态、销售状态等）
- MongoDB 持久化存储 + 文件系统双存储

### 内容管理（CMS）
- 文章 CRUD（标题、摘要、正文、分类、发布状态）
- 支持 HTML 富文本内容，内置图片提取与展示
- 文章按位置（location）和主题（subject）分类
- 首页轮播、新闻资讯、企业文化、特色服务等模块
- TinyMCE 富文本编辑器集成

### 用户系统
- 注册/登录（Session 认证）
- 角色管理（admin / 普通用户）
- 头像上传
- 密码 bcrypt 哈希存储
- 页面级权限控制

### 文件管理
- 服务器端文件浏览器（`filemanager.php`）
- 目录打包下载（ZipArchive）
- 文件上传 / 重命名 / 删除
- 大文件断点续传（Resumable.js 协议，支持 10GB 级别文件）
- 上传目录写保护（防止误删作品文件）

### 备份与恢复
- 全站文件备份（递归打包为 ZIP）
- MongoDB 数据库导出（`mongodump` 集成）
- 备份文件轮转管理（保留最近 N 个备份）
- 一键恢复至指定目录
- 作品目录自动备份

### 监控运维
- 服务器实时指标（CPU、内存、磁盘、负载）— `status.php`
- MongoDB 运行状态监控（连接数、查询数、存储统计）— `mongo.php`
- 实时日志监控
- 系统信息展示（OS、Web Server 类型）
- Chart.js 可视化趋势图

### RSS 订阅
- RSS / Atom Feed 解析（SimplePie）
- 订阅源管理
- Feed 内容存入 MongoDB

### 其他功能
- Markdown 编辑器与阅读器
- WebSocket 实时通信
- 局域网文件快传（`flashx.php` / `filetransfer/`）
- 云剪贴板
- 媒体播放器
- PWA 支持（`manifest.json`）

## 数据库设计

### MongoDB 数据库

| 数据库 | 集合 | 说明 |
|--------|------|------|
| `article_db` | `articles` | 网站文章/页面内容 |
| `article_db` | `chapters` | 小说章节正文 |
| `article_db` | `tomato_books` | 番茄小说元数据 |
| `article_db` | `qimao_books` | 七猫小说元数据 |
| `article_db` | `comments` | 评论 |
| `article_db` | `messages` / `replys` | 留言与回复 |
| `article_db` | `clipboard` | 云剪贴板数据 |
| `images_db` | `images` | 图片资源 |
| `rss_feed` | `letters` / `articles` | RSS 订阅与文章 |
| `user_management` | `users` | 用户账户信息 |

## 快速开始

### 环境要求

- PHP >= 7.4（推荐 8.0+）
- MongoDB >= 4.0
- PHP 扩展：`mongodb`、`zip`、`mbstring`、`dom`、`gd`
- Composer
- Web Server：Apache / Nginx

### 安装步骤

```bash
# 1. 克隆项目
git clone <your-repo-url> batata
cd batata

# 2. 安装 PHP 依赖
composer install
cd blog && composer install && cd ..

# 3. 确保以下目录存在且 Web 用户可写
mkdir -p backups backups/books restores upload temp api/download
chmod -R 755 backups restores upload temp api/download
chown -R www-data:www-data backups restores upload temp api/download  # 按实际环境调整

# 4. 确保 MongoDB 运行在 localhost:27017
# 5. 配置 Web 服务器将网站根目录指向 batata/
# 6. 访问网站首页，通过 /blog/sign_up.php 注册管理员账号
```

### Nginx 配置要点

- 文件上传大小限制需调大（建议 `client_max_body_size 10G`），以支持断点续传
- 确保 PHP `upload_max_filesize` 和 `post_max_size` 在 `php.ini` 中满足上传需求

## 配置说明

核心配置位于 `api/header.php`：

| 配置项 | 说明 |
|--------|------|
| `$webName` | 系统名称，当前为 `Batata` |
| `$webTitle` | 网站标题（骏九文化） |
| `$webDescription` | 网站描述 |
| `date_default_timezone_set` | 时区（Asia/Shanghai） |
| MongoDB 连接 | 分散在各文件中，默认 `mongodb://localhost:27017` |

## API 接口

系统对外提供 RESTful 风格的 API：

- `GET /api/list.php` — 小说列表
- `GET /api/bookinfo.php?book_id=xxx` — 小说详情
- `GET /api/chapter.php?book_id=xxx&chapter_id=xxx` — 章节内容
- `GET /api/tomato_chapter_list.php?book_id=xxx` — 番茄小说章节列表
- `GET /api/tomato_list.php` — 番茄小说列表
- `GET /api/feed.php` — RSS Feed
- `GET /monitor.php?action=metrics` — 服务器实时指标（JSON）
- `POST /resumable_upload.php` — 断点续传

## 第三方平台对接

### 七猫小说 (Qimao)

- MD5 签名算法实现（`qimao_createSign`）
- 参数按 key 排序后拼接，末尾追加 secretKey，再 MD5

### 番茄小说 (Tomato)

- MD5 签名算法实现（`tomato_createSign`）
- 参数直接拼接 secretKey，再 MD5

## 安全注意事项

1. **MongoDB 认证**：生产环境请为 MongoDB 配置用户名/密码认证
2. **Session 安全**：生产环境建议使用 Redis 等持久化 Session 存储
3. **文件上传**：上传目录应配置禁止脚本执行
4. **管理员注册**：建议生产环境上线后关闭公开注册或限制注册审批
5. **HTTPS**：生产环境务必启用 HTTPS

## 许可证

本项目为骏九文化内部管理系统，保留所有权利。

---

Built with PHP + MongoDB · Batata
