|
|
@@ -425,37 +425,69 @@ class NewsService implements NewsServiceInterface
|
|
|
if ($type_id != 10000) {
|
|
|
$where[] = ['article.admin_user_id', '=', $user_id];
|
|
|
}
|
|
|
-
|
|
|
- $rep = Article::where($where)
|
|
|
- ->whereNotIn('article.status', [404])
|
|
|
- ->when($status1, function ($query) use ($status1) {
|
|
|
- if (isset($status1) && $status1) {
|
|
|
- $query->whereIn('article.status', $status1);
|
|
|
+ $startTime = microtime(true);
|
|
|
+ $rep = Article::query()
|
|
|
+ // 预加载相关关联
|
|
|
+ ->with([
|
|
|
+ 'category' => function ($query) {
|
|
|
+ $query->select('id', 'name');
|
|
|
+ },
|
|
|
+ 'websiteCategory' => function ($query) {
|
|
|
+ $query->select('website_id', 'category_id', 'alias');
|
|
|
}
|
|
|
+ ])
|
|
|
+ // 构建where条件
|
|
|
+ ->when(isset($data['id']) && $data['id'], function ($query) use ($data) {
|
|
|
+ $query->where('article.id', '=', $data['id']);
|
|
|
})
|
|
|
- ->leftJoin('category', 'article.catid', 'category.id')
|
|
|
- ->leftJoin('website_category', function ($join) {
|
|
|
- $join->on('article.web_site_id', '=', 'website_category.website_id')
|
|
|
- ->on('article.catid', '=', 'website_category.category_id');
|
|
|
+ ->when(isset($data['title']) && $data['title'], function ($query) use ($data) {
|
|
|
+ $query->where('article.title', 'like', '%' . $data['title'] . '%');
|
|
|
})
|
|
|
- ->select("article.*", "category.name as category_name", "website_category.alias")
|
|
|
- ->orderBy("article.updated_at", "desc")
|
|
|
- ->limit($data['pageSize'])
|
|
|
- ->offset(($data['page'] - 1) * $data['pageSize'])->get();
|
|
|
- $count = Article::where($where)->whereNotIn('article.status', [404])
|
|
|
- ->when($status1, function ($query) use ($status1) {
|
|
|
- if (isset($status1) && $status1) {
|
|
|
+ ->when(isset($data['category_name']) && $data['category_name'], function ($query) use ($data) {
|
|
|
+ // 使用子查询替代左连接进行模糊搜索
|
|
|
+ $query->whereHas('category', function ($subQuery) use ($data) {
|
|
|
+ $subQuery->where('name', 'like', '%' . $data['category_name'] . '%');
|
|
|
+ });
|
|
|
+ })
|
|
|
+ ->when(isset($data['catid']) && $data['catid'], function ($query) use ($data) {
|
|
|
+ $query->where('article.catid', '=', $data['catid']);
|
|
|
+ })
|
|
|
+ ->when(isset($data['author']) && $data['author'], function ($query) use ($data) {
|
|
|
+ $query->where('article.author', '=', $data['author']);
|
|
|
+ })
|
|
|
+ ->when(isset($data['islink']) && $data['islink'] !== "", function ($query) use ($data) {
|
|
|
+ $query->where('article.islink', '=', $data['islink']);
|
|
|
+ })
|
|
|
+ ->when(isset($data['status']) && $data['status'] !== "", function ($query) use ($data) {
|
|
|
+ $query->where('article.status', '=', $data['status']);
|
|
|
+ })
|
|
|
+ ->when(isset($data['status1']) && $data['status1'], function ($query) use ($data) {
|
|
|
+ // 安全地处理JSON字符串
|
|
|
+ $status1 = is_array($data['status1']) ? $data['status1'] : json_decode($data['status1'], true) ?? [];
|
|
|
+ if (!empty($status1)) {
|
|
|
$query->whereIn('article.status', $status1);
|
|
|
}
|
|
|
})
|
|
|
- ->leftJoin('category', 'article.catid', 'category.id')->count();
|
|
|
+ // 非管理员限制
|
|
|
+ ->when($type_id != 10000, function ($query) use ($user_id) {
|
|
|
+ $query->where('article.admin_user_id', '=', $user_id);
|
|
|
+ })
|
|
|
+ // 基础条件
|
|
|
+ ->whereNotIn('article.status', [404])
|
|
|
+ // 排序和分页
|
|
|
+ ->orderBy('article.updated_at', 'desc')
|
|
|
+ ->paginate($data['pageSize'], ["article.*"]);
|
|
|
+
|
|
|
+ // 获取结果并格式化
|
|
|
$data = [
|
|
|
- 'rows' => $rep->toArray(),
|
|
|
- 'count' => $count,
|
|
|
+ 'rows' => $rep->items(),
|
|
|
+ 'count' => $rep->total(),
|
|
|
];
|
|
|
- if (empty($rep)) {
|
|
|
- return Result::error("没有信息数据");
|
|
|
- }
|
|
|
+ // 执行查询
|
|
|
+ $endTime = microtime(true);
|
|
|
+ $executionTime = ($endTime - $startTime) * 1000;
|
|
|
+
|
|
|
+ echo "查询执行时间: {$executionTime}ms\n";
|
|
|
return Result::success($data);
|
|
|
}
|
|
|
|
|
|
@@ -4318,6 +4350,8 @@ class NewsService implements NewsServiceInterface
|
|
|
date_default_timezone_set('Asia/Shanghai');
|
|
|
$data['created_at'] = date('Y-m-d H:i:s');
|
|
|
$data['updated_at'] = date('Y-m-d H:i:s');
|
|
|
+ // $data['level'] = "1,2,3,4,5";
|
|
|
+ $level = json_decode($data['level'], true);
|
|
|
$user_id = UserInfo::
|
|
|
//city_id不是null
|
|
|
whereNotNull('city_id')
|
|
|
@@ -4332,6 +4366,9 @@ class NewsService implements NewsServiceInterface
|
|
|
$subQuery->whereRaw("JSON_VALID(department_arr_id) AND JSON_CONTAINS(department_arr_id, '" . intval($data['department_id']) . "') = 1");
|
|
|
});
|
|
|
})
|
|
|
+ ->when(isset($level) && is_array($level), function ($query) use ($level) {
|
|
|
+ $query->whereIn('level', $level);
|
|
|
+ })
|
|
|
->pluck('user_id')->toArray();
|
|
|
$user_id = array_unique($user_id);
|
|
|
$chat_ids = $user_id;
|