applyFilters($query, $params); $result = $query->select()->toArray(); $stats = $result[0] ?? []; return [ 'total' => (int)($stats['total'] ?? 0), 'success_count' => (int)($stats['success_count'] ?? 0), 'fail_count' => (int)($stats['fail_count'] ?? 0), ]; } /** * 分页查询日志列表,支持筛选条件 */ public function getList(array $params, array $pageAndLimit = []): Paginator { $query = $this->order('id', 'desc'); $this->applyFilters($query, $params); return $query->paginate($pageAndLimit); } /** * 应用筛选条件 */ private function applyFilters($query, array $params): void { if (!empty($params['name'])) { $query->whereLike('name', '%' . $params['name'] . '%'); } if (isset($params['success']) && $params['success'] !== '') { $query->where('success', intval($params['success'])); } if (!empty($params['start_time'])) { $query->where('create_time', '>=', $params['start_time']); } if (!empty($params['end_time'])) { $query->where('create_time', '<=', $params['end_time']); } } /** * 获取每个任务的最新一次执行记录 */ public function getLatestPerJob(): array { $subQuery = $this->field('MAX(id) as max_id') ->group('name') ->buildSql(); $records = $this->where('id IN ' . $subQuery) ->order('id', 'desc') ->select() ->toArray(); return array_map(function (array $record): array { return [ 'name' => $record['name'], 'rule' => $record['rule'], 'last_time' => $record['create_time'], 'duration' => $record['duration'], 'success' => $record['success'], ]; }, $records); } /** * 删除单条日志 */ public function deleteById(int $id): void { $this->model()->destroy($id); } /** * 批量删除日志 */ public function deleteByIds(array $ids): void { $this->model()->destroy($ids); } /** * 清空所有日志 */ public function clearAll(): void { $this->model()->where('1=1')->delete(); } }