|
|
@@ -18,8 +18,9 @@
|
|
|
1. **多租户余额模块** (`credit-balance-module-mt`)
|
|
|
- 余额实体设计(用户额度、已用额度、可用额度)
|
|
|
- 额度变更记录实体
|
|
|
- - 额度管理服务(设置额度、扣减额度、查询余额)
|
|
|
+ - 额度管理服务(设置额度、扣减额度、恢复额度、查询余额)
|
|
|
- 额度支付API接口
|
|
|
+ - 额度恢复API接口(结账、取消订单、退款)
|
|
|
|
|
|
2. **多租户余额管理UI模块** (`credit-balance-management-ui-mt`)
|
|
|
- 用户额度管理界面
|
|
|
@@ -31,6 +32,7 @@
|
|
|
- 扩展支付选项,增加"额度支付"
|
|
|
- 额度支付订单处理逻辑
|
|
|
- 额度检查和验证机制
|
|
|
+ - 额度恢复机制(结账、取消订单、退款)
|
|
|
- 小程序个人中心欠款显示
|
|
|
|
|
|
### 不包含的功能
|
|
|
@@ -76,6 +78,10 @@
|
|
|
- [ ] 实现额度支付订单处理逻辑
|
|
|
- [ ] 额度为0的用户无法使用额度支付
|
|
|
- [ ] 支付成功后更新用户已用额度和可用额度
|
|
|
+- [ ] 实现额度恢复机制:
|
|
|
+ - [ ] 结账时恢复相应额度(订单完成)
|
|
|
+ - [ ] 取消订单时恢复全额额度
|
|
|
+ - [ ] 退款时恢复相应额度
|
|
|
- [ ] 在小程序个人中心显示累计欠款
|
|
|
- [ ] 确保与现有微信支付流程并行工作,互不干扰
|
|
|
|
|
|
@@ -103,8 +109,8 @@ CREATE TABLE credit_balance_log_mt (
|
|
|
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
|
tenant_id INT UNSIGNED NOT NULL COMMENT '租户ID',
|
|
|
user_id INT UNSIGNED NOT NULL COMMENT '用户ID',
|
|
|
- change_type VARCHAR(20) NOT NULL COMMENT '变更类型: SET_LIMIT, PAYMENT, REFUND, ADJUST',
|
|
|
- change_amount DECIMAL(10,2) NOT NULL COMMENT '变更金额',
|
|
|
+ change_type VARCHAR(20) NOT NULL COMMENT '变更类型: SET_LIMIT(设置额度), PAYMENT(支付扣减), CHECKOUT(结账恢复), CANCEL_ORDER(取消订单恢复), REFUND(退款恢复), ADJUST(调整额度)',
|
|
|
+ change_amount DECIMAL(10,2) NOT NULL COMMENT '变更金额(正数表示增加额度,负数表示减少额度)',
|
|
|
before_total DECIMAL(10,2) COMMENT '变更前总额度',
|
|
|
after_total DECIMAL(10,2) COMMENT '变更后总额度',
|
|
|
before_used DECIMAL(10,2) COMMENT '变更前已用额度',
|
|
|
@@ -122,7 +128,7 @@ CREATE TABLE credit_balance_log_mt (
|
|
|
### 模块结构
|
|
|
```
|
|
|
packages/
|
|
|
-├── credit-balance-module-mt/ # 多租户余额模块
|
|
|
+├── @d8d/credit-balance-module-mt/ # 多租户余额模块
|
|
|
│ ├── src/
|
|
|
│ │ ├── entities/ # 实体定义
|
|
|
│ │ │ ├── credit-balance.mt.entity.ts
|
|
|
@@ -133,7 +139,7 @@ packages/
|
|
|
│ │ ├── routes/ # API路由
|
|
|
│ │ └── index.ts
|
|
|
│ └── package.json
|
|
|
-└── credit-balance-management-ui-mt/ # 余额管理UI模块
|
|
|
+└── @d8d/credit-balance-management-ui-mt/ # 余额管理UI模块
|
|
|
├── src/
|
|
|
│ ├── components/ # 组件
|
|
|
│ ├── pages/ # 页面
|
|
|
@@ -143,25 +149,76 @@ packages/
|
|
|
```
|
|
|
|
|
|
### API设计
|
|
|
+#### 对外API(供UI调用)
|
|
|
1. `GET /api/credit-balance/{userId}` - 查询用户额度
|
|
|
2. `PUT /api/credit-balance/{userId}` - 设置用户额度
|
|
|
3. `POST /api/credit-balance/{userId}/adjust` - 调整用户额度
|
|
|
4. `GET /api/credit-balance/{userId}/logs` - 查询额度变更记录
|
|
|
5. `POST /api/credit-balance/payment` - 额度支付
|
|
|
+6. `POST /api/credit-balance/checkout` - 结账恢复额度(供信用管理UI调用)
|
|
|
+
|
|
|
+#### 服务接口(供其他模块调用)
|
|
|
+1. `CreditBalanceService.restoreBalanceForCancelOrder(orderId, userId, amount)` - 取消订单恢复额度
|
|
|
+2. `CreditBalanceService.restoreBalanceForRefund(orderId, userId, refundAmount)` - 退款恢复额度
|
|
|
+
|
|
|
+**设计说明:**
|
|
|
+- **结账恢复**:需要人工确认,因此通过信用管理UI手动触发,调用`/api/credit-balance/checkout`接口
|
|
|
+- **取消订单恢复**:自动触发,订单模块在取消订单时直接调用`CreditBalanceService.restoreBalanceForCancelOrder()`方法
|
|
|
+- **退款恢复**:自动触发,支付模块在退款处理时直接调用`CreditBalanceService.restoreBalanceForRefund()`方法
|
|
|
+- **模块间调用**:使用PNPM工作空间,通过`@d8d/credit-balance-module-mt`包名导入服务类进行直接调用
|
|
|
|
|
|
## 集成点
|
|
|
### 与现有系统集成
|
|
|
1. **用户模块集成**:通过`user_id`关联用户信息
|
|
|
-2. **订单模块集成**:扩展`orders_mt`表的`pay_type`字段,新增额度支付类型
|
|
|
-3. **支付模块集成**:在`mini-payment-mt`中新增额度支付处理逻辑
|
|
|
-4. **小程序集成**:更新支付页面和个人中心页面
|
|
|
+2. **订单模块集成**:
|
|
|
+ - 扩展`orders_mt`表的`pay_type`字段,新增额度支付类型
|
|
|
+ - 订单模块导入`@d8d/credit-balance-module-mt`包,直接调用`CreditBalanceService.restoreBalanceForCancelOrder()`方法处理取消订单时的额度恢复
|
|
|
+3. **支付模块集成**:
|
|
|
+ - 在`@d8d/mini-payment-mt`中新增额度支付处理逻辑
|
|
|
+ - 支付模块导入`@d8d/credit-balance-module-mt`包,直接调用`CreditBalanceService.restoreBalanceForRefund()`方法处理退款时的额度恢复
|
|
|
+4. **信用管理UI集成**:
|
|
|
+ - 信用管理UI调用额度模块的`/api/credit-balance/checkout`接口处理结账时的额度恢复
|
|
|
+5. **小程序集成**:更新支付页面和个人中心页面
|
|
|
|
|
|
### 数据流
|
|
|
+#### 正向流程(支付扣减)
|
|
|
1. 后台管理员设置用户额度 → 更新`credit_balance_mt`表
|
|
|
2. 用户选择额度支付 → 检查可用额度 → 创建订单 → 扣减额度
|
|
|
-3. 支付成功 → 更新订单状态 → 记录额度变更日志
|
|
|
+3. 支付成功 → 更新订单状态 → 记录额度变更日志(PAYMENT类型)
|
|
|
4. 小程序查询欠款 → 调用额度查询接口 → 显示欠款信息
|
|
|
|
|
|
+#### 反向流程(额度恢复)
|
|
|
+1. **结账恢复**:订单完成结账 → 信用管理UI调用`/api/credit-balance/checkout` → 恢复相应额度 → 记录日志(CHECKOUT类型)
|
|
|
+2. **取消订单恢复**:用户取消订单 → 订单模块调用`CreditBalanceService.restoreBalanceForCancelOrder()` → 恢复全额额度 → 记录日志(CANCEL_ORDER类型)
|
|
|
+3. **退款恢复**:管理员处理退款 → 支付模块调用`CreditBalanceService.restoreBalanceForRefund()` → 恢复相应额度 → 记录日志(REFUND类型)
|
|
|
+
|
|
|
+## 额度恢复逻辑
|
|
|
+### 恢复场景定义
|
|
|
+1. **结账恢复(CHECKOUT)**
|
|
|
+ - **触发条件**:订单完成所有流程,用户确认收货
|
|
|
+ - **恢复金额**:订单实际支付金额
|
|
|
+ - **业务意义**:订单交易完成,额度占用解除
|
|
|
+ - **实现方式**:信用管理UI手动触发,调用`/api/credit-balance/checkout`接口
|
|
|
+
|
|
|
+2. **取消订单恢复(CANCEL_ORDER)**
|
|
|
+ - **触发条件**:用户在支付后、发货前取消订单
|
|
|
+ - **恢复金额**:订单全额支付金额
|
|
|
+ - **业务意义**:交易未发生,全额恢复额度
|
|
|
+ - **实现方式**:订单模块在取消订单时自动调用`CreditBalanceService.restoreBalanceForCancelOrder()`方法
|
|
|
+
|
|
|
+3. **退款恢复(REFUND)**
|
|
|
+ - **触发条件**:管理员处理用户退款申请
|
|
|
+ - **恢复金额**:实际退款金额(可能部分退款)
|
|
|
+ - **业务意义**:交易撤销,按退款金额恢复额度
|
|
|
+ - **实现方式**:支付模块在退款处理时自动调用`CreditBalanceService.restoreBalanceForRefund()`方法
|
|
|
+
|
|
|
+### 恢复规则
|
|
|
+1. **幂等性保证**:同一订单只能恢复一次额度,防止重复恢复
|
|
|
+2. **金额验证**:恢复金额不能超过原支付金额
|
|
|
+3. **状态检查**:只有特定订单状态才能触发恢复
|
|
|
+4. **日志记录**:每次恢复都记录详细的变更日志
|
|
|
+5. **事务处理**:额度恢复与订单状态更新在同一事务中
|
|
|
+
|
|
|
## 兼容性要求
|
|
|
1. **API兼容性**:新增API端点,不影响现有API
|
|
|
2. **数据库兼容性**:新增表,不影响现有表结构
|
|
|
@@ -179,7 +236,12 @@ packages/
|
|
|
- **权限控制**:只有管理员可设置和调整额度
|
|
|
- **额度限制**:设置单次支付和累计欠款上限
|
|
|
|
|
|
-### 风险3:影响现有支付流程
|
|
|
+### 风险3:额度恢复逻辑错误导致额度重复恢复
|
|
|
+- **缓解措施**:实现幂等性检查,同一订单只能恢复一次
|
|
|
+- **验证机制**:添加恢复前状态检查,防止重复恢复
|
|
|
+- **日志审计**:详细记录每次恢复操作,便于审计追踪
|
|
|
+
|
|
|
+### 风险4:影响现有支付流程
|
|
|
- **缓解措施**:额度支付作为可选功能,默认不启用
|
|
|
- **测试策略**:充分测试与现有支付流程的兼容性
|
|
|
- **回滚计划**:可禁用额度支付功能,恢复原有流程
|
|
|
@@ -189,15 +251,27 @@ packages/
|
|
|
- 额度计算逻辑测试
|
|
|
- 额度扣减和恢复测试
|
|
|
- 额度验证测试
|
|
|
+- 额度恢复场景测试:
|
|
|
+ - 结账恢复额度测试
|
|
|
+ - 取消订单恢复额度测试
|
|
|
+ - 退款恢复额度测试
|
|
|
|
|
|
### 集成测试
|
|
|
- 额度支付流程测试
|
|
|
+- 额度恢复流程测试:
|
|
|
+ - 结账时额度恢复测试
|
|
|
+ - 取消订单时额度恢复测试
|
|
|
+ - 退款时额度恢复测试
|
|
|
- 与订单模块集成测试
|
|
|
- 与用户模块集成测试
|
|
|
|
|
|
### E2E测试
|
|
|
- 后台额度管理流程测试
|
|
|
- 小程序额度支付流程测试
|
|
|
+- 额度恢复场景测试:
|
|
|
+ - 结账后额度恢复验证
|
|
|
+ - 取消订单后额度恢复验证
|
|
|
+ - 退款后额度恢复验证
|
|
|
- 欠款显示功能测试
|
|
|
|
|
|
## 部署计划
|
|
|
@@ -221,6 +295,10 @@ packages/
|
|
|
1. **功能指标**:
|
|
|
- 后台可成功设置和调整用户额度
|
|
|
- 用户可使用额度完成支付
|
|
|
+ - 额度恢复功能正常工作:
|
|
|
+ - 结账时正确恢复额度
|
|
|
+ - 取消订单时正确恢复额度
|
|
|
+ - 退款时正确恢复额度
|
|
|
- 小程序正确显示欠款信息
|
|
|
- 额度为0的用户无法使用额度支付
|
|
|
|