feat(config): 更新开发和生产环境配置

- 修改开发环境前端URL从localhost改为公网地址
- 更新PayPal Webhook URL使用公网地址配置
- 在生产环境配置中添加服务器端口和应用配置
- 添加PayPal支付配置的详细注释说明
- 简化ERP用户管理API文档格式,移除冗余说明
- 移除PayPal订单生命周期和Webhook指南文档
- 优化PayPal Webhook配置文档内容

fix(order): 修复订单创建和库存管理并发问题

- 实现SELECT FOR UPDATE锁定SKU记录防止超卖
- 添加库存扣减原子操作确保并发安全
- 简化日志输出,移除冗余调试信息
- 添加订单取消功能并恢复库存
- 优化订单查询和状态更新逻辑

feat(mapper): 添加库存扣减和恢复功能

- 实现deductStock方法用于扣减库存
- 添加restoreStock方法用于恢复库存
- 实现selectByIdForUpdate方法用于悲观锁
- 为Mapper接口添加必要的注解支持
This commit is contained in:
2025-12-26 10:54:01 +08:00
parent f8d116f9a3
commit 2d9a9c3668
19 changed files with 1379 additions and 1329 deletions

View File

@@ -1,41 +1,15 @@
# MT Pay - 支付系统
## 项目简介
面向东南亚地区的电商支付系统支持PayPal支付、商品管理、订单管理、货币转换等功能。
## 功能特性
- ✅ PayPal支付集成创建订单、捕获支付、Webhook处理
- ✅ 商品管理商品、SKU、商品链接
- ✅ 客户订单管理(支持东南亚地址格式)
- ✅ 货币转换(实时汇率,支持多币种)
- ✅ 百度翻译集成商品名称、SKU名称自动翻译
- ✅ 订单状态管理
- ✅ 支付记录管理
## 技术栈
- Spring Boot 4.0.0
- MyBatis-Plus
- MySQL 5.7+
- Jackson (JSON处理)
- Lombok
- RestTemplate
## 快速开始
### 1. 数据库配置
执行数据库脚本(按顺序):
```sql
-- 1. 商品相关表
source database/customer_order_schema.sql;
-- 2. 货币转换字段
source database/customer_order_currency_update.sql;
-- 3. 地址字段(混合方案)
source database/customer_order_address_optimized.sql;
```
@@ -53,13 +27,6 @@ source database/customer_order_address_optimized.sql;
mvn spring-boot:run
```
```bash
mvn clean package
java -jar target/mt-pay-0.0.1-SNAPSHOT.jar
```
### 4. 访问地址
- 后端API: http://localhost:8082/api
@@ -69,89 +36,35 @@ java -jar target/mt-pay-0.0.1-SNAPSHOT.jar
## 核心API
### 商品管理
- `POST /api/product` - 创建商品
- `GET /api/product/{id}` - 获取商品详情
- `GET /api/product/link/{linkCode}` - 通过链接码获取商品
- `POST /api/product` - 创建商品
- `POST /api/product/query` - 查询商品列表(分页)
- `PUT /api/product/{id}/off-shelf` - 下架商品
### 订单管理
- `POST /api/order` - 创建客户订单
- `GET /api/order/{orderNo}` - 获取订单详情
- `POST /api/order/calculate-currency-conversion` - 计算货币转换
- `POST /api/order/query` - 查询订单列表(分页)
### PayPal支付
- `POST /api/paypal/order` - 创建PayPal订单
- `POST /api/paypal/capture` - 捕获支付
- `POST /api/paypal/orders` - 创建PayPal订单
- `POST /api/paypal/orders/{orderId}/capture` - 捕获支付
- `POST /api/paypal/webhook` - Webhook回调
## 项目结构
### ERP用户
- `POST /api/erp/user/register` - 用户注册
- `POST /api/erp/user/login` - 用户登录
- `GET /api/erp/user/info` - 获取用户信息
```
com.mtkj.mtpay/
├── config/ # 配置类PayPal、百度翻译、数据源等
├── controller/ # REST控制器
├── dto/ # 数据传输对象
│ ├── request/ # 请求DTO
│ └── response/ # 响应DTO
├── entity/ # 实体类
├── exception/ # 异常处理
├── mapper/ # MyBatis Mapper
├── service/ # 业务服务层
│ └── impl/ # 服务实现
└── util/ # 工具类
```
## 技术栈
## 核心服务
- **ProductService**: 商品管理服务
- **CustomerOrderService**: 客户订单服务
- **PayPalService**: PayPal支付服务
- **PayPalWebhookService**: PayPal Webhook处理服务
- **ExchangeRateService**: 汇率转换服务
- **BaiduTranslatorUtils**: 百度翻译工具
## 配置说明
### PayPal配置
```yaml
paypal:
client-id: your-client-id
client-secret: your-client-secret
mode: sandbox # sandbox 或 production
enabled: true
```
### 百度翻译配置
```yaml
baidu:
translator:
app-id: your-app-id
securityKey: your-security-key
transApiHost: https://fanyi-api.baidu.com/api/trans/vip/translate
```
## 数据库表
- `mt_product` - 商品表
- `mt_product_sku` - SKU表
- `mt_product_link` - 商品链接表
- `customer_order` - 客户订单表
- `payment_order` - 支付订单表
- `payment_record` - 支付记录表
## 地址字段设计
采用混合方案:
- **基础字段**(独立列):国家、城市、州/省、邮编、详细地址1/2
- **特殊字段**JSON存储各国特殊字段组屋号、Barangay、泰文地址等
详见:`database/customer_order_address_optimized.sql`
- Spring Boot 4.0.0
- MyBatis-Plus
- MySQL 5.7+
- Vue 3 + Element Plus
## 相关文档
- `SYSTEM_ARCHITECTURE.md` - 系统架构文档
- `../PAYPAL_WEBHOOK_GUIDE.md` - PayPal Webhook配置指南
- `../PAYPAL_TEST_ACCOUNT.md` - PayPal测试账号说明
## 许可证
MIT
- `PAYPAL_WEBHOOK_SETUP.md` - PayPal Webhook配置
- `ERP_USER_API.md` - ERP用户API文档