作者 lyh

gx批量操作关键词

@@ -44,6 +44,7 @@ class CopyProject extends Command @@ -44,6 +44,7 @@ class CopyProject extends Command
44 public function handle() 44 public function handle()
45 { 45 {
46 while (true) { 46 while (true) {
  47 + $projectModel = new Project();
47 $list = NoticeLog::where('type', NoticeLog::TYPE_COPY_PROJECT)->where('status', NoticeLog::STATUS_PENDING)->get(); 48 $list = NoticeLog::where('type', NoticeLog::TYPE_COPY_PROJECT)->where('status', NoticeLog::STATUS_PENDING)->get();
48 if(empty($list)){ 49 if(empty($list)){
49 sleep(30); 50 sleep(30);
@@ -71,10 +72,12 @@ class CopyProject extends Command @@ -71,10 +72,12 @@ class CopyProject extends Command
71 sleep(60); 72 sleep(60);
72 try { 73 try {
73 $this->copyMysql($old_project_id,$project_id); 74 $this->copyMysql($old_project_id,$project_id);
  75 + $this->output('CopyProjectJob end, old project_id: ' . $old_project_id . ', new project_id: ' . $project_id);
74 }catch (\Exception $e){ 76 }catch (\Exception $e){
75 echo '复制数据库失败:'.$old_project_id . '<->'.$project_id; 77 echo '复制数据库失败:'.$old_project_id . '<->'.$project_id;
76 } 78 }
77 - $this->output('CopyProjectJob end, old project_id: ' . $old_project_id . ', new project_id: ' . $project_id); 79 + //修改项目状态
  80 + $projectModel->edit(['delete_status'=>0],['id'=>$project_id]);
78 } 81 }
79 } 82 }
80 return true; 83 return true;
@@ -206,13 +209,62 @@ class CopyProject extends Command @@ -206,13 +209,62 @@ class CopyProject extends Command
206 } 209 }
207 //复制数据库 210 //复制数据库
208 public function copyMysql($project_id,$new_project_id){ 211 public function copyMysql($project_id,$new_project_id){
209 - Artisan::call("php artisan copy_project_s $project_id $new_project_id"); 212 + //切换数据库配置
  213 + $project = ProjectServer::useProject($new_project_id);
  214 + //创建数据库
  215 + ProjectServer::createDatabase($project);
  216 + //创建表
  217 + $this->initTable($project_id,$new_project_id);
210 //修改项目状态 218 //修改项目状态
211 $projectModel = new Project(); 219 $projectModel = new Project();
212 $projectModel->edit(['delete_status'=>0],['id'=>$new_project_id]); 220 $projectModel->edit(['delete_status'=>0],['id'=>$new_project_id]);
213 } 221 }
214 222
215 /** 223 /**
  224 + * @remark :创建数据库
  225 + * @name :initTable
  226 + * @author :lyh
  227 + * @method :post
  228 + * @time :2023/12/11 10:09
  229 + */
  230 + public function initTable($project_id, $news_project_id)
  231 + {
  232 + // 设置源数据库
  233 + config(['database.connections.custom_tmp_mysql_copy.database' => 'gl_data_' . $project_id]);
  234 + $database_name = DB::connection('custom_tmp_mysql_copy')->getDatabaseName();
  235 + // 获取源数据库的所有表
  236 + $tables = Schema::connection('custom_tmp_mysql_copy')->getAllTables();
  237 + $tables = array_column($tables, 'Tables_in_' . $database_name);
  238 + foreach ($tables as $table) {
  239 + // 1. 删除目标数据库中的表
  240 + DB::connection('custom_mysql')->statement("DROP TABLE IF EXISTS {$table}");
  241 + // 2. 重新创建表
  242 + $sql = DB::connection('custom_tmp_mysql_copy')->select("SHOW CREATE TABLE {$table}");
  243 + DB::connection('custom_mysql')->statement(get_object_vars($sql[0])['Create Table']);
  244 + // 3. 跳过指定的表
  245 + if (in_array($table, ['gl_customer_visit', 'gl_customer_visit_item', 'gl_inquiry_other', 'gl_inquiry_form_data', 'gl_inquiry_form'])) {
  246 + continue;
  247 + }
  248 + try {
  249 + // 4. 重新插入数据
  250 + DB::connection('custom_mysql')->table($table)->insertUsing(
  251 + [], // 插入所有列
  252 + function ($query) use ($table, $project_id) {
  253 + $name = 'gl_data_' . $project_id . '.' . $table;
  254 + $query->select('*')->from("{$name}");
  255 + }
  256 + );
  257 + }catch (\Exception $e){
  258 + continue;
  259 + }
  260 + // 5. 更新 project_id(如果存在)
  261 + if (Schema::connection('custom_mysql')->hasColumn($table, 'project_id')) {
  262 + DB::connection('custom_mysql')->table($table)->update(['project_id' => $news_project_id]);
  263 + }
  264 + }
  265 + return true;
  266 + }
  267 + /**
216 * @param $message 268 * @param $message
217 * @return bool 269 * @return bool
218 */ 270 */
@@ -159,13 +159,17 @@ class ProjectLogic extends BaseLogic @@ -159,13 +159,17 @@ class ProjectLogic extends BaseLogic
159 * @param :1->建站中 2->优化中 3->建站完成 6-》错误单 159 * @param :1->建站中 2->优化中 3->建站完成 6-》错误单
160 */ 160 */
161 public function projectSave(){ 161 public function projectSave(){
162 - $this->saveSeoPlan($this->param['id'],$this->param['type'],$this->param['deploy_build']['plan'],$this->param['deploy_build']['seo_plan'],$this->param['deploy_optimize']['optimist_mid'] ?? 0,$this->param['deploy_optimize']['quality_mid'] ?? 0);  
163 - $this->checkAiBlog($this->param['main_lang_id'],$this->param['is_ai_blog'],$this->param['company'],$this->param['deploy_optimize']['company_en_name'] ?? '',$this->param['deploy_optimize']['company_en_description'] ?? '');  
164 - DB::beginTransaction();  
165 - try {  
166 - if($this->param['type'] == Project::TYPE_SEVEN){  
167 - $this->setTypeSevenEdit($this->param);  
168 - }else{ 162 + if($this->param['type'] == Project::TYPE_SEVEN){
  163 + $this->setTypeSevenEdit($this->param);
  164 + }else{
  165 + //优化设置默认关闭
  166 + $this->param['is_ai_blog'] = 0;
  167 + $this->param['deploy_optimize']['is_ai_blog_send'] = 0;
  168 + $this->param['deploy_optimize']['is_auto_keywords'] = 0;
  169 + $this->saveSeoPlan($this->param['id'],$this->param['type'],$this->param['deploy_build']['plan'],$this->param['deploy_build']['seo_plan'],$this->param['deploy_optimize']['optimist_mid'] ?? 0,$this->param['deploy_optimize']['quality_mid'] ?? 0);
  170 + $this->checkAiBlog($this->param['main_lang_id'],$this->param['is_ai_blog'],$this->param['company'],$this->param['deploy_optimize']['company_en_name'] ?? '',$this->param['deploy_optimize']['company_en_description'] ?? '');
  171 + DB::beginTransaction();
  172 + try {
169 //初始化项目 173 //初始化项目
170 $this->param = $this->createProjectData($this->param); 174 $this->param = $this->createProjectData($this->param);
171 //双向绑定服务器,需放到保存项目的上方 175 //双向绑定服务器,需放到保存项目的上方
@@ -191,11 +195,11 @@ class ProjectLogic extends BaseLogic @@ -191,11 +195,11 @@ class ProjectLogic extends BaseLogic
191 $this->syncImageFile($this->param['project_location'],$this->param['id']); 195 $this->syncImageFile($this->param['project_location'],$this->param['id']);
192 //同步信息表 196 //同步信息表
193 (new SyncService())->projectAcceptAddress($this->param['id']); 197 (new SyncService())->projectAcceptAddress($this->param['id']);
  198 + DB::commit();
  199 + }catch (\Exception $e){
  200 + DB::rollBack();
  201 + $this->fail('保存失败,请联系管理员');
194 } 202 }
195 - DB::commit();  
196 - }catch (\Exception $e){  
197 - DB::rollBack();  
198 - $this->fail('保存失败,请联系管理员');  
199 } 203 }
200 return $this->success(); 204 return $this->success();
201 } 205 }