182140-增加transfer_apps允许转入转出控制字段.md 7.2 KB

增加transfer_apps允许转入/转出控制字段

时间: 2025年06月18日 21:40
任务: transfer_apps 增加 允许转入/允许转出 字段,用来控制是否允许转入/转出

任务需求

transfer_apps 表增加两个布尔字段:

  • allow_transfer_in - 是否允许转入(1=允许,0=禁止)
  • allow_transfer_out - 是否允许转出(1=允许,0=禁止)

用来提供更细粒度的转入/转出权限控制。

实现方案

1. 数据库层修改

添加字段

-- 添加允许转入字段
ALTER TABLE `kku_transfer_apps` 
ADD COLUMN `allow_transfer_in` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否允许转入(1=允许,0=禁止)' 
AFTER `is_enabled`;

-- 添加允许转出字段
ALTER TABLE `kku_transfer_apps` 
ADD COLUMN `allow_transfer_out` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否允许转出(1=允许,0=禁止)' 
AFTER `allow_transfer_in`;

-- 添加索引以提高查询性能
ALTER TABLE `kku_transfer_apps` 
ADD INDEX `idx_allow_transfer_in` (`allow_transfer_in`),
ADD INDEX `idx_allow_transfer_out` (`allow_transfer_out`);

字段特点

  • 默认值为1(允许),保证向后兼容
  • 添加了索引以提高查询性能
  • 使用tinyint(1)类型,与现有is_enabled字段保持一致

2. 模型层更新

TransferApp模型增强

// 新增字段属性注释
* @property  bool  $allow_transfer_in  是否允许转入(1=允许,0=禁止)
* @property  bool  $allow_transfer_out  是否允许转出(1=允许,0=禁止)

// 添加到fillable数组
'allow_transfer_in',
'allow_transfer_out',

// 添加类型转换
'allow_transfer_in' => 'boolean',
'allow_transfer_out' => 'boolean',

// 新增访问器方法
public function getAllowTransferInTextAttribute(): string
public function getAllowTransferInColorAttribute(): string
public function getAllowTransferOutTextAttribute(): string
public function getAllowTransferOutColorAttribute(): string

业务逻辑更新

更新 supportsTransferIn()supportsTransferOut() 方法:

public function supportsTransferIn(): bool
{
    if (!$this->is_enabled || !$this->allow_transfer_in) {
        return false;
    }
    // 原有逻辑...
}

public function supportsTransferOut(): bool
{
    if (!$this->is_enabled || !$this->allow_transfer_out) {
        return false;
    }
    // 原有逻辑...
}

3. DTO层更新

TransferAppDto增强

// 构造函数新增参数
public readonly bool $allow_transfer_in,
public readonly bool $allow_transfer_out,

// fromModel方法更新
allow_transfer_in: $model->allow_transfer_in,
allow_transfer_out: $model->allow_transfer_out,

// toArray方法更新
'allow_transfer_in' => $this->allow_transfer_in,
'allow_transfer_out' => $this->allow_transfer_out,

// 业务方法更新
public function supportsTransferIn(): bool
{
    if (!$this->is_enabled || !$this->allow_transfer_in) {
        return false;
    }
    // 原有逻辑...
}

4. 服务层更新

TransferThirdPartyService优化

更新错误信息,提供更明确的提示:

// 转入检查
if (!$transferApp->supportsTransferIn()) {
    return '该应用不支持充值功能或充值功能已被禁用';
}

// 转出检查
if (!$transferApp->supportsTransferOut()) {
    return '该应用不支持提现功能或提现功能已被禁用';
}

5. 后台管理更新

列表页面(Grid)

$grid->column('allow_transfer_in', '允许转入')->switch();
$grid->column('allow_transfer_out', '允许转出')->switch();

// 筛选器增加
$filter->equal('allow_transfer_in', '允许转入')->select([
    1 => '允许', 0 => '禁止',
]);
$filter->equal('allow_transfer_out', '允许转出')->select([
    1 => '允许', 0 => '禁止',
]);

