diff --git a/app/controller/backend/ContentController.php b/app/controller/backend/ContentController.php index f288c43..1fc4778 100644 --- a/app/controller/backend/ContentController.php +++ b/app/controller/backend/ContentController.php @@ -5,7 +5,11 @@ namespace app\controller\backend; use app\exception\ModelEmptyException; use app\exception\ModelException; +use app\model\Category; use app\model\InnerChart; +use app\model\Module; +use app\model\Nav; +use app\model\NavCate; use app\model\RecycleBin; use app\model\SubContent; use app\model\SubContentCheck; @@ -681,5 +685,119 @@ class ContentController extends BaseController } return jsonReturn(0,lang('导入成功')); } + // 内容复制到其他语言 + public function copyToOtherLang(ContentService $contentService) + { + $param = $this->request->only(['from','website_id','to']); + try{ + validate(ContentValidate::class)->scene('copyToOtherLang')->check($param); + }catch (ValidateException $e){ + return jsonReturn(422, $e->getError()); + } + + Db::startTrans(); + try{ + // 查询栏目 + $Category = new Category(); + $categories = $Category->getAllCustomArrayData(['seller_id'=>$this->admin['seller_id'],'website_id'=>$param['website_id'],'lang'=>$param['to']],'id asc','id,category_map')['data']; + $categoryMap = array_combine(array_column($categories,'category_map'),array_column($categories,'id')); + // 查找模型 + $Module = new Module(); + $modules = $Module->getAllCustomArrayData(['seller_id'=>$this->admin['seller_id']],'id asc','id,table')['data']; + $SubContent = new SubContent(); + + foreach($modules as $module){ + // 副表的内容 + $content = $SubContent -> getAllCustomArrayData(['seller_id'=>$this->admin['seller_id'],'module_id'=>$module['id'],'lang'=>$param['from'],'is_del'=>1],'id asc')['data']; + if(empty($content)){ + continue; + } + // 主表内容 + $contentIds = array_column($content,'id'); + // 主表ID累加映射 + $subIds = $this->getMapIds('sub_content',$contentIds); + $mainContent = Db::name($module['table'])->where([['sub_id','in',$contentIds]])->select()->toArray(); + // 附表ID累加映射 + $mainIds = $this->getMapIds($module['table'],array_column($mainContent,'id')); + $tempContent = []; + foreach($content as $item){ + $item['category_id'] = $categoryMap[$item['category_id']] ?? 0; + $item['main_id'] = $mainIds[$item['main_id']]; + $item['lang'] = $param['to']; + $item['sub_id_map'] = $item['id']; + $subCategoryIds = explode(',',$item['sub_category_ids']); + $subCategoryIds = array_map(function($v) use($categoryMap){ + if(!empty($categoryMap[$v])){ + return $categoryMap[$v]; + }else{ + return ''; + } + },$subCategoryIds); + $item['sub_category_ids'] = implode(',',$subCategoryIds); + unset($item['id']); + $tempContent[] = $item; + } + $res = Db::name('sub_content')->insertAll($tempContent); + var_dump(123); + $tmpMainContent = []; + foreach($mainContent as $value){ + $value['sub_id'] = $subIds[$value['sub_id']]; + unset($value['id']); + $tmpMainContent[] = $value; + } + $res2 = Db::name($module['table'])->insertAll($tmpMainContent); + // 栏目和内容关系 + $CateSub = Db::name('category_sub_content')->where([['sub_content_id','in',$contentIds]])->select()->toArray(); + $tmpCategorySub = []; + foreach($CateSub as $val){ + $val['category_id'] = $categoryMap[$val['category_id']] ?? 0; + $val['sub_content_id'] = $subIds[$val['sub_content_id']]; + unset($val['id']); + $tmpCategorySub[] = $val; + } + $res3 = Db::name('category_sub_content')->insertAll($tmpCategorySub); + } + // 导航分类 + $NavCate = new NavCate(); + $navCate = $NavCate->getAllCustomArrayData(['seller_id'=>$this->admin['seller_id'],'lang'=>$param['from']],'id asc')['data']; + $navCateIds = array_column($navCate,'id'); + $navCateIdMap = $this->getMapIds('nav_cate',$navCateIds); + $tmpNavCate =[]; + foreach($navCate as $v){ + $v['lang'] = $param['to']; + unset($v['id']); + $tmpNavCate[] = $v; + } + $res4 = Db::name('nav_cate')->insertAll($tmpNavCate); + // 导航 + $Nav = new Nav(); + $navs = $Nav->getAllCustomArrayData(['seller_id'=>$this->admin['seller_id'],'lang'=>$param['from']],'id asc')['data']; + $navIds = array_column($navs,'id'); + $navMapIds = $this->getMapIds('nav',$navIds); + $navMapIds[0]=0; + $tmpNav = []; + foreach($navs as $nav){ + $nav['lang'] = $param['to']; + $nav['nav_cate_id'] = $navCateIdMap[$nav['nav_cate_id']] ?? 0; + $nav['category_id'] = $categoryMap[$nav['category_id']] ?? 0; + $nav['parent_id'] = $navMapIds[$nav['parent_id']]; + unset($nav['id']); + $tmpNav[] = $nav; + } + $res5 = Db::name('nav')->insertAll($tmpNav); + // 关联内容更新 + $contentService->exchangeRelationContent($this->admin['seller_id'],$param['to']); + + Db::commit(); + }catch (\Exception $e){ + Db::rollback(); + dump($item,123); + dump($e->getMessage()); + dd($e->getLine()); + die; + + } + dd($categoryMap); + } } diff --git a/route/admin.php b/route/admin.php index 6ff12a1..9d12a97 100644 --- a/route/admin.php +++ b/route/admin.php @@ -154,6 +154,8 @@ Route::group(function () { Route::post('/recoverAll', '/recoverAll'); // 导入excel文章列表 Route::post('/importExcel', '/importExcel'); + // 内容复制到其他语言 + Route::post('/copyToOtherLang', '/copyToOtherLang'); })->prefix(config('route.admin') . '.content');