notfff 2dff763760 添加TransferOld模块和任务记录 7 månader sedan
..
API.md 28cf90a4a9 调整Transfer模块外部API设计 - 通过OpenAPI模块进行对外开放 7 månader sedan
DATABASE.md 018fde5634 更新Transfer模块设计文档 - 增加out_id3字段和农场内部运转模式 7 månader sedan
DEV.md 2dff763760 添加TransferOld模块和任务记录 7 månader sedan
README.md 28cf90a4a9 调整Transfer模块外部API设计 - 通过OpenAPI模块进行对外开放 7 månader sedan
README_AUTO.md fcc9157aee 创建Transfer模块设计文档 7 månader sedan

README.md

Transfer 模块设计文档

更新时间: 2025-06-15
模块路径: app/Module/Transfer/
基于模块: TransferOld

模块概述

Transfer 模块是一个全新设计的资金划转/流转系统,用于处理用户与外部应用之间的资金转入转出操作。该模块基于TransferOld模块重新设计,采用现代化的架构模式,支持多种货币、多个外部应用的资金流转,并提供完整的订单管理、状态跟踪和自动化处理功能。

主要功能

  • 资金转入(In): 从外部应用向用户账户转入资金
  • 资金转出(Out): 从用户账户向外部应用转出资金
  • 订单管理: 完整的订单生命周期管理
  • 自动化处理: 定时任务自动处理订单和回调
  • 多应用支持: 支持多个外部应用的资金流转
  • 汇率转换: 支持不同汇率的资金转换
  • 状态跟踪: 完整的订单状态流转跟踪
  • 补单机制: 支持异常订单的手动补单操作
  • 农场内部模式: 支持纯内部运转,外部API地址为空时不进行外部通信

设计原则

  • 基于TransferOld模块的成熟业务逻辑
  • 采用现代化的模块架构设计
  • 遵循用户偏好的代码规范和命名约定
  • 参考物品模块(GameItems)的完整目录结构
  • 使用枚举类型避免魔法数字
  • 分离业务逻辑和数据访问层
  • 完善的验证和错误处理机制
  • 支持事件驱动架构和队列处理

目录结构

app/Module/Transfer/
├── AdminControllers/        # 后台管理控制器目录
│   ├── Helper/             # 后台辅助类目录
│   │   ├── TransferAppHelper.php      # 应用管理辅助类
│   │   ├── TransferOrderHelper.php    # 订单管理辅助类
│   │   ├── FilterHelper.php           # 筛选辅助类
│   │   ├── GridHelper.php             # 表格辅助类
│   │   ├── ShowHelper.php             # 详情辅助类
│   │   └── FormHelper.php             # 表单辅助类
│   ├── Tools/              # 后台工具目录
│   │   ├── RetryOrderTool.php         # 重试订单工具
│   │   ├── ManualCompleteTool.php     # 手动补单工具
│   │   └── ExportOrderTool.php        # 订单导出工具
│   ├── TransferAppController.php      # 应用管理控制器
│   └── TransferOrderController.php    # 订单管理控制器
├── Casts/                   # 模型转换器目录
│   ├── TransferAppCast.php           # 应用转换器
│   ├── TransferOrderCast.php         # 订单转换器
│   └── CallbackDataCast.php          # 回调数据转换器
├── Commands/                # 命令行工具目录
│   ├── TransferProcessCommand.php     # 订单处理命令
│   ├── TransferCallbackCommand.php   # 回调处理命令
│   ├── TransferStatsCommand.php      # 统计命令
│   └── TransferCleanCommand.php      # 数据清理命令
├── Config/                  # 配置文件目录
│   └── transfer.php        # 模块配置文件

├── Databases/               # 数据库相关目录
│   ├── GenerateSql/        # SQL生成脚本目录
│   │   ├── create_tables.sql         # 创建表SQL
│   │   ├── init_data.sql             # 初始化数据SQL
│   │   └── indexes.sql               # 索引SQL
│   └── README.md           # 数据库说明文档
├── Docs/                    # 文档目录
│   ├── README.md           # 模块设计文档
│   ├── API.md              # API接口文档
│   ├── DATABASE.md         # 数据库设计文档
│   ├── DEV.md              # 开发进度文档
│   └── README_AUTO.md      # 自动生成声明文档
├── Dtos/                    # 数据传输对象目录
│   ├── TransferAppDto.php            # 应用DTO
│   ├── TransferOrderDto.php          # 订单DTO
│   └── CallbackResultDto.php         # 回调结果DTO
├── Enums/                   # 枚举类目录
│   ├── TransferStatus.php            # 订单状态枚举
│   ├── TransferType.php              # 订单类型枚举
│   └── CallbackStatus.php            # 回调状态枚举
├── Events/                  # 事件目录
│   ├── TransferOrderCreated.php      # 订单创建事件
│   ├── TransferOrderCompleted.php    # 订单完成事件
│   └── TransferCallbackReceived.php  # 回调接收事件
├── Exceptions/              # 异常类目录
│   ├── TransferException.php         # 划转异常基类
│   ├── InsufficientBalanceException.php # 余额不足异常
│   └── ExternalApiException.php      # 外部API异常

