作者 刘锟

Merge remote-tracking branch 'origin/master' into akun

<?php
use App\Models\File\Image;
use App\Models\RouteMap\RouteMap;
use App\Services\CosService;
use App\Utils\EncryptUtils;
use App\Utils\LogUtils;
... ... @@ -560,3 +561,24 @@ function ends_with($string, $suffix)
{
return substr($string, -strlen($suffix)) === $suffix;
}
/**
* @remark :获取二级路由
* @name :getRouteMap
* @author :lyh
* @method :post
* @time :2023/11/10 14:29
*/
function getRouteMap($source,$source_id){
$route = '';
$routeMapModel = new RouteMap();
$info = $routeMapModel->read(['source'=>$source,'source_id'=>$source_id]);
if($info !== false){
if(!empty($info['path'])){
$route = $info['path'].'/'.$info['route'];
}else{
$route = $info['route'];
}
}
return $route;
}
... ...
<?php
namespace App\Http\Controllers\Aside;
use App\Http\Logic\Aside\CollectLogic;
/**
* 提供给AICC采集
* Class CollectController
* @package App\Http\Controllers\Aside
* @author zbj
* @date 2023/11/10
*/
class CollectController extends BaseController
{
/**
* @author zbj
* @date 2023/11/10
*/
public function index(CollectLogic $collectLogic)
{
$data = $collectLogic->collect_data();
return $this->success($data);
}
}
... ...
... ... @@ -758,6 +758,9 @@ class ProjectController extends BaseController
* @time :2023/11/8 14:17
*/
public function copyProject(ProjectLogic $logic){
if($this->manage['mobile'] != '15680871314' || $this->manage['mobile'] != '18008059100'){
$this->response('当前账号不支持复制项目');
}
$this->request->validate([
'project_id'=>'required',
],[
... ... @@ -767,4 +770,21 @@ class ProjectController extends BaseController
$this->response('success',Code::SUCCESS,$data);
}
/**
* AICC采集数据接口token
* @author zbj
* @date 2023/11/10
*/
public function site_token(Request $request, ProjectLogic $logic){
$this->request->validate([
'project_id'=>'required',
],[
'project_id.required' => 'project_id不能为空',
]);
$token = $logic->getSiteToken($this->map);
$this->response('success',Code::SUCCESS,['site_token' => $token]);
}
}
... ...
... ... @@ -24,6 +24,9 @@ class ATemplateModuleController extends BaseController
* @time :2023/6/28 16:54
*/
public function lists(ATemplateModuleLogic $ATemplateModuleLogic){
if(!isset($this->map['test_model'])){
$this->map['test_model'] = 0;
}
$lists = $ATemplateModuleLogic->aTemplateModuleLists($this->map,$this->page,$this->row,$this->order);
$this->response('success',Code::SUCCESS,$lists);
}
... ...
... ... @@ -9,6 +9,7 @@ use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\User\UserLogic;
use App\Models\Project\DeployBuild;
use App\Models\Project\Project;
use App\Models\RouteMap\RouteMap;
use App\Models\User\ProjectMenu as ProjectMenuModel;
use App\Models\User\ProjectRole as ProjectRoleModel;
use App\Models\User\User;
... ... @@ -207,4 +208,36 @@ class ComController extends BaseController
$str = $common->encrypt($data);
$this->response('success',Code::SUCCESS,['str'=>$str]);
}
/**
* @remark :获取访问链接
* @name :getLink
* @author :lyh
* @method :post
* @time :2023/11/10 15:18
*/
public function getLink(){
$this->request->validate([
'type' => 'required',
], [
'type.required' => '类型不能为空',
]);
switch ($this->param['type']){
case 'news':
$url_link = $this->user['domain'].RouteMap::SOURCE_NEWS.'/';
break;
case 'news_category':
$url_link = $this->user['domain'].RouteMap::PATH_NEWS_CATE.'/';
break;
case 'blog':
$url_link = $this->user['domain'].RouteMap::SOURCE_BLOG.'/';
break;
case 'blog_category':
$url_link = $this->user['domain'].RouteMap::PATH_BLOG_CATE.'/';
break;
default:
$url_link = $this->user['domain'];
}
$this->response('success',Code::SUCCESS,['url'=>$url_link]);
}
}
... ...
... ... @@ -27,7 +27,7 @@ class BlogCategoryController extends BaseController
$blogModel = new BlogModel();
foreach ($lists as $k => $v){
$v['num'] = $blogModel->formatQuery(['category_id'=>['like','%,' . $v['id'] . ',%']])->count();
$v['url'] = $this->user['domain'] . $v['alias'].'/';
$v['url'] = $this->user['domain'] . getRouteMap(RouteMap::SOURCE_BLOG_CATE,$v['id']);
$lists[$k] = $v;
}
if(!isset($this->map['name'])){
... ... @@ -81,7 +81,6 @@ class BlogCategoryController extends BaseController
'id.required' => 'ID不能为空'
]);
$info = $blogCategoryLogic->info_blog_category();
$info['url'] = $this->user['domain'] . $info['alias'];
$this->response('success',Code::SUCCESS,$info);
}
... ...
... ... @@ -10,6 +10,7 @@ use App\Models\Blog\Blog as BlogModel;
use App\Models\Blog\BlogCategory;
use App\Models\Blog\BlogCategory as BlogCategoryModel;
use App\Models\Product\Category;
use App\Models\RouteMap\RouteMap;
use App\Models\User\User;
class BlogController extends BaseController
... ... @@ -35,7 +36,7 @@ class BlogController extends BaseController
$user = new User();
foreach ($lists['list'] as $k => $v){
$v['category_name'] = $this->categoryName($v['category_id'],$data);
$v['url'] = $this->user['domain'] .$v['url'].'/';
$v['url'] = $this->user['domain'] . getRouteMap(RouteMap::SOURCE_BLOG,$v['id']);
$v['image_link'] = getImageUrl($v['image']);
$v['operator_name'] = $user->getName($v['operator_id']);
$lists['list'][$k] = $v;
... ...
... ... @@ -27,7 +27,7 @@ class NewsCategoryController extends BaseController
$newsModel = new NewsModel();
foreach ($lists as $k => $v){
$v['num'] = $newsModel->formatQuery(['category_id'=>['like','%,' . $v['id'] . ',%']])->count();
$v['url'] = $this->user['domain'] . $v['alias'].'/';
$v['url'] = $this->user['domain'].getRouteMap(RouteMap::SOURCE_NEWS_CATE,$v['id']);
$lists[$k] = $v;
}
if(!isset($this->map['name'])){
... ...
... ... @@ -8,6 +8,7 @@ use App\Http\Logic\Bside\News\NewsLogic;
use App\Http\Requests\Bside\News\NewsRequest;
use App\Models\News\News as NewsModel;
use App\Models\News\NewsCategory;
use App\Models\RouteMap\RouteMap;
use App\Models\User\User;
... ... @@ -35,7 +36,7 @@ class NewsController extends BaseController
$user = new User();
foreach ($lists['list'] as $k => $v){
$v['category_name'] = $this->categoryName($v['category_id'],$data);
$v['url'] = $this->user['domain'] .$v['url'].'/';
$v['url'] = $this->user['domain'].getRouteMap(RouteMap::SOURCE_NEWS,$v['id']);
$v['image_link'] = getImageUrl($v['image']);
$v['operator_name'] = $user->getName($v['operator_id']);
$lists['list'][$k] = $v;
... ... @@ -44,6 +45,8 @@ class NewsController extends BaseController
$this->response('success',Code::SUCCESS,$lists);
}
/**
* @remark :处理列表返回参数
* @name :handleReturnParam
... ...
... ... @@ -22,6 +22,9 @@ class BTemplateModuleController extends BaseController
* @time :2023/6/29 11:33
*/
public function lists(BTemplateModuleLogic $BTemplateModuleLogic){
if(!isset($this->map['test_model'])){
$this->map['test_model'] = 0;
}
$list = $BTemplateModuleLogic->ModuleList($this->map,$this->order);
$this->response('success',Code::SUCCESS,$list);
}
... ...
<?php
namespace App\Http\Logic\Aside;
use App\Helper\Arr;
use App\Http\Logic\Logic;
use App\Models\Blog\Blog;
use App\Models\Domain\DomainInfo;
use App\Models\News\News;
use App\Models\Product\Keyword;
use App\Models\Product\Product;
use App\Models\Project\Project;
use App\Services\ProjectServer;
/**
* Class CollectLogic
* @package App\Http\Logic\Aside
* @author zbj
* @date 2023/11/10
*/
class CollectLogic extends Logic
{
protected $project;
protected $domain;
protected $type;
protected $page_size = 100;
public function __construct()
{
$this->checkAuth();
}
/**
* 校验权限
* @throws \App\Exceptions\AsideGlobalException
* @throws \App\Exceptions\BsideGlobalException
* @author zbj
* @date 2023/11/10
*/
public function checkAuth()
{
$request = request();
$site_token = $request->header('site-token');
$domain = $request->input('domain');
if (!$site_token) {
$this->fail('参数异常');
}
$this->project = Project::where('site_token', $site_token)->first();
if (!$this->project) {
$this->fail('授权码无效');
}
$domain_info = DomainInfo::where('project_id', $this->project->id)->where('domain', $domain)->first();
if (!$domain_info) {
$this->fail('域名不匹配');
}
$this->domain = 'https://' . $domain_info['domain'] . '/';
$this->type = $request->input('type', '');
}
public function collect_data()
{
ProjectServer::useProject($this->project->id);
$action = $this->type;
return $this->$action();
}
public function __call($name, $param)
{
return [];
}
public function product()
{
$this->model = new Product();
$where[] = ['status' => Product::STATUS_ON];
$sort = ['sort' => 'desc'];
$columns = ['title', 'content', 'gallery', 'seo_mate', 'intro', 'route', 'keyword_id'];
$list = self::getList($where,$sort, $columns, $this->page_size);
$data =[];
foreach ($list['list'] as $item){
//关键词标签 没有就取seo 键词
if($item['keyword_id']){
$keyword = Keyword::whereIn('id', $item['keyword_id'])->pluck('title')->toArray();
if($keyword){
$keyword = implode(',', $keyword);
}
}
$keyword = $keyword ?: ($item['seo_mate']['keyword'] ?? '');
$data[] = [
'title' => $item['title'],
'url' => $this->domain . $item['route'],
'keywords' => $keyword,
'description' => strip_tags($item['intro']?:''),
'content' => strip_tags($item['content'] ?: ''),
'img' => array_column($item['gallery'] ?: [], 'url')
];
}
$list['list'] = $data;
return $list;
}
public function news()
{
$this->model = new News();
$where[] = ['status' => News::STATUS_ONE];
$sort = ['sort' => 'desc'];
$columns = ['name', 'text', 'image', 'seo_keywords', 'remark', 'url'];
$list = self::getList($where,$sort, $columns, $this->page_size);
$data =[];
foreach ($list['list'] as $item){
$data[] = [
'title' => $item['name'],
'url' => $this->domain . $item['url'],
'keywords' => $item['seo_keywords'],
'description' => strip_tags($item['remark']?:''),
'content' => strip_tags($item['text'] ?: ''),
'img' => $item['image'] ?:''
];
}
$list['list'] = $data;
return $list;
}
public function blog()
{
$this->model = new Blog();
$where[] = ['status' => Blog::STATUS_ONE];
$sort = ['sort' => 'desc'];
$columns = ['name', 'text', 'image', 'seo_keywords', 'remark', 'url'];
$list = self::getList($where,$sort, $columns, $this->page_size);
$data =[];
foreach ($list['list'] as $item){
$data[] = [
'title' => $item['name'],
'url' => $this->domain . $item['url'],
'keywords' => $item['seo_keywords'],
'description' => strip_tags($item['remark']?:''),
'content' => strip_tags($item['text'] ?: ''),
'img' => $item['image'] ?:''
];
}
$list['list'] = $data;
return $list;
}
}
... ...
... ... @@ -214,15 +214,15 @@ class DomainInfoLogic extends BaseLogic
}
//保存301跳转数据+其他域名
$data = [
'other_domain'=>json_encode($this->param['other_domain']),
'extend_config'=>json_encode($this->param['extend_config']),
'other_domain'=>json_encode($this->param['other_domain'] ?? []),
'extend_config'=>json_encode($this->param['extend_config'] ?? []),
'type'=>$this->param['type'],
'private_key' => $this->param['key'] ?? '',
'private_cert' => $this->param['cert'] ?? '',
];
$this->model->edit($data,['id'=>$this->param['id']]);
//生成证书
$this->setDomainSsl($server_info['init_domain'],$info['domain'],$this->param['extend_config'],$this->param['other_domain']);
$this->setDomainSsl($server_info['init_domain'],$info['domain'],$this->param['extend_config'] ?? [],$this->param['other_domain'] ?? []);
return $this->success();
}
... ...
... ... @@ -35,6 +35,7 @@ use App\Models\User\User as UserModel;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Str;
/**
* Class ProjectLogic
... ... @@ -74,6 +75,9 @@ class ProjectLogic extends BaseLogic
if(empty($info['channel'])){
$info['channel'] = ["user_id"=>"", "zone_id"=>"", "channel_id"=>""];
}
if(empty($info['payment']['renewal_record'])){
$info['payment']['renewal_record'] = [["amount"=> null, "remark"=> null, "expire_at"=> null]];
}
return $this->success($info);
}
... ... @@ -647,6 +651,7 @@ class ProjectLogic extends BaseLogic
$query->select('*')->from("{$name}");
}
);
if (Schema::connection('custom_mysql')->hasColumn($table, 'project_id')) {
DB::connection('custom_mysql')->table($table)->update(['project_id' => $news_project_id]);
}
... ... @@ -654,4 +659,21 @@ class ProjectLogic extends BaseLogic
return true;
}
/**
* 对外接口token
* @param $data
* @return string
* @author zbj
* @date 2023/11/10
*/
public function getSiteToken($data){
$project = $this->getCacheInfo($data['project_id']);
if(empty($project['site_token']) || !empty($data['refresh'])){
$token = strtolower(base64_encode("6.0") . md5('project_' . $data['project_id'] . '_' . time()));
$project->site_token = $token;
$project->save();
}
return $project->site_token;
}
}
... ...
... ... @@ -29,15 +29,11 @@ class UserLogic extends BaseLogic
*/
public function user_info()
{
$info = Common::get_user_cache($this->model, $this->param['id'], 'A');
if (empty($info)) {
$info = $this->model->read($this->param, ['id', 'project_id', 'name', 'status', 'role_id' ,'mobile', 'operator_id']);
if ($info === false) {
$this->fail('当前数据不存在');
}
$info['project_name'] = (new Project())->read(['id' => $info['project_id']], ['title'])['title'];
Common::set_user_cache($info, $this->model, $this->param['id'], 'A');
$info = $this->model->read($this->param, ['id', 'project_id', 'name', 'status', 'role_id' ,'mobile', 'operator_id']);
if ($info === false) {
$this->fail('当前数据不存在');
}
$info['project_name'] = (new Project())->read(['id' => $info['project_id']], ['title'])['title'];
return $this->success($info);
}
... ...
... ... @@ -181,10 +181,6 @@ class CustomTemplateLogic extends BaseLogic
'route'=>$info['url'],
];
$this->setRouteDeleteSave($data);
//"字符串以\"-product\"结尾"
if (!ends_with($route, "-tag")) {
$route = $route."-tag";
}
}
return $route;
}
... ...
... ... @@ -59,6 +59,7 @@ class KeywordLogic extends BaseLogic
}else{
$this->param['project_id'] = $this->user['project_id'];
$this->param['created_at'] = date('Y-m-d H:i:s');
$this->param['title'] = $this->param['title'].'-tag';
$this->param['updated_at'] = $this->param['created_at'];
$id = $this->model->insertGetId($this->param);
//路由映射
... ...
... ... @@ -215,10 +215,6 @@ class ProductLogic extends BaseLogic
'route'=>$route,
];
$this->setRouteDeleteSave($data);
//"字符串以\"-product\"结尾"
if (!ends_with($route, "-product")) {
$route = $route."-product";
}
}
return $route;
}
... ...
... ... @@ -170,6 +170,7 @@ Route::middleware(['aloginauth'])->group(function () {
Route::any('/getRenewLog', [Aside\Project\ProjectController::class, 'getRenewLog'])->name('admin.project_getRenewLog');
Route::any('/tdkList', [Aside\Project\ProjectController::class, 'tdkList'])->name('admin.project_tdkList');
Route::any('/copyProject', [Aside\Project\ProjectController::class, 'copyProject'])->name('admin.project_copyProject');
Route::any('/site_token', [Aside\Project\ProjectController::class, 'site_token'])->name('admin.project_site_token');
//获取关键词前缀和后缀
Route::prefix('keyword')->group(function () {
Route::any('/getKeywordPrefix', [Aside\Project\KeywordPrefixController::class, 'getKeywordPrefix'])->name('admin.keyword_getKeywordPrefix');
... ... @@ -339,6 +340,8 @@ Route::group([], function () {
// 提供模板 提单后台查看
Route::any('get_template_list', [Aside\Template\ATemplateController::class, 'getTemplateList'])->name('admin.get_template_list');
Route::any('get_template_detail', [Aside\Template\ATemplateController::class, 'getTemplateDetail'])->name('admin.get_template_detail');
Route::any('/collect', [Aside\CollectController::class, 'index'])->name('admin.collect');
});
... ...
... ... @@ -16,6 +16,7 @@ Route::middleware(['bloginauth'])->group(function () {
//获取当前登录用户项目详情
Route::any('/get_project', [\App\Http\Controllers\Bside\BCom\ComController::class, 'get_project'])->name('get_project');
Route::any('/generateToken', [\App\Http\Controllers\Bside\BCom\ComController::class, 'generateToken'])->name('generateToken');
Route::any('/getLink', [\App\Http\Controllers\Bside\BCom\ComController::class, 'getLink'])->name('getLink');
//用户相关路由
Route::prefix('user')->group(function () {
Route::any('/', [\App\Http\Controllers\Bside\User\UserController::class, 'lists'])->name('user_lists');
... ...