Files
PartsInquiry/doc/后端使用文档.md
2025-09-27 22:57:59 +08:00

140 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

https://icons8.com/
### 后端使用文档(简版)
本文件用于指导在新电脑上启动 Spring Boot 后端,并直接连接远程 MySQL 数据库。
### 环境要求
- **操作系统**: Windows 10/11PowerShell
- **JDK**: 17 及以上(`java -version` 应显示 17+
- **网络**: 可访问 `mysql.tonaspace.com:3306`
- **构建工具**: 无需单独安装 Maven项目已提供 `mvnw.cmd`
### 快速启动(默认连接远程库)
1) 打开 PowerShell进入项目后端目录
```powershell
cd backend
```
2) 启动后端(使用默认远程数据库配置):
```powershell
.\mvnw.cmd spring-boot:run -DskipTests
```
> 说明:`application.properties` 已内置远程库默认值(`DB_URL/DB_USER/DB_PASSWORD`)。除非你的终端已设置了同名环境变量并想覆盖,否则无需再配置。
### 启动 Python 条码识别服务(可选)
本项目提供 Python 条码识别服务FastAPI目录 `backend/txm`),可与 Java 同时启动或独立启动。
- 独立启动(推荐先验证):
```powershell
cd .\backend\txm; python -m pip install -r requirements.txt; python -m app.server.main
```
- 随 Java 一并启动(通过环境变量启用;默认关闭):
```powershell
$env:PY_BARCODE_ENABLED="true"; $env:PY_BARCODE_WORKDIR=".\txm"; $env:PY_BARCODE_PYTHON="python"; .\mvnw.cmd spring-boot:run -DskipTests
```
可覆盖的相关配置键(同名环境变量可覆盖,括号为默认值):
```
python.barcode.enabled=${PY_BARCODE_ENABLED:false}
python.barcode.working-dir=${PY_BARCODE_WORKDIR:./txm}
python.barcode.python=${PY_BARCODE_PYTHON:python}
python.barcode.app-module=${PY_BARCODE_APP_MODULE:app.server.main}
python.barcode.use-module-main=${PY_BARCODE_USE_MODULE:true}
python.barcode.host=${PY_BARCODE_HOST:127.0.0.1}
python.barcode.port=${PY_BARCODE_PORT:8000}
python.barcode.health-path=${PY_BARCODE_HEALTH:/openapi.json}
python.barcode.startup-timeout-sec=${PY_BARCODE_TIMEOUT:20}
python.barcode.log-file=${PY_BARCODE_LOG:}
```
Java 侧代理接口:`POST /api/barcode/scan`(表单字段名:`file`)。
返回:
```
{
success: true,
barcodeType: 'EAN13' | 'CODE128' | 'QRCODE' | ...,
barcode: '字符串',
others: [{ type, code }, ...] // 可能为空
}
```
说明:优先 EAN-13否则返回任意码制的第一个结果并同时返回 others。
### 可选:显式指定远程数据库(避免被旧环境变量覆盖)
如需显式声明一次连接信息(建议在怀疑本机已有旧变量时使用):
```powershell
$env:DB_URL="jdbc:mysql://mysql.tonaspace.com:3306/partsinquiry?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8mb4&connectionCollation=utf8mb4_0900_ai_ci"; $env:DB_USER="root"; $env:DB_PASSWORD="TONA1234"
.\mvnw.cmd spring-boot:run -DskipTests
```
### 启动验证
- 浏览器访问:`http://localhost:8080/api/dashboard/overview`
- 返回概览数据即表示服务与数据库连接正常
### 按用户ID登录用户端快速登录通道
> 仅在调试或特定场景启用。默认关闭。
1) 启用开关(临时):
```powershell
$env:AUTH_ID_LOGIN_ENABLED="true"; .\mvnw.cmd spring-boot:run -DskipTests
```
2) 请求示例:
```http
POST http://localhost:8080/api/auth/login-by-id
Content-Type: application/json
{ "userId": 2 }
```
3) 成功返回:`{ token, expiresIn, user:{ userId, shopId, phone? } }`
4) 之后在调用业务接口时携带:`Authorization: Bearer <token>`
### 常见问题
- **端口被占用**:更换启动端口
```powershell
.\mvnw.cmd spring-boot:run -DskipTests -Dserver.port=8081
```
- **远程库连不通**:检查网络是否放行 `mysql.tonaspace.com:3306`;如在公司网络,确认代理/防火墙策略已放通。
- **Java 未安装或版本不符**:安装 JDK 17并在新开终端内确认 `java -version`
### 可选设置
- 占位图(非必需):若需启用 `/api/attachments/placeholder`
```powershell
$env:ATTACHMENTS_PLACEHOLDER_IMAGE="C:\Users\Public\Pictures\placeholder.png"
```
- 前端联调 CORS按需
```powershell
$env:CORS_ALLOWED_ORIGINS="http://localhost:5173"
```
### 可选:打包为可执行 JAR
```powershell
cd backend; .\mvnw.cmd clean package -DskipTests; java -jar .\target\demo-0.0.1-SNAPSHOT.jar
```
### SMTP 邮件配置Windows PowerShell
请在启动后端前设置以下环境变量QQ 邮箱):
```powershell
$env:MAIL_HOST="smtp.qq.com"; $env:MAIL_PORT="465"; $env:MAIL_PROTOCOL="smtps"; $env:MAIL_USERNAME="sdssds@163.com"; $env:MAIL_PASSWORD="NQLihrab8vGiAjiE"; $env:MAIL_FROM="sdssds@163.com"; $env:MAIL_SUBJECT_PREFIX="[配件查询]"
```
说明:
- MAIL_USERNAME/MAIL_FROM发件邮箱地址
- MAIL_PASSWORDSMTP 授权码
- 采用 465 + SMTPS + SSL若使用 587请改为 `MAIL_PORT=587` 并设置 `spring.mail.properties.mail.smtp.starttls.enable=true`
### 邮箱验证码接口
- POST `/api/auth/email/send`:请求体 `{ email, scene? }`,成功返回 `{ ok, cooldownSec }`
- POST `/api/auth/email/login`:请求体 `{ email, code }`,成功返回 `{ token, expiresIn, user }`
返回的 JWT 通过 `Authorization: Bearer <token>` 使用,解析后包含 `userId/shopId/email/provider` 等声明。
以上即为在新电脑上启动后端并连接远程数据库的最小步骤。