├── Jobs/                    # 队列任务目录
│   ├── ProcessTransferOrderJob.php   # 处理订单任务
│   ├── SendCallbackJob.php           # 发送回调任务
│   └── RetryFailedOrderJob.php       # 重试失败订单任务
├── Listeners/               # 事件监听器目录
│   ├── TransferOrderListener.php     # 订单事件监听器
│   └── TransferCallbackListener.php  # 回调事件监听器
├── Logics/                  # 逻辑层目录
│   ├── TransferLogic.php             # 划转业务逻辑
│   ├── OrderLogic.php                # 订单处理逻辑
│   ├── CallbackLogic.php             # 回调处理逻辑
│   └── ExternalApiLogic.php          # 外部API调用逻辑
├── Models/                  # 数据模型目录
│   ├── TransferApp.php               # 划转应用模型
│   ├── TransferOrder.php             # 划转订单模型
│   └── README.md                     # 模型说明文档
├── Providers/               # 服务提供者目录
│   └── TransferServiceProvider.php   # 模块服务提供者
├── Repositories/            # 数据仓库目录
│   ├── TransferAppRepository.php     # 应用仓库
│   ├── TransferOrderRepository.php   # 订单仓库
│   └── README.md                     # 仓库说明文档
├── Routes/                  # 路由目录
│   └── admin.php           # 后台路由
├── Services/                # 服务层目录
│   ├── TransferService.php           # 对外服务接口
│   ├── ExternalApiService.php        # 外部API服务
│   └── StatisticsService.php         # 统计服务
├── Tests/                   # 测试目录
│   ├── Unit/               # 单元测试目录
│   │   ├── TransferServiceTest.php   # 服务层测试
│   │   ├── TransferLogicTest.php     # 逻辑层测试
│   │   └── TransferValidationTest.php # 验证测试
│   ├── Feature/            # 功能测试目录
│   │   ├── TransferApiTest.php       # API测试
│   │   └── TransferFlowTest.php      # 流程测试
│   └── README.md           # 测试说明文档
├── Validations/             # 验证类目录
│   ├── TransferInValidation.php      # 转入验证
│   ├── TransferOutValidation.php     # 转出验证
│   └── TransferAppValidation.php     # 应用验证
├── Validators/              # 验证器目录
│   ├── TransferAppValidator.php      # 应用验证器
│   ├── BusinessIdValidator.php       # 业务ID验证器
│   ├── TransferOpenValidator.php     # 划转开放验证器
│   ├── ExternalApiValidator.php      # 外部API验证器
│   └── AmountValidator.php           # 金额验证器
└── README.md                # 模块主文档

核心组件设计

1. 服务层 (Service)

TransferService.php - 对外提供的主要服务接口

主要方法:

  • createTransferOut() - 创建转出订单
  • createTransferIn() - 创建转入订单
  • getOrderInfo() - 获取订单信息
  • getAppConfig() - 获取应用配置
  • processCallback() - 处理回调结果

2. 逻辑层 (Logic)

TransferLogic.php - 核心业务逻辑处理

  • 订单创建逻辑
  • 汇率转换计算
  • 状态流转控制

OrderLogic.php - 订单处理逻辑

  • 订单状态管理
  • 资金操作处理
  • 外部API调用

CallbackLogic.php - 回调处理逻辑

  • 回调结果处理
  • 订单状态更新
  • 通知发送

3. 数据模型 (Model)

TransferApp.php - 划转应用配置模型

  • 应用基本信息
  • API配置信息
  • 汇率配置
  • 账户映射关系

TransferOrder.php - 划转订单模型

  • 订单基本信息
  • 金额信息
  • 状态信息
  • 关联关系

4. 枚举类型 (Enums)

TransferStatus.php - 订单状态枚举

enum TransferStatus: int
{
    case CREATED = 1;    // 已创建
    case PROCESSING = 20; // 处理中
    case CALLBACK = 30;   // 已回调
    case COMPLETED = 100; // 已完成
    case FAILED = -1;     // 失败
}

