From 2fa7f2e48c971ef59995ed7b68f5414a6f323ea0 Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Thu, 28 Aug 2025 17:29:22 +0800 Subject: [PATCH] update --- ...urseContentEvaluationTestDataGenerator.php | 261 +++++++----------- 1 file changed, 107 insertions(+), 154 deletions(-) diff --git a/app/Services/TestData/CourseContentEvaluationTestDataGenerator.php b/app/Services/TestData/CourseContentEvaluationTestDataGenerator.php index ddcfe07..1aa32bf 100644 --- a/app/Services/TestData/CourseContentEvaluationTestDataGenerator.php +++ b/app/Services/TestData/CourseContentEvaluationTestDataGenerator.php @@ -80,13 +80,21 @@ class CourseContentEvaluationTestDataGenerator // 为每个课程创建一个评价问卷 $evaluation = $this->createEvaluation($courseContents->first(), $course, $faker); - // 4) 为每个问卷生成问题字段(包含该课程的所有内容) + // 4) 为每个问卷生成问题字段 $allAsks = []; + $sort = 1; + + // 为每个课程内容生成4个维度的问题(1-6题) foreach ($courseContents as $courseContent) { - $asks = $this->createEvaluationAsks($evaluation, $courseContent, $course, 0, $faker); + $asks = $this->createCourseContentEvaluationAsks($evaluation, $courseContent, $course, $sort, $faker); $allAsks = array_merge($allAsks, $asks); + $sort += 4; // 每个课程内容4个问题 } + // 添加课程级别的通用问题(7-10题) + $courseLevelAsks = $this->createCourseLevelAsks($evaluation, $course, $sort, $faker); + $allAsks = array_merge($allAsks, $courseLevelAsks); + // 5) 生成用户提交的表单数据 $formCount = $faker->numberBetween(10, min(40, $allUsers->count())); $submittedUsers = $allUsers->random($formCount); @@ -131,14 +139,13 @@ class CourseContentEvaluationTestDataGenerator } /** - * 创建评价问题字段 + * 创建课程内容的评价问题字段(1-6题) */ - private function createEvaluationAsks(CourseContentEvaluation $evaluation, CourseContent $courseContent, Course $course, int $count, $faker): array + private function createCourseContentEvaluationAsks(CourseContentEvaluation $evaluation, CourseContent $courseContent, Course $course, int $startSort, $faker): array { $asks = []; - $fieldTemplates = $this->getEvaluationFieldTemplates(); - // 为每个课程内容生成4个评价维度的问题(课程必要性、理论丰富程度、实践指导意义、讲授能力) + // 4个评价维度 $evaluationDimensions = [ '课程必要性', '理论丰富程度', @@ -146,10 +153,8 @@ class CourseContentEvaluationTestDataGenerator '讲授能力' ]; - $sort = 1; - - // 为每个评价维度创建问题,每个维度都包含课程内容标题 - foreach ($evaluationDimensions as $dimension) { + // 为每个评价维度创建问题 + foreach ($evaluationDimensions as $index => $dimension) { $ask = new CourseContentEvaluationAsk(); $ask->admin_id = $faker->numberBetween(1, 10); $ask->department_id = $faker->numberBetween(1, 5); @@ -160,9 +165,15 @@ class CourseContentEvaluationTestDataGenerator $ask->field = strtolower(str_replace(' ', '_', $dimension)) . '_' . $courseContent->id; $ask->edit_input = 'radio'; $ask->rule = 'required'; - $ask->sort = $sort++; + $ask->sort = $startSort + $index; $ask->help = "请评价《{$courseContent->theme}》的{$dimension}"; - $ask->select_item = ['很不满意', '不满意', '一般', '满意', '很满意']; + $ask->select_item = [ + ['key' => '很不满意', 'value' => '很不满意'], + ['key' => '不满意', 'value' => '不满意'], + ['key' => '一般', 'value' => '一般'], + ['key' => '满意', 'value' => '满意'], + ['key' => '很满意', 'value' => '很满意'] + ]; $ask->need_fill = true; $ask->belong_user = false; $ask->allow_input = false; @@ -171,56 +182,77 @@ class CourseContentEvaluationTestDataGenerator $asks[] = $ask; } - // 添加建议类问题 - $suggestionTemplates = array_filter($fieldTemplates, function ($template) { - return $template['edit_input'] === 'textarea'; - }); - - foreach ($suggestionTemplates as $template) { - $ask = new CourseContentEvaluationAsk(); - $ask->admin_id = $faker->numberBetween(1, 10); - $ask->department_id = $faker->numberBetween(1, 5); - $ask->course_id = $course->id; - $ask->course_content_id = $courseContent->id; - $ask->course_content_evaluation_id = $evaluation->id; - $ask->name = $template['name']; - $ask->field = $template['field']; - $ask->edit_input = $template['edit_input']; - $ask->rule = $template['rule']; - $ask->sort = $sort++; - $ask->help = $template['help']; - $ask->select_item = $template['select_item']; - $ask->need_fill = $template['need_fill']; - $ask->belong_user = $template['belong_user']; - $ask->allow_input = $template['allow_input']; - $ask->save(); + return $asks; + } - $asks[] = $ask; - } + /** + * 创建课程级别的通用问题字段(7-10题) + */ + private function createCourseLevelAsks(CourseContentEvaluation $evaluation, Course $course, int $startSort, $faker): array + { + $asks = []; - // 添加姓名字段 - $nameTemplate = array_filter($fieldTemplates, function ($template) { - return $template['field'] === 'student_name'; - }); + // 课程级别的通用问题模板 + $courseLevelQuestions = [ + [ + 'name' => '您对本次培训的课程及老师的资料、专业性等方面有哪些建议?', + 'field' => 'course_teacher_suggestions', + 'edit_input' => 'textarea', + 'rule' => '', + 'help' => '请提出您对课程和老师的建议', + 'need_fill' => false, + 'belong_user' => false, + 'allow_input' => true + ], + [ + 'name' => '您对培训专题、课程内容、授课师资及形式等方面有哪些建议?', + 'field' => 'training_suggestions', + 'edit_input' => 'textarea', + 'rule' => '', + 'help' => '请提出您对培训各方面的建议', + 'need_fill' => false, + 'belong_user' => false, + 'allow_input' => true + ], + [ + 'name' => '其他建议', + 'field' => 'other_suggestions', + 'edit_input' => 'textarea', + 'rule' => '', + 'help' => '请提出其他建议', + 'need_fill' => false, + 'belong_user' => false, + 'allow_input' => true + ], + [ + 'name' => '如果您愿意,请留下您的姓名(选填)', + 'field' => 'student_name', + 'edit_input' => 'text', + 'rule' => '', + 'help' => '这将帮助我们更好地整理反馈并与您沟通', + 'need_fill' => false, + 'belong_user' => true, + 'allow_input' => false + ] + ]; - if (!empty($nameTemplate)) { - $template = reset($nameTemplate); + foreach ($courseLevelQuestions as $index => $question) { $ask = new CourseContentEvaluationAsk(); $ask->admin_id = $faker->numberBetween(1, 10); $ask->department_id = $faker->numberBetween(1, 5); $ask->course_id = $course->id; - $ask->course_content_id = $courseContent->id; + $ask->course_content_id = null; // 课程级别问题,不关联具体课程内容 $ask->course_content_evaluation_id = $evaluation->id; - $ask->name = $template['name']; - $ask->field = $template['field']; - $ask->edit_input = $template['edit_input']; - $ask->rule = $template['rule']; - $ask->sort = $sort++; - $ask->help = $template['help']; - $ask->select_item = $template['select_item']; - $ask->need_fill = $template['need_fill']; - $ask->belong_user = $template['belong_user']; - $ask->allow_input = $template['allow_input']; + $ask->name = $question['name']; + $ask->field = $question['field']; + $ask->edit_input = $question['edit_input']; + $ask->rule = $question['rule']; + $ask->sort = $startSort + $index; + $ask->help = $question['help']; + $ask->select_item = null; + $ask->need_fill = $question['need_fill']; + $ask->belong_user = $question['belong_user']; + $ask->allow_input = $question['allow_input']; $ask->save(); $asks[] = $ask; @@ -287,102 +319,7 @@ class CourseContentEvaluationTestDataGenerator return $faker->randomElement($descriptions); } - /** - * 获取评价字段模板 - */ - private function getEvaluationFieldTemplates(): array - { - return [ - [ - 'name' => '课程必要性', - 'field' => 'course_necessity', - 'edit_input' => 'radio', - 'rule' => 'required', - 'help' => '请评价该课程的必要性', - 'select_item' => ['很不满意', '不满意', '一般', '满意', '很满意'], - 'need_fill' => true, - 'belong_user' => false, - 'allow_input' => false - ], - [ - 'name' => '理论丰富程度', - 'field' => 'theory_richness', - 'edit_input' => 'radio', - 'rule' => 'required', - 'help' => '请评价课程理论的丰富程度', - 'select_item' => ['很不满意', '不满意', '一般', '满意', '很满意'], - 'need_fill' => true, - 'belong_user' => false, - 'allow_input' => false - ], - [ - 'name' => '实践指导意义', - 'field' => 'practical_guidance', - 'edit_input' => 'radio', - 'rule' => 'required', - 'help' => '请评价课程的实践指导意义', - 'select_item' => ['很不满意', '不满意', '一般', '满意', '很满意'], - 'need_fill' => true, - 'belong_user' => false, - 'allow_input' => false - ], - [ - 'name' => '讲授能力', - 'field' => 'teaching_ability', - 'edit_input' => 'radio', - 'rule' => 'required', - 'help' => '请评价老师的讲授能力', - 'select_item' => ['很不满意', '不满意', '一般', '满意', '很满意'], - 'need_fill' => true, - 'belong_user' => false, - 'allow_input' => false - ], - [ - 'name' => '您对本次培训的课程及老师的资料、专业性等方面有哪些建议?', - 'field' => 'course_teacher_suggestions', - 'edit_input' => 'textarea', - 'rule' => '', - 'help' => '请提出您对课程和老师的建议', - 'select_item' => null, - 'need_fill' => false, - 'belong_user' => false, - 'allow_input' => true - ], - [ - 'name' => '您对培训专题、课程内容、授课师资及形式等方面有哪些建议?', - 'field' => 'training_suggestions', - 'edit_input' => 'textarea', - 'rule' => '', - 'help' => '请提出您对培训各方面的建议', - 'select_item' => null, - 'need_fill' => false, - 'belong_user' => false, - 'allow_input' => true - ], - [ - 'name' => '其他建议', - 'field' => 'other_suggestions', - 'edit_input' => 'textarea', - 'rule' => '', - 'help' => '请提出其他建议', - 'select_item' => null, - 'need_fill' => false, - 'belong_user' => false, - 'allow_input' => true - ], - [ - 'name' => '如果您愿意,请留下您的姓名(选填)', - 'field' => 'student_name', - 'edit_input' => 'text', - 'rule' => '', - 'help' => '这将帮助我们更好地整理反馈并与您沟通', - 'select_item' => null, - 'need_fill' => false, - 'belong_user' => true, - 'allow_input' => false - ] - ]; - } + /** * 根据字段类型生成对应的值 @@ -392,12 +329,27 @@ class CourseContentEvaluationTestDataGenerator switch ($ask->edit_input) { case 'radio': case 'select': - return $faker->randomElement($ask->select_item ?? []); + $selectItems = $ask->select_item ?? []; + if (is_array($selectItems) && !empty($selectItems) && isset($selectItems[0]['key'])) { + // key-value 格式 + $selectedItem = $faker->randomElement($selectItems); + return $selectedItem['key']; + } else { + // 兼容旧格式 + return $faker->randomElement($selectItems); + } case 'checkbox': $options = $ask->select_item ?? []; - $selected = $faker->randomElements($options, $faker->numberBetween(1, min(3, count($options)))); - return implode(',', $selected); + if (is_array($options) && !empty($options) && isset($options[0]['key'])) { + // key-value 格式 + $selected = $faker->randomElements($options, $faker->numberBetween(1, min(3, count($options)))); + return implode(',', array_column($selected, 'key')); + } else { + // 兼容旧格式 + $selected = $faker->randomElements($options, $faker->numberBetween(1, min(3, count($options)))); + return implode(',', $selected); + } case 'textarea': $suggestions = [ @@ -439,9 +391,10 @@ class CourseContentEvaluationTestDataGenerator */ private function createSampleCoursesAndContents($faker): void { + // 使用演示问卷中的真实课程数据 $courseData = [ [ - 'title' => '苏州市科技企业资本运作研修班', + 'title' => '首期苏州市科技企业资本运作研修班(攀峰班)', 'contents' => [ '《资本市场深化改革背景下,私募股权基金的专业化发展路径与企业家资本战略选择》——王建平老师', '《科技创新产业现状与未来趋势(深圳创新实践案例)》——梁永生老师',