model = new VideoModel(); } public static function make() { if (!self::$instance) { self::$instance = new static(); } return self::$instance; } /** * 获取视频集列表 */ public function getDataList($params, $pageSize = 15) { $where = ['a.mark' => 1]; // 状态过滤 $status = isset($params['status']) ? (int) $params['status'] : 0; if ($status > 0) { $where['a.status'] = $status; } // 查询 $query = $this->model->from('videos as a') ->where($where) ->where(function ($query) use ($params) { $keyword = isset($params['keyword']) ? trim($params['keyword']) : ''; if ($keyword) { $query->where('a.video_name', 'like', "%{$keyword}%"); } }) ->where(function ($query) use ($params) { $categoryId = isset($params['category_id']) ? (int) $params['category_id'] : 0; if ($categoryId) { $query->where('a.category_id', $categoryId); } $type = isset($params['type']) ? (int) $params['type'] : 0; if ($type) { $query->where('a.type', $type); } }) ->select([ 'a.id', 'a.video_name', 'a.category_id', 'a.poster', 'a.description', 'a.sort', 'a.type', 'a.create_time', 'a.update_time', 'a.status', 'a.is_recommend', ]) ->orderBy('a.sort', 'desc') ->orderBy('a.create_time', 'desc'); $list = $query->paginate($pageSize > 0 ? $pageSize : 9999999)->toArray(); // 格式化数据 if (!empty($list['data'])) { foreach ($list['data'] as &$item) { $item['create_time'] = $item['create_time'] ? datetime($item['create_time'], 'Y-m-d H:i:s') : ''; $item['update_time'] = $item['update_time'] ? datetime($item['update_time'], 'Y-m-d H:i:s') : ''; $item['poster'] = $item['poster'] ? get_image_url($item['poster']) : ''; } } return [ 'pageSize' => $pageSize, 'total' => $list['total'] ?? 0, 'list' => $list['data'] ?? [] ]; } /** * 编辑或新增视频集 */ public function edit() { $data = request()->all(); // 视频封面处理 if (!empty($data['poster'])) { $data['poster'] = get_image_path(trim($data['poster'])); } $id = $data['id'] ?? 0; $type = $data['type'] ?? 0; // 校验视频集名称是否唯一 $videoName = trim($data['video_name'] ?? ''); $checkId = $this->model->where(['video_name' => $videoName, 'type' => $type, 'mark' => 1])->value('id'); if ($checkId && $id != $checkId) { return message('视频集名称已存在', false); } // 默认字段处理 $data['update_time'] = time(); if (!$id) { $data['create_time'] = time(); } return parent::edit($data); // 调用父类的 edit 方法 } /** * 获取视频集详情 */ public function info() { $id = request()->input("id", 0); $info = []; if ($id) { $info = $this->model->getInfo($id); } $info['poster'] = $info['poster'] ? get_image_url($info['poster']) : ''; return message(MESSAGE_OK, true, $info); } /** * 获取视频集选项 */ public function options() { // 获取查询参数 $param = request()->all(); $keyword = getter($param, "keyword"); // 查询视频集名称或描述 $datas = $this->model ->where(function ($query) use ($keyword) { if ($keyword) { $query->where('video_name', 'like', "%{$keyword}%") ->orWhere('description', 'like', "%{$keyword}%"); } }) ->where(['mark' => 1]) ->select(['id', 'video_name']) ->get(); return $datas ? $datas->toArray() : []; } /** * 删除七天之前标记软删除的数据 */ public function delete() { // 设置日志标题 ActionLogModel::setRecord(session('userId'), ['type' => 1, 'title' => "删除视频信息", 'content' => json_encode(request()->post(), 256), 'module' => 'admin']); ActionLogModel::record(); // 获取要删除的课程集ID $ids = request()->post('id', []); if (!is_array($ids)) { $ids = [$ids]; } // 删除该课程集下关联的所有视频课程 if (!empty($ids)) { $videoCoursesModel = new VideoCoursesModel(); // 查询该课程集下的所有视频课程 $courseIds = $videoCoursesModel->whereIn('video_id', $ids) ->where('mark', 1) ->pluck('id') ->toArray(); if (!empty($courseIds)) { // 软删除视频课程(标记mark=0) $videoCoursesModel->whereIn('id', $courseIds)->update([ 'mark' => 0, 'update_time' => time() ]); } } // 清理七天前标记软删除的数据 $this->model->where('mark', 0)->where('update_time', '<=', time() - 7 * 86400)->delete(); $videoCoursesModel = new VideoCoursesModel(); $videoCoursesModel->where('mark', 0)->where('update_time', '<=', time() - 7 * 86400)->delete(); return parent::delete(); } }