| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- <?php
- namespace App\Module\UrsPromotion\Commands;
- use App\Module\UrsPromotion\Dtos\UrsUserMappingDto;
- use App\Module\UrsPromotion\Dtos\UrsUserReferralDto;
- use App\Module\UrsPromotion\Dtos\UrsUserTalentDto;
- use App\Module\UrsPromotion\Models\UrsUserMapping;
- use App\Module\UrsPromotion\Models\UrsUserReferral;
- use App\Module\UrsPromotion\Services\UrsUserMappingService;
- use App\Module\UrsPromotion\Services\UrsReferralService;
- use App\Module\UrsPromotion\Services\UrsTalentService;
- use Illuminate\Console\Command;
- /**
- * URS推广模块DTO测试命令
- *
- * 测试DTO类的创建和使用是否正常
- */
- class TestUrsDtoCommand extends Command
- {
- /**
- * 命令签名
- */
- protected $signature = 'urs:test-dto';
- /**
- * 命令描述
- */
- protected $description = '测试URS推广模块DTO功能';
- /**
- * 执行命令
- */
- public function handle()
- {
- $this->info('开始测试URS推广模块DTO功能...');
- try {
- // 测试1:创建测试数据
- $this->createTestData();
- // 测试2:直接从模型创建DTO
- $this->testDirectDtoCreation();
- // 测试3:通过服务层获取DTO
- $this->testServiceDtoReturn();
- // 测试4:测试其他服务的DTO返回
- $this->testOtherServiceDtos();
- $this->info('✅ 所有DTO测试通过!');
- } catch (\Exception $e) {
- $this->error('❌ DTO测试失败:' . $e->getMessage());
- $this->error('错误堆栈:' . $e->getTraceAsString());
- }
- }
- /**
- * 测试直接从模型创建DTO
- */
- private function testDirectDtoCreation()
- {
- $this->info('测试1:直接从模型创建DTO');
- // 查找一个映射记录
- $mapping = UrsUserMapping::first();
- if (!$mapping) {
- $this->warn('没有找到映射记录,跳过此测试');
- return;
- }
- // 创建DTO
- $dto = UrsUserMappingDto::fromModel($mapping);
- // 验证DTO属性
- $this->info("DTO ID: {$dto->id}");
- $this->info("URS用户ID: {$dto->ursUserId}");
- $this->info("农场用户ID: {$dto->userId}");
- $this->info("状态: {$dto->statusText}");
- // 测试DTO的toArray方法
- $array = $dto->toArray();
- $this->info('DTO转数组成功,包含 ' . count($array) . ' 个字段');
- $this->info('✅ 直接DTO创建测试通过');
- }
- /**
- * 测试通过服务层获取DTO
- */
- private function testServiceDtoReturn()
- {
- $this->info('测试2:通过服务层获取DTO');
- // 查找一个映射记录
- $mapping = UrsUserMapping::first();
- if (!$mapping) {
- $this->warn('没有找到映射记录,跳过此测试');
- return;
- }
- // 通过服务层获取DTO
- $dto = UrsUserMappingService::getMappingDetail($mapping->urs_user_id);
- if (!$dto) {
- throw new \Exception('服务层返回了null');
- }
- if (!($dto instanceof UrsUserMappingDto)) {
- throw new \Exception('服务层返回的不是UrsUserMappingDto实例');
- }
- $this->info("服务层返回DTO ID: {$dto->id}");
- $this->info("URS用户ID: {$dto->ursUserId}");
- $this->info("状态文本: {$dto->statusText}");
- $this->info('✅ 服务层DTO返回测试通过');
- }
- /**
- * 创建测试数据
- */
- private function createTestData()
- {
- $this->info('创建测试数据...');
- // 创建测试映射关系
- $mapping = UrsUserMapping::firstOrCreate(
- ['urs_user_id' => 9001],
- [
- 'user_id' => 8001,
- 'mapping_time' => now(),
- 'status' => UrsUserMapping::STATUS_VALID,
- ]
- );
- // 创建测试推荐关系
- UrsUserReferral::firstOrCreate(
- ['urs_user_id' => 9002],
- [
- 'urs_referrer_id' => 9001,
- 'referral_time' => now(),
- 'status' => UrsUserReferral::STATUS_VALID,
- ]
- );
- $this->info('测试数据创建完成');
- }
- /**
- * 测试其他服务的DTO返回
- */
- private function testOtherServiceDtos()
- {
- $this->info('测试4:测试其他服务的DTO返回');
- // 测试推荐关系服务
- try {
- $referralDto = UrsReferralService::createReferral(9003, 9001);
- if (!($referralDto instanceof UrsUserReferralDto)) {
- throw new \Exception('UrsReferralService::createReferral 返回的不是UrsUserReferralDto实例');
- }
- $this->info("推荐关系DTO创建成功: URS用户{$referralDto->ursUserId} <- URS推荐人{$referralDto->ursReferrerId}");
- } catch (\Exception $e) {
- $this->warn('推荐关系测试跳过: ' . $e->getMessage());
- }
- // 测试达人等级服务
- try {
- $talentDto = UrsTalentService::updateTalentLevel(9001);
- if (!($talentDto instanceof UrsUserTalentDto)) {
- throw new \Exception('UrsTalentService::updateTalentLevel 返回的不是UrsUserTalentDto实例');
- }
- $this->info("达人等级DTO更新成功: 等级{$talentDto->talentLevel}, 直推{$talentDto->directCount}人");
- } catch (\Exception $e) {
- $this->warn('达人等级测试跳过: ' . $e->getMessage());
- }
- // 测试获取达人信息
- try {
- $talentInfoDto = UrsTalentService::getTalentInfo(9001);
- if ($talentInfoDto && !($talentInfoDto instanceof UrsUserTalentDto)) {
- throw new \Exception('UrsTalentService::getTalentInfo 返回的不是UrsUserTalentDto实例');
- }
- if ($talentInfoDto) {
- $this->info("达人信息DTO获取成功: {$talentInfoDto->talentName}");
- } else {
- $this->info("达人信息DTO为空(正常情况)");
- }
- } catch (\Exception $e) {
- $this->warn('达人信息测试跳过: ' . $e->getMessage());
- }
- $this->info('✅ 其他服务DTO测试通过');
- }
- }
|