# 公开订单提交功能 - 快速部署指南

## 一、功能说明

本功能提供一个公开的订单提交页面，特点如下：

✅ **无需登录** - 直接访问即可使用  
✅ **接口限流** - 每IP每分钟最多3次请求  
✅ **详细日志** - 记录所有请求的完整信息  
✅ **安全保护** - 只允许提交订单，拒绝其他指令  
✅ **简化界面** - 去掉历史记录，只保留核心功能  

## 二、新增文件清单

### 前端文件
```
d:\code\ruoyi-vue\src\views\public\order-submit\index.vue  # 公开订单提交页面
d:\code\ruoyi-vue\src\api\public\order.js                 # API接口文件
```

### 后端文件
```
d:\code\RuoYi-Vue-master\ruoyi-java\ruoyi-admin\src\main\java\com\ruoyi\web\controller\public_\PublicOrderController.java  # 公开控制器
```

### 文档文件
```
d:\code\RuoYi-Vue-master\ruoyi-java\doc\公开订单提交功能说明.md
d:\code\RuoYi-Vue-master\ruoyi-java\doc\公开订单提交-快速部署指南.md
```

## 三、修改文件清单

### 前端修改
```
d:\code\ruoyi-vue\src\router\index.js
```
**修改内容**：添加公开订单提交页面路由（无需登录）

### 后端修改
```
d:\code\RuoYi-Vue-master\ruoyi-java\ruoyi-framework\src\main\java\com\ruoyi\framework\config\SecurityConfig.java
```
**修改内容**：添加 `/public/**` 路径到公开访问白名单

## 四、部署步骤

### 步骤1：后端部署

#### 1.1 编译项目
```bash
cd d:\code\RuoYi-Vue-master\ruoyi-java
mvn clean package -DskipTests
```

#### 1.2 重启后端服务
```bash
# Windows
ry.bat

# Linux
./ry.sh
```

#### 1.3 验证后端
检查日志，确保启动成功，无报错。

### 步骤2：前端部署

#### 2.1 安装依赖（如果需要）
```bash
cd d:\code\ruoyi-vue
npm install
```

#### 2.2 开发环境运行
```bash
npm run dev
```

#### 2.3 生产环境构建
```bash
npm run build:prod
```

#### 2.4 部署到Web服务器
将 `dist` 目录的内容部署到Nginx或其他Web服务器。

### 步骤3：验证部署

#### 3.1 访问页面
打开浏览器，访问：
```
http://localhost/public/order-submit
```

#### 3.2 提交测试订单

在页面中输入以下测试数据：
```
单：
2025-01-21 001
备注：测试订单
分销标记：H-TF
型号：ZQD180F-EB200
链接：https://item.jd.com/123456.html
下单付款：1650
后返金额：50
地址：张三13800138000上海市浦东新区张江高科技园区
物流链接：https://test.com
订单号：1234567890
下单人：张三
```

#### 3.3 查看响应
页面应显示提交成功的响应信息。

#### 3.4 检查日志
查看后端日志文件，应看到类似以下内容：
```
======================================
公开订单提交 - 开始
客户端IP: 127.0.0.1
User-Agent: Mozilla/5.0...
请求时间: 2025-01-21 10:00:00
...
公开订单提交 - 结束（成功）
======================================
```

#### 3.5 测试限流
快速提交4次订单，第4次应该被拒绝，提示"访问过于频繁"。

## 五、访问地址

### 开发环境
```
前端页面：http://localhost:80/public/order-submit
后端接口：http://localhost:8080/public/order/submit
```

### 生产环境
```
前端页面：http://your-domain.com/public/order-submit
后端接口：http://your-domain.com/api/public/order/submit
```

## 六、配置说明

### 限流配置

如需修改限流策略，编辑 `PublicOrderController.java`：

```java
@RateLimiter(
    key = CacheConstants.RATE_LIMIT_KEY, 
    time = 60,    // 时间窗口（秒），可修改
    count = 3,    // 允许次数，可修改
    limitType = LimitType.IP
)
```

修改后重新编译部署：
```bash
mvn clean package -DskipTests
```

### 日志配置

如需调整日志级别，编辑 `logback.xml`：

```xml
<!-- 设置公开订单控制器的日志级别 -->
<logger name="com.ruoyi.web.controller.public_" level="INFO"/>
```

## 七、安全建议

### 1. 启用HTTPS
生产环境务必启用HTTPS，保护数据传输安全。

### 2. 配置防火墙
只开放必要的端口（80/443）。

### 3. 监控异常
设置告警规则，监控以下情况：
- 错误率异常升高
- 限流触发频繁
- 可疑IP地址

### 4. 定期备份
定期备份订单数据和日志文件。

### 5. IP黑名单
如发现恶意IP，可在 `SecurityConfig.java` 中添加黑名单规则。

## 八、常见问题

### Q1: 页面404怎么办？

**检查清单**：
- [ ] 前端路由配置是否正确
- [ ] 后端安全配置是否添加 `/public/**`
- [ ] 前端是否正确构建和部署
- [ ] Web服务器配置是否正确

### Q2: 接口403/401怎么办？

**解决方法**：
1. 检查 `SecurityConfig.java` 是否添加了 `.antMatchers("/public/**").permitAll()`
2. 重新编译部署后端
3. 清除浏览器缓存重试

### Q3: 限流不生效怎么办？

**检查清单**：
- [ ] Redis服务是否正常运行
- [ ] 后端是否正确连接Redis
- [ ] `@RateLimiter` 注解是否正确配置

### Q4: 日志没有记录怎么办？

**解决方法**：
1. 检查 `logback.xml` 日志级别配置
2. 确认日志文件路径是否正确
3. 检查文件写入权限

### Q5: 提交后无响应怎么办？

**排查步骤**：
1. 打开浏览器开发者工具，查看网络请求
2. 检查后端日志是否有报错
3. 检查订单格式是否正确
4. 确认所有必填字段是否填写

## 九、分享链接

部署成功后，可以将以下链接分享给需要提交订单的用户：

```
http://your-domain.com/public/order-submit
```

建议同时提供：
1. 订单格式说明
2. 必填字段列表
3. 示例订单数据
4. 联系方式（遇到问题时）

## 十、监控仪表板

建议设置监控指标：

### 关键指标
- **请求总数**：每日/每小时提交次数
- **成功率**：提交成功的比例
- **平均响应时间**：接口响应速度
- **限流触发次数**：被限流的请求数量
- **Top IP**：请求最多的IP地址

### 告警规则
- 错误率 > 5% → 发送告警
- 平均响应时间 > 3秒 → 发送告警
- 单IP限流触发 > 10次/小时 → 发送告警

## 十一、后续优化建议

1. **图形验证码**：添加验证码防止机器人
2. **IP白名单**：为信任的IP提供更高的限流额度
3. **订单预览**：提交前预览订单信息
4. **批量提交**：支持一次提交多个订单
5. **提交历史**：为用户提供本地提交历史记录

---

**部署完成！** 🎉

如有问题，请查看详细文档：`公开订单提交功能说明.md`

