|
|
|
|
@ -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' => [
|
|
|
|
|
'《资本市场深化改革背景下,私募股权基金的专业化发展路径与企业家资本战略选择》——王建平老师',
|
|
|
|
|
'《科技创新产业现状与未来趋势(深圳创新实践案例)》——梁永生老师',
|
|
|
|
|
|