任务时间: 2025年06月15日 19:16-19:19
任务类型: 功能扩展
模块: UrsPromotion
扩展UrsUserMappingService::getFarmUserId方法,使其在不存在映射关系时自动创建新用户并绑定关系。
'urs-' + ursUserId原逻辑:
新逻辑:
'urs-' + ursUserIdStr::random(12)文件: app/Module/UrsPromotion/Services/UrsUserMappingService.php
添加导入:
use App\Module\User\Services\UserService;
use Illuminate\Support\Str;
方法重构:
public static function getFarmUserId(int $ursUserId): ?int
{
// 首先尝试获取现有映射关系
$existingFarmUserId = UrsUserMapping::getFarmUserIdByUrsUserId($ursUserId);
if ($existingFarmUserId !== null) {
return $existingFarmUserId;
}
// 不存在映射关系,自动创建新用户并建立映射
try {
DB::beginTransaction();
// 生成用户名和随机密码
$username = 'urs-' . $ursUserId;
$password = Str::random(12);
// 创建新用户
$userDto = UserService::create($username, $password);
if (is_string($userDto)) {
// 创建失败
DB::rollBack();
Log::error('自动创建URS用户失败', [
'urs_user_id' => $ursUserId,
'username' => $username,
'error' => $userDto
]);
return null;
}
// 创建用户映射关系
$mapping = UrsUserMapping::create([
'urs_user_id' => $ursUserId,
'user_id' => $userDto->id,
'mapping_time' => now(),
'status' => UrsUserMapping::STATUS_VALID,
]);
DB::commit();
Log::info('自动创建URS用户映射成功', [
'urs_user_id' => $ursUserId,
'farm_user_id' => $userDto->id,
'username' => $username,
'mapping_id' => $mapping->id
]);
return $userDto->id;
} catch (\Exception $e) {
DB::rollBack();
Log::error('自动创建URS用户映射失败', [
'urs_user_id' => $ursUserId,
'error' => $e->getMessage()
]);
return null;
}
}
正常流程测试:
异常情况测试:
性能测试:
扩展UrsUserMappingService::getFarmUserId方法,支持自动创建用户并绑定关系
- 当URS用户ID不存在映射关系时,自动创建新的农场用户
- 用户名格式:'urs-' + ursUserId
- 密码:随机生成12位字符串
- 自动建立URS用户与农场用户的映射关系
- 添加详细的日志记录和异常处理
- 使用数据库事务确保数据一致性
成功扩展了UrsUserMappingService::getFarmUserId方法,实现了自动创建用户并绑定关系的功能。该实现具有良好的错误处理机制、完整的日志记录和数据一致性保证,同时保持了向后兼容性。