From 7acc9227fffa1ea8e55eae61327f0571b589a6e5 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Thu, 11 Dec 2025 00:43:54 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E5=AF=BC=E5=87=BA=E6=BC=8F=E6=8E=89=E6=97=A0?= =?UTF-8?q?=E8=AE=A1=E5=88=92=E6=97=B6=E9=97=B4=E5=B7=B2=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Api/ProjectController.php | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index 9456994e3..9ce905b3d 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -1359,11 +1359,30 @@ class ProjectController extends AbstractController 'style' => 'font-weight: bold;padding-bottom: 4px;', ]; // + $startTime = Carbon::parse($time[0])->startOfDay(); + $endTime = Carbon::parse($time[1])->endOfDay(); $builder = ProjectTask::with(['taskTag'])->select(['project_tasks.*', 'project_task_users.userid as ownerid']) ->join('project_task_users', 'project_tasks.id', '=', 'project_task_users.task_id') ->where('project_task_users.owner', 1) - ->whereIn('project_task_users.userid', $userid) - ->betweenTime(Carbon::parse($time[0])->startOfDay(), Carbon::parse($time[1])->endOfDay(), $type); + ->whereIn('project_task_users.userid', $userid); + // 按导出时间类型筛选: + // - createdTime:仅按创建时间范围筛选; + // - 任务时间(默认):优先使用任务计划时间筛选,但对“无计划时间”的任务, + // 若在考核期内已完成,则按完成时间 complete_at 兜底纳入导出,避免漏掉考核期内完成的任务。 + if ($type === 'createdTime') { + $builder->betweenTime($startTime, $endTime, $type); + } else { + $builder->where(function ($query) use ($startTime, $endTime) { + $query->betweenTime($startTime, $endTime, 'taskTime') + ->orWhere(function ($q2) use ($startTime, $endTime) { + $q2->where(function ($q3) { + $q3->whereNull('project_tasks.start_at') + ->orWhereNull('project_tasks.end_at'); + })->whereNotNull('project_tasks.complete_at') + ->whereBetween('project_tasks.complete_at', [$startTime, $endTime]); + }); + }); + } $builder->orderByDesc('project_tasks.id')->chunk(100, function ($tasks) use ($doo, &$datas) { /** @var ProjectTask $task */ foreach ($tasks as $task) {