// 支持功能列更新逻辑
if ($this->allow_transfer_in && $this->fund_in_uid > 0) $features[] = '转入';
if ($this->allow_transfer_out && $this->fund_to_uid > 0) $features[] = '转出';

详情页面(Show)

$show->field('allow_transfer_in', '允许转入')->using([1 => '允许', 0 => '禁止']);
$show->field('allow_transfer_out', '允许转出')->using([1 => '允许', 0 => '禁止']);

表单页面(Form)

$form->tab('状态设置', function (Form $form) {
    $form->switch('is_enabled', '启用状态')
        ->default(1)
        ->help('是否启用该应用');

    $form->switch('allow_transfer_in', '允许转入')
        ->default(1)
        ->help('是否允许转入操作');

    $form->switch('allow_transfer_out', '允许转出')
        ->default(1)
        ->help('是否允许转出操作');
});

功能特点

1. 细粒度控制

  • 可以单独控制转入和转出功能
  • 与应用启用状态独立,提供更灵活的控制
  • 支持临时禁用某个方向的操作而不影响另一个方向

2. 向后兼容

  • 默认值为允许,不影响现有应用
  • 现有业务逻辑自动适配新的控制机制
  • 不破坏现有API接口

3. 用户友好

  • 后台管理界面直观显示控制状态
  • 开关控件便于快速操作
  • 筛选功能支持按权限状态查询

4. 性能优化

  • 添加了数据库索引
  • 业务逻辑优先检查控制字段,提高效率

使用场景

1. 维护模式

  • 临时禁用转入功能进行系统维护
  • 禁用转出功能防止资金流失

2. 风险控制

  • 发现异常时快速禁用相关功能
  • 分阶段开放功能进行测试

3. 业务策略

  • 根据合作方协议控制功能开放
  • 实现差异化的服务等级

测试验证

1. 数据库测试

-- 验证字段添加成功
DESCRIBE `kku_transfer_apps`;

-- 验证默认值
SELECT id, keyname, is_enabled, allow_transfer_in, allow_transfer_out 
FROM kku_transfer_apps LIMIT 3;

2. 后台管理测试

  • ✅ 列表页面显示新字段
  • ✅ 表单页面包含控制开关
  • ✅ 详情页面显示权限状态
  • ✅ 筛选功能正常工作

3. 业务逻辑测试

  • ✅ supportsTransferIn/Out方法正确判断
  • ✅ TransferThirdPartyService错误提示准确
  • ✅ DTO对象包含新字段

文件变更清单

数据库文件

  • app/Module/Transfer/Databases/GenerateSql/add_transfer_control_fields.sql - 新增

模型文件

  • app/Module/Transfer/Models/TransferApp.php - 修改

DTO文件

  • app/Module/Transfer/Dtos/TransferAppDto.php - 修改

服务文件

  • app/Module/Transfer/Services/TransferThirdPartyService.php - 修改

后台管理文件

  • app/Module/Transfer/AdminControllers/Helper/TransferAppHelper.php - 修改

提交信息

为transfer_apps表增加允许转入/允许转出控制字段

- 数据库层:添加allow_transfer_in和allow_transfer_out字段
- 模型层:更新TransferApp模型支持新字段和相关方法
- DTO层:更新TransferAppDto包含新字段
- 服务层:更新TransferThirdPartyService使用新的控制逻辑
- 后台管理:更新表格、表单、详情页面支持新字段
- 业务逻辑:supportsTransferIn/Out方法现在考虑控制字段
- 提供细粒度的转入/转出权限控制功能

完成状态

✅ 任务已完成

  • 数据库字段添加成功
  • 模型和DTO层更新完成
  • 服务层逻辑优化完成
  • 后台管理界面更新完成
  • 业务逻辑正确集成新字段
  • 代码已提交并推送到远程仓库
  • 功能测试通过,运行正常