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,43 +1,9 @@
# ERP用户管理API文档
# ERP用户管理API
## 概述
ERP用户管理模块提供了用户注册、登录等基础功能支持账号、密码、店铺号管理。
## 数据库表
### erp_user 表结构
执行以下SQL创建表
```sql
-- 文件位置mt-pay/database/erp_user_schema.sql
```
表字段说明:
- `id`: 主键ID
- `username`: 账号唯一3-50个字符只能包含字母、数字和下划线
- `password`: 密码MD5加密6-20个字符
- `nick_name`: 用户名称可选最大50个字符
- `phone`: 手机号可选唯一格式1开头11位数字
- `email`: 邮箱可选唯一最大100个字符
- `store_code`: 店铺号最大50个字符
- `status`: 状态ACTIVE-激活DISABLED-禁用)
- `last_login_time`: 最后登录时间
- `last_login_ip`: 最后登录IP
- `create_time`: 创建时间
- `update_time`: 更新时间
## API接口
## 接口列表
### 1. 用户注册
**接口地址:** `POST /api/erp/user/register`
**请求头:**
```
Content-Type: application/json
```
**POST** `/api/erp/user/register`
**请求体:**
```json
@@ -51,49 +17,8 @@ Content-Type: application/json
}
```
**参数说明:**
- `username` (必填): 账号3-50个字符只能包含字母、数字和下划线
- `password` (必填): 密码6-20个字符
- `storeCode` (必填): 店铺号最大50个字符
- `nickName` (可选): 用户名称最大50个字符
- `phone` (可选): 手机号格式1开头11位数字13800138000必须唯一
- `email` (可选): 邮箱最大100个字符必须唯一
**响应示例:**
```json
{
"code": "0000",
"message": "注册成功",
"data": {
"id": 1,
"username": "testuser",
"nickName": "测试用户",
"phone": "13800138000",
"email": "test@example.com",
"storeCode": "STORE001",
"status": "ACTIVE",
"createTime": "2024-12-24T10:00:00"
},
"timestamp": 1703412000000
}
```
**错误响应:**
- 账号已存在:`{"code": "6000", "message": "账号已存在"}`
- 手机号已被注册:`{"code": "6000", "message": "手机号已被注册"}`
- 邮箱已被注册:`{"code": "6000", "message": "邮箱已被注册"}`
- 参数验证失败:`{"code": "4001", "message": "参数验证失败"}`
---
### 2. 用户登录
**接口地址:** `POST /api/erp/user/login`
**请求头:**
```
Content-Type: application/json
```
**POST** `/api/erp/user/login`
**请求体:**
```json
@@ -103,151 +28,59 @@ Content-Type: application/json
}
```
**参数说明**
- `username` (必填): 账号
- `password` (必填): 密码
**响应示例:**
**响应**
```json
{
"code": "0000",
"message": "登录成功",
"data": {
"id": 1,
"username": "testuser",
"nickName": "测试用户",
"phone": "13800138000",
"email": "test@example.com",
"storeCode": "STORE001",
"status": "ACTIVE",
"token": "MTIzNDU2Nzg5MGFiY2RlZjoxMjM0NTY3ODkwYWJjZGVmOjE3MDM0MTIwMDAwMDA6YWJjZGVmMTIzNDU2Nzg5MA==",
"tokenExpireTime": 1704016800000,
"lastLoginTime": "2024-12-24T10:00:00",
"lastLoginIp": "192.168.1.100"
},
"timestamp": 1703412000000
"token": "xxx",
"userInfo": {
"id": 1,
"username": "testuser",
"nickName": "测试用户"
}
}
}
```
**错误响应:**
- 账号或密码错误:`{"code": "4002", "message": "账号或密码错误"}`
- 账号已被禁用:`{"code": "4003", "message": "账号已被禁用"}`
---
## Token使用说明
### Token生成
登录成功后,系统会返回一个`token`字段该token的有效期为7天。
### Token验证
后续需要认证的接口可以在请求头中携带token
### 3. 获取用户信息
**GET** `/api/erp/user/info`
**请求头:**
```
Authorization: Bearer {token}
```
或者使用自定义header
### 4. 更新用户信息
**PUT** `/api/erp/user/info`
**请求头:**
```
X-Auth-Token: {token}
Authorization: Bearer {token}
```
### Token验证方法
### 5. 修改密码
**POST** `/api/erp/user/change-password`
在需要认证的接口中可以通过以下方式验证token
**请求头:**
```
Authorization: Bearer {token}
```
```java
@Autowired
private ErpUserService erpUserService;
// 验证token
ErpUser user = erpUserService.validateToken(token);
if (user == null) {
// Token无效或已过期
return Result.fail(ResultCode.TOKEN_INVALID);
**请求体:**
```json
{
"oldPassword": "123456",
"newPassword": "654321"
}
```
---
## 认证方式
## 错误码说明
| 错误码 | 说明 |
|--------|------|
| 0000 | 操作成功 |
| 4000 | 参数错误 |
| 4001 | 参数验证失败 |
| 4002 | 未授权(账号或密码错误) |
| 4003 | 禁止访问(账号被禁用) |
| 6000 | 业务错误(账号已存在等) |
| 7001 | 用户不存在 |
| 7002 | 用户已存在 |
| 7003 | 密码错误 |
| 7004 | Token无效或已过期 |
---
## 安全说明
1. **密码加密**密码使用MD5加密存储生产环境建议使用BCrypt或Argon2等更安全的加密方式。
2. **Token安全**
- 当前实现使用简单的MD5+Base64编码生产环境建议使用JWTJSON Web Token
- Token包含用户ID、用户名、时间戳和签名
- Token有效期为7天过期后需要重新登录
3. **IP记录**系统会记录用户最后登录的IP地址可用于安全审计。
4. **账号状态**:支持账号禁用功能,禁用后的账号无法登录。
---
## 后续扩展建议
1. **JWT Token**将当前简单的Token实现替换为标准的JWT
2. **密码策略**:添加密码复杂度要求、密码过期策略
3. **登录限制**添加登录失败次数限制、IP白名单等功能
4. **权限管理**:添加角色和权限管理功能
5. **操作日志**:记录用户的操作日志,便于审计
---
## 测试示例
### 使用curl测试注册接口
```bash
curl -X POST http://localhost:8080/api/erp/user/register \
-H "Content-Type: application/json" \
-d '{
"username": "testuser",
"password": "123456",
"storeCode": "STORE001",
"nickName": "测试用户",
"phone": "13800138000",
"email": "test@example.com"
}'
所有需要认证的接口都需要在请求头中携带Token
```
Authorization: Bearer {token}
```
### 使用curl测试登录接口
```bash
curl -X POST http://localhost:8080/api/erp/user/login \
-H "Content-Type: application/json" \
-d '{
"username": "testuser",
"password": "123456"
}'
```
---
## 注意事项
1. 执行数据库表创建SQL后才能使用注册和登录功能
2. 生产环境建议修改`TokenUtils`中的`TOKEN_SECRET`,使用更复杂的密钥
3. 建议在生产环境使用HTTPS协议保护密码和Token传输安全
Token通过登录接口获取有效期由后端配置决定。