初始化基金监控系统项目

This commit is contained in:
LL
2025-12-12 11:54:44 +08:00
commit 354133d6e4
104 changed files with 26244 additions and 0 deletions

353
项目说明文档.md Normal file
View File

@@ -0,0 +1,353 @@
# 基金监控系统项目说明文档
## 1. 项目概述
基金监控系统是一个实时监控基金净值、展示投资收益并支持定时邮件推送的Web应用。系统提供直观的基金数据展示、历史净值图表、基金配置管理和邮件提醒功能帮助用户及时了解基金投资情况。
### 核心功能
- 实时基金净值监控与收益计算
- 基金分组管理(多渠道)
- 历史净值趋势图表展示
- 定时基金状态邮件推送工作日14:30
- 访问统计与操作日志
- 基金推荐管理
- 响应式设计,支持深色主题
## 2. 技术栈
| 技术 | 版本/说明 | 用途 |
|------------|-------------------------|-----------------------------|
| PHP | 5.6+ | 服务器端脚本语言处理业务逻辑与API请求 |
| JavaScript | ES6+ | 前端交互与数据处理 |
| HTML5 | - | 页面结构与内容展示 |
| CSS3 | - | 页面样式与响应式设计 |
| Chart.js | CDN引入 | 基金净值趋势图表绘制 |
| Font Awesome | CDN引入 | 图标资源 |
| JSON | - | 数据存储与API响应格式 |
| XAMPP | 推荐环境 | PHP开发与运行环境 |
## 3. 项目结构
```
├── index.php # 主页面 - 基金监控面板
├── api.php # 核心API - 基金数据获取与邮件发送
├── admin.php # 管理后台 - 基金配置与邮件设置
├── login.php # 登录页面 - 管理后台登录验证
├── recommend_fund.php # 基金推荐页面 - 用户提交基金推荐
├── admin_api.php # 管理API - 后台数据接口
├── script.js # 主页面JavaScript - 数据加载与交互
├── admin.js # 管理后台JavaScript - 表单处理与交互
├── styles.css # 主页面样式
├── admin.css # 管理后台样式
└── data/ # 数据存储目录
├── visits.json # 访问统计数据
├── stats.json # 统计信息
├── fund_config.json # 基金配置
├── fund_history.json # 基金历史数据
├── operation_log.json # 操作日志
├── fund_daily_data.json # 基金每日数据
├── email_config.json # 邮件配置
├── email_status.json # 邮件发送状态
└── cache/ # 基金数据缓存目录
```
## 4. 主要功能模块
### 4.1 基金监控面板index.php
- **实时基金数据展示**:显示当前净值、估算净值、涨跌幅等信息
- **多渠道分组**:支持按渠道管理不同的基金组合
- **收益计算**:自动计算投资收益与收益率
- **自动刷新**默认每10秒自动刷新数据
- **统计面板**:显示访问统计与最近访问记录
- **主题切换**:支持浅色/深色主题切换
### 4.2 管理后台admin.php
- **基金配置**:添加、编辑、删除基金配置
- **推荐基金管理**:审核和管理用户推荐的基金
- **操作日志**:查看系统操作历史记录
- **净值图表**:查看基金历史净值趋势
- **邮箱设置**配置SMTP服务器和邮件接收人
### 4.3 基金推荐recommend_fund.php
- **用户基金推荐**:允许用户提交基金推荐
- **IP限制**每IP限制推荐数量
- **数据验证**:确保基金代码有效性
### 4.4 邮件推送功能
- **定时发送**工作日14:30自动发送基金状态邮件
- **自定义配置**支持配置SMTP服务器、发件人、收件人
- **邮件内容**:包含基金净值、涨跌幅、收益情况
## 5. API接口说明
### 5.1 核心APIapi.php
| 接口名称 | 请求方法 | 参数 | 返回值 | 描述 |
|--------|--------|-----|-------|------|
| fund_data | GET | - | JSON | 获取实时基金数据与收益计算 |
| get_stats | GET | - | JSON | 获取访问统计数据 |
| get_fund_chart | GET | fund_code | JSON | 获取基金历史净值数据 |
| send_fund_email | GET | - | JSON | 手动触发基金邮件发送 |
### 5.2 管理APIadmin_api.php
| 接口名称 | 请求方法 | 参数 | 返回值 | 描述 |
|--------|--------|-----|-------|------|
| get_funds | GET | - | JSON | 获取基金配置数据 |
| save_funds | POST | funds | JSON | 保存基金配置 |
| get_recommended_funds | GET | - | JSON | 获取推荐基金列表 |
| approve_recommended_fund | GET | fund_code | JSON | 批准推荐基金 |
| delete_recommended_fund | GET | fund_code | JSON | 删除推荐基金 |
| get_email_config | GET | - | JSON | 获取邮箱配置 |
| save_email_config | POST | smtp配置 | JSON | 保存邮箱配置 |
| get_operation_log | GET | - | JSON | 获取操作日志 |
## 6. 安装和配置
### 6.1 环境要求
- PHP 5.6+推荐7.0+
- Web服务器Apache/Nginx
- 支持JSON扩展的PHP环境
- 支持fsockopen函数用于SMTP邮件发送
### 6.2 安装步骤
1. 将项目文件部署到Web服务器根目录
2. 确保`data/`目录可写
3. 确保PHP环境已启用必要扩展json, openssl等
4. 访问`index.php`即可使用主页面
5. 访问`admin.php`进入管理后台默认密码qiyu123123
### 6.3 配置文件
#### 基金配置data/fund_config.json
```json
[
{
"channel": "0",
"fund_code": "003766",
"investment": 1000
},
{
"channel": "1",
"fund_code": "004206",
"investment": 1500
}
]
```
#### 邮箱配置data/email_config.json
```json
{
"smtp_server": "smtp.qq.com",
"smtp_port": 465,
"smtp_secure": "ssl",
"username": "your_email@qq.com",
"password": "your_password",
"from_email": "your_email@qq.com",
"from_name": "基金监控系统",
"to_emails": ["recipient1@example.com", "recipient2@example.com"]
}
```
## 7. 使用说明
### 7.1 主页面使用
1. 访问`index.php`查看基金实时数据
2. 点击"刷新"按钮手动刷新数据
3. 点击"统计"按钮查看访问统计
4. 点击"主题"按钮切换深色/浅色主题
5. 点击基金卡片可查看详细信息
### 7.2 管理后台使用
1. 访问`admin.php`并使用默认密码登录qiyu123123
2. **基金配置**
- 点击"添加基金"添加新的基金配置
- 编辑现有基金的代码和投资金额
- 删除不需要的基金配置
3. **推荐基金管理**
- 审核用户提交的基金推荐
- 删除不适合的推荐基金
4. **邮箱设置**
- 配置SMTP服务器信息
- 添加邮件接收人
- 保存配置并测试发送
### 7.3 定时邮件推送
- 系统默认在工作日14:30自动发送基金状态邮件
- 可通过`test_fund_email.php`手动测试邮件发送
- 可在`api.php`中修改发送时间配置
## 8. 代码结构和核心类
### 8.1 核心类FundMonitorAPI
`FundMonitorAPI`类位于`api.php`中,是系统的核心处理类,负责基金数据获取、邮件发送、数据存储等功能。
**主要方法:**
- `__construct()`:类初始化,创建必要的目录和配置文件
- `loadEmailConfig()`:加载邮箱配置
- `sendEmail()`使用Socket直接连接SMTP服务器发送邮件
- `shouldSendEmail()`:判断是否应该发送邮件(时间条件检查)
- `sendFundStatusEmail()`:发送基金状态邮件
- `getFundData()`:获取基金实时数据
- `getFundChartData()`:获取基金历史净值数据
- `updateStats()`:更新访问统计
### 8.2 数据处理流程
1. 前端通过AJAX请求`api.php?action=fund_data`获取基金数据
2. API类从外部数据源获取基金实时净值
3. 计算基金收益与涨跌幅
4. 缓存数据并返回JSON响应
5. 前端渲染基金卡片和统计信息
6. 定时任务触发邮件发送功能
## 9. 扩展和定制
### 9.1 添加新的基金数据源
1.`api.php`中修改`getFundData()`方法
2. 添加新的数据源处理逻辑
3. 确保返回数据格式与现有格式一致
### 9.2 修改邮件发送时间
`api.php`中修改以下配置:
```php
private $emailSchedule = [
'days' => [1, 2, 3, 4, 5], // 1-5代表周一到周五
'hour' => 14, // 小时
'minute' => 30 // 分钟
];
```
### 9.3 自定义基金分组(渠道)
`script.js``admin.js`中修改渠道名称和图标配置:
```javascript
function getChannelName(channel) {
const channelNames = {
'0': '渠道一',
'1': '渠道二',
'2': '渠道三'
// 添加新的渠道名称
};
return channelNames[channel] || `渠道${channel}`;
}
```
## 10. 故障排除
### 10.1 常见问题
**问题1基金数据无法加载**
- 检查网络连接是否正常
- 确认PHP环境支持curl或file_get_contents
- 查看浏览器控制台的错误信息
- 检查`api.php`中的基金数据源是否可访问
**问题2邮件发送失败**
- 检查SMTP服务器配置是否正确
- 确认邮箱密码和授权码是否有效注意QQ邮箱需使用授权码而非登录密码
- 检查服务器是否允许发送邮件(端口是否开放)
- 查看邮件发送日志(`data/email_status.json`
- 确认收件人邮箱格式是否正确
**问题3管理后台登录失败**
- 确认密码是否正确默认qiyu123123
- 检查session功能是否正常
- 清除浏览器缓存并重新登录
- 检查`login.php`中的密码验证逻辑
**问题4定时邮件不发送**
- 确认服务器时间和时区设置是否正确
- 检查`test_fund_email.php`是否能正常发送邮件
- 查看`data/email_status.json`文件的发送状态
- 检查`api.php`中的时间配置是否正确
- 确认定时任务是否正常运行宝塔面板或服务器cron
### 10.2 日志文件
- **操作日志**`data/operation_log.json` - 记录系统操作历史
- **邮件发送状态**`data/email_status.json` - 记录邮件发送情况
- **访问统计**`data/stats.json` - 记录网站访问数据
## 11. 注意事项
### 11.1 环境配置注意事项
- **PHP版本**建议使用PHP 7.0+版本,确保兼容性和性能
- **服务器权限**:确保`data/`目录具有可写权限755或777
- **时区设置**:在`php.ini`中设置正确的时区(如:`date.timezone = Asia/Shanghai`
- **防火墙设置**确保服务器允许访问外部基金数据源和SMTP服务器
### 11.2 宝塔面板定时任务注意事项
- **执行周期**:设置为每天执行,系统会在内部判断是否为工作日
- **执行时间**建议设置为14:29执行系统会在14:30发送邮件
- **命令格式**
- URL方式`curl -s http://yourdomain.com/test_fund_email.php`
- 命令行方式:`php /www/wwwroot/yourdomain.com/test_fund_email.php`
- **日志记录**:开启日志记录功能,便于排查问题
- **执行用户**:确保执行用户具有文件读写权限
### 11.3 数据安全注意事项
- **定期备份**:定期备份`data/`目录下的所有配置文件
- **密码安全**:登录管理后台后立即修改默认密码
- **访问限制**通过IP限制或宝塔面板的访问控制功能限制管理后台访问
- **数据验证**:所有用户输入都应进行验证,防止恶意输入
### 11.4 性能优化注意事项
- **缓存机制**:系统已实现基金数据缓存,减少重复请求
- **自动刷新**默认每10秒自动刷新可根据需要调整`script.js`中的`AUTO_REFRESH_INTERVAL`参数
- **并发控制**:系统已实现请求防抖,避免并发请求导致的性能问题
- **资源加载**使用CDN加载第三方资源Chart.js、Font Awesome提高页面加载速度
## 11. 安全建议
1. **修改默认密码**:登录管理后台后立即修改默认密码
2. **限制管理后台访问**可通过IP限制或.htaccess限制admin.php的访问
3. **定期备份数据**:定期备份`data/`目录下的所有配置文件
4. **更新PHP版本**使用最新稳定版PHP以获得更好的安全性
5. **验证用户输入**所有用户输入都应进行验证防止XSS和SQL注入
## 12. 开发说明
### 12.1 调试模式
在开发过程中,可在`api.php`中添加调试日志:
```php
function logDebug($message) {
file_put_contents('debug.log', date('Y-m-d H:i:s') . ' - ' . $message . "\n", FILE_APPEND);
}
```
### 12.2 性能优化
- 基金数据缓存:使用`data/cache/`目录缓存基金数据,减少重复请求
- 定时器防抖:避免并发请求导致的性能问题
- 延迟加载:图表和统计数据可采用延迟加载策略
## 13. 版本历史
| 版本 | 日期 | 更新内容 |
|-----|-----|--------|
| 1.0 | 2025-01-15 | 初始版本发布 |
| 1.1 | 2025-02-20 | 添加邮件推送功能 |
| 1.2 | 2025-03-10 | 优化基金数据缓存机制 |
| 1.3 | 2025-04-05 | 添加深色主题支持 |
## 14. 联系方式
如有问题或建议,欢迎联系开发者。
---
**文档更新日期**2025-04-10
**文档版本**1.0
---
> 本项目仅用于学习和个人使用,请勿用于商业用途。基金投资有风险,入市需谨慎。