/** * Execute the console command. * * @return mixed */ public function handle() { // 获取文本路径 $path = $this->argument('path'); if (!is_file($path)) { return $this->error("Invalid file path {$path}."); } // 解析数据 $list = self::decodeText($path); // 插入数据 foreach ($list as $group) { DB::transaction(function () use(&$group) { // 插入声音记录 self::insertAudios($group); // 插入参与人记录 $data = $group['all'] ?? end($group); $participantIds = []; $participantNames = Participant::filterParticipantNames($data['participant']); foreach ($participantNames as $name) { $participant = Participant::firstOrCreate(['name' => $name]); $participant->increment('counts', 1); $participantIds[] = $participant->id; } // 插入节目记录 $topic = Program::filterTopic($data['topic']); if (empty($group['all'])) { if (in_array(mb_substr($topic, -1), ['a', 'b', 'c'])) { $topic = mb_substr($topic, 0, -1); } } $program = Program::firstOrCreate(['date' => $data['date'], 'topic' => $topic, 'state' => Program::STATE_ENABLE]); if (!empty($participantIds)) { $program->participants()->sync($participantIds); } // 输出日期 $this->info(sprintf("%s\t%s", $data['date'], $topic)); }); } }