作者 赵彬吉

Merge branch 'master' into develop

... ... @@ -140,7 +140,7 @@ class ProjectUpdate extends Command
'seo_keywords' => $item['seo_keywords'] ?? '',
'seo_description' => $item['seo_description'] ?? '',
]);
$route = RouteMap::setRoute($this->get_url_route($item['url']) ?: $item['name'], RouteMap::SOURCE_PRODUCT_KEYWORD, $id, $project_id);
$route = $this->set_map($this->get_url_route($item['url']), RouteMap::SOURCE_PRODUCT_KEYWORD, $id, $project_id);
$model->edit(['route' => $route], ['id' => $id]);
} catch (\Exception $e) {
echo 'date:' . date('Y-m-d H:i:s') . ', task_id: ' . $task->id . ', error: ' . $e->getMessage() . PHP_EOL;
... ... @@ -273,7 +273,7 @@ class ProjectUpdate extends Command
]),
'status' => Product::STATUS_ON
]);
$route = RouteMap::setRoute($this->get_url_route($item['url']) ?: $item['ttile'], RouteMap::SOURCE_PRODUCT, $id, $project_id);
$route = $this->set_map($this->get_url_route($item['url']), RouteMap::SOURCE_PRODUCT, $id, $project_id);
$model->edit(['route' => $route], ['id' => $id]);
} catch (\Exception $e) {
echo 'date:' . date('Y-m-d H:i:s') . ', task_id: ' . $task->id . ', error: ' . $e->getMessage() . PHP_EOL;
... ... @@ -328,7 +328,7 @@ class ProjectUpdate extends Command
'image' => $item['images'][0] ?? '',
'status' => $api_type == 'news' ? News::STATUS_ONE : Blog::STATUS_ONE
]);
$route = RouteMap::setRoute($this->get_url_route($item['url']) ?: $item['ttile'], $api_type == 'news' ? RouteMap::SOURCE_NEWS : RouteMap::SOURCE_BLOG, $id, $project_id);
$route = $this->set_map($this->get_url_route($item['url']), $api_type == 'news' ? RouteMap::SOURCE_NEWS : RouteMap::SOURCE_BLOG, $id, $project_id);
$model->edit(['url' => $route], ['id' => $id]);
} catch (\Exception $e) {
echo 'date:' . date('Y-m-d H:i:s') . ', task_id: ' . $task->id . ', error: ' . $e->getMessage() . PHP_EOL;
... ... @@ -377,7 +377,7 @@ class ProjectUpdate extends Command
'html' => $item['content'] ?? '',
'status' => 1
]);
$route = RouteMap::setRoute($this->get_url_route($item['url']) ?: $item['ttile'], RouteMap::SOURCE_PAGE, $id, $project_id);
$route = $this->set_map($this->get_url_route($item['url']), RouteMap::SOURCE_PAGE, $id, $project_id);
$model->edit(['url' => $route], ['id' => $id]);
} catch (\Exception $e) {
echo 'date:' . date('Y-m-d H:i:s') . ', task_id: ' . $task->id . ', error: ' . $e->getMessage() . PHP_EOL;
... ... @@ -465,7 +465,7 @@ class ProjectUpdate extends Command
'keywords' => $item['keywords'] ?? '',
'describe' => $item['description'] ?? ''
]);
$route = RouteMap::setRoute($this->get_url_route($item['url']) ?: $item['name'], RouteMap::SOURCE_PRODUCT_CATE, $parent_id, $project_id);
$route = $this->set_map($this->get_url_route($item['url']), RouteMap::SOURCE_PRODUCT_CATE, $parent_id, $project_id);
$model->edit(['route' => $route], ['id' => $parent_id]);
} catch (\Exception $e) {
echo 'date:' . date('Y-m-d H:i:s') . ', category_insert error: ' . $e->getMessage() . PHP_EOL;
... ... @@ -516,4 +516,28 @@ class ProjectUpdate extends Command
return $str;
}
//路由入库
protected function set_map($route, $source, $source_id, $project_id)
{
if (empty($route)) {
return '';
}
$route_map = new RouteMap();
$route_map->project_id = $project_id;
$route_map->source = $source;
$route_map->source_id = $source_id;
$route_map->route = $route;
if ($source == RouteMap::SOURCE_NEWS) {
$route_map->path = RouteMap::SOURCE_NEWS;
} elseif ($source == RouteMap::SOURCE_BLOG) {
$route_map->path = RouteMap::SOURCE_BLOG;
}
$route_map->save();
return $route;
}
}
... ...
... ... @@ -116,7 +116,13 @@ class NavController extends BaseController
* @author zbj
* @date 2023/11/21
*/
public function import(){
public function import(NavLogic $navLogic){
$this->request->validate([
'id'=>'required',
],[
'id.required' => 'ID不能为空',
]);
$navLogic->importNav();
$this->response('success');
}
}
... ...
... ... @@ -116,4 +116,79 @@ class NavLogic extends BaseLogic
}
return $this->success();
}
/**
* 一键导入 对应分类
* @throws \App\Exceptions\AsideGlobalException
* @throws \App\Exceptions\BsideGlobalException
*/
public function importNav(){
$nav = $this->getInfo($this->param['id']);
if(!in_array($nav['url'], array_keys(BNav::ableImportMap()))){
$this->fail('该菜单不支持一键导入');
}
$class = BNav::ableImportMap($nav['url']);
$category = new $class();
$fields = ['id', 'name', 'pid', 'alias'];
if($nav['url'] == 'products'){
$fields = ['id', 'title as name', 'pid', 'route as alias'];
}
$this->addByPid($category, $nav, $fields);
return $this->success();
}
/**
* 一级一级的加
* @author zbj
* @date 2023/11/22
*/
protected function addByPid($category, $nav, $fields, $pid = 0)
{
$nav_pid = $nav['id'];
if($pid){
$p_cate = $category->where('id', $pid)->select($fields)->first();
if($p_cate){
$nav_pid = $this->model->where('import_id', $nav['id'])->where('url', $p_cate['alias'])->value('id');
}
}
$list = $category->list(['pid' => $pid], 'id', $fields, 'asc');
$data = [];
$time = date('Y-m-d H:i:s');
foreach ($list as $item) {
$exists_info = $this->model->where('import_id', $nav['id'])->where('url', $item['alias'])->first();
if($exists_info){
continue;
}
$data[] = [
'pid' => $nav_pid,
'name' => $item['name'],
'url' => $item['alias'],
'project_id' => $this->project['id'],
'location' => $nav['location'],
'group_id' => $nav['group_id'],
'status' => BNav::STATUS_ACTIVE,
'import_id' => $nav['id'],
'created_at' => $time,
'updated_at' => $time,
];
}
//每500条更一次
$data_chunk = array_chunk($data,500);
foreach ($data_chunk as $chunk){
$this->model->insert($chunk);
}
foreach ($list as $item) {
$this->addByPid($category, $nav, $fields, $item['id']);
}
}
}
... ...
... ... @@ -35,6 +35,21 @@ class BNav extends Base
const STATUS_DISABLED = 0;
/**
* @author zbj
* @date 2023/11/22
*/
public static function ableImportMap($url=''){
$map = [
'products' => '\\App\\Models\\Product\\Category',
'news' => '\\App\\Models\\News\\NewsCategory',
'blog' => '\\App\\Models\\Blog\\BlogCategory',
];
if ($url){
return $map[$url] ?:"";
}
return $map;
}
/**
... ... @@ -85,7 +100,7 @@ class BNav extends Base
*/
public function getAbleImportAttribute($value)
{
if(in_array($this->url, ['products','news','blogs'])){
if(in_array($this->url, array_keys(self::ableImportMap()))){
return 1;
}
return 0;
... ...
... ... @@ -365,6 +365,7 @@ Route::middleware(['bloginauth'])->group(function () {
Route::delete('/delete', [\App\Http\Controllers\Bside\Nav\NavController::class, 'delete'])->name('nav_delete');
Route::get('/default-urls', [\App\Http\Controllers\Bside\Nav\NavController::class, 'urls'])->name('nav_default-urls');
Route::post('/sort', [\App\Http\Controllers\Bside\Nav\NavController::class, 'sort'])->name('nav_sort');
Route::post('/import', [\App\Http\Controllers\Bside\Nav\NavController::class, 'import'])->name('nav_import');
});
//排名数据
... ...