作者 赵彬吉
... ... @@ -16,6 +16,8 @@ use App\Models\Manage\BelongingGroup;
use App\Models\Manage\Dept;
use App\Models\Manage\EntryPosition;
use App\Models\Manage\ManageHr;
use App\Models\Nav\BNav;
use App\Models\Nav\BNavGroup;
use App\Models\Product\Keyword;
use App\Models\Product\Product;
use App\Models\Project\DeployOptimize;
... ... @@ -262,33 +264,74 @@ class Demo extends Command
//
// print_r($include);
// }
public function handle(){
$projectModel = new DeployOptimize();
$list = $projectModel->list(['project_id'=>['<',187]]);
foreach ($list as $v){
echo date('Y-m-d H:i:s') . 'end'.json_encode($v) . PHP_EOL;
$data = [];
if(!empty($v['minor_languages']) && is_array($v['minor_languages'])){
foreach ($v['minor_languages'] as $k1=> $v1){
if(!empty($v1['tl']) && !empty($v1['type'])){
$data[] = [
'language'=>$v1['tl'],
'type'=>$v1['type'],
'keywords'=>$v1['keywords'],
'service_day'=>$v1['service_day'],
'project_id'=>$v['project_id'],
'created_at'=>date('Y-m-d H:i:s'),
'updated_at'=>date('Y-m-d H:i:s')
];
}
$projectModel = new Project();
$list = $projectModel->list(['delete_status'=>0,'type'=>['!=',0]]);
foreach ($list as $v1){
ProjectServer::useProject($v1['id']);
echo date('Y-m-d H:i:s') . '项目id:'.$v1['id'] . PHP_EOL;
$navGroupModel = new BNavGroup();
$groupList = $navGroupModel->list(['sort_list'=>['!=','']]);
if(empty($groupList)){
continue;
}
foreach ($groupList as $k=>$v){
if(!empty($v['sort_list'])){
$sort_list = json_decode($v['sort_list']);
$sort = 0;
$this->subSort($sort_list,$sort);
}
}
$languageModel = new MinorLanguages();
$languageModel->insert($data);
DB::disconnect('custom_mysql');
}
return true;
}
/**
* @remark :处理子集排序
* @name :subSort
* @author :lyh
* @method :post
* @time :2024/2/29 15:30
*/
public function subSort($subList,&$sort,$pid = 0){
$navModel = new BNav();
foreach ($subList as $k => $v){
$v = (array)$v;
$sort = $sort+1;
$navModel->edit(['sort'=>$sort],['id'=>$v['id']]);
if(!empty($v['sub'])){
$this->subSort($v['sub'],$sort,$v['id']);
}
}
return true;
}
// public function handle(){
// $projectModel = new DeployOptimize();
// $list = $projectModel->list(['project_id'=>['<',187]]);
// foreach ($list as $v){
// echo date('Y-m-d H:i:s') . 'end'.json_encode($v) . PHP_EOL;
// $data = [];
// if(!empty($v['minor_languages']) && is_array($v['minor_languages'])){
// foreach ($v['minor_languages'] as $k1=> $v1){
// if(!empty($v1['tl']) && !empty($v1['type'])){
// $data[] = [
// 'language'=>$v1['tl'],
// 'type'=>$v1['type'],
// 'keywords'=>$v1['keywords'],
// 'service_day'=>$v1['service_day'],
// 'project_id'=>$v['project_id'],
// 'created_at'=>date('Y-m-d H:i:s'),
// 'updated_at'=>date('Y-m-d H:i:s')
// ];
// }
// }
// }
// $languageModel = new MinorLanguages();
// $languageModel->insert($data);
// }
//
// }
public function printMessage()
{
... ...
... ... @@ -562,15 +562,30 @@ class ProjectUpdate extends Command
$url = $api_url . '?' . http_build_query(['w' => $api_type, 'page' => 1, 'pagesize' => 0]);
$data = curl_c($url);
if (isset($data['code']) && $data['code'] == 200) {
$category = [
[
'id' => 0,
'name' => $custom_info['route'],
'url' => '/' . $custom_info['route'],
'parent' => 0,
'children' => $data['data']['category'] ?? []
]
];
//判断分类里面是否存在自定义模块路由
$is_exist = 0;
if ($data['data']['category'] ?? []) {
foreach ($data['data']['category'] as $vc) {
$c_route = $this->get_url_route($vc['url'] ?? '');
if ($c_route == $custom_info['route']) {
$is_exist = 1;
}
}
}
if ($is_exist) {
//存在,无需添加自定义模块路由为分类路由
$category = $data['data']['category'];
} else {
//不存在,需要添加自定义模块路由为分类路由
$category = [
[
'id' => 0,
'name' => $custom_info['route'],
'url' => '/' . $custom_info['route'],
'parent' => $data['data']['category'] ?? []
]
];
}
$this->category_custom_insert($project_id, $custom_info['id'], $category, 0);
$count = $data['data']['count'] ?? 0;
... ...
... ... @@ -55,7 +55,7 @@ class UpdateRoute extends Command
*/
public function handle(){
$projectModel = new Project();
$list = $projectModel->list(['id'=>672]);
$list = $projectModel->list(['id'=>917]);
$data = [];
foreach ($list as $v){
echo date('Y-m-d H:i:s') . 'project_id:'.$v['id'] . PHP_EOL;
... ...
... ... @@ -56,7 +56,7 @@ class UpdateController extends BaseController
'type' => 'required',
], [
'project_id.required' => 'project_id不能为空',
'type.required' => '采集类型不能为空',
'type.required' => '是否重新采集分类不能为空',
]);
$collect_un = UpdateLog::where('project_id', $this->param['project_id'])->where('collect_status', 0)->get();
... ... @@ -90,10 +90,19 @@ class UpdateController extends BaseController
try {
DB::connection('custom_mysql')->statement("DELETE FROM `gl_collect_source` WHERE `origin` LIKE '%.css%' OR `origin` LIKE '%.js%'");
if ($domain_info) {
//已上线项目
DB::connection('custom_mysql')->statement("UPDATE `gl_collect_task` SET `status` = 0,`domain` = '" . $test_domain . "' WHERE `language` = ''");
} else {
DB::connection('custom_mysql')->statement("UPDATE `gl_collect_task` SET `status` = 0 WHERE `language` = ''");
}
if ($this->param['type'] == 1) {
//需要重新采集分类
DB::connection('custom_mysql')->statement("TRUNCATE `gl_product_category`");
DB::connection('custom_mysql')->statement("TRUNCATE `gl_product_category_related`");
DB::connection('custom_mysql')->statement("TRUNCATE `gl_news_category`");
DB::connection('custom_mysql')->statement("DELETE FROM `gl_route_map` WHERE `source` = 'product_category' OR `source` = 'news_category'");
}
} catch (\Exception $e) {
errorLog('重新采集升级项目数据', $this->param, $e);
... ... @@ -115,24 +124,27 @@ class UpdateController extends BaseController
$old_info->save();
}
$logs = UpdateLog::where('project_id', $this->param['project_id'])->whereNotIn('api_type', ['category', 'category_news'])->get();
if ($this->param['type'] == 1) {
//需要重新采集分类
$logs = UpdateLog::where('project_id', $this->param['project_id'])->orderBy('sort', 'asc')->get();
} else {
$logs = UpdateLog::where('project_id', $this->param['project_id'])->whereNotIn('api_type', ['category', 'category_news'])->orderBy('sort', 'asc')->get();
}
foreach ($logs as $log) {
$log->status = 0;
if (!in_array($log->api_type, ['website_info', 'tag', 'category', 'category_news'])) {
$log->collect_status = 0;
}
if ($domain_info) {
//已上线项目
$url_arr = parse_url($log->api_url);
$api_url = str_replace($url_arr['host'], $test_domain, $log->api_url);
$log->api_url = $api_url;
$log->status = 0;
} else {
if ($this->param['type'] == 2) {
$log->status = 0;
}
}
if (!in_array($log->api_type, ['website_info', 'tag'])) {
$log->collect_status = 0;
}
$log->save();
}
... ...
... ... @@ -219,23 +219,23 @@ class OptimizeController extends BaseController
if(isset($this->map['is_remain_today'])){
$query = $query->where('gl_project.is_remain_today',$this->map['is_remain_today']);
}
if(isset($this->map['manager_mid']) && !empty($this->map['manager_mid'])){
$query = $query->where('gl_project_deploy_build.manager_mid','like','%'.$this->map['manager_mid'].'%');
if(isset($this->map['manager_mid'])){
$query = $query->where('gl_project_deploy_build.manager_mid',$this->map['manager_mid']);
}
if(isset($this->map['optimize_manager_mid']) && !empty($this->map['optimize_manager_mid'])){
$query = $query->where('gl_project_deploy_optimize.manager_mid','like','%'.$this->map['optimize_manager_mid'].'%');
if(isset($this->map['optimize_manager_mid'])){
$query = $query->where('gl_project_deploy_optimize.manager_mid',$this->map['optimize_manager_mid']);
}
if(isset($this->map['is_upgrade'])){
$query = $query->where('gl_project.is_upgrade',$this->map['is_upgrade']);
}
if(isset($this->map['optimize_tech_mid']) && !empty($this->map['optimize_tech_mid'])){
$query = $query->where('gl_project_deploy_optimize.tech_mid','like','%'.$this->map['optimize_tech_mid'].'%');
if(isset($this->map['optimize_tech_mid'])){
$query = $query->where('gl_project_deploy_optimize.tech_mid',$this->map['optimize_tech_mid']);
}
if(isset($this->map['optimize_optimist_mid']) && !empty($this->map['optimize_optimist_mid'])){
$query = $query->where('gl_project_deploy_optimize.optimist_mid','like','%'.$this->map['optimize_optimist_mid'].'%');
if(isset($this->map['optimize_optimist_mid'])){
$query = $query->where('gl_project_deploy_optimize.optimist_mid',$this->map['optimize_optimist_mid']);
}
if(isset($this->map['optimize_assist_mid']) && !empty($this->map['optimize_assist_mid'])){
$query = $query->where('gl_project_deploy_optimize.assist_mid','like','%'.$this->map['optimize_assist_mid'].'%');
if(isset($this->map['optimize_assist_mid'])){
$query = $query->where('gl_project_deploy_optimize.assist_mid',$this->map['optimize_assist_mid']);
}
if(isset($this->map['channel_id']) && !empty($this->map['channel_id'])){
$query->where(function ($subQuery) {
... ...
... ... @@ -12,6 +12,7 @@ namespace App\Http\Controllers\Aside\Project;
use App\Enums\Common\Code;
use App\Http\Controllers\Aside\BaseController;
use App\Models\Project\MinorLanguages;
use App\Models\WebSetting\WebLanguage;
/**
* @remark :小语种
... ... @@ -22,6 +23,13 @@ use App\Models\Project\MinorLanguages;
*/
class MinorLanguagesController extends BaseController
{
/**
* @remark :小语种列表
* @name :getMinorLanguageList
* @author :lyh
* @method :post
* @time :2024/3/1 10:35
*/
public function getMinorLanguageList(){
$this->request->validate([
'project_id'=>'required',
... ... @@ -29,7 +37,20 @@ class MinorLanguagesController extends BaseController
'project_id.required' => 'keyword不能为空',
]);
$languageModel = new MinorLanguages();
$lists = $languageModel->list($this->map,'id',['language','type','keywords','service_day']);
$lists = $languageModel->list($this->map,'id',['language','type','keywords','service_day','lang']);
$this->response('success',Code::SUCCESS,$lists);
}
/**
* @remark :获取所有的小语种
* @name :getLanguages
* @author :lyh
* @method :post
* @time :2024/3/1 10:11
*/
public function getLanguages(){
$webLanguageModel = new WebLanguage();
$lists = $webLanguageModel->list($this->map,'id',['short','chinese']);
$this->response('success',Code::SUCCESS,$lists);
}
}
... ...
... ... @@ -28,9 +28,9 @@ class NavController extends BaseController
* @method :post
* @time :2023/12/4 15:00
*/
public function index(BNav $nav,BNavGroup $navGroup){
public function index(BNav $nav){
$this->map['project_id'] = $this->user['project_id'];
$lists = $nav->list($this->map,$this->order = ['sort','id']);
$lists = $nav->list($this->map,$this->order = ['sort','id'],['*'],'asc');
$data = array();
if(!empty($lists)){
foreach ($lists as $v){
... ... @@ -41,13 +41,6 @@ class NavController extends BaseController
$data[] = $v;
}
}
//获取菜单组排序字段
$groupInfo = $navGroup->read(['id'=>$this->param['group_id']]);
if(!empty($groupInfo['sort_list'])){
$sort_list = json_decode($groupInfo['sort_list']);
$detailsList = $this->getIdDetailsList($data);
$data = $this->findDetailsLists($sort_list,$detailsList);
}
}
$this->response('success',Code::SUCCESS,$data);
}
... ... @@ -70,66 +63,6 @@ class NavController extends BaseController
}
/**
* @remark :根据固定的数组排序
* @name :findDetailsInList
* @author :lyh
* @method :post
* @time :2023/12/18 14:54
*/
public function findDetailsLists($sort_list, $detailsList)
{
$result = [];
foreach ($sort_list as $val) {
$val = (array)$val;
if (!empty($val['sub']) && is_array($val['sub']) && isset($detailsList[$val['id']]['sub'])){
$detailsList[$val['id']]['sub'] = $this->findDetailsLists($val['sub'], $detailsList[$val['id']]['sub']);
}
if (empty($detailsList[$val['id']])){
continue;
}
if(!empty($detailsList[$val['id']]['sub']) && is_array($detailsList[$val['id']]['sub'])){
$detailsList[$val['id']]['sub'] = $this->handleDetailsSub($detailsList[$val['id']]['sub']);
}
$result[] = $detailsList[$val['id']];
unset($detailsList[$val['id']]);
}
$result = array_merge($result, $detailsList);
return $this->success($result);
}
/**
* @remark :处理子集
* @name :handleDetailsSub
* @author :lyh
* @method :post
* @time :2023/12/21 16:36
*/
public function handleDetailsSub($detailsList){
if(!empty($detailsList['sub']) && is_array($detailsList['sub'])){
$detailsList['sub'] = $this->handleDetailsSub($detailsList['sub']);
}
return array_merge($detailsList);
}
/**
* @remark :根据id组装数据
* @name :getDetailsList
* @author :lyh
* @method :post
* @time :2023/12/20 18:52
*/
public function getIdDetailsList($data){
$detailsList = [];
foreach ($data as $v) {
if (!empty($v['sub'])){
$v['sub'] = $this->getIdDetailsList($v['sub']);
}
$detailsList[$v['id']] = $v;
}
return $this->success($detailsList);
}
/**
* @remark :获取当前id下的所有子集
* @name :getSubList
* @author :lyh
... ... @@ -233,10 +166,8 @@ class NavController extends BaseController
*/
public function setSortList(NavLogic $navLogic){
$this->request->validate([
'id'=>'required',
'sort_list'=>'required',
],[
'id.required' => 'ID不能为空',
'sort_list.required' => '排序不能为空',
]);
$navLogic->setSortList();
... ...
... ... @@ -539,7 +539,8 @@ class ProductController extends BaseController
],[
'keyword.required' => 'keyword不能为空',
]);
$data = http_get('http://title.globalso.com/ajax_data_for_web.php?keyword='.$this->param['keyword'],['charset=utf-8']);
$data = curl_c('http://title.globalso.com/ajax_data_for_web.php?keyword='.$this->param['keyword'],false);
@file_put_contents(storage_path('logs/lyh_error.log'), var_export($data, true) . PHP_EOL, FILE_APPEND);
$this->response('success',Code::SUCCESS,$data);
}
}
... ...
... ... @@ -132,8 +132,8 @@ class ProjectLogic extends BaseLogic
* @time :2023/8/30 11:57
*/
public function projectSave(){
// DB::beginTransaction();
// try {
DB::beginTransaction();
try {
$this->param['project_location'] = 0;//TODO::图片文件存储不同地方,上线后删除
if($this->param['type'] == Project::TYPE_SEVEN){
//错误单直接返回,单独处理
... ... @@ -151,20 +151,15 @@ class ProjectLogic extends BaseLogic
$this->saveProjectDeployOptimize($this->param['deploy_optimize']);
//保存售后信息
$this->saveProjectAfter($this->param['project_after']);
$this->saveMinorLanguages($this->param['minor_language'] ?? []);
//保存询盘过滤配置
// $this->param['inquiry_filter_config']['project_id'] = $this->param['id'];
// $this->saveInquiryFilterConfig($this->param['inquiry_filter_config']);
$this->syncImageFile($this->param['project_location'],$this->param['id']);
//创建站点
// $this->createSite($this->param);
(new SyncService())->projectAcceptAddress($this->param['id']);
// }
// DB::commit();
// }catch (\Exception $e){
// DB::rollBack();
// $this->fail('保存失败,请联系管理员');
}
DB::commit();
}catch (\Exception $e){
DB::rollBack();
$this->fail('保存失败,请联系管理员');
}
return $this->success();
... ... @@ -189,6 +184,9 @@ class ProjectLogic extends BaseLogic
$param['extend_type'] = Project::TYPE_FIVE;
unset($param['type']);
}
if((($param['type'] == Project::TYPE_TWO) || ($param['type'] == Project::TYPE_THREE)) && empty($param['uptime'])){
$param['uptime'] = date('Y-m-d H:i:s');
}
if(isset($param['level']) && !empty($param['level'])){
$param['level'] = Arr::arrToSet($param['level']);
}
... ... @@ -228,6 +226,7 @@ class ProjectLogic extends BaseLogic
$param['is_visualization'] = json_encode($param['is_visualization']);
}
}
$this->model->edit($param,['id'=>$param['id']]);
Common::del_user_cache($this->model->getTable(),$param['id']);
return $this->success();
... ... @@ -323,12 +322,14 @@ class ProjectLogic extends BaseLogic
if(!empty($minor_language)){
foreach ($minor_language as $k => $v){
if(!empty($v['language'])){
$v['created_at'] = date('Y-m-d H:i:s');
$v['updated_at'] = date('Y-m-d H:i:s');
$v['project_id'] = $this->param['id'];
$data[] = $v;
}
}
if(!empty($data)){
$languageModel->insert($minor_language);
$languageModel->insert($data);
}
}
return $this->success();
... ...
... ... @@ -260,11 +260,30 @@ class NavLogic extends BaseLogic
* @time :2023/12/18 13:47
*/
public function setSortList(){
$navGroupModel = new BNavGroup();
if(!empty($this->param['sort_list'])){
$this->param['sort_list'] = json_encode($this->param['sort_list']);
$navList = $this->param['sort_list'];
if(!empty($navList)){
$sort = 0;
$this->subSort($navList,$sort);
}
$navGroupModel->edit(['sort_list'=>$this->param['sort_list']],['id'=>$this->param['id']]);
return $this->success();
}
/**
* @remark :处理子集排序
* @name :subSort
* @author :lyh
* @method :post
* @time :2024/2/29 15:30
*/
public function subSort($subList,&$sort,$pid = 0){
$navModel = new BNav();
foreach ($subList as $k => $v){
$sort = $sort+1;
$navModel->edit(['pid'=>$pid,'sort'=>$sort],['id'=>$v['id']]);
if(!empty($v['sub'])){
$this->subSort($v['sub'],$sort,$v['id']);
}
}
return true;
}
}
... ...
... ... @@ -45,7 +45,7 @@ class ProductLogic extends BaseLogic
$category_ids = $this->handleCategory();
//处理其他字段
$this->param = $this->handleSaveParam($this->param);
try {
// try {
if(isset($this->param['id']) && !empty($this->param['id'])){
$is_upgrade = $this->param['is_upgrade'] ?? 0;//1:5.0数据 0:6.0
$six_read = $this->param['six_read'] ?? 0;//是否按6.0显示
... ... @@ -66,10 +66,10 @@ class ProductLogic extends BaseLogic
CategoryRelated::saveRelated($id, $category_ids);
//保存扩展字段
$this->saveExtendInfo($id,$extend);
}catch (\Exception $e){
Log::info('错误信息---'.$e->getMessage());
$this->fail('系统错误请联系管理员');
}
// }catch (\Exception $e){
// Log::info('错误信息---'.$e->getMessage());
// $this->fail('系统错误请联系管理员');
// }
$this->addUpdateNotify(RouteMap::SOURCE_PRODUCT,$route);
$this->curlDelRoute(['new_route'=>$route]);
return $this->success();
... ...
... ... @@ -88,9 +88,9 @@ class RankDataLogic extends BaseLogic
$languageList = $languageModel->list(['project_id'=>$project['id']]);
if(!empty($languageList) && is_array($languageList)){
foreach($languageList as $lang){
$remain_day = $lang_data[$lang['language']]['dabiao_day'] ?? 0;
$remain_day = $lang_data[$lang['lang']]['dabiao_day'] ?? 0;
$data['langs'][$lang['language'] ?? ''] = [
'lang_text' => Translate::getTls($lang['tl'] ?? ''),
'lang_text' => $lang['language'],
'keyword_num' => $lang['keywords'] ?? 0,
'reach_day' => $lang_data[$lang['language']]['dabiao_day'] ?? 0,
'home_cnt' => $lang_data[$lang['language']]['home_cnt'] ?? 0,
... ... @@ -488,7 +488,6 @@ class RankDataLogic extends BaseLogic
}
}
}
$model->project_id = $project_id;
$model->first_num = $first_num;
$model->first_page_num = $first_page_num;
... ...
... ... @@ -67,7 +67,7 @@ class ProductRequest extends FormRequest
{
return [
'title.required' => '请输入产品标题',
'title.max' => '产品标题不能超过20个字符',
'title.max' => '产品标题不能超过200个字符',
'route.required' => '请输入产品链接',
'route.max' => '产品链接不能超过200个字符',
// 'gallery.required' => '请上传产品图片',
... ...
... ... @@ -30,7 +30,7 @@ class DomainInfo extends Base
const DELETED_DELETE = 1;
protected $hidden = [
'created_at',
// 'created_at',
'updated_at'
];
... ...
... ... @@ -55,9 +55,10 @@ class RouteMap extends Base
public static function generateRoute($title, $source, $source_id, $project_id){
if(preg_match('/[\x{4e00}-\x{9fa5}]/u', $title)){
$title = Translate::tran($title, 'en');
}
if (preg_match('/[а-яА-Я]/u', $title) || mb_ereg('[а-яА-Я]', $title)) {
$title = Translate::tran($title, 'en');
}else{
if(!preg_match('/^[a-zA-Z\s]+$/', $title)){
$title = Translate::tran($title, 'en');
}
}
$i=1;
$sign = generateRoute($title);
... ...
... ... @@ -193,6 +193,7 @@ Route::middleware(['aloginauth'])->group(function () {
Route::prefix('language')->group(function () {
Route::any('/', [Aside\Project\MinorLanguagesController::class, 'getMinorLanguageList'])->name('admin.getMinorLanguageList');
Route::any('/getLanguages', [Aside\Project\MinorLanguagesController::class, 'getLanguages'])->name('admin.getLanguages');
});
//更新项目tdk
Route::any('/updateSeoTdk', [Aside\Com\UpdateController::class, 'updateSeoTdk'])->name('admin.project_updateSeoTdk');
... ...