all(); // 签到用户 $courseContentCheck = CourseContentCheck::where(function ($query) use ($all) { if (isset($all['course_id'])) { $query->where('course_id', $all['course_id']); } if (isset($all['course_content_id'])) { $query->where('course_content_id', $all['course_content_id']); } })->get(); $list = CourseSign::with(['course.typeDetail', 'user'])->whereHas('user', function ($query) use ($all) { if (isset($all['name'])) { $query->where('name', 'like', '%' . $all['name'] . '%'); } if (isset($all['mobile'])) { $query->where('mobile', 'like', '%' . $all['mobile'] . '%'); } })->where(function ($query) use ($all, $courseContentCheck) { if (isset($all['course_id'])) { $query->where('course_id', $all['course_id']); } if (isset($all['has_check'])) { if ($all['has_check'] == 1) { $query->whereIn('user_id', $courseContentCheck->pluck('user_id')); } else { $query->whereNotIn('user_id', $courseContentCheck->pluck('user_id')); } } if (isset($all['filter']) && !empty($all['filter'])) { foreach ($all['filter'] as $condition) { $key = $condition['key'] ?? null; $op = $condition['op'] ?? null; $value = $condition['value'] ?? null; if (!isset($key) || !isset($op) || !isset($value)) { continue; } // 等于 if ($op == 'eq') { $query->where($key, $value); } // 不等于 if ($op == 'neq') { $query->where($key, '!=', $value); } // 模糊搜索 if ($op == 'like') { $query->where($key, 'like', '%' . $value . '%'); } // 否定模糊搜索 if ($op == 'notlike') { $query->where($key, 'not like', '%' . $value . '%'); } // 范围搜索 if ($op == 'range') { list($from, $to) = explode(',', $value); if (empty($from) || empty($to)) { continue; } $query->whereBetween($key, [$from, $to]); } } } })->orderBy($all['sort_name'] ?? 'id', $all['sort_type'] ?? 'desc') ->orderBy('created_at', 'desc'); if (isset($all['is_export']) && !empty($all['is_export'])) { $list = $list->limit(5000)->get()->toArray(); foreach ($list as $item) { $courseContentChecks = CourseContentCheck::where('course_id', $item->course_id) ->where(function ($query) use ($all) { if (isset($all['course_content_id'])) { $query->where('course_content_id', $all['course_content_id']); } })->first(); // 是否存在courseContentCheck if ($courseContentChecks) { $item['course_content_check_text'] = '已签到'; } else { $item['course_content_check_text'] = '未签到'; } } return Excel::download(new CommonExport($list, $all['export_fields'] ?? ''), $all['file_name'] ?? '' . date('YmdHis') . '.xlsx'); } else { // 输出 $list = $list->paginate($all['page_size'] ?? 20); foreach ($list as $item) { $item->course_content_checks = CourseContentCheck::where('course_id', $item->course_id) ->where(function ($query) use ($all) { if (isset($all['course_content_id'])) { $query->where('course_content_id', $all['course_content_id']); } })->first(); } } return $this->success($list); } /** * @OA\Get( * path="/api/admin/course-content-check/show", * tags={"签到管理"}, * summary="详情", * description="", * @OA\Parameter(name="id", in="query", @OA\Schema(type="string"), required=true, description="id"), * @OA\Parameter(name="show_relation", in="query", @OA\Schema(type="string"), required=false, description="需要输出的关联关系数组,填写输出指定数据"), * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), * @OA\Response( * response="200", * description="暂无" * ) * ) */ public function show() { return parent::show(); } /** * @OA\Post( * path="/api/admin/course-content-check/save", * tags={"签到管理"}, * summary="保存", * description="", * @OA\Parameter(name="id", in="query", @OA\Schema(type="int"), required=true, description="Id(存在更新,不存在新增)"), * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="认证token"), * @OA\Response( * response="200", * description="操作成功" * ) * ) */ public function save() { return parent::save(); } /** * @OA\Get( * path="/api/admin/course-content-check/destroy", * tags={"签到管理"}, * summary="删除", * description="", * @OA\Parameter(name="id", in="query", @OA\Schema(type="string"), required=true, description="id"), * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), * @OA\Response( * response="200", * description="暂无" * ) * ) */ public function destroy() { return parent::destroy(); } }