[ 'host' => '39.108.116.125', 'port' => 3306, 'db_name' => 'company_61', 'db_username' => 'company_61', 'db_password' => 'N35fYCPHziAAGd4L' ] ]; $companyConnectionConfig = [ 'driver' => 'mysql', 'host' => $dataBaseInfos['company']['host'], 'port' => $dataBaseInfos['company']['port'], 'database' => $dataBaseInfos['company']['db_name'], 'username' => $dataBaseInfos['company']['db_username'], 'password' => $dataBaseInfos['company']['db_password'], 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'unix_socket' => env('DB_SOCKET', ''), 'prefix' => env('DB_PREFIX', ''), 'strict' => false, 'sticky' => true, 'engine' => null, 'options' => [], ]; Config::set("database.connections.company", $companyConnectionConfig); $tableName = 'kailin_question_real_topic'; $tableNameCatalogue = 'kailin_question_past_real_catalogue'; $directory = "E:\\鸭题库数据初始化历年真题\\中药综\\历年真题"; $needExchangeTopics = $this->getFilesRecursively($directory); //dd($needExchangeTopics); $dataCount = count($needExchangeTopics); $this->info('开始转换'); $this->info("总共有:{$dataCount} 年的真题"); $bar = $this->output->createProgressBar($dataCount); foreach ($needExchangeTopics as $needExchangeTopic) { $year = $needExchangeTopic['fileName']; //法规 $catalogueId = DB::connection('company')->table($tableNameCatalogue)->where('chapter_id', 9)->where('year', $year)->value('id'); $this->info('获取目录id =' . $catalogueId); if (empty($catalogueId)) { $this->info('获取目录id失败!'); $this->info('目录年份='.$year); return ; } $data = file_get_contents($needExchangeTopic['data']); $data = json_decode($data, true); foreach ($data['data'] as $item) { //真题组名称: $groupName = $item['groupName']; $paperQuestions = $item['paperQuestionVos']; foreach ($paperQuestions as $value) { //题目类型 $style = $value['style']; //$styleName = $this->getStyleName($style); //题目 $title = $value['title']; $questions_ex = null; if (!empty($value['exerciseQuestionsTopicPo'])) { $questions_ex = $value['exerciseQuestionsTopicPo']['content']; } //解析 $explain = $value['explain']; //准确率 $accuracy = $value['accuracy']; // $correctAnswerStr = ''; //正确选项Str $correctAnswers = []; //正确答案数据 $selectAContent = ''; $selectBContent = ''; $selectCContent = ''; $selectDContent = ''; $selectEContent = ''; //考点 $examPointStr = ''; $examPointNames = []; $examPoints = $value['points']; foreach ($examPoints as $examPoint) { $examPointNames [] = $examPoint['name']; } $examPointStr = implode(',', $examPointNames);//考点 //dd($examPointStr); $questionCount = $value['questionCount']; //选项数量 //获取选项: $questionsOptionsPos = $value['questionsOptionsPos']; foreach ($questionsOptionsPos as $key => $item) { if ($key == 0 && $key <= $questionCount - 1) { $selectAContent = $item['option']; if ($item['isTrue'] == true) { $correctAnswers [] = 'A'; } } elseif ($key == 1 && $key <= $questionCount - 1) { $selectBContent = $item['option']; if ($item['isTrue'] == true) { $correctAnswers [] = 'B'; } } elseif ($key == 2 && $key <= $questionCount - 1) { $selectCContent = $item['option']; if ($item['isTrue'] == true) { $correctAnswers [] = 'C'; } } elseif ($key == 3 && $key <= $questionCount - 1) { $selectDContent = $item['option']; if ($item['isTrue'] == true) { $correctAnswers [] = 'D'; } } elseif ($key == 4 && $key <= $questionCount - 1) { $selectEContent = $item['option']; if ($item['isTrue'] == true) { $correctAnswers [] = 'E'; } } } $correctAnswerStr = implode(',', $correctAnswers); //正确答案 if ($style == 6) { $selectAContent = ''; $selectBContent = ''; $selectCContent = ''; $selectDContent = ''; $selectEContent = ''; } $insertData = [ 'title' => $title, 'style' => $style, 'group_name' => $groupName, 'select_a' => $selectAContent, 'select_b' => $selectBContent, 'select_c' => $selectCContent, 'select_d' => $selectDContent, 'select_e' => $selectEContent, 'question_count' => $questionCount, 'questions_ex' => $questions_ex, 'explain' => $explain, 'correct_answer' => $correctAnswerStr, 'accuracy' => $accuracy, 'catalogue_id' => $catalogueId, 'insert_time' => time(), 'update_time' => time() ]; DB::connection('company')->table($tableName)->insert($insertData); } } $bar->advance(); } } public function getFilesRecursively($directory) { // 检查目录是否存在 if (!is_dir($directory)) { return "目录不存在"; } // 获取目录下的所有文件和子目录 $files = scandir($directory); // 过滤掉 "." 和 ".."(当前目录和上一级目录) $files = array_diff($files, array('.', '..')); $result = []; foreach ($files as $file) { // 拼接完整的文件路径 $filePath = $directory . DIRECTORY_SEPARATOR . $file; // 判断是否为文件 if (is_file($filePath)) { // 过滤掉文件名中包含“数据源”的文件 if (strpos($file, '数据源') === false) { // 获取文件名的主名称(去除.txt后缀) $fileNameWithoutExtension = pathinfo($file, PATHINFO_FILENAME); // 获取文件所在的目录路径 $fileDir = dirname($filePath); // 去除文件名中的数字(如1, 2, 3...10, 11, 12等) // 去除文件名中的数字和连字符(-) $fileNameWithoutNumbers = preg_replace('/\d+/', '', $fileNameWithoutExtension); // 获取文件的大小 $fileSize = filesize($filePath); $result[] = [ 'fileName' => $fileNameWithoutExtension, // 文件名(去除.txt后缀) 'data' => $filePath, // 完整路径 'directory' => $fileDir, // 文件所在目录 'size' => $fileSize // 文件大小 ]; } } elseif (is_dir($filePath)) { // 如果是目录,则递归调用 $result = array_merge($result, $this->getFilesRecursively($filePath)); } } return $result; } }