feat(order): 扩展订单地址字段并集成百度翻译服务

- 添加东南亚地址扩展字段到CreateCustomerOrderRequestDTO
- 在CustomerOrder实体类中新增详细地址字段和特殊地址字段JSON存储
- 实现CustomerOrderServiceImpl中地址字段的存储和转换逻辑
- 集成BaiduTranslatorUtils实现订单内容自动翻译功能
- 在CustomerOrderResponseDTO中添加特殊地址字段Map格式支持
- 配置百度翻译API相关参数到application-dev.yml
- 移除过时的架构文档和配置说明文件
This commit is contained in:
2025-12-24 11:19:48 +08:00
parent 48eece45e5
commit 425c46217e
25 changed files with 490 additions and 2415 deletions

View File

@@ -1,122 +0,0 @@
# 数据库建表SQL说明
## 文件说明
- `schema.sql` - 完整的数据库建表SQL脚本
## 表结构说明
### 1. payment_order支付订单表
**表说明**:存储支付订单的完整信息
**主要字段**
- `id` - 主键ID自增
- `merchant_transaction_id` - 商户订单号(唯一索引)
- `transaction_id` - PingPong交易流水号
- `amount` - 交易金额DECIMAL(12,2)
- `currency` - 交易币种3位ISO 4217代码
- `payment_type` - 交易类型SALE/AUTH
- `status` - 订单状态PENDING/SUCCESS/FAILED/REVIEW/CANCELLED
- `token` - PingPong返回的token
- `payment_url` - 支付收银台地址
- `create_time` - 创建时间(自动填充)
- `update_time` - 更新时间(自动更新)
**索引**
- 主键:`id`
- 唯一索引:`merchant_transaction_id`
- 普通索引:`transaction_id``status``create_time`
### 2. payment_record支付记录表
**表说明**:记录所有支付相关操作(回调、查询等)
**主要字段**
- `id` - 主键ID自增
- `transaction_id` - PingPong交易流水号
- `merchant_transaction_id` - 商户订单号
- `record_type` - 记录类型CHECKOUT/CALLBACK/QUERY/REFUND/CAPTURE/VOID
- `status` - 交易状态
- `code` - 响应码
- `description` - 响应描述
- `request_data` - 原始请求数据JSONTEXT类型
- `response_data` - 原始响应数据JSONTEXT类型
- `create_time` - 创建时间(自动填充)
**索引**
- 主键:`id`
- 普通索引:`transaction_id``merchant_transaction_id``record_type``create_time`
## 执行方式
### 方式1直接执行SQL文件
```bash
mysql -u用户名 -p密码 数据库名 < schema.sql
```
### 方式2在MySQL客户端中执行
```sql
-- 1. 连接到MySQL
mysql -u用户名 -p密码
-- 2. 选择数据库
USE mtpay;
-- 3. 执行SQL文件
SOURCE /path/to/schema.sql;
```
### 方式3使用IDE工具
1. 打开数据库管理工具如Navicat、DBeaver、DataGrip等
2. 连接到数据库
3. 打开 `schema.sql` 文件
4. 执行SQL脚本
## 注意事项
1. **字符集**:使用 `utf8mb4` 字符集支持emoji和特殊字符
2. **排序规则**:使用 `utf8mb4_unicode_ci` 排序规则
3. **存储引擎**:使用 `InnoDB` 存储引擎,支持事务和外键
4. **时间字段**:使用 `DATETIME` 类型,支持自动填充和更新
5. **金额字段**:使用 `DECIMAL(12,2)` 类型,精确到分
6. **唯一约束**`merchant_transaction_id` 必须全局唯一
## 字段长度说明
- `merchant_transaction_id`64字符根据PingPong文档
- `transaction_id`64字符根据PingPong文档
- `token`255字符根据PingPong文档
- `payment_url`500字符URL可能较长
- `remark`500字符备注信息
- `description`500字符响应描述
- `request_data`/`response_data`TEXT类型JSON数据可能很长
## 索引优化建议
1. **查询优化**:根据实际查询场景添加复合索引
2. **时间范围查询**`create_time` 索引有助于时间范围查询
3. **状态查询**`status` 索引有助于按状态筛选订单
4. **关联查询**`transaction_id``merchant_transaction_id` 索引有助于关联查询
## 数据备份建议
1. 定期备份数据库
2. 重要操作前先备份
3. 使用 `mysqldump` 命令备份:
```bash
mysqldump -u用户名 -p密码 数据库名 > backup_$(date +%Y%m%d).sql
```
## 版本更新
如果后续需要修改表结构,建议:
1. 创建迁移SQL文件`migration_v1.1.sql`
2. 使用 `ALTER TABLE` 语句修改
3. 记录版本变更日志

