作者 zhl

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

... ... @@ -4,6 +4,7 @@ namespace App\Console\Commands\Import;
use App\Http\Logic\Bside\Blog\BlogLogic;
use App\Http\Logic\Bside\News\NewsLogic;
use App\Http\Logic\Bside\Product\ProductLogic;
use App\Models\Import\ImportTask;
use App\Services\ProjectServer;
use Illuminate\Console\Command;
... ... @@ -80,11 +81,14 @@ class ProjectImport extends Command
if ((new NewsLogic())->importNews($task->project_id, $task->user_id, $v)) {
$success_count += 1;
}
}
if ($task->type == ImportTask::TYPE_BLOG) {
} elseif ($task->type == ImportTask::TYPE_BLOG) {
if ((new BlogLogic())->importBlog($task->project_id, $task->user_id, $v)) {
$success_count += 1;
}
} else {
if ((new ProductLogic())->importProduct($task->project_id, $task->user_id, $v)) {
$success_count += 1;
}
}
}
}
... ...
... ... @@ -5,9 +5,12 @@ namespace App\Http\Controllers\Aside\Optimize;
use App\Enums\Common\Code;
use App\Http\Controllers\Aside\BaseController;
use App\Http\Logic\Aside\Optimize\OptimizeLogic;
use App\Models\ASide\APublicModel;
use App\Models\Channel\Channel;
use App\Models\Domain\DomainInfo;
use App\Models\Manage\Manage;
use App\Models\Project\Project;
use App\Models\Task\Task;
use Illuminate\Support\Facades\DB;
/**
... ... @@ -32,14 +35,8 @@ class OptimizeController extends BaseController
$query = $this->searchParam($query);
$lists = $query->paginate($this->row, $this->selectParam(), 'page', $this->page)->toArray();
if(!empty($lists['list'])){
$manager = new Manage();
$domainModel = new DomainInfo();
foreach ($lists['list'] as $k => $v){
$v['plan'] = $project::planMap()[$v['plan']];
$v['optimist_mid_name'] = $manager->getName($v['optimist_mid']);
$v['tech_mid_name'] = $manager->getName($v['tech_mid']);
$v['autologin_code'] = getAutoLoginCode($v['id']);
$v['domain'] = $domainModel->getDomain($v['domain']);
$v = $this->handleParam($v);
$lists['list'][$k] = $v;
}
}
... ... @@ -47,6 +44,40 @@ class OptimizeController extends BaseController
}
/**
* @remark :参数处理
* @name :handleParam
* @author :lyh
* @method :post
* @time :2023/8/18 14:44
*/
public function handleParam(&$item){
if($item['type'] != Project::TYPE_ZERO){
$data = APublicModel::getNumByProjectId($item['id']);
}
$manageModel = new Manage();
$item['channel'] = Channel::getChannelText($item['channel']['user_id'] ?? 0);
$item['build_leader'] = $manageModel->getName($item['leader_mid']);
$item['build_manager'] = $manageModel->getName($item['manager_mid']);
$item['build_designer'] = $manageModel->getName($item['designer_mid']);
$item['build_tech'] = $manageModel->getName($item['tech_mid']);
$item['optimize_manager'] = $manageModel->getName($item['optimize_manager_mid']);
$item['optimize_optimist'] = $manageModel->getName($item['optimize_optimist_mid']);
$item['optimize_assist'] = $manageModel->getName($item['optimize_assist_mid']);
$item['optimize_tech'] = $manageModel->getName($item['optimize_tech_mid']);
$item['plan'] = Project::planMap()[$item['plan']];
$item['created_at'] = date('Y年m月d日', strtotime($item['cooperate_date']));
$item['autologin_code'] = getAutoLoginCode($item['id']);
$domainModel = new DomainInfo();
$item['domain'] = !empty($item['domain']) ? $domainModel->getDomain($item['domain']) : '';
$item['product_num'] = $data['product'] ?? 0;
$item['keyword_num'] = $item['key'] ?? 0;
$item['autologin_code'] = getAutoLoginCode($item['id']);
$item['article_num'] = ($data['blog'] ?? 0) + ($data['news'] ?? 0);
$item['task_finish_num'] = Task::getNumByProjectId($item['id'], Task::STATUS_DOWN);
$item['task_pending_num'] = Task::getNumByProjectId($item['id'], [Task::STATUS_DONGING, Task::STATUS_WAIT]);
return $item;
}
/**
* @remark :查询字段处理
* @name :selectParam
* @author :lyh
... ... @@ -57,14 +88,32 @@ class OptimizeController extends BaseController
$select = [
'gl_project.id AS id',
'gl_project.title AS title',
'gl_project.channel AS channel',
'gl_project.company AS company',
'gl_project.type AS type',
'gl_project_deploy_build.service_duration AS service_duration',
'gl_project_deploy_build.plan AS plan',
'gl_project.created_at AS created_at',
'gl_project.cooperate_date AS cooperate_date',
'gl_project_payment.amount AS amount',
'gl_project_deploy_optimize.optimist_mid AS optimist_mid',
'gl_project_deploy_optimize.tech_mid AS tech_mid',
'gl_project_deploy_build.dept_id AS dept_id',
'gl_project_deploy_build.keyword_num AS key',
'gl_project_deploy_build.service_duration AS day',
'gl_project_deploy_build.leader_mid AS leader_mid',
'gl_project_deploy_build.manager_mid AS manager_mid',
'gl_project_deploy_build.designer_mid AS designer_mid',
'gl_project_deploy_build.tech_mid AS tech_mid',
'gl_project_deploy_build.test_domain AS test_domain',
'gl_project_deploy_build.plan AS plan',
'gl_project_deploy_optimize.dept_id AS optimize_dept_id',
'gl_project_deploy_optimize.manager_mid AS optimize_manager_mid',
'gl_project_deploy_optimize.optimist_mid AS optimize_optimist_mid',
'gl_project_deploy_optimize.assist_mid AS optimize_assist_mid',
'gl_project_deploy_optimize.tech_mid AS optimize_tech_mid',
'gl_project_deploy_optimize.design_mid AS design_mid',
'gl_project_deploy_optimize.tech_leader AS tech_leader',
'gl_project_deploy_optimize.domain AS domain',
'gl_project_deploy_optimize.quality_mid AS quality_mid',
'gl_project_deploy_optimize.design_mid AS design_mid',
'gl_project_payment.amount AS amount',
];
return $select;
}
... ... @@ -85,23 +134,4 @@ class OptimizeController extends BaseController
return $query;
}
/**
* @remark :授权域名
* @name :empowerDomain
* @author :lyh
* @method :post
* @time :2023/6/20 15:10
*/
public function empowerDomain(OptimizeLogic $optimizeLogic){
$this->request->validate([
'id'=>'required',
'gsc_id'=>'required'
],[
'id.required' => '审核域名ID不能为空',
'gsc_id.required' => 'GSC账号ID不能为空'
]);
$optimizeLogic->empowerDomain();
$this->response('success');
}
}
... ...
... ... @@ -53,7 +53,9 @@ class ProjectController extends BaseController
$query = $project->leftJoin('gl_project_payment', 'gl_project.id', '=', 'gl_project_payment.project_id')
->leftJoin('gl_project_deploy_build', 'gl_project.id', '=', 'gl_project_deploy_build.project_id')
->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')
->leftJoin('gl_project_online_check', 'gl_project.id', '=', 'gl_project_online_check.project_id');
->leftJoin('gl_project_online_check', 'gl_project.id', '=', 'gl_project_online_check.project_id')
->where('gl_project.delete_status',Project::TYPE_ZERO)
->where('gl_project.extend_type',Project::TYPE_ZERO);
$query = $this->searchParam($query);
$lists = $query->orderBy('gl_project.id', 'desc')->paginate($this->row, $this->selectParam(), 'page', $this->page)->toArray();
if(!empty($lists) && !empty($lists['list'])){
... ... @@ -94,11 +96,6 @@ class ProjectController extends BaseController
* @time :2023/8/30 10:14
*/
public function searchType(&$query){
$query->where('gl_project.delete_status',Project::TYPE_ZERO);
$query->where('gl_project.extend_type',Project::TYPE_ZERO);
if(!isset($this->map['type'])){
$this->map['type'] = Project::TYPE_ZERO;
}
if($this->map['type'] == Project::TYPE_ZERO){
$query->where('gl_project.type',Project::TYPE_ZERO);
}elseif ($this->map['type'] == Project::TYPE_ONE){
... ...
... ... @@ -23,7 +23,8 @@ class ATemplateController extends BaseController
* @time :2023/6/28 16:34
*/
public function lists(ATemplateLogic $aTemplateLogic){
$lists = $aTemplateLogic->aTemplateList($this->map,$this->page,$this->row,$this->order);
$filed = ['id','name','image','url','status','sort','deleted_status','test_model','created_at','project_id'];
$lists = $aTemplateLogic->aTemplateList($this->map,$this->page,$this->row,$this->order,$filed);
if(!empty($lists) && !empty($lists['list'])){
foreach ($lists['list'] as $k => $v){
$v['image_link'] = getImageUrl($v['image']);
... ...
<?php
/**
* @remark :
* @name :WebSettingImageController.php
* @author :lyh
* @method :post
* @time :2023/9/21 15:12
*/
namespace App\Http\Controllers\Bside\Setting;
use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Models\WebSetting\WebSettingImage;
class WebSettingImageController extends BaseController
{
/**
* @remark :网站背景图片列表
* @name :lists
* @author :lyh
* @method :post
* @time :2023/9/21 15:12
*/
public function lists(WebSettingImage $webSettingImage){
$list = $webSettingImage->list();
$this->response('success',Code::SUCCESS,$list);
}
/**
* @remark :保存数据
* @name :save
* @author :lyh
* @method :post
* @time :2023/9/21 15:17
*/
public function save(WebSettingImage $webSettingImage){
foreach ($this->param['data'] as $v){
if(isset($v['id']) && !empty($v['id'])){
$rs = $webSettingImage->edit($v,['id'=>$v['id']]);
}else{
$v['project_id'] = $this->user['project_id'];
$rs = $webSettingImage->add($v);
}
if($rs === false){
$this->response('系统错误请联系管理员');
}
}
$this->response('success');
}
}
... ...
... ... @@ -311,7 +311,7 @@ class BlogCategoryLogic extends BaseLogic
if(!$p_category){
$p_id = $this->model->addReturnId(['name'=>$p_cate,'project_id'=>$project_id,'operator_id'=>$user_id,'create_id'=>$user_id]);
$route = RouteMap::setRoute($p_cate, RouteMap::SOURCE_NEWS_CATE, $p_id, $project_id);
$route = RouteMap::setRoute($p_cate, RouteMap::SOURCE_BLOG_CATE, $p_id, $project_id);
$this->model->edit(['alias'=>$route],['id'=>$p_id]);
}else{
$p_id = $p_category['id'];
... ... @@ -323,7 +323,7 @@ class BlogCategoryLogic extends BaseLogic
if(!$c_category){
$c_id = $this->model->addReturnId(['name'=>$c_cate,'pid'=>$p_id,'project_id'=>$project_id,'operator_id'=>$user_id,'create_id'=>$user_id]);
$route = RouteMap::setRoute($c_cate, RouteMap::SOURCE_NEWS_CATE, $c_id, $project_id);
$route = RouteMap::setRoute($c_cate, RouteMap::SOURCE_BLOG_CATE, $c_id, $project_id);
$this->model->edit(['alias'=>$route],['id'=>$c_id]);
}else{
$c_id = $c_category['id'];
... ...
... ... @@ -277,8 +277,8 @@ class BlogLogic extends BaseLogic
$category_id = $blogCategoryLogic->importBlogCategory($project_id, $user_id, $data[2]);
}
$news = $this->model->read(['name' => $data[0]]);
if (!$news) {
$blog = $this->model->read(['name' => $data[0]]);
if (!$blog) {
$id = $this->model->addReturnId(
[
'name' => $data[0],
... ... @@ -297,7 +297,7 @@ class BlogLogic extends BaseLogic
]
);
//更新路由
$route = RouteMap::setRoute($data[1] ?: $data[0], RouteMap::SOURCE_NEWS, $id, $project_id);
$route = RouteMap::setRoute($data[1] ?: $data[0], RouteMap::SOURCE_BLOG, $id, $project_id);
$this->edit(['url' => $route], ['id' => $id]);
return true;
... ...
... ... @@ -186,4 +186,50 @@ class CategoryLogic extends BaseLogic
$this->setRouteDeleteSave($data);
return $this->success();
}
/**
* 产品导入:分类处理
* @param $project_id
* @param $category
* @return string
* @throws \Exception
* @author Akun
* @date 2023/09/21 14:55
*/
public function importProductCategory($project_id,$category){
$return = [];
$cate_arr = explode('/',$category);
$p_cate = $cate_arr[0];
$c_cate = $cate_arr[1];
$p_category = $this->model->read(['title'=>$p_cate,'pid'=>0]);
if(!$p_category){
$p_id = $this->model->addReturnId(['title'=>$p_cate,'project_id'=>$project_id]);
$route = RouteMap::setRoute($p_cate, RouteMap::SOURCE_PRODUCT_CATE, $p_id, $project_id);
$this->model->edit(['route'=>$route],['id'=>$p_id]);
}else{
$p_id = $p_category['id'];
}
$return[] = $p_id;
if($c_cate){
$c_category = $this->model->read(['title'=>$c_cate,'pid'=>$p_id]);
if(!$c_category){
$c_id = $this->model->addReturnId(['title'=>$c_cate,'pid'=>$p_id,'project_id'=>$project_id]);
$route = RouteMap::setRoute($c_cate, RouteMap::SOURCE_PRODUCT_CATE, $c_id, $project_id);
$this->model->edit(['route'=>$route],['id'=>$c_id]);
}else{
$c_id = $c_category['id'];
}
$return[] = $c_id;
}
//清除缓存
Common::del_user_cache('product_category',$project_id);
return ','.implode(',',$return).',';
}
}
... ...
... ... @@ -139,4 +139,36 @@ class KeywordLogic extends BaseLogic
$this->setRouteDeleteSave($data);
return $this->success();
}
/**
* 产品导入:关键词处理
* @param $project_id
* @param $keyword
* @return string
* @throws \Exception
* @author Akun
* @date 2023/09/21 14:55
*/
public function importProductKeyword($project_id,$keyword){
$return = [];
$keyword_arr = explode(',',$keyword);
foreach ($keyword_arr as $v){
$keyword_info = $this->model->read(['title'=>$v]);
if(!$keyword_info){
$k_id = $this->model->addReturnId(['title'=>$v,'project_id'=>$project_id]);
$route = RouteMap::setRoute($v, RouteMap::SOURCE_PRODUCT_KEYWORD, $k_id, $project_id);
$this->model->edit(['route'=>$route],['id'=>$k_id]);
}else{
$k_id = $keyword_info['id'];
}
$return[] = $k_id;
}
//清除缓存
Common::del_user_cache('product_keyword',$project_id);
return ','.implode(',',$return).',';
}
}
... ...
... ... @@ -8,6 +8,7 @@ use App\Models\Product\CategoryRelated;
use App\Models\Product\Product;
use App\Models\RouteMap\RouteMap;
use App\Models\Template\BTemplate;
use App\Services\CosService;
use Illuminate\Support\Facades\DB;
/**
... ... @@ -367,4 +368,88 @@ class ProductLogic extends BaseLogic
}
return $this->success();
}
/**
* 产品导入
* @param $project_id
* @param $user_id
* @param $data
* @return bool
* @throws \Exception
* @author Akun
* @date 2023/09/21 14:55
*/
public function importProduct($project_id, $user_id, $data)
{
$category_id = '';
if ($data[2]) {
//处理分类
$categoryLogic = new CategoryLogic();
$category_id = $categoryLogic->importProductCategory($project_id, $data[2]);
}
$keyword_id = '';
if($data[3]){
//处理关键词
$keywordLogic = new KeywordLogic();
$keyword_id = $keywordLogic->importProductKeyword($project_id, $data[3]);
}
$gallery = [];
$thumb = '';
if($data[7]){
//处理图片
$img_arr = explode(',',$data[7]);
foreach ($img_arr as $v_img){
$one_img = CosService::uploadRemote($project_id,'image_product',$v_img);
if($one_img){
$one_gallery = [
'alt' => '这是一张产品图',
'url' => $one_img
];
if(!$thumb){
$thumb = Arr::a2s($one_gallery);
}
$gallery[] = $one_gallery;
}
}
}
//处理seo
$seo_mate = [
'title' => $data[8]??'',
'keyword' => $data[9]??'',
'description' => $data[10]??''
];
$product = $this->model->read(['title' => $data[0]]);
if (!$product) {
$id = $this->model->addReturnId(
[
'project_id' => $project_id,
'title' => $data[0],
'thumb' => $thumb,
'gallery' => Arr::a2s($gallery),
'attrs' => $data[4] ? $data[4] : Arr::a2s([]),
'category_id' => $category_id,
'keyword_id' => $keyword_id,
'intro' => $data[5] ?? '',
'content' => $data[6] ?? '',
'seo_mate' => Arr::a2s($seo_mate),
'created_uid' => $user_id,
'status' => Product::STATUS_ON
]
);
//更新路由
$route = RouteMap::setRoute($data[1] ?: $data[0], RouteMap::SOURCE_PRODUCT, $id, $project_id);
$this->edit(['route' => $route], ['id' => $id]);
return true;
}
return false;
}
}
... ...
... ... @@ -89,7 +89,15 @@ class Project extends Base
3 => '推广案例',
4 => '全球搜案例',
5 => '设计师案例',
6 => '可登陆后台'
6 => '可登陆后台',
7 => 'T项目',
8 => '特殊前后缀',
9 => '推广续费',
10 => '案例渠道',
11 => 'Ads',
12 => 'AI',
13 => 'AI站群',
14 => '未达标',
];
}
... ...
<?php
/**
* @remark :
* @name :WebSettingImage.php
* @author :lyh
* @method :post
* @time :2023/9/21 15:13
*/
namespace App\Models\WebSetting;
use App\Models\Base;
class WebSettingImage extends Base
{
protected $table = 'gl_web_setting_image';
//连接数据库
protected $connection = 'custom_mysql';
}
... ...
... ... @@ -168,6 +168,12 @@ Route::middleware(['bloginauth'])->group(function () {
Route::any('/save', [\App\Http\Controllers\Bside\Setting\WebSettingSeoController::class, 'save'])->name('web_seo_save');
});
//其他设置
Route::prefix('image')->group(function () {
Route::any('/', [\App\Http\Controllers\Bside\Setting\WebSettingImageController::class, 'lists'])->name('web_image_list');
Route::any('/save', [\App\Http\Controllers\Bside\Setting\WebSettingImageController::class, 'save'])->name('web_image_save');
});
});
//产品
Route::prefix('product')->group(function () {
... ...