--- a/application/common/service/SecurityAuditService.php +++ b/application/common/service/SecurityAuditService.php @@ -63,6 +63,7 @@ if (is_object($row) && method_exists($row, 'toArray')) { $row = $row->toArray(); } + $row = self::normalizeCreatedAt($row, ltrim((string)\think\Config::get('database.type'), '\\') === \app\cores\database\Dm::class); $row['context'] = []; if (!empty($row['context_json'])) { $decoded = json_decode((string)$row['context_json'], true); @@ -88,6 +89,19 @@ return Db::name(self::TABLE_NAME)->insert($data) !== false; } + private static function normalizeCreatedAt(array $row, bool $isDm): array + { + $value = $row['created_at'] ?? null; + if (!$isDm || !is_string($value) || !preg_match('/^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\.0{1,6}$/D', $value, $parts)) { + return $row; + } + $date = \DateTime::createFromFormat('!Y-m-d H:i:s', $parts[1]); + if ($date && substr($parts[1], 0, 4) !== '0000' && $date->format('Y-m-d H:i:s') === $parts[1]) { + $row['created_at'] = $parts[1]; + } + return $row; + } + protected function queryAuditRows(array $params, int $page, int $pageSize): array { $keyword = trim((string)($params['keyword'] ?? '')); @@ -104,11 +118,11 @@ if ($keyword !== '') { $query->where(function ($subQuery) use ($keyword) { $subQuery->whereLike('event_code', '%' . $keyword . '%') - ->whereOrLike('event_name', '%' . $keyword . '%') - ->whereOrLike('operator', '%' . $keyword . '%') - ->whereOrLike('target_id', '%' . $keyword . '%') - ->whereOrLike('message', '%' . $keyword . '%') - ->whereOrLike('request_path', '%' . $keyword . '%'); + ->whereOr('event_name', 'like', '%' . $keyword . '%') + ->whereOr('operator', 'like', '%' . $keyword . '%') + ->whereOr('target_id', 'like', '%' . $keyword . '%') + ->whereOr('message', 'like', '%' . $keyword . '%') + ->whereOr('request_path', 'like', '%' . $keyword . '%'); }); } if ($result !== '') { @@ -127,8 +141,9 @@ $query->where('create_time', '<=', $endDate . ' 23:59:59'); } + $where = $query->getOptions('where')['AND']; $total = (int)$query->count(); - $rows = $query + $rows = Db::name(self::TABLE_NAME)->where($where) ->field([ 'id', 'store_id',