View File

@@ -1,111 +0,0 @@
# 客户订单表创建说明
## 问题
如果遇到错误:`Table 'mtpay.customer_order' doesn't exist`
说明数据库中没有 `customer_order`需要执行SQL脚本创建。
## 解决方案
### 方法1使用MySQL客户端执行推荐
1. 连接到数据库:
```bash
mysql -h rm-j6c3u06k2afwn8hxw6o.mysql.rds.aliyuncs.com -P 3306 -u mtkj2025 -p mtpay
```
2. 执行SQL脚本
```sql
source E:/MTKJPAY/mt-pay/database/customer_order_schema.sql
```
或者直接复制SQL内容执行
```sql
CREATE TABLE `customer_order` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`order_no` VARCHAR(64) NOT NULL UNIQUE COMMENT '订单号(全局唯一)',
`product_id` BIGINT NOT NULL COMMENT '商品ID',
`product_name` VARCHAR(500) NOT NULL COMMENT '商品名称',
`sku_id` BIGINT NOT NULL COMMENT 'SKU ID',
`sku_name` VARCHAR(500) NOT NULL COMMENT 'SKU名称/描述',
`quantity` INT NOT NULL COMMENT '购买数量',
`unit_price` DECIMAL(10, 2) NOT NULL COMMENT '单价',
`total_amount` DECIMAL(10, 2) NOT NULL COMMENT '订单总金额',
`currency` VARCHAR(3) NOT NULL COMMENT '货币代码',
`status` VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '订单状态PENDING-待支付PAID-已支付SHIPPED-已发货COMPLETED-已完成CANCELLED-已取消',
-- 客户信息
`customer_name` VARCHAR(100) NOT NULL COMMENT '客户姓名',
`customer_phone` VARCHAR(20) NOT NULL COMMENT '客户电话',
`customer_email` VARCHAR(100) COMMENT '客户邮箱',
-- 收货地址
`shipping_name` VARCHAR(100) NOT NULL COMMENT '收货人姓名',
`shipping_phone` VARCHAR(20) NOT NULL COMMENT '收货人电话',
`shipping_country` VARCHAR(50) NOT NULL COMMENT '收货国家',
`shipping_state` VARCHAR(50) COMMENT '收货州/省',
`shipping_city` VARCHAR(50) NOT NULL COMMENT '收货城市',
`shipping_street` VARCHAR(200) NOT NULL COMMENT '收货街道地址',
`shipping_postcode` VARCHAR(20) COMMENT '收货邮编',
-- 支付信息
`payment_order_id` BIGINT COMMENT '关联的支付订单ID',
`payment_status` VARCHAR(20) DEFAULT 'UNPAID' COMMENT '支付状态UNPAID-未支付PAID-已支付FAILED-支付失败',
-- 备注
`remark` VARCHAR(500) COMMENT '订单备注',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_order_no` (`order_no`),
KEY `idx_product_id` (`product_id`),
KEY `idx_status` (`status`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='客户订单表';
```
### 方法2使用数据库管理工具
使用Navicat、DBeaver、MySQL Workbench等工具
1. 连接到数据库 `mtpay`
2. 打开SQL编辑器
3. 复制 `customer_order_schema.sql` 文件内容
4. 执行SQL脚本
### 方法3使用命令行Windows PowerShell
```powershell
# 读取SQL文件内容
$sql = Get-Content "E:\MTKJPAY\mt-pay\database\customer_order_schema.sql" -Raw
# 执行SQL需要先安装mysql客户端
mysql -h rm-j6c3u06k2afwn8hxw6o.mysql.rds.aliyuncs.com -P 3306 -u mtkj2025 -p mtpay -e $sql
```
## 验证
执行完成后,可以验证表是否创建成功:
```sql
-- 查看表是否存在
SHOW TABLES LIKE 'customer_order';
-- 查看表结构
DESC customer_order;
-- 或者
SHOW CREATE TABLE customer_order;
```
## 注意事项
1. 确保数据库连接信息正确
2. 确保有创建表的权限
3. 如果表已存在,可以先删除再创建:
```sql
DROP TABLE IF EXISTS `customer_order`;
```
然后重新执行创建脚本

View File

@@ -1,67 +0,0 @@
# 数据库配置说明
## 数据库信息
- **数据库名称**`mtpay`
- **字符集**`utf8mb4`
- **排序规则**`utf8mb4_general_ci`
## 数据库表
### 支付相关表
1. **payment_order** - 支付订单表
2. **payment_record** - 支付记录表
### 商品相关表
1. **mt_product** - 商品表
2. **mt_product_sku** - 商品SKU表
## 执行建表SQL
### 方式1执行所有SQL文件
```bash
# 在MySQL中执行
mysql -u用户名 -p密码 mtpay < mt_product_schema.sql
```
### 方式2在MySQL客户端中执行
```sql
-- 1. 连接到MySQL
mysql -u用户名 -p密码
-- 2. 选择数据库
USE mtpay;
-- 3. 执行SQL文件
SOURCE /path/to/mt_product_schema.sql;
```
### 方式3使用IDE工具
1. 打开数据库管理工具如Navicat、DBeaver、DataGrip等
2. 连接到数据库服务器
3. 选择 `mtpay` 数据库
4. 打开 `mt_product_schema.sql` 文件
5. 执行SQL脚本
## 注意事项
1. **执行顺序**:先执行 `mt_product_schema.sql` 创建商品表
2. **外键约束**`mt_product_sku` 表有外键关联 `mt_product`删除商品时会级联删除SKU
3. **字符集**:所有表使用 `utf8mb4` 字符集支持emoji和特殊字符
4. **索引**:已创建必要的索引,提高查询性能
## 表结构概览
```
mtpay
├── payment_order (支付订单表)
├── payment_record (支付记录表)
├── mt_product (商品表)
└── mt_product_sku (商品SKU表)
```

View File

@@ -1,139 +0,0 @@
# 商品表结构说明
## 表名规范
所有表名使用 `mt_` 前缀,如:
- `mt_product` - 商品表
- `mt_product_sku` - 商品SKU表
## 表结构
### 1. mt_product商品表
**字段说明:**
| 字段名 | 类型 | 说明 | 备注 |
|--------|------|------|------|
| id | BIGINT | 商品ID | 主键,自增 |
| name | VARCHAR(255) | 商品名称 | 必填 |
| price | DECIMAL(12,2) | 商品价格 | 基础价格默认0.00 |
| main_image | VARCHAR(4000) | 主图URL | 可选 |
| status | VARCHAR(20) | 商品状态 | ACTIVE-上架INACTIVE-下架DELETED-已删除 |
| shop_id | BIGINT | 店铺ID | 必填,关联店铺 |
| create_time | DATETIME | 创建时间 | 自动填充 |
| update_time | DATETIME | 更新时间 | 自动更新 |
**索引:**
- 主键:`id`
- 普通索引:`shop_id``status``create_time`
**排序规则:**
- 使用 `utf8mb4_general_ci` 排序规则
### 2. mt_product_sku商品SKU表
**字段说明:**
| 字段名 | 类型 | 说明 | 备注 |
|--------|------|------|------|
| id | BIGINT | SKU ID | 主键,自增 |
| product_id | BIGINT | 商品ID | 外键关联mt_product |
| sku | VARCHAR(2000) | SKU编码 | 必填 |
| price | DECIMAL(12,2) | 价格 | 必填 |
| currency | VARCHAR(3) | 货币 | ISO 4217代码默认USD |
| stock | INT | 库存数量 | 默认0 |
| sales_attrs | LONGTEXT | 销售属性 | JSON格式[{"name":"颜色","value":"红色"}] |
| sku_image | VARCHAR(4000) | SKU图片URL | 可选 |
| weight | DECIMAL(10,2) | 重量 | 单位:克 |
| size | VARCHAR(200) | 大小/尺寸 | JSON格式{"length":10,"width":5,"height":3} |
| specification | VARCHAR(2000) | 规格 | 文本描述 |
| status | VARCHAR(20) | SKU状态 | ACTIVE-启用INACTIVE-禁用 |
| create_time | DATETIME | 创建时间 | 自动填充 |
| update_time | DATETIME | 更新时间 | 自动更新 |
**索引:**
- 主键:`id`
- 普通索引:`product_id``status`
- 外键:`product_id``mt_product.id`(级联删除)
## 数据示例
### 商品示例
```sql
INSERT INTO `mt_product` (`name`, `price`, `main_image`, `status`, `shop_id`)
VALUES ('Macaron 马卡龙礼盒装', 20.00, 'https://example.com/image.jpg', 'ACTIVE', 1);
```
### SKU示例
```sql
-- SKU 1粉色6枚装
INSERT INTO `mt_product_sku` (
`product_id`, `sku`, `price`, `currency`, `stock`,
`sales_attrs`, `sku_image`, `weight`, `size`, `specification`, `status`
) VALUES (
1, 'SKU001', 18.00, 'USD', 50,
'[{"name":"颜色","value":"粉色"},{"name":"规格","value":"6枚装"}]',
'https://example.com/pink-6pcs.jpg', 500.00,
'{"length":20,"width":15,"height":5}',
'6枚装马卡龙礼盒', 'ACTIVE'
);
-- SKU 2蓝色12枚装
INSERT INTO `mt_product_sku` (
`product_id`, `sku`, `price`, `currency`, `stock`,
`sales_attrs`, `sku_image`, `weight`, `size`, `specification`, `status`
) VALUES (
1, 'SKU002', 20.00, 'USD', 100,
'[{"name":"颜色","value":"蓝色"},{"name":"规格","value":"12枚装"}]',
'https://example.com/blue-12pcs.jpg', 800.00,
'{"length":25,"width":20,"height":8}',
'12枚装马卡龙礼盒', 'ACTIVE'
);
```
## JSON字段格式说明
### sales_attrs销售属性
```json
[
{"name": "颜色", "value": "粉色"},
{"name": "规格", "value": "6枚装"}
]
```
### size尺寸
```json
{
"length": 20,
"width": 15,
"height": 5,
"unit": "cm"
}
```
## 执行SQL
```bash
# 在MySQL中执行
mysql -u用户名 -p密码 数据库名 < mt_product_schema.sql
```
或在MySQL客户端中
```sql
SOURCE /path/to/mt_product_schema.sql;
```
## 注意事项
1. **字符集**:使用 `utf8mb4` 字符集支持emoji和特殊字符
2. **排序规则**:使用 `utf8mb4_unicode_ci`
3. **存储引擎**:使用 `InnoDB`,支持事务和外键
4. **外键约束**删除商品时会级联删除所有SKU
5. **SKU字段**`sku` 字段最大2000字符不再设置唯一索引可根据业务需求决定是否唯一
6. **JSON字段**`sales_attrs``size` 字段存储JSON格式数据需要应用层进行解析