|
|
@@ -0,0 +1,379 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+
|
|
|
+namespace App\Console\Commands\Export;
|
|
|
+
|
|
|
+
|
|
|
+use App\Servers\QuestionBank\QuestionChapterService;
|
|
|
+use Illuminate\Console\Command;
|
|
|
+use Illuminate\Support\Carbon;
|
|
|
+use Illuminate\Support\Facades\Config;
|
|
|
+use Illuminate\Support\Facades\DB;
|
|
|
+
|
|
|
+class ExportQuestionBankDataCommand extends Command
|
|
|
+{
|
|
|
+ use ExportTrait;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * The name and signature of the console command.
|
|
|
+ *
|
|
|
+ * @var string
|
|
|
+ */
|
|
|
+ protected $signature = 'export:questionBankData';
|
|
|
+
|
|
|
+ /**
|
|
|
+ * The console command description.
|
|
|
+ *
|
|
|
+ * @var string
|
|
|
+ */
|
|
|
+ protected $description = '题库数据导出';
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Create a new command instance.
|
|
|
+ *
|
|
|
+ * @return void
|
|
|
+ */
|
|
|
+ public function __construct()
|
|
|
+ {
|
|
|
+ parent::__construct();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Execute the console command.
|
|
|
+ *
|
|
|
+ * @return mixed
|
|
|
+ */
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Execute the console command.
|
|
|
+ *
|
|
|
+ * @return mixed
|
|
|
+ */
|
|
|
+ public function handle()
|
|
|
+ {
|
|
|
+
|
|
|
+ $head = [
|
|
|
+ '用户id',
|
|
|
+ '手机号',
|
|
|
+ '注册时间',
|
|
|
+ '第一次学习时间',
|
|
|
+ '第一天做题数量',
|
|
|
+ '学习进度',
|
|
|
+ ];
|
|
|
+
|
|
|
+ //正式
|
|
|
+ $dataBaseInfos = [
|
|
|
+ //saas-company
|
|
|
+ 'company' => [
|
|
|
+ 'host' => '120.24.49.2',
|
|
|
+ 'port' => 3306,
|
|
|
+ 'db_name' => 'company_61',
|
|
|
+ 'db_username' => 'company_61',
|
|
|
+ 'db_password' => 'NKD4saLKN7zWKrzz'
|
|
|
+ ]
|
|
|
+ ];
|
|
|
+
|
|
|
+ $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);
|
|
|
+
|
|
|
+ $tableNameCustomer = 'kailin_custom';
|
|
|
+
|
|
|
+ $tableStudyProc = 'kailin_question_point_study_progress';
|
|
|
+ $tableAnswerTopic = 'kailin_question_user_topic_answer_statistics';
|
|
|
+ //$tableAnswerTopic = 'kailin_question_user_topic_answer_record';
|
|
|
+ $tableAnswerRealTopic = 'kailin_question_user_real_topic_answer_record';
|
|
|
+
|
|
|
+ $tableNameChapter = 'kailin_question_chapter';
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ $directory = storage_path('exports/');
|
|
|
+ $fileName = '统计-'. Carbon::today()->toDateString();
|
|
|
+
|
|
|
+ $this->createdFile($directory, $fileName);
|
|
|
+
|
|
|
+ $this->putRow($head);
|
|
|
+
|
|
|
+ $allUserInfos = DB::connection('company')->table($tableNameCustomer)->get(['uid', 'phone', 'insert_time'])->toArray();
|
|
|
+
|
|
|
+
|
|
|
+ $dataCount = count($allUserInfos);
|
|
|
+ $this->info('开始处理');
|
|
|
+ $this->info("总共有:{$dataCount} 用户需要处理");
|
|
|
+ $bar = $this->output->createProgressBar($dataCount);
|
|
|
+
|
|
|
+
|
|
|
+ foreach ($allUserInfos as $allUserInfo) {
|
|
|
+
|
|
|
+ $uid = $allUserInfo['uid'];
|
|
|
+ //通过uid获取第一次的学习时间
|
|
|
+
|
|
|
+ $firstStudyTime = '';
|
|
|
+
|
|
|
+ $studyInfo = DB::connection('company')->table($tableStudyProc)->where('user_id', $uid)->first();
|
|
|
+
|
|
|
+ if ($studyInfo) {
|
|
|
+ $firstStudyTime = $studyInfo['insert_time'];
|
|
|
+ }
|
|
|
+
|
|
|
+ $regDate = date("Y-m-d", $allUserInfo['insert_time']);
|
|
|
+
|
|
|
+ $startTime = strtotime($regDate . " 00:00:00"); // 获取指定日期的开始时间戳
|
|
|
+ $endTime = strtotime($regDate . " 23:59:59"); // 获取指定日期的结束时间戳
|
|
|
+
|
|
|
+ //通过uid获取学员注册当天的答题数量
|
|
|
+
|
|
|
+ $answerNum = DB::connection('company')->table($tableAnswerTopic)
|
|
|
+ ->where('user_id', $uid)
|
|
|
+ ->where('insert_time', '>=', $startTime)
|
|
|
+ ->where('insert_time', '<=', $endTime)
|
|
|
+ ->count();
|
|
|
+
|
|
|
+ //获取学员学习了考点的章节id
|
|
|
+ $chapters = DB::connection('company')->table($tableNameChapter)->get(['id', 'parent_id'])->toArray();
|
|
|
+ $questionChapterService = new QuestionChapterService();
|
|
|
+
|
|
|
+// $allSonChapterIds = $questionChapterService->getSonChapters($chapters, $chapterId);
|
|
|
+
|
|
|
+
|
|
|
+ $faguiChapterIds = $questionChapterService->getSonChapters($chapters, 3);
|
|
|
+ array_unshift($faguiChapterIds, 3);//放到数组前面
|
|
|
+
|
|
|
+ $y1ChapterIds = $questionChapterService->getSonChapters($chapters, 4);
|
|
|
+ array_unshift($y1ChapterIds, 4);//放到数组前面
|
|
|
+
|
|
|
+ $y2ChapterIds = $questionChapterService->getSonChapters($chapters, 5);
|
|
|
+ array_unshift($y2ChapterIds, 5);//放到数组前面
|
|
|
+
|
|
|
+ $yzChapterIds = $questionChapterService->getSonChapters($chapters, 6);
|
|
|
+ array_unshift($yzChapterIds, 6);//放到数组前面
|
|
|
+
|
|
|
+ $zy1ChapterIds = $questionChapterService->getSonChapters($chapters, 7);
|
|
|
+ array_unshift($zy1ChapterIds, 7);//放到数组前面
|
|
|
+
|
|
|
+ $zy2ChapterIds = $questionChapterService->getSonChapters($chapters, 8);
|
|
|
+ array_unshift($zy2ChapterIds, 8);//放到数组前面
|
|
|
+
|
|
|
+ $zyzChapterIds = $questionChapterService->getSonChapters($chapters, 9);
|
|
|
+ array_unshift($zyzChapterIds, 9);//放到数组前面
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ $resultChapterIds = DB::connection('company')->table($tableStudyProc)->where('user_id', $uid)->orderBy('chapter_id', 'asc')->pluck('chapter_id')->toArray();
|
|
|
+
|
|
|
+ $resultChapterIds = array_values(array_unique($resultChapterIds));
|
|
|
+
|
|
|
+ $needExecuteFgChapterIds = [];
|
|
|
+ $needExecuteY1ChapterIds = [];
|
|
|
+ $needExecuteY2ChapterIds = [];
|
|
|
+ $needExecuteYzChapterIds = [];
|
|
|
+ $needExecuteZy1ChapterIds = [];
|
|
|
+ $needExecuteZy2ChapterIds = [];
|
|
|
+ $needExecuteZyzChapterIds = [];
|
|
|
+
|
|
|
+ if (!empty($resultChapterIds)) {
|
|
|
+
|
|
|
+ foreach ($resultChapterIds as $resultChapterId) {
|
|
|
+ if (in_array($resultChapterId, $faguiChapterIds)) {
|
|
|
+ $needExecuteFgChapterIds [] = $resultChapterId;
|
|
|
+ } elseif (in_array($resultChapterId, $y1ChapterIds)) {
|
|
|
+ $needExecuteY1ChapterIds [] = $resultChapterId;
|
|
|
+ } elseif (in_array($resultChapterId, $y2ChapterIds)) {
|
|
|
+ $needExecuteY2ChapterIds [] = $resultChapterId;
|
|
|
+ } elseif (in_array($resultChapterId, $yzChapterIds)) {
|
|
|
+ $needExecuteYzChapterIds [] = $resultChapterId;
|
|
|
+ } elseif (in_array($resultChapterId, $zy1ChapterIds)) {
|
|
|
+ $needExecuteZy1ChapterIds [] = $resultChapterId;
|
|
|
+ } elseif (in_array($resultChapterId, $zy2ChapterIds)) {
|
|
|
+ $needExecuteZy2ChapterIds [] = $resultChapterId;
|
|
|
+ } elseif (in_array($resultChapterId, $zyzChapterIds)) {
|
|
|
+ $needExecuteZyzChapterIds [] = $resultChapterId;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $study_proc = '';
|
|
|
+
|
|
|
+ if (!empty($needExecuteFgChapterIds)) {
|
|
|
+ $needChapterFgId = end($needExecuteFgChapterIds);
|
|
|
+ $needChapterFgId = $this->getChapterName($needChapterFgId, $tableNameChapter);
|
|
|
+ $study_proc = $needChapterFgId;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!empty($needExecuteY1ChapterIds)) {
|
|
|
+ $needChapterY1Id = end($needExecuteY1ChapterIds);
|
|
|
+ $needChapterY1Id = $this->getChapterName($needChapterY1Id, $tableNameChapter);
|
|
|
+ if (!empty($study_proc)) {
|
|
|
+ $study_proc = $study_proc . ','. $needChapterY1Id;
|
|
|
+ } else {
|
|
|
+ $study_proc = $needChapterY1Id;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!empty($needExecuteY2ChapterIds)) {
|
|
|
+ $needChapterY2Id = end($needExecuteY2ChapterIds);
|
|
|
+ $needChapterY2Id = $this->getChapterName($needChapterY2Id, $tableNameChapter);
|
|
|
+ if (!empty($study_proc)) {
|
|
|
+ $study_proc = $study_proc . ','. $needChapterY2Id;
|
|
|
+ } else {
|
|
|
+ $study_proc = $needChapterY2Id;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!empty($needExecuteYzChapterIds)) {
|
|
|
+ $needChapterYzId = end($needExecuteYzChapterIds);
|
|
|
+ $needChapterYzId = $this->getChapterName($needChapterYzId, $tableNameChapter);
|
|
|
+ if (!empty($study_proc)) {
|
|
|
+ $study_proc = $study_proc . ','. $needChapterYzId;
|
|
|
+ } else {
|
|
|
+ $study_proc = $needChapterYzId;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!empty($needExecuteZy1ChapterIds)) {
|
|
|
+ $needChapterZy1Id = end($needExecuteZy1ChapterIds);
|
|
|
+ $needChapterZy1Id = $this->getChapterName($needChapterZy1Id, $tableNameChapter);
|
|
|
+ if (!empty($study_proc)) {
|
|
|
+ $study_proc = $study_proc . ','. $needChapterZy1Id;
|
|
|
+ } else {
|
|
|
+ $study_proc = $needChapterZy1Id;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!empty($needExecuteZy2ChapterIds)) {
|
|
|
+ $needChapterZy2Id = end($needExecuteZy2ChapterIds);
|
|
|
+ $needChapterZy2Id = $this->getChapterName($needChapterZy2Id, $tableNameChapter);
|
|
|
+ if (!empty($study_proc)) {
|
|
|
+ $study_proc = $study_proc . ','. $needChapterZy2Id;
|
|
|
+ } else {
|
|
|
+ $study_proc = $needChapterZy2Id;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!empty($needExecuteZy2ChapterIds)) {
|
|
|
+ $needChapterZyzId = end($needExecuteZy2ChapterIds);
|
|
|
+ $needChapterZyzId = $this->getChapterName($needChapterZyzId, $tableNameChapter);
|
|
|
+ if (!empty($study_proc)) {
|
|
|
+ $study_proc = $study_proc . ','. $needChapterZyzId;
|
|
|
+ } else {
|
|
|
+ $study_proc = $needChapterZyzId;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //$study_proc = implode(',', $resultChapterIds);
|
|
|
+ } else {
|
|
|
+ $study_proc = '';
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ $exportData = [];
|
|
|
+ $exportData['uid'] = $uid;
|
|
|
+ $exportData['phone'] = $allUserInfo['phone'];
|
|
|
+ $exportData['reg_date'] = date("Y-m-d H:i:s", $allUserInfo['insert_time']) ;
|
|
|
+ $exportData['first_study_date'] = !empty($firstStudyTime) ? date("Y-m-d H:i:s", $firstStudyTime) : '';
|
|
|
+ $exportData['first_answer_num'] = $answerNum;
|
|
|
+ $exportData['study_proc'] = $study_proc;
|
|
|
+
|
|
|
+ $this->putRow($exportData);
|
|
|
+
|
|
|
+ $bar->advance();
|
|
|
+ }
|
|
|
+
|
|
|
+ $bar->finish();
|
|
|
+
|
|
|
+ $this->info('');
|
|
|
+ $this->info('导出完成');
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public function getChapterName($chapterId, $tableNameChapter)
|
|
|
+ {
|
|
|
+ $infos = DB::connection('company')->table($tableNameChapter)->where('id', $chapterId)->first();
|
|
|
+
|
|
|
+ $baseName = $infos['name'];
|
|
|
+ $level = $infos['level'];
|
|
|
+
|
|
|
+ if ($level == 3) {
|
|
|
+ //父级id也就是第二级的id
|
|
|
+ $thirdChapterParentId = DB::connection('company')->table($tableNameChapter)->where('id', $chapterId)->value('parent_id');
|
|
|
+ $secondLevelName = DB::connection('company')->table($tableNameChapter)->where('id', $thirdChapterParentId)->value('name');
|
|
|
+ //dd($secondLevelName . '-' . $baseName);
|
|
|
+ return $secondLevelName . '->' . $baseName;
|
|
|
+ } elseif ($level == 4) {
|
|
|
+ //父级id也就是第三级的id
|
|
|
+ $fourthLevelChapterParentId = DB::connection('company')->table($tableNameChapter)->where('id', $chapterId)->value('parent_id');
|
|
|
+ $thirdLevelInfo = DB::connection('company')->table($tableNameChapter)->where('id', $fourthLevelChapterParentId)->first();
|
|
|
+ $thirdLevelName = $thirdLevelInfo['name'];
|
|
|
+ $thirdLevelId = $thirdLevelInfo['id'];
|
|
|
+ //父级id也就是第二级的id
|
|
|
+ $thirdLevelChapterParentId = DB::connection('company')->table($tableNameChapter)->where('id', $thirdLevelId)->value('parent_id');
|
|
|
+
|
|
|
+ $secondLevelName = DB::connection('company')->table($tableNameChapter)->where('id', $thirdLevelChapterParentId)->value('name');
|
|
|
+ //dd($secondLevelName . '--' . $thirdLevelName .'--'. $baseName);
|
|
|
+ return $secondLevelName . '->' . $thirdLevelName .'->'. $baseName;
|
|
|
+
|
|
|
+ } elseif ($level == 5) {
|
|
|
+ $fifthChapterParentId = DB::connection('company')->table($tableNameChapter)->where('id', $chapterId)->value('parent_id');
|
|
|
+ $fourthLevelInfo = DB::connection('company')->table($tableNameChapter)->where('id', $fifthChapterParentId)->first();
|
|
|
+ $fourthLevelName = $fourthLevelInfo['name'];
|
|
|
+ $fourthLevelId = $fourthLevelInfo['id'];
|
|
|
+
|
|
|
+ $fourthChapterParentId = DB::connection('company')->table($tableNameChapter)->where('id', $fourthLevelId)->value('parent_id');
|
|
|
+
|
|
|
+ $thirdLevelInfo = DB::connection('company')->table($tableNameChapter)->where('id', $fourthChapterParentId)->first();
|
|
|
+ $thirdLevelName = $thirdLevelInfo['name'];
|
|
|
+ $thirdLevelId = $thirdLevelInfo['id'];
|
|
|
+
|
|
|
+ $thirdChapterParentId = DB::connection('company')->table($tableNameChapter)->where('id', $thirdLevelId)->value('parent_id');
|
|
|
+
|
|
|
+ $secondLevelName = DB::connection('company')->table($tableNameChapter)->where('id', $thirdChapterParentId)->value('name');
|
|
|
+ //dd($secondLevelName . '-' . $thirdLevelName . '-'. $fourthLevelName . '-' . $baseName);
|
|
|
+ return $secondLevelName . '->' . $thirdLevelName . '->'. $fourthLevelName . '->' . $baseName;
|
|
|
+ } elseif ($level == 6) {
|
|
|
+ $sixChapterParentId = DB::connection('company')->table($tableNameChapter)->where('id', $chapterId)->value('parent_id');
|
|
|
+
|
|
|
+ $fifthLevelInfo = DB::connection('company')->table($tableNameChapter)->where('id', $sixChapterParentId)->first();
|
|
|
+
|
|
|
+ $fifthLevelName = $fifthLevelInfo['name'];
|
|
|
+ $fifthLevelId = $fifthLevelInfo['id'];
|
|
|
+
|
|
|
+ $fifthChapterParentId = DB::connection('company')->table($tableNameChapter)->where('id', $fifthLevelId)->value('parent_id');
|
|
|
+
|
|
|
+ $fourthLevelInfo = DB::connection('company')->table($tableNameChapter)->where('id', $fifthChapterParentId)->first();
|
|
|
+ $fourthLevelName = $fourthLevelInfo['name'];
|
|
|
+ $fourthLevelId = $fourthLevelInfo['id'];
|
|
|
+
|
|
|
+ $fourthChapterParentId = DB::connection('company')->table($tableNameChapter)->where('id', $fourthLevelId)->value('parent_id');
|
|
|
+
|
|
|
+ $thirdLevelInfo = DB::connection('company')->table($tableNameChapter)->where('parent_id', $fourthChapterParentId)->first();
|
|
|
+ $thirdLevelName = $thirdLevelInfo['name'];
|
|
|
+ $thirdLevelId = $thirdLevelInfo['id'];
|
|
|
+ $thirdChapterParentId = DB::connection('company')->table($tableNameChapter)->where('id', $thirdLevelId)->value('parent_id');
|
|
|
+ $secondLevelName = DB::connection('company')->table($tableNameChapter)->where('id', $thirdChapterParentId)->value('name');
|
|
|
+//dd($secondLevelName . '-' . $thirdLevelName . '-'. $fourthLevelName . '-' . $fifthLevelName . '-' . $baseName);
|
|
|
+ return $secondLevelName . '->' . $thirdLevelName . '->'. $fourthLevelName . '->' . $fifthLevelName . '->' . $baseName;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+}
|