erp-java/services/order-service/README_ORDER_SETTLEMENT.md

181 lines
4.8 KiB
Markdown
Raw Permalink 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.

# 订单结算模块 (Order Settlement Module)
## 模块概述
订单结算模块是ERP系统的核心财务模块之一负责处理订单的结算计算、结算周期管理、结算报表生成等功能。
## 功能特性
### 1. 订单结算管理
- 订单结算记录创建与管理
- 根据订单ID/结算单号查询
- 分页查询与多条件筛选
- 批量结算状态更新
### 2. 结算计算
- 自动计算平台佣金
- 支持自定义佣金率
- 批量计算结算金额
- 结算金额确认/冻结
### 3. 结算周期管理
- 支持日结/周结/月结
- 周期状态管理(开放/关闭/已结算)
- 周期内订单自动结算
### 4. 结算报表
- 店铺维度报表
- 平台维度报表
- 周期维度报表
- 自定义日期范围统计
### 5. 统计功能
- 订单金额统计
- 佣金统计
- 待结算/已结算/冻结金额统计
- 多维度数据汇总
## 技术架构
### 技术栈
- **框架**: Spring Boot 3.x + MyBatis Plus
- **数据库**: MySQL 8.x
- **服务发现**: Nacos
- **分布式事务**: Seata
- **消息队列**: RocketMQ
- **缓存**: Redis
- **监控**: Prometheus + SkyWalking
### 数据库表
| 表名 | 说明 |
|------|------|
| order_settlement | 订单结算表 |
| settlement_period | 结算周期表 |
| settlement_report | 结算报表表 |
## API接口
### 结算记录管理
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | /api/settlement/{id} | 获取结算记录详情 |
| GET | /api/settlement/no/{settlementNo} | 根据单号查询 |
| GET | /api/settlement/order/{orderId} | 根据订单ID查询 |
| GET | /api/settlement/list | 分页查询结算记录 |
| POST | /api/settlement | 创建结算记录 |
| PUT | /api/settlement/{id} | 更新结算记录 |
| PUT | /api/settlement/batch/status | 批量更新状态 |
### 结算计算
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | /api/settlement/calculate/{orderId} | 计算结算金额 |
| POST | /api/settlement/calculate/batch | 批量计算结算 |
| POST | /api/settlement/{id}/confirm | 确认结算 |
| POST | /api/settlement/confirm/batch | 批量确认结算 |
| POST | /api/settlement/{id}/freeze | 冻结结算 |
### 结算周期管理
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | /api/settlement/period | 创建结算周期 |
| GET | /api/settlement/period/list | 查询结算周期 |
| POST | /api/settlement/period/{id}/close | 关闭结算周期 |
| POST | /api/settlement/period/{id}/settle | 结算周期内订单 |
### 统计报表
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | /api/settlement/statistics | 获取结算统计 |
| POST | /api/settlement/report/generate | 生成结算报表 |
| GET | /api/settlement/report/list | 查询结算报表 |
| POST | /api/settlement/report/{id}/confirm | 确认结算报表 |
| GET | /api/settlement/shop/{shopId}/pending-amount | 店铺待结算金额 |
| GET | /api/settlement/platform/{platform}/pending-amount | 平台待结算金额 |
## 使用示例
### 创建结算记录
```bash
curl -X POST http://localhost:8083/api/settlement \
-H "Content-Type: application/json" \
-d '{
"orderId": 1001,
"orderShortId": "O20260401001",
"platformOrderSn": "PG23041200012345",
"platform": "pinduoduo",
"shopId": 1,
"shopName": "拼多多旗舰店",
"orderAmount": 199.00,
"discountAmount": 0,
"freight": 10.00,
"totalAmount": 209.00
}'
```
### 计算结算金额
```bash
curl -X POST http://localhost:8083/api/settlement/calculate/1001?commissionRate=0.006
```
### 批量确认结算
```bash
curl -X POST http://localhost:8083/api/settlement/confirm/batch \
-H "Content-Type: application/json" \
-d '{"settlementIds": [1, 2, 3]}'
```
### 查询统计
```bash
curl "http://localhost:8083/api/settlement/statistics?platform=pinduoduo&startDate=2026-04-01&endDate=2026-04-30"
```
## 部署方式
### Docker部署
```bash
# 构建镜像
docker build -t erp-order-service:latest -f Dockerfile .
# 运行容器
docker run -d -p 8083:8083 \
-e NACOS_SERVER_ADDR=nacos:8848 \
-e DB_HOST=mysql:3306 \
-e PROFILE=prod \
erp-order-service:latest
```
### Kubernetes部署
```bash
kubectl apply -f k8s/deployment.yaml
```
## 开发指南
### 添加新的结算类型
1.`OrderSettlement` 实体中添加状态常量
2.`OrderSettlementService` 中添加对应业务逻辑
3. 在 Controller 中添加对应接口
### 佣金率配置
佣金率可通过以下方式配置:
1. 全局默认佣金率:`settlement.default-commission-rate`
2. 接口参数传入
3. 数据库店铺配置
## 注意事项
1. 所有金额使用 `BigDecimal` 避免浮点数精度问题
2. 结算状态变更需要记录操作日志
3. 批量操作建议使用事务保证数据一致性
4. 结算周期关闭后不能再修改周期内订单
## License
Proprietary - ERP System