master
cody 2 months ago
parent a3e8daa986
commit 2fa7f2e48c

@ -80,13 +80,21 @@ class CourseContentEvaluationTestDataGenerator
// 为每个课程创建一个评价问卷 // 为每个课程创建一个评价问卷
$evaluation = $this->createEvaluation($courseContents->first(), $course, $faker); $evaluation = $this->createEvaluation($courseContents->first(), $course, $faker);
// 4) 为每个问卷生成问题字段(包含该课程的所有内容) // 4) 为每个问卷生成问题字段
$allAsks = []; $allAsks = [];
$sort = 1;
// 为每个课程内容生成4个维度的问题1-6题
foreach ($courseContents as $courseContent) { 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); $allAsks = array_merge($allAsks, $asks);
$sort += 4; // 每个课程内容4个问题
} }
// 添加课程级别的通用问题7-10题
$courseLevelAsks = $this->createCourseLevelAsks($evaluation, $course, $sort, $faker);
$allAsks = array_merge($allAsks, $courseLevelAsks);
// 5) 生成用户提交的表单数据 // 5) 生成用户提交的表单数据
$formCount = $faker->numberBetween(10, min(40, $allUsers->count())); $formCount = $faker->numberBetween(10, min(40, $allUsers->count()));
$submittedUsers = $allUsers->random($formCount); $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 = []; $asks = [];
$fieldTemplates = $this->getEvaluationFieldTemplates();
// 为每个课程内容生成4个评价维度的问题(课程必要性、理论丰富程度、实践指导意义、讲授能力) // 4个评价维度
$evaluationDimensions = [ $evaluationDimensions = [
'课程必要性', '课程必要性',
'理论丰富程度', '理论丰富程度',
@ -146,10 +153,8 @@ class CourseContentEvaluationTestDataGenerator
'讲授能力' '讲授能力'
]; ];
$sort = 1; // 为每个评价维度创建问题
foreach ($evaluationDimensions as $index => $dimension) {
// 为每个评价维度创建问题,每个维度都包含课程内容标题
foreach ($evaluationDimensions as $dimension) {
$ask = new CourseContentEvaluationAsk(); $ask = new CourseContentEvaluationAsk();
$ask->admin_id = $faker->numberBetween(1, 10); $ask->admin_id = $faker->numberBetween(1, 10);
$ask->department_id = $faker->numberBetween(1, 5); $ask->department_id = $faker->numberBetween(1, 5);
@ -160,9 +165,15 @@ class CourseContentEvaluationTestDataGenerator
$ask->field = strtolower(str_replace(' ', '_', $dimension)) . '_' . $courseContent->id; $ask->field = strtolower(str_replace(' ', '_', $dimension)) . '_' . $courseContent->id;
$ask->edit_input = 'radio'; $ask->edit_input = 'radio';
$ask->rule = 'required'; $ask->rule = 'required';
$ask->sort = $sort++; $ask->sort = $startSort + $index;
$ask->help = "请评价《{$courseContent->theme}》的{$dimension}"; $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->need_fill = true;
$ask->belong_user = false; $ask->belong_user = false;
$ask->allow_input = false; $ask->allow_input = false;
@ -171,56 +182,77 @@ class CourseContentEvaluationTestDataGenerator
$asks[] = $ask; $asks[] = $ask;
} }
// 添加建议类问题 return $asks;
$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();
$asks[] = $ask; /**
} * 创建课程级别的通用问题字段7-10题
*/
private function createCourseLevelAsks(CourseContentEvaluation $evaluation, Course $course, int $startSort, $faker): array
{
$asks = [];
// 添加姓名字段 // 课程级别的通用问题模板
$nameTemplate = array_filter($fieldTemplates, function ($template) { $courseLevelQuestions = [
return $template['field'] === 'student_name'; [
}); '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)) { foreach ($courseLevelQuestions as $index => $question) {
$template = reset($nameTemplate);
$ask = new CourseContentEvaluationAsk(); $ask = new CourseContentEvaluationAsk();
$ask->admin_id = $faker->numberBetween(1, 10); $ask->admin_id = $faker->numberBetween(1, 10);
$ask->department_id = $faker->numberBetween(1, 5); $ask->department_id = $faker->numberBetween(1, 5);
$ask->course_id = $course->id; $ask->course_id = $course->id;
$ask->course_content_id = $courseContent->id; $ask->course_content_id = null; // 课程级别问题,不关联具体课程内容
$ask->course_content_evaluation_id = $evaluation->id; $ask->course_content_evaluation_id = $evaluation->id;
$ask->name = $template['name']; $ask->name = $question['name'];
$ask->field = $template['field']; $ask->field = $question['field'];
$ask->edit_input = $template['edit_input']; $ask->edit_input = $question['edit_input'];
$ask->rule = $template['rule']; $ask->rule = $question['rule'];
$ask->sort = $sort++; $ask->sort = $startSort + $index;
$ask->help = $template['help']; $ask->help = $question['help'];
$ask->select_item = $template['select_item']; $ask->select_item = null;
$ask->need_fill = $template['need_fill']; $ask->need_fill = $question['need_fill'];
$ask->belong_user = $template['belong_user']; $ask->belong_user = $question['belong_user'];
$ask->allow_input = $template['allow_input']; $ask->allow_input = $question['allow_input'];
$ask->save(); $ask->save();
$asks[] = $ask; $asks[] = $ask;
@ -287,102 +319,7 @@ class CourseContentEvaluationTestDataGenerator
return $faker->randomElement($descriptions); 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) { switch ($ask->edit_input) {
case 'radio': case 'radio':
case 'select': 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': case 'checkbox':
$options = $ask->select_item ?? []; $options = $ask->select_item ?? [];
$selected = $faker->randomElements($options, $faker->numberBetween(1, min(3, count($options)))); if (is_array($options) && !empty($options) && isset($options[0]['key'])) {
return implode(',', $selected); // 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': case 'textarea':
$suggestions = [ $suggestions = [
@ -439,9 +391,10 @@ class CourseContentEvaluationTestDataGenerator
*/ */
private function createSampleCoursesAndContents($faker): void private function createSampleCoursesAndContents($faker): void
{ {
// 使用演示问卷中的真实课程数据
$courseData = [ $courseData = [
[ [
'title' => '苏州市科技企业资本运作研修班', 'title' => '首期苏州市科技企业资本运作研修班(攀峰班)',
'contents' => [ 'contents' => [
'《资本市场深化改革背景下,私募股权基金的专业化发展路径与企业家资本战略选择》——王建平老师', '《资本市场深化改革背景下,私募股权基金的专业化发展路径与企业家资本战略选择》——王建平老师',
'《科技创新产业现状与未来趋势(深圳创新实践案例)》——梁永生老师', '《科技创新产业现状与未来趋势(深圳创新实践案例)》——梁永生老师',

Loading…
Cancel
Save