为多租户电商平台新增信用额度支付功能,允许后台为特定用户设置信用额度,用户可使用额度进行支付,并在小程序个人中心显示累计欠款,与现有微信支付流程并行工作。
当前系统仅支持微信支付,缺乏灵活的支付方式。为提升用户体验和业务灵活性,需要引入信用额度支付功能,允许特定用户(如VIP用户、企业用户)使用信用额度进行支付,后台可灵活管理额度。
多租户余额模块 (credit-balance-module-mt)
多租户余额管理UI模块 (credit-balance-management-ui-mt)
支付流程集成
作为 系统管理员 我希望 能够管理用户的信用额度 以便 控制用户的支付权限和风险
验收标准:
credit_balance_mt表,包含租户ID、用户ID、总额度、已用额度、可用额度等字段credit_balance_log_mt表,记录额度变更历史实现状态:✅ 已完成 完成时间:2025-12-02 实现详情:
@d8d/credit-balance-module-mtCreditBalanceMt(信用额度实体)和CreditBalanceLogMt(额度变更记录实体)CreditBalanceService,包含设置额度、调整额度、扣减额度、恢复额度等方法作为 后台管理员 我希望 有一个界面来管理用户信用额度 以便 方便地设置和调整用户额度
验收标准:
实现状态:✅ 已完成 完成时间:2025-12-04 实现详情:
@d8d/credit-balance-management-ui-mtCreditBalanceDialog,包含三个标签页(额度概览、额度操作、变更记录)creditBalanceClient.ts,支持多租户上下文作为 小程序用户 我希望 可以使用信用额度进行支付 以便 在余额不足时也能完成购买
验收标准:
-- 用户信用额度表
CREATE TABLE credit_balance_mt (
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
tenant_id INT UNSIGNED NOT NULL COMMENT '租户ID',
user_id INT UNSIGNED NOT NULL COMMENT '用户ID',
total_limit DECIMAL(10,2) DEFAULT 0.00 COMMENT '总额度',
used_amount DECIMAL(10,2) DEFAULT 0.00 COMMENT '已用额度',
available_amount DECIMAL(10,2) GENERATED ALWAYS AS (total_limit - used_amount) STORED COMMENT '可用额度',
is_enabled TINYINT DEFAULT 1 COMMENT '是否启用(0:禁用,1:启用)',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_tenant_user (tenant_id, user_id),
INDEX idx_tenant_id (tenant_id),
INDEX idx_user_id (user_id)
) COMMENT='用户信用额度表';
-- 额度变更记录表
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(支付扣减), 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 '变更前已用额度',
after_used DECIMAL(10,2) COMMENT '变更后已用额度',
reference_id VARCHAR(100) COMMENT '关联ID(订单号等)',
remark VARCHAR(500) COMMENT '备注',
operator_id INT UNSIGNED COMMENT '操作人ID',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_tenant_user (tenant_id, user_id),
INDEX idx_reference (reference_id),
INDEX idx_created (created_at)
) COMMENT='额度变更记录表';
迁移脚本说明:
根据项目架构,TypeORM迁移脚本应在server包集成@d8d/credit-balance-module-mt模块时创建,而不是在模块包中创建。模块包只包含实体定义,迁移脚本由使用该模块的应用层(server包)负责创建和管理。
packages/
├── @d8d/credit-balance-module-mt/ # 多租户余额模块
│ ├── src/
│ │ ├── entities/ # 实体定义
│ │ │ ├── credit-balance.mt.entity.ts
│ │ │ └── credit-balance-log.mt.entity.ts
│ │ │ └── index.ts
│ │ ├── services/ # 服务层
│ │ │ ├── credit-balance.service.ts
│ │ │ └── index.ts
│ │ ├── schemas/ # 数据验证
│ │ │ └── index.ts
│ │ ├── routes/ # API路由
│ │ │ └── index.ts
│ │ ├── types/ # 类型定义
│ │ │ └── index.ts
│ │ └── index.ts # 主入口文件
│ ├── tests/ # 测试文件
│ ├── tsconfig.json # TypeScript配置
│ ├── vitest.config.ts # 测试配置
│ └── package.json
└── @d8d/credit-balance-management-ui-mt/ # 余额管理UI模块
├── src/
│ ├── api/ # API客户端
│ │ ├── index.ts
│ │ └── creditBalanceClient.ts
│ ├── components/ # 组件
│ │ ├── CreditBalanceManagement.tsx
│ │ └── index.ts
│ ├── hooks/ # React hooks
│ │ └── index.ts
│ ├── types/ # 类型定义
│ │ ├── index.ts
│ │ └── creditBalance.ts
│ └── index.ts # 主入口文件
├── tests/ # 测试文件
├── eslint.config.js # ESLint配置
├── tsconfig.json # TypeScript配置
├── vitest.config.ts # 测试配置
└── package.json
GET /api/credit-balance/{userId} - 查询用户额度PUT /api/credit-balance/{userId} - 设置用户额度POST /api/credit-balance/{userId}/adjust - 调整用户额度GET /api/credit-balance/{userId}/logs - 查询额度变更记录POST /api/credit-balance/payment - 额度支付POST /api/credit-balance/checkout - 结账恢复额度(供信用管理UI调用)CreditBalanceService.restoreBalanceForCancelOrder(orderId, userId, amount) - 取消订单恢复额度CreditBalanceService.restoreBalanceForRefund(orderId, userId, refundAmount) - 退款恢复额度设计说明:
/api/credit-balance/checkout接口CreditBalanceService.restoreBalanceForCancelOrder()方法CreditBalanceService.restoreBalanceForRefund()方法@d8d/credit-balance-module-mt包名导入服务类进行直接调用user_id关联用户信息orders_mt表的pay_type字段,新增额度支付类型@d8d/credit-balance-module-mt包,直接调用CreditBalanceService.restoreBalanceForCancelOrder()方法处理取消订单时的额度恢复@d8d/mini-payment-mt中新增额度支付处理逻辑@d8d/credit-balance-module-mt包,直接调用CreditBalanceService.restoreBalanceForRefund()方法处理退款时的额度恢复/api/credit-balance/checkout接口处理结账时的额度恢复credit_balance_mt表/api/credit-balance/checkout → 恢复相应额度 → 记录日志(CHECKOUT类型)CreditBalanceService.restoreBalanceForCancelOrder() → 恢复全额额度 → 记录日志(CANCEL_ORDER类型)CreditBalanceService.restoreBalanceForRefund() → 恢复相应额度 → 记录日志(REFUND类型)结账恢复(CHECKOUT)
/api/credit-balance/checkout接口取消订单恢复(CANCEL_ORDER)
CreditBalanceService.restoreBalanceForCancelOrder()方法退款恢复(REFUND)
CreditBalanceService.restoreBalanceForRefund()方法功能指标:
性能指标:
业务指标:
创建时间:2025-12-01 负责人:产品经理 状态:进行中(故事1、故事2已完成) 优先级:高
✅ 故事1:创建多租户信用额度模块(2025-12-02完成)
@d8d/credit-balance-module-mt✅ 故事2:创建多租户信用额度管理UI模块(2025-12-04完成)
@d8d/credit-balance-management-ui-mtCreditBalanceDialog,包含三个标签页(额度概览、额度操作、变更记录)creditBalanceClient.ts,支持多租户上下文-mt后缀和租户ID隔离