| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- <?php
- namespace App\Module\Task\Repositorys;
- use App\Module\Task\Models\Task;
- use Dcat\Admin\Repositories\EloquentRepository;
- /**
- * 任务数据仓库类
- *
- * 提供任务数据的访问和操作功能。
- * 该类是任务模块与后台管理系统的桥梁,用于处理任务数据的CRUD操作。
- */
- class TaskRepository extends EloquentRepository
- {
- /**
- * 关联的Eloquent模型类
- *
- * @var string
- */
- protected $eloquentClass = Task::class;
-
- /**
- * 复制任务
- *
- * @param int $id 任务ID
- * @return Task 复制后的新任务
- */
- public function duplicate(int $id): Task
- {
- $task = $this->eloquentClass::findOrFail($id);
- $newTask = $task->replicate();
- $newTask->name = $task->name . ' (复制)';
- $newTask->save();
-
- // 复制任务奖励
- foreach ($task->rewards as $reward) {
- $newReward = $reward->replicate();
- $newReward->task_id = $newTask->id;
- $newReward->save();
- }
-
- // 复制任务消耗
- foreach ($task->costs as $cost) {
- $newCost = $cost->replicate();
- $newCost->task_id = $newTask->id;
- $newCost->save();
- }
-
- // 复制任务达成条件
- foreach ($task->achievementConditions as $condition) {
- $newCondition = $condition->replicate();
- $newCondition->task_id = $newTask->id;
- $newCondition->save();
- }
-
- return $newTask;
- }
-
- /**
- * 获取可用任务列表
- *
- * @param int $userId 用户ID
- * @param string|null $type 任务类型
- * @param int $userLevel 用户等级
- * @return array 可用任务列表
- */
- public function getAvailableTasks(int $userId, ?string $type = null, int $userLevel = 0): array
- {
- $query = $this->eloquentClass::query()
- ->where('is_active', true)
- ->where('level_required', '<=', $userLevel)
- ->where(function ($query) {
- $query->whereNull('start_time')
- ->orWhere('start_time', '<=', now());
- })
- ->where(function ($query) {
- $query->whereNull('end_time')
- ->orWhere('end_time', '>=', now());
- });
-
- if ($type) {
- $query->where('type', $type);
- }
-
- return $query->get()->toArray();
- }
- }
|