diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index 893b020f1..f5738fd8a 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -1014,26 +1014,23 @@ class ProjectController extends AbstractController if (Carbon::parse($time[1])->timestamp - Carbon::parse($time[0])->timestamp > 90 * 86400) { return Base::retError('时间范围限制最大90天'); } - // + $headings = []; $headings[] = '任务ID'; + $headings[] = '父级任务ID'; + $headings[] = '所属项目'; $headings[] = '任务标题'; - $headings[] = '负责人'; - $headings[] = '创建人'; - $headings[] = '是否完成'; - $headings[] = '完成时间'; - $headings[] = '是否归档'; - $headings[] = '归档时间'; $headings[] = '任务开始时间'; $headings[] = '任务结束时间'; - $headings[] = '结束剩余'; - $headings[] = '所属项目'; - $headings[] = '父级任务ID'; + $headings[] = '完成时间'; + $headings[] = '归档时间'; $headings[] = '任务计划用时'; + $headings[] = '实际完成总用时'; + $headings[] = '超时时间'; $headings[] = '开发用时'; $headings[] = '验收/测试用时'; - $headings[] = '任务实际总用时'; - $headings[] = '超时时间'; + $headings[] = '负责人'; + $headings[] = '创建人'; $datas = []; // $builder = ProjectTask::select(['project_tasks.*', 'project_task_users.userid as ownerid']) @@ -1044,17 +1041,6 @@ class ProjectController extends AbstractController $builder->orderByDesc('project_tasks.id')->chunk(100, function($tasks) use (&$datas) { /** @var ProjectTask $task */ foreach ($tasks as $task) { - if ($task->complete_at) { - $a = Carbon::parse($task->complete_at)->timestamp; - $b = Carbon::parse($task->end_at)->timestamp; - if ($b > $a) { - $endSurplus = Base::timeDiff($a, $b); - } else { - $endSurplus = "-" . Base::timeDiff($b, $a); - } - } else { - $endSurplus = '-'; - } $flowChanges = ProjectTaskFlowChange::whereTaskId($task->id)->get(); $developTime = 0;//开发时间 $testTime = 0;//验收/测试时间 @@ -1097,6 +1083,14 @@ class ProjectController extends AbstractController $developTime = $lastTime - Carbon::parse($task->created_at)->timestamp; } $totalTime = $developTime + $testTime; //任务总用时 + + if ($task->complete_at) { + $a = Carbon::parse($task->complete_at)->timestamp; + if ($task->start_at) { + $b = Carbon::parse($task->start_at)->timestamp; + $totalTime = $a - $b; + } + } $planTime = '-';//任务计划用时 $overTime = '-';//超时时间 if ($task->end_at) { @@ -1109,26 +1103,22 @@ class ProjectController extends AbstractController } $planTime = Base::timeDiff($startTime, $endTime); } - $datas[] = [ $task->id, + $task->parent_id ?: '-', + Base::filterEmoji($task->project?->name) ?: '-', Base::filterEmoji($task->name), - Base::filterEmoji(User::userid2nickname($task->ownerid)) . " (ID: {$task->ownerid})", - Base::filterEmoji(User::userid2nickname($task->userid)) . " (ID: {$task->userid})", - $task->complete_at ? '已完成' : '-', - $task->complete_at ?: '-', - $task->archived_at ? '已归档' : '-', - $task->archived_at ?: '-', $task->start_at ?: '-', $task->end_at ?: '-', - $endSurplus, - Base::filterEmoji($task->project?->name) ?: '-', - $task->parent_id ?: '-', + $task->complete_at ?: '-', + $task->archived_at ?: '-', $planTime, - $developTime > 0 ? Base::timeFormat($developTime) : '-', - $testTime > 0 ? Base::timeFormat($testTime) : '-', $totalTime > 0 ? Base::timeFormat($totalTime) : '-', $overTime, + $developTime > 0 ? Base::timeFormat($developTime) : '-', + $testTime > 0 ? Base::timeFormat($testTime) : '-', + Base::filterEmoji(User::userid2nickname($task->ownerid)) . " (ID: {$task->ownerid})", + Base::filterEmoji(User::userid2nickname($task->userid)) . " (ID: {$task->userid})", ]; } }); diff --git a/app/Module/Base.php b/app/Module/Base.php index 7cdc5a125..d251a0bae 100755 --- a/app/Module/Base.php +++ b/app/Module/Base.php @@ -1712,24 +1712,22 @@ class Base */ public static function timeDiff($s, $e) { - $d = $e - $s; - if ($d > 86400) { - $day = floor($d / 86400); - $hour = ceil(($d - ($day * 86400)) / 3600); - if ($hour > 0) { - return $day . '天' . $hour . '小时'; - } else { - return $day . '天'; - } - } elseif ($d > 3600) { - return ceil($d / 3600) . '小时'; - } elseif ($d > 60) { - return ceil($d / 60) . '分钟'; - } elseif ($d > 1) { - return '1分钟内'; - } else { - return '0秒'; + $time = $e - $s; + $days = 0; + if ($time >= 86400) { // 如果大于1天 + $days = (int)($time / 86400); + $time = $time % 86400; // 计算天后剩余的毫秒数 } + $hours = 0; + if ($time >= 3600) { // 如果大于1小时 + $hours = (int)($time / 3600); + $time = $time % 3600; // 计算小时后剩余的毫秒数 + } + $minutes = (int)($time / 60); // 剩下的毫秒数都算作分 + $daysStr = $days > 0 ? $days . '天' : ''; + $hoursStr = ($hours > 0 || $minutes > 0) ? $hours . '时' : ''; + $minuteStr = ($minutes > 0) ? $minutes . '分' : ''; + return $daysStr . $hoursStr . $minuteStr; } /** @@ -1739,24 +1737,21 @@ class Base */ public static function timeFormat($time) { - if ($time > 86400) { - $day = floor($time / 86400); - $hour = ceil(($time - ($day * 86400)) / 3600); - if ($hour > 0) { - return $day . '天' . $hour . '小时'; - } else { - return $day . '天'; - } - } elseif ($time > 3600) { - return ceil($time / 3600) . '小时'; - } elseif ($time > 60) { - return ceil($time / 60) . '分钟'; - } elseif ($time > 1) { - return '1分钟内'; - } else { - return '0秒'; + $days = 0; + if ($time >= 86400) { // 如果大于1天 + $days = (int)($time / 86400); + $time = $time % 86400; // 计算天后剩余的毫秒数 } - + $hours = 0; + if ($time >= 3600) { // 如果大于1小时 + $hours = (int)($time / 3600); + $time = $time % 3600; // 计算小时后剩余的毫秒数 + } + $minutes = (int)($time / 60); // 剩下的毫秒数都算作分 + $daysStr = $days > 0 ? $days . '天' : ''; + $hoursStr = ($hours > 0 || $minutes > 0) ? $hours . '时' : ''; + $minuteStr = ($minutes > 0) ? $minutes . '分' : ''; + return $daysStr . $hoursStr . $minuteStr; } /**