|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Models;
|
|
|
|
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 路由映射表
|
|
|
|
* Class RouteMap
|
|
|
|
* @package App\Http\Models
|
|
|
|
* @author zbj
|
|
|
|
* @date 2023/4/17
|
|
|
|
*/
|
|
|
|
class RouteMap extends Model
|
|
|
|
{
|
|
|
|
//设置关联表名
|
|
|
|
protected $table = 'gl_route_map';
|
|
|
|
|
|
|
|
//路由类型
|
|
|
|
const SOURCE_PRODUCT = 'product';
|
|
|
|
const SOURCE_PRODUCT_CATE = 'product_category';
|
|
|
|
const SOURCE_PRODUCT_KEYWORD = 'product_keyword';
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 生成路由标识
|
|
|
|
* @param $title
|
|
|
|
* @param $source
|
|
|
|
* @param $source_id
|
|
|
|
* @param $project_id
|
|
|
|
* @return string
|
|
|
|
* @author zbj
|
|
|
|
* @date 2023/4/17
|
|
|
|
*/
|
|
|
|
public static function generateRoute($title, $source, $source_id, $project_id){
|
|
|
|
$i=1;
|
|
|
|
$sign = generateRoute($title);
|
|
|
|
$route = $sign;
|
|
|
|
while(self::isExist($route, $project_id, $source, $source_id)){
|
|
|
|
$route = $sign .'-'.$i;
|
|
|
|
$i++;
|
|
|
|
}
|
|
|
|
return $route;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 路由是否存在
|
|
|
|
* @param $route
|
|
|
|
* @param $source
|
|
|
|
* @param $source_id
|
|
|
|
* @param $project_id
|
|
|
|
* @return bool
|
|
|
|
* @author zbj
|
|
|
|
* @date 2023/4/17
|
|
|
|
*/
|
|
|
|
protected static function isExist($route, $source, $source_id, $project_id){
|
|
|
|
$fixed = []; //固定的路由
|
|
|
|
if(in_array($route, $fixed)){
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
$route = self::where('project_id', $project_id)->where('route', $route)->first();
|
|
|
|
if($route){
|
|
|
|
if($route->source == $source && $route->source_id == $source_id){
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param $title
|
|
|
|
* @param $source
|
|
|
|
* @param $source_id
|
|
|
|
* @param int $project_id
|
|
|
|
* @param bool $auto
|
|
|
|
* @return bool
|
|
|
|
* @throws \Exception
|
|
|
|
* @author zbj
|
|
|
|
* @date 2023/4/17
|
|
|
|
*/
|
|
|
|
public static function setRoute($title, $source, $source_id, $project_id = 0, $auto=false){
|
|
|
|
$route = $title;
|
|
|
|
|
|
|
|
if($auto){
|
|
|
|
$route = self::generateRoute($title, $source, $source_id, $project_id);
|
|
|
|
}
|
|
|
|
if(!$route){
|
|
|
|
throw new \Exception('路由不能为空');
|
|
|
|
}
|
|
|
|
try {
|
|
|
|
$route_map = self::where('project_id', $project_id)->where('source_id', $source_id)->where('source', $source)->first();
|
|
|
|
if(!$route_map){
|
|
|
|
$route_map = new self();
|
|
|
|
$route_map->source = $source;
|
|
|
|
$route_map->source_id = $source_id;
|
|
|
|
$route_map->project_id = $project_id;
|
|
|
|
}
|
|
|
|
$route_map->route = $route;
|
|
|
|
$route_map->save();
|
|
|
|
}catch (\Exception $e){
|
|
|
|
throw new \Exception('路由映射失败');
|
|
|
|
}
|
|
|
|
return $route;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param $route
|
|
|
|
* @param $project_id
|
|
|
|
* @return mixed
|
|
|
|
* @author zbj
|
|
|
|
* @date 2023/4/17
|
|
|
|
*/
|
|
|
|
public function getRouteInfo($route, $project_id = 0){
|
|
|
|
return self::whereIn('project_id', [0, $project_id])->where('route', $route)->get();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param $source
|
|
|
|
* @param $source_id
|
|
|
|
* @param $project_id
|
|
|
|
* @return mixed
|
|
|
|
* @author zbj
|
|
|
|
* @date 2023/4/17
|
|
|
|
*/
|
|
|
|
public static function getRoute($source, $source_id, $project_id = 0){
|
|
|
|
if(!$project_id){
|
|
|
|
return self::where([
|
|
|
|
'project_id' => 0,
|
|
|
|
'source' => $source,
|
|
|
|
'source_id' => $source_id
|
|
|
|
])->value('route');
|
|
|
|
}
|
|
|
|
return self::whereIn('project_id', [0, $project_id])->where('source', $source)->where('source_id', $source_id)->value('route');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param $route
|
|
|
|
* @param $source
|
|
|
|
* @param int $project_id
|
|
|
|
* @return mixed
|
|
|
|
* @author zbj
|
|
|
|
* @date 2023/4/17
|
|
|
|
*/
|
|
|
|
public static function getSourceId($route, $source, $project_id = 0){
|
|
|
|
return self::whereIn('project_id', [0, $project_id])->where('source', $source)->where('route', $route)->value('source_id');
|
|
|
|
}
|
|
|
|
} |
...
|
...
|
|