feat(shopro_huifu): 完善汇付进件功能的表单验证和错误处理 - 增加支行搜索功能的城市筛选支持,优化搜索逻辑 - 添加前端表单验证机制,包括身份证、银行卡、区域等必填字段校验 - 改进支行选择验证,确保必须从搜索结果中选择带联行号的支行 - 优化后端保存逻辑,添加强制保存参数控制 - 统一异常处理机制,增加HttpResponseException的正确抛出 - 完善用户界面提示信息,明确操作指引和错误反馈 - 修复表单提交前的数据准备逻辑,确保数据完整性 ```
59 行
2.0 KiB
PHP
59 行
2.0 KiB
PHP
<?php
|
|
|
|
namespace addons\shopro_huifu\library\onboard;
|
|
|
|
use addons\shopro_huifu\model\Onboard;
|
|
use think\Db;
|
|
|
|
class HuifuOnboardAdminService
|
|
{
|
|
public function saveDraft($userId, $roleType, $roleRefId, array $formData, $onboardId = 0)
|
|
{
|
|
$onboardId = intval($onboardId);
|
|
if ($onboardId > 0) {
|
|
$row = Onboard::get($onboardId);
|
|
if (!$row) {
|
|
throw new \InvalidArgumentException('进件记录不存在');
|
|
}
|
|
$userId = intval($row['user_id']);
|
|
$roleType = (string) $row['role_type'];
|
|
$roleRefId = intval($row['role_ref_id']);
|
|
} else {
|
|
$userId = intval($userId);
|
|
$roleRefId = intval($roleRefId);
|
|
if ($userId <= 0) {
|
|
throw new \InvalidArgumentException('请选择用户');
|
|
}
|
|
if (!in_array($roleType, ['promoter', 'regional_agent'], true)) {
|
|
throw new \InvalidArgumentException('请选择进件角色');
|
|
}
|
|
$this->assertRoleBinding($userId, $roleType, $roleRefId);
|
|
}
|
|
|
|
$service = new HuifuOnboardService();
|
|
return $service->saveDraft($userId, $roleType, $roleRefId, $formData, $onboardId, true);
|
|
}
|
|
|
|
protected function assertRoleBinding($userId, $roleType, $roleRefId)
|
|
{
|
|
if ($roleType === 'promoter') {
|
|
if ($roleRefId !== $userId) {
|
|
throw new \InvalidArgumentException('分销商角色参数无效');
|
|
}
|
|
$agent = Db::name('shopro_commission_agent')->where('user_id', $userId)->find();
|
|
if (!$agent) {
|
|
throw new \InvalidArgumentException('该用户不是分销商,无法创建分销商进件');
|
|
}
|
|
return;
|
|
}
|
|
|
|
$agent = Db::name('shopro_regional_agent')
|
|
->where('id', $roleRefId)
|
|
->where('user_id', $userId)
|
|
->find();
|
|
if (!$agent) {
|
|
throw new \InvalidArgumentException('区域公司与用户不匹配');
|
|
}
|
|
}
|
|
}
|