model = new ExamPaperModel(); } public static function make() { if (!self::$instance) { self::$instance = new PaperService(); } return self::$instance; } public function customList($params, $pageSize = 15) { $query = $this->model->where('mark', operator: 1); if (!empty($params['scene_type'])) { $query->where('scene_type', $params['scene_type']); } if (!empty($params['type'])) { $query->where('type', $params['type']); } if (!empty($params['subject_id'])) { $query->where('subject_id', $params['subject_id']); } if (!empty($params['is_charge'])) { $query->where('is_charge', $params['is_charge']); } if (!empty($params['keyword'])) { $query->where(function ($q) use ($params) { $q->where('id', $params['keyword']) ->orWhere('name', 'like', "%{$params['keyword']}%"); }); } $list = $query->orderBy('sort', 'desc')->paginate($pageSize > 0 ? $pageSize : 9999999); $list = $list ? $list->toArray() : []; return [ 'pageSize' => $pageSize, 'total' => isset($list['total']) ? $list['total'] : 0, 'list' => isset($list['data']) ? $list['data'] : [] ]; return message("操作成功", true, $list); } public function createPaperWithTopics(array $formData, array $topicsData) { if (empty($formData) || empty($topicsData)) { return ['code' => 1, 'msg' => '表单数据或题目数据不能为空']; } DB::beginTransaction(); try { $paperData = array_merge($formData, [ 'mark' => 1, 'create_time' => time(), 'score_total' => 0, 'topic_count' => 0, ]); // 创建试卷 $paperId = $this->model->edit($paperData); // 重新加载完整字段 $paper = $this->model->find($paperId); $totalScore = 0; $topicCount = 0; foreach ($topicsData as $index => &$topic) { $score = intval($topic['score'] ?? 0); $totalScore += $score; $topicCount++; $topic = array_merge($topic, [ 'paper_id' => $paper->id, 'sort' => count($topicsData) - $index, 'status' => 1, 'mark' => 1, 'create_time' => time(), ]); unset($topic['_id']); } // 批量插入题目 ExamTopicModel::insert($topicsData); // 更新试卷总分和题目数量 $paper->score_total = $totalScore; $paper->topic_count = $topicCount; $paper->save(); DB::commit(); return ['code' => 0, 'msg' => '创建试卷成功', 'data' => $paper]; } catch (\Exception $e) { DB::rollBack(); return ['code' => 1, 'msg' => '创建失败:' . $e->getMessage()]; } } }