perf: 时间范围任务

This commit is contained in:
kuaifan 2021-12-23 01:07:22 +08:00
parent 6c34f083e3
commit 663a8bb06d
3 changed files with 25 additions and 15 deletions

View File

@ -34,16 +34,10 @@ class ProjectController extends AbstractController
$data = []; $data = [];
// 今日待完成 // 今日待完成
$between = [
Carbon::today()->startOfDay(),
Carbon::today()->endOfDay()
];
$data['today'] = ProjectTask::authData(null, true)->whereParentId(0) $data['today'] = ProjectTask::authData(null, true)->whereParentId(0)
->whereNull('archived_at') ->whereNull('archived_at')
->whereNull('complete_at') ->whereNull('complete_at')
->where(function ($query) use ($between) { ->betweenTime(Carbon::today()->startOfDay(), Carbon::today()->endOfDay())
$query->whereBetween('start_at', $between)->orWhereBetween('end_at', $between);
})
->count(); ->count();
// 超期未完成 // 超期未完成
@ -610,13 +604,7 @@ class ProjectController extends AbstractController
$builder->whereNotNull('end_at')->where('end_at', '<', Carbon::parse($time_before)); $builder->whereNotNull('end_at')->where('end_at', '<', Carbon::parse($time_before));
} elseif (is_array($time)) { } elseif (is_array($time)) {
if (Base::isDateOrTime($time[0]) && Base::isDateOrTime($time[1])) { if (Base::isDateOrTime($time[0]) && Base::isDateOrTime($time[1])) {
$between = [ $builder->betweenTime(Carbon::parse($time[0])->startOfDay(), Carbon::parse($time[1])->endOfDay());
Carbon::parse($time[0])->startOfDay(),
Carbon::parse($time[1])->endOfDay()
];
$builder->where(function ($query) use ($between) {
$query->whereBetween('start_at', $between)->orWhereBetween('end_at', $between);
});
} }
} }
// //

View File

@ -54,6 +54,7 @@ use Request;
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\ProjectTaskUser[] $taskUser * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\ProjectTaskUser[] $taskUser
* @property-read int|null $task_user_count * @property-read int|null $task_user_count
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask authData($userid = null, $owner = false) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask authData($userid = null, $owner = false)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask betweenTime($start, $end)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask newQuery() * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask newQuery()
* @method static \Illuminate\Database\Query\Builder|ProjectTask onlyTrashed() * @method static \Illuminate\Database\Query\Builder|ProjectTask onlyTrashed()
@ -283,6 +284,27 @@ class ProjectTask extends AbstractModel
return $query; return $query;
} }
/**
* 指定范围内的任务
* @param $query
* @param $start
* @param $end
* @return mixed
*/
public function scopeBetweenTime($query, $start, $end)
{
$query->where(function ($q1) use ($start, $end) {
$q1->where(function ($q2) use ($start) {
$q2->where('start_at', '<=', $start)->where('end_at', '>=', $start);
})->orWhere(function ($q2) use ($end) {
$q2->where('start_at', '<=', $end)->where('end_at', '>=', $end);
})->orWhere(function ($q2) use ($start, $end) {
$q2->where('start_at', '>', $start)->where('end_at', '<', $end);
});
});
return $query;
}
/** /**
* 添加任务 * 添加任务
* @param $data * @param $data

View File

@ -172,7 +172,7 @@ export default {
data._end_time = end; data._end_time = end;
switch (dashboard) { switch (dashboard) {
case 'today': case 'today':
return (start >= todayStart && start <= todayEnd) || (end >= todayStart && end <= todayEnd); return (start <= todayStart && todayStart <= end) || (start <= todayEnd && todayEnd <= end) || (start > todayStart && todayEnd > end);
case 'overdue': case 'overdue':
return end <= todayStart; return end <= todayStart;
default: default: