groupBy('lang')->get(); foreach ($lang as $key => $value) { $this->info('language:'.$value->lang); } if ($this->option('lang')) { return 0; } if ($this->option('test')) { $this->info('run in test mode'); } $this->info('给CustomBook 添加channel'); $newChannel = 0; foreach (CustomBook::get() as $key => $customBook) { $this->info('doing book='.$customBook->book_id); if (empty($customBook->channel_id)) { $bookLang = $customBook->lang; if (empty($bookLang) || $bookLang === 'false' || $bookLang === 'null' || $bookLang === 'none') { $this->info('language can not be empty change to pa, book='.$customBook->book_id); Log::warning('copy:user.book language can not be empty ,change to pa, book='.$customBook->book_id); $bookLang = 'pa'; } $customBook->lang = $bookLang; $channelName = '_user_book_'.$bookLang; $channel = Channel::where('owner_uid', $customBook->owner) ->where('name', $channelName)->first(); if ($channel === null) { $this->info('create new channel'); $channelUuid = Str::uuid(); $channel = new Channel; $channel->id = app('snowflake')->id(); $channel->uid = $channelUuid; $channel->owner_uid = $customBook->owner; $channel->name = $channelName; $channel->type = 'original'; $channel->lang = $bookLang; $channel->editor_id = 0; $channel->is_system = true; $channel->create_time = time() * 1000; $channel->modify_time = time() * 1000; $channel->status = $customBook->status; if (! $this->option('test')) { $saveOk = $channel->save(); if ($saveOk) { $newChannel++; Log::debug('copy user book : create channel success name='.$channelName); } else { Log::error('copy user book : create channel fail.', ['channel' => $channelName, 'book' => $customBook->book_id]); $this->error('copy user book : create channel fail. name='.$channelName); continue; } } } if (! Str::isUuid($channel->uid)) { Log::error('copy user book : channel id error.', ['channel' => $channelName, 'book' => $customBook->book_id]); $this->error('copy user book : channel id error. name='.$channelName); continue; } $customBook->channel_id = $channel->uid; if (! $this->option('test')) { $ok = $customBook->save(); if (! $ok) { Log::error('copy user book : create channel fail.', ['book' => $customBook->book_id]); continue; } } } } $this->info('给CustomBook 添加channel 结束'); $userBooks = CustomBook::get(); $this->info('book '.count($userBooks)); $copySent = 0; foreach ($userBooks as $key => $book) { $queryBook = $this->option('book'); if (! empty($queryBook)) { if ($book->book_id != $queryBook) { continue; } } if (empty($book->channel_id)) { $this->error('book channel is empty'); continue; } $this->info('doing book '.$book->book_id); $bookSentence = CustomBookSentence::where('book', $book->book_id)->cursor(); foreach ($bookSentence as $key => $sentence) { $newRow = Sentence::firstOrNew( [ 'book_id' => $sentence->book, 'paragraph' => $sentence->paragraph, 'word_start' => $sentence->word_start, 'word_end' => $sentence->word_end, 'channel_uid' => $book->channel_id, ], [ 'id' => app('snowflake')->id(), 'uid' => Str::uuid(), 'create_time' => $sentence->create_time, 'modify_time' => $sentence->modify_time, ] ); $newRow->editor_uid = $sentence->owner; $newRow->content = $sentence->content; $newRow->strlen = mb_strlen($sentence->content, 'UTF-8'); $newRow->status = $sentence->status; $newRow->content_type = $sentence->content_type; $newRow->language = $book->lang; if (empty($newRow->channel_uid)) { $this->error('channel uuid is null book='.$sentence->book.' para='.$sentence->paragraph); Log::error('channel uuid is null ', ['sentence' => $sentence->book]); } else { if (! $this->option('test')) { $ok = $newRow->save(); if (! $ok) { Log::error('copy fail ', ['sentence' => $sentence->id]); } $copySent++; } } } $this->info("book {$book->book} finished"); } $this->info('all done '); $this->info('channel create '.$newChannel); $this->info('sentence copy '.$copySent); return 0; } }