diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index e86f62010..da340f6b8 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -1014,7 +1014,7 @@ class ProjectController extends AbstractController if (Carbon::parse($time[1])->timestamp - Carbon::parse($time[0])->timestamp > 90 * 86400) { return Base::retError('时间范围限制最大90天'); } - + $type = Request::input('type','taskTime'); $headings = []; $headings[] = '任务ID'; $headings[] = '父级任务ID'; @@ -1037,7 +1037,7 @@ class ProjectController extends AbstractController ->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()); + ->betweenTime(Carbon::parse($time[0])->startOfDay(), Carbon::parse($time[1])->endOfDay(),$type); $builder->orderByDesc('project_tasks.id')->chunk(100, function($tasks) use (&$datas) { /** @var ProjectTask $task */ foreach ($tasks as $task) { @@ -1078,12 +1078,11 @@ class ProjectController extends AbstractController $firstDevTime = Carbon::parse($firstChange->created_at)->timestamp - Carbon::parse($task->created_at)->timestamp; $developTime += $firstDevTime; } - if (count($flowChanges) === 0) { + if (count($flowChanges) === 0 && $task->start_at) { $lastTime = $task->complete_at ? Carbon::parse($task->complete_at)->timestamp : time(); - $developTime = $lastTime - Carbon::parse($task->created_at)->timestamp; + $developTime = $lastTime - Carbon::parse($task->start_at)->timestamp; } $totalTime = $developTime + $testTime; //任务总用时 - if ($task->complete_at) { $a = Carbon::parse($task->complete_at)->timestamp; if ($task->start_at) { @@ -1112,10 +1111,10 @@ class ProjectController extends AbstractController $task->end_at ?: '-', $task->complete_at ?: '-', $task->archived_at ?: '-', - $planTime, - $totalTime > 0 ? Base::timeFormat($totalTime) : '-', + $planTime ?: '-', + $totalTime ? Base::timeFormat($totalTime) : '-', $overTime, - $developTime > 0 ? Base::timeFormat($developTime) : '-', + $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/Models/ProjectTask.php b/app/Models/ProjectTask.php index 2be90a51a..998d4fea8 100644 --- a/app/Models/ProjectTask.php +++ b/app/Models/ProjectTask.php @@ -314,18 +314,29 @@ class ProjectTask extends AbstractModel * @param $query * @param $start * @param $end + * @param $type * @return mixed */ - public function scopeBetweenTime($query, $start, $end) + public function scopeBetweenTime($query, $start, $end, $type) { - $query->where(function ($q1) use ($start, $end) { - $q1->where(function ($q2) use ($start) { - $q2->where('project_tasks.start_at', '<=', $start)->where('project_tasks.end_at', '>=', $start); - })->orWhere(function ($q2) use ($end) { - $q2->where('project_tasks.start_at', '<=', $end)->where('project_tasks.end_at', '>=', $end); - })->orWhere(function ($q2) use ($start, $end) { - $q2->where('project_tasks.start_at', '>', $start)->where('project_tasks.end_at', '<', $end); - }); + $query->where(function ($q1) use ($start, $end, $type) { + if ($type === 'taskTime') { + $q1->where(function ($q2) use ($start) { + $q2->where('project_tasks.start_at', '<=', $start)->where('project_tasks.end_at', '>=', $start); + })->orWhere(function ($q2) use ($end) { + $q2->where('project_tasks.start_at', '<=', $end)->where('project_tasks.end_at', '>=', $end); + })->orWhere(function ($q2) use ($start, $end) { + $q2->where('project_tasks.start_at', '>', $start)->where('project_tasks.end_at', '<', $end); + }); + } else { + $q1->where(function ($q2) use ($start) { + $q2->where('project_tasks.created_at', '>=', $start); + })->orWhere(function ($q2) use ($end) { + $q2->where('project_tasks.created_at', '<=', $end); + })->orWhere(function ($q2) use ($start, $end) { + $q2->where('project_tasks.created_at', '>', $start)->where('project_tasks.created_at', '<', $end); + }); + } }); return $query; } diff --git a/app/Module/Base.php b/app/Module/Base.php index d251a0bae..338b94fe5 100755 --- a/app/Module/Base.php +++ b/app/Module/Base.php @@ -1723,9 +1723,9 @@ class Base $hours = (int)($time / 3600); $time = $time % 3600; // 计算小时后剩余的毫秒数 } - $minutes = (int)($time / 60); // 剩下的毫秒数都算作分 + $minutes = ceil($time / 60); // 剩下的毫秒数都算作分 $daysStr = $days > 0 ? $days . '天' : ''; - $hoursStr = ($hours > 0 || $minutes > 0) ? $hours . '时' : ''; + $hoursStr = ($hours > 0 || ($days > 0 && $minutes > 0)) ? $hours . '时' : ''; $minuteStr = ($minutes > 0) ? $minutes . '分' : ''; return $daysStr . $hoursStr . $minuteStr; } @@ -1747,9 +1747,9 @@ class Base $hours = (int)($time / 3600); $time = $time % 3600; // 计算小时后剩余的毫秒数 } - $minutes = (int)($time / 60); // 剩下的毫秒数都算作分 + $minutes = ceil($time / 60); // 剩下的毫秒数都算作分 $daysStr = $days > 0 ? $days . '天' : ''; - $hoursStr = ($hours > 0 || $minutes > 0) ? $hours . '时' : ''; + $hoursStr = ($hours > 0 || ($days > 0 && $minutes > 0)) ? $hours . '时' : ''; $minuteStr = ($minutes > 0) ? $minutes . '分' : ''; return $daysStr . $hoursStr . $minuteStr; } diff --git a/resources/assets/js/pages/manage.vue b/resources/assets/js/pages/manage.vue index ae51c158d..9aa804ccc 100644 --- a/resources/assets/js/pages/manage.vue +++ b/resources/assets/js/pages/manage.vue @@ -249,6 +249,12 @@ style="width:100%" :placeholder="$L('请选择时间')"/> + + + {{$L('任务时间')}} + {{$L('创建时间')}} + +
@@ -364,6 +370,7 @@ export default { exportData: { userid: [], time: [], + type:'taskTime', }, dialogMsgSubscribe: null,