| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- <?php
- namespace App\Module\Task\Dtos;
- use App\Module\Task\Models\TaskUserProgress;
- use App\Module\Task\Models\TaskUserTask;
- use UCore\Dto\BaseDto;
- /**
- * 任务进度数据传输对象
- *
- * 用于在不同层之间传递任务进度数据,特别是在服务层和控制器层之间。
- */
- class TaskProgressDto extends BaseDto
- {
- /**
- * 用户ID
- *
- * @var int
- */
- public int $userId;
-
- /**
- * 任务ID
- *
- * @var int
- */
- public int $taskId;
-
- /**
- * 用户任务ID
- *
- * @var int|null
- */
- public ?int $userTaskId = null;
-
- /**
- * 任务状态
- *
- * @var int
- */
- public int $status;
-
- /**
- * 总进度(0-100)
- *
- * @var int
- */
- public int $progress = 0;
-
- /**
- * 接取时间
- *
- * @var string|null
- */
- public ?string $acceptedAt = null;
-
- /**
- * 完成时间
- *
- * @var string|null
- */
- public ?string $completedAt = null;
-
- /**
- * 奖励领取时间
- *
- * @var string|null
- */
- public ?string $rewardedAt = null;
-
- /**
- * 上次重置时间
- *
- * @var string|null
- */
- public ?string $lastResetTime = null;
-
- /**
- * 下次重置时间
- *
- * @var string|null
- */
- public ?string $nextResetTime = null;
-
- /**
- * 重置次数
- *
- * @var int
- */
- public int $resetCount = 0;
-
- /**
- * 条件进度列表
- *
- * @var TaskConditionDto[]
- */
- public array $conditionProgress = [];
-
- /**
- * 任务信息
- *
- * @var TaskDto|null
- */
- public ?TaskDto $task = null;
-
- /**
- * 从TaskUserTask模型创建DTO
- *
- * @param TaskUserTask $userTask 用户任务模型
- * @return static
- */
- public static function fromModel(TaskUserTask $userTask): self
- {
- $dto = new self();
-
- $dto->userId = $userTask->user_id;
- $dto->taskId = $userTask->task_id;
- $dto->userTaskId = $userTask->id;
- $dto->status = $userTask->status;
- $dto->progress = $userTask->progress;
- $dto->acceptedAt = $userTask->accepted_at ? $userTask->accepted_at->format('Y-m-d H:i:s') : null;
- $dto->completedAt = $userTask->completed_at ? $userTask->completed_at->format('Y-m-d H:i:s') : null;
- $dto->rewardedAt = $userTask->rewarded_at ? $userTask->rewarded_at->format('Y-m-d H:i:s') : null;
- $dto->lastResetTime = $userTask->last_reset_time ? $userTask->last_reset_time->format('Y-m-d H:i:s') : null;
- $dto->nextResetTime = $userTask->next_reset_time ? $userTask->next_reset_time->format('Y-m-d H:i:s') : null;
- $dto->resetCount = $userTask->reset_count ?? 0;
-
- // 加载任务信息
- if ($userTask->relationLoaded('task')) {
- $dto->task = TaskDto::fromModel($userTask->task);
- }
-
- return $dto;
- }
-
- /**
- * 添加条件进度
- *
- * @param TaskConditionDto $conditionDto 条件DTO
- * @param int $currentValue 当前值
- * @return self
- */
- public function addConditionProgress(TaskConditionDto $conditionDto, int $currentValue): self
- {
- $conditionDto->setProgress($currentValue);
- $this->conditionProgress[] = $conditionDto;
-
- return $this;
- }
-
- /**
- * 从用户任务进度列表添加条件进度
- *
- * @param array $userProgressList 用户任务进度列表
- * @param array $conditionList 条件列表
- * @return self
- */
- public function addConditionProgressFromList(array $userProgressList, array $conditionList): self
- {
- foreach ($conditionList as $condition) {
- $conditionDto = TaskConditionDto::fromModel($condition);
-
- // 查找对应的进度记录
- $progress = null;
- foreach ($userProgressList as $userProgress) {
- if ($userProgress->achievement_condition_id === $condition->id) {
- $progress = $userProgress;
- break;
- }
- }
-
- // 添加条件进度
- $currentValue = $progress ? $progress->current_value : 0;
- $this->addConditionProgress($conditionDto, $currentValue);
- }
-
- return $this;
- }
- }
|