| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379 |
- <?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;
- }
- }
- }
|