master
cody 2 months ago
parent a3e8daa986
commit 2fa7f2e48c

@ -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();
$asks[] = $ask;
return $asks;
}
// 添加姓名字段
$nameTemplate = array_filter($fieldTemplates, function ($template) {
return $template['field'] === 'student_name';
});
/**
* 创建课程级别的通用问题字段7-10题
*/
private function createCourseLevelAsks(CourseContentEvaluation $evaluation, Course $course, int $startSort, $faker): array
{
$asks = [];
// 课程级别的通用问题模板
$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 ?? [];
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' => [
'《资本市场深化改革背景下,私募股权基金的专业化发展路径与企业家资本战略选择》——王建平老师',
'《科技创新产业现状与未来趋势(深圳创新实践案例)》——梁永生老师',

Loading…
Cancel
Save