TransferType.php - 订单类型枚举

enum TransferType: int
{
    case IN = 1;   // 转入
    case OUT = 2;  // 转出
}

5. 验证系统

TransferInValidation.php - 转入验证类

  • 外部应用验证
  • 业务ID唯一性验证
  • 用户信息验证
  • 金额格式验证

TransferOutValidation.php - 转出验证类

  • 用户身份验证
  • 资金余额检查
  • 应用配置验证
  • 安全验证(密码、2FA)

6. OpenAPI集成

Transfer模块不直接提供API处理器,而是通过OpenAPI模块进行对外开放:

  • Handler注册: 在OpenAPI模块中注册Transfer相关Handler
  • 权限控制: 使用OpenAPI模块的权限系统
  • 路由管理: 通过OpenAPI模块的路由系统暴露接口
  • 认证授权: 使用OpenAPI模块的认证和授权机制

7. 队列任务 (Jobs)

ProcessTransferOrderJob.php - 订单处理任务

  • 处理待处理的转入转出订单
  • 执行资金操作和外部API调用
  • 更新订单状态

SendCallbackJob.php - 回调发送任务

  • 发送回调通知到外部应用
  • 处理回调响应
  • 支持重试机制

RetryFailedOrderJob.php - 重试失败订单任务

  • 重新处理失败的订单
  • 智能重试策略
  • 错误日志记录

8. 事件系统 (Events & Listeners)

TransferOrderCreated.php - 订单创建事件

  • 订单创建时触发
  • 通知相关系统

TransferOrderCompleted.php - 订单完成事件

  • 订单完成时触发
  • 更新统计数据

TransferCallbackReceived.php - 回调接收事件

  • 接收到外部回调时触发
  • 处理回调数据

9. 异常处理 (Exceptions)

TransferException.php - 划转异常基类

  • 所有划转相关异常的基类
  • 统一异常处理机制

InsufficientBalanceException.php - 余额不足异常

  • 用户余额不足时抛出
  • 提供详细错误信息

ExternalApiException.php - 外部API异常

  • 外部API调用失败时抛出
  • 包含API响应详情

数据库设计

transfer_apps 表 - 划转应用配置

CREATE TABLE `kku_transfer_apps` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `keyname` varchar(50) NOT NULL COMMENT '应用标识',
  `title` varchar(100) NOT NULL COMMENT '应用名称',
  `description` text COMMENT '应用描述',
  `out_id` int NOT NULL COMMENT '外部应用ID',
  `out_id2` int DEFAULT NULL COMMENT '外部应用ID2-开放',
  `out_id3` int DEFAULT NULL COMMENT '外部应用ID3-三方平台ID',
  `currency_id` int NOT NULL COMMENT '货币类型',
  `fund_id` int NOT NULL COMMENT '资金账户类型',
  `fund_to_uid` int DEFAULT NULL COMMENT '转入目标账户UID',
  `fund_in_uid` int DEFAULT NULL COMMENT '转入来源账户UID',
  `exchange_rate` decimal(10,4) NOT NULL DEFAULT '1.0000' COMMENT '汇率(钱包:业务)',
  `order_callback_url` varchar(255) DEFAULT NULL COMMENT '结果通知API地址(为空则不通知)',
  `order_in_info_url` varchar(255) DEFAULT NULL COMMENT '转入查询API(为空则不查询)',
  `order_out_create_url` varchar(255) DEFAULT NULL COMMENT '转出创建API(为空则不创建)',
  `order_out_info_url` varchar(255) DEFAULT NULL COMMENT '转出查询API(为空则不查询)',
  `is_enabled` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否启用',
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  `deleted_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `keyname` (`keyname`),
  KEY `out_id` (`out_id`),
  KEY `currency_id` (`currency_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='划转应用配置表';

transfer_orders 表 - 划转订单

CREATE TABLE `kku_transfer_orders` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `transfer_app_id` int unsigned NOT NULL COMMENT '划转应用ID',
  `out_id` int NOT NULL COMMENT '外部应用ID',
  `out_order_id` varchar(100) NOT NULL COMMENT '外部订单ID',
  `out_user_id` varchar(50) DEFAULT NULL COMMENT '外部用户ID',
  `user_id` int unsigned NOT NULL COMMENT '内部用户ID',
  `currency_id` int NOT NULL COMMENT '货币类型',
  `fund_id` int NOT NULL COMMENT '资金账户类型',
  `type` tinyint NOT NULL COMMENT '类型(1=转入,2=转出)',
  `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态',
  `out_amount` decimal(30,10) NOT NULL COMMENT '外部金额',
  `amount` decimal(30,10) NOT NULL COMMENT '内部金额',
  `exchange_rate` decimal(10,4) NOT NULL COMMENT '使用汇率',
  `callback_data` json DEFAULT NULL COMMENT '回调数据',
  `error_message` text COMMENT '错误信息',
  `processed_at` timestamp NULL DEFAULT NULL COMMENT '处理时间',
  `callback_at` timestamp NULL DEFAULT NULL COMMENT '回调时间',
  `completed_at` timestamp NULL DEFAULT NULL COMMENT '完成时间',
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  `deleted_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `out_order_unique` (`out_id`, `out_order_id`),
  KEY `transfer_app_id` (`transfer_app_id`),
  KEY `user_id` (`user_id`),
  KEY `status` (`status`),
  KEY `type` (`type`),
  KEY `created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='划转订单表';

业务流程设计

农场内部运转模式

当应用配置中的外部API地址字段为空(NULL)时,系统将启用农场内部运转模式:

  • 纯内部处理: 只进行内部资金操作,不调用任何外部API
  • 状态简化: 订单状态直接从CREATED跳转到COMPLETED
  • 无外部依赖: 不依赖外部系统响应,提高处理效率和稳定性
  • 适用场景: 内部系统间的资金划转,测试环境,或临时关闭外部对接

转出流程 (用户 → 外部应用)

  1. 用户发起转出请求 → TransferOutHandler
  2. 验证用户信息和余额 → TransferOutValidation
  3. 创建转出订单 → TransferLogic
  4. 扣除用户资金 → Fund模块
  5. 判断外部API配置 → OrderLogic
    • 如果order_out_create_url不为空:调用外部API创建订单
    • 如果order_out_create_url为空:跳过外部调用,直接完成
  6. 更新订单状态 → TransferOrder
    • 外部模式:状态更新为PROCESSING
    • 内部模式:状态直接更新为COMPLETED
  7. 后续处理 (仅外部模式)
    • 定时查询外部订单状态 → TransferOutTask
    • 处理回调结果 → CallbackLogic
    • 更新最终状态 → TransferOrder

转入流程 (外部应用 → 用户)

  1. 外部应用发起转入请求 → TransferInHandler
  2. 验证外部应用和参数 → TransferInValidation
  3. 创建转入订单 → TransferLogic
  4. 向用户账户转入资金 → Fund模块
  5. 判断回调配置 → CallbackLogic
    • 如果order_callback_url不为空:发送回调通知
    • 如果order_callback_url为空:跳过回调,直接完成
  6. 更新订单状态 → TransferOrder
    • 外部模式:状态更新为PROCESSING,等待回调响应
    • 内部模式:状态直接更新为COMPLETED
  7. 后续处理 (仅外部模式)
    • 处理回调响应 → TransferCallbackTask
    • 更新最终状态 → TransferOrder

接口设计

用户端功能

  • 服务层调用: 通过 TransferService 供客户端模块调用
  • 主要方法: createTransferOut(), getOrderInfo(), getAvailableApps()
  • 返回格式: DTO对象或错误信息字符串

外部应用接口

  • 集成方式: 通过OpenAPI模块进行对外开放
  • Handler注册: 在OpenAPI模块中注册Transfer相关Handler
  • 权限控制: 使用OpenAPI模块的权限系统进行访问控制
  • 主要接口:
    • POST /openapi/transfer/in - 创建转入订单
    • POST /openapi/transfer/out - 创建转出订单
    • GET /openapi/transfer/order/{businessId} - 查询订单状态

管理端功能

  • 后台控制器: TransferAppController, TransferOrderController
  • 主要功能: 应用配置管理、订单管理、监控统计
  • 访问方式: 后台管理界面,无API接口

开发计划

第一阶段:基础架构

  • 创建目录结构
  • 定义枚举类型
  • 创建数据模型
  • 设计数据库表

第二阶段:核心功能

  • 实现服务层接口
  • 开发业务逻辑层
  • 创建验证系统
  • 实现处理器

第三阶段:自动化处理

  • 开发自动化任务
  • 实现回调机制
  • 添加补单功能
  • 完善错误处理

第四阶段:管理功能

  • 创建后台控制器
  • 实现数据仓库
  • 添加管理界面
  • 完善监控功能

第五阶段:测试和优化

  • 编写单元测试
  • 集成测试
  • 性能优化
  • 文档完善

文档创建时间: 2025-06-15 14:53
基于模块: TransferOld
设计原则: 现代化架构 + 业务逻辑继承