## 功能 - 邮箱找回密码:新增 password_resets 表 + POST /api/auth/forgot-password (按接收邮箱反查用户 → 生成一次性 30 分钟令牌 → 复用 SMTP 发重置邮件, 防枚举统一提示、复用登录限流器防刷)+ POST /api/auth/reset (校验令牌有效性 → bcrypt 更新密码 → 作废令牌 → 强制该用户全部会话下线); H5 新增 /forgot、/reset 页面,登录页加"忘记密码"入口 - SMTP 全局配置补全:新增发件邮箱 smtp_user / 授权码 smtp_pass 字段 (H5 + 小程序设置页同步展示与保存),GET 脱敏回显, 修复"脱敏值含 * 被 POST 写回覆盖真实配置"的 bug - 新增 cmd/sendmail 真实发送工具(配置走环境变量,敏感信息不落库, 已用 163 SMTP 465 隐式 SSL 实测发送成功) ## 日志体系 - 死配置 OIL_MONITOR_LOG_DIR 替换为 OIL_MONITOR_LOG_LEVEL (debug/info/warn/error,LevelVar 动态切换,上线默认 info 收敛日志) - 自定义 requestLogger 请求日志中间件(Debug 级:method/path/status/耗时/IP) - 外部交互日志统一:爬虫抓取 / SMTP / Webhook / 高德 regeo / 微信 code2session, 成功 Debug、失败 Error、均带 dur_ms、URL 去 query 脱敏防 key/token 泄露 - 定时任务统一 runTask 包装:开始 Debug、完成+时长 Info、失败/panic Error (panic 被 recover,不连累调度器) ## 测试 - cron/scheduler_test.go:runTask 成功/失败/panic 三路径单测 - push/sender_test.go:本地假 SMTP 服务器完整发送会话链路 + 服务器拒绝失败路径 - db_test.go:表数量断言 11 → 12(新增 password_resets) ## 部署配置与文档 - Dockerfile / docker-compose.yml / .env.example / README:日志配置同步 (删 /app/logs 目录与挂载,OIL_MONITOR_LOG_LEVEL) - .gitignore:忽略 internal/pkg 依赖缓存(349M,防误提交) - docs/10/21/22/23/24:同步 A18/A19 接口、password_resets 表、任务执行日志、SMTP 字段 Co-Authored-By: Claude <noreply@anthropic.com>
76 lines
3.3 KiB
Markdown
76 lines
3.3 KiB
Markdown
# ⛽ 汽油价格监控(Oil Price Monitor)
|
||
|
||
监控国内成品油调价(发改委 10 工作日机制),预测下次调价方向/幅度,按省展示 92/95/98/0# 最高零售价,算"一箱油多花/省多少",多渠道推送加油建议;支持 **微信小程序** 与 **加油记账/真实油耗**。
|
||
|
||
## 功能
|
||
|
||
- **一期 · 监控预测提醒**
|
||
- 国际原油(Brent/WTI)每日采集 + 调价预测(方向/幅度/置信度)
|
||
- 发改委调价公告自动抓取(含调控情形的"应调/实调"差异)
|
||
- 31 省零售价、下次调价倒计时、ECharts 油价趋势
|
||
- 浏览器定位 → 省份选择(最近 5 省 LRU)
|
||
- 多账户(首用户=管理员)、车辆管理、调价成本测算、飞书/企微/钉钉/SMTP 推送
|
||
- **二期 · 微信小程序**:原生小程序,微信一键登录,6+2 页面全功能
|
||
- **三期 · 记账功能**:独立油耗计算器(无需登录)、加油记录、真实油耗(L/100km、元/km)、漏记检测与级联重算、油耗趋势折线图
|
||
|
||
## 技术栈
|
||
|
||
Go 1.22+ · chi · modernc.org/sqlite(纯 Go 无 CGO)· robfig/cron · goquery · Tailwind/AlpineJS/ECharts(H5)· 原生微信小程序 · Docker
|
||
|
||
## 快速开始
|
||
|
||
### 本地运行
|
||
|
||
```bash
|
||
go run ./cmd/server
|
||
# 打开 http://localhost:8080 ,首次注册的账号自动成为管理员
|
||
```
|
||
|
||
### Docker 部署
|
||
|
||
```bash
|
||
docker compose up -d --build
|
||
# 数据持久化在 ./data(SQLite),日志输出到 stdout(docker logs 查看)
|
||
```
|
||
|
||
## 配置(环境变量 OIL_MONITOR_*)
|
||
|
||
| 变量 | 默认 | 说明 |
|
||
|---|---|---|
|
||
| `OIL_MONITOR_HOST` | `0.0.0.0` | 监听地址 |
|
||
| `OIL_MONITOR_PORT` | `8080` | 监听端口 |
|
||
| `OIL_MONITOR_DB_PATH` | `data/oilmonitor.db` | SQLite 路径 |
|
||
| `OIL_MONITOR_LOG_LEVEL` | `info` | 日志等级:debug/info/warn/error |
|
||
| `OIL_MONITOR_TIMEZONE` | `Asia/Shanghai` | 业务时区 |
|
||
|
||
复制 `.env.example` 可快速配置。
|
||
|
||
## 部署后管理员设置(浏览器访问"设置"页)
|
||
|
||
| 配置 | 用途 |
|
||
|---|---|
|
||
| 高德 Key | 浏览器/小程序定位逆编码(个人开发者免费额度够用) |
|
||
| 微信 AppID / AppSecret | 小程序一键登录(二选一登录方式) |
|
||
| SMTP 服务器 | 邮件推送(可选) |
|
||
| 推送 Webhook | 飞书/企微/钉钉 群机器人(可选,按用户) |
|
||
|
||
## 上线清单
|
||
|
||
1. **HTTPS**:浏览器定位需 HTTPS(否则自动降级为手动选省);Nginx/Caddy 反代 + Let's Encrypt 证书
|
||
2. **微信小程序**:注册小程序 → 填 AppID 到 `miniprogram/project.config.json` → 后端设置页配置 AppID/Secret → 微信后台配 request 合法域名(HTTPS)→ 开发者工具上传 → 类目/隐私协议 → 审核发布
|
||
3. **数据源**:发改委 / 新浪财经 / 汽油价格网(移动版)自动采集;页面改版时解析失败会写日志告警
|
||
|
||
## 目录
|
||
|
||
```
|
||
cmd/server 后端入口
|
||
internal/ api/auth/config/crawler/cron/db/model/push/service/web
|
||
miniprogram/ 微信小程序(8 页)
|
||
docs/ 设计文档(10/20-24 一期 · 30-34 小程序 · 40-45 记账)
|
||
Dockerfile 多阶段构建(镜像 ~20MB)
|
||
docker-compose.yml 一键部署
|
||
```
|
||
|
||
## 文档
|
||
|
||
`docs/` 下 17 份设计文档:概要 / 详细设计 / 功能大纲 / API / 后端任务 / 附录(三阶段)。 |