作者 lyh

gx复制项目

@@ -9,6 +9,7 @@ @@ -9,6 +9,7 @@
9 9
10 namespace App\Console\Commands\Project; 10 namespace App\Console\Commands\Project;
11 11
  12 +use App\Models\Com\NoticeLog;
12 use App\Models\Project\After; 13 use App\Models\Project\After;
13 use App\Models\Project\DeployBuild; 14 use App\Models\Project\DeployBuild;
14 use App\Models\Project\DeployOptimize; 15 use App\Models\Project\DeployOptimize;
@@ -42,11 +43,46 @@ class CopyProject extends Command @@ -42,11 +43,46 @@ class CopyProject extends Command
42 public function handle() 43 public function handle()
43 { 44 {
44 $projectModel = new Project(); 45 $projectModel = new Project();
45 - DB::beginTransaction();  
46 - try { 46 + while (true) {
47 $this->output('CopyProjectJob start, project_id: ' . $this->param['project_id']); 47 $this->output('CopyProjectJob start, project_id: ' . $this->param['project_id']);
48 - //复制初始项目  
49 - $data = $projectModel::where('id', $this->param['project_id'])->first(); 48 + $list = NoticeLog::where('type', NoticeLog::TYPE_COPY_PROJECT)->where('status', NoticeLog::STATUS_PENDING)->get();
  49 + if(empty($list)){
  50 + sleep(5);
  51 + continue;
  52 + }
  53 + foreach ($list as $item){
  54 + try {
  55 + $data = $item['data']['project_id'];
  56 + $old_project_id = $data['project_id'];
  57 + $type = $data['type'];
  58 + $project_id = $this->copyProject($old_project_id);
  59 + $this->copyDeployBuild($old_project_id,$project_id);
  60 + $this->copyDeployOptimize($old_project_id,$project_id);
  61 + $this->copyPayment($old_project_id,$project_id);
  62 + $this->copyAfter($old_project_id,$project_id);
  63 + $this->copyUser($old_project_id,$project_id);
  64 + if($type != 0){
  65 + $this->copyMysql($old_project_id,$project_id);
  66 + }
  67 + //修改项目状态
  68 + $projectModel->edit(['delete_status'=>0],['id'=>$project_id]);
  69 + $this->output('CopyProjectJob end, old project_id: ' . $old_project_id . ', new project_id: ' . $project_id);
  70 + $item->status = NoticeLog::STATUS_SUCCESS;
  71 + $item->save();
  72 + }catch (\Exception $e){
  73 + echo 'error:' . $item['id'] . $e->getMessage() . PHP_EOL . date('Y-m-d H:i:s');
  74 + errorLog('项目初始化失败', $item, $e);
  75 + $item->status = NoticeLog::STATUS_FAIL;
  76 + $item->save();
  77 + }
  78 + }
  79 + }
  80 + return true;
  81 + }
  82 +
  83 + public function copyProject($old_project_id){
  84 + $projectModel = new Project();
  85 + $data = $projectModel::where('id', $old_project_id)->first();
50 $data = $data->getAttributes(); 86 $data = $data->getAttributes();
51 $type = $data['type']; 87 $type = $data['type'];
52 $data['type'] = 0; 88 $data['type'] = 0;
@@ -68,9 +104,20 @@ class CopyProject extends Command @@ -68,9 +104,20 @@ class CopyProject extends Command
68 ]; 104 ];
69 $settingTemplateModel->add($data); 105 $settingTemplateModel->add($data);
70 } 106 }
  107 + return ['project_id'=>$project_id,'type'=>$type];
  108 + }
  109 +
  110 + /**
  111 + * @remark :复制部署表
  112 + * @name :copyDeployBuild
  113 + * @author :lyh
  114 + * @method :post
  115 + * @time :2025/1/15 14:59
  116 + */
  117 + public function copyDeployBuild($old_project_id,$project_id){
71 //复制部署表 118 //复制部署表
72 $buildModel = new DeployBuild(); 119 $buildModel = new DeployBuild();
73 - $buildData = $buildModel::where('project_id', $this->param['project_id'])->first(); 120 + $buildData = $buildModel::where('project_id', $old_project_id)->first();
74 if(!empty($buildData)){ 121 if(!empty($buildData)){
75 $buildData = $buildData->getAttributes(); 122 $buildData = $buildData->getAttributes();
76 $buildData['project_id'] = $project_id; 123 $buildData['project_id'] = $project_id;
@@ -80,9 +127,20 @@ class CopyProject extends Command @@ -80,9 +127,20 @@ class CopyProject extends Command
80 unset($buildData['id']); 127 unset($buildData['id']);
81 $buildModel->insert($buildData); 128 $buildModel->insert($buildData);
82 } 129 }
  130 + return true;
  131 + }
  132 +
  133 + /**
  134 + * @remark :复制优化表
  135 + * @name :copyDeployOptimize
  136 + * @author :lyh
  137 + * @method :post
  138 + * @time :2025/1/15 15:02
  139 + */
  140 + public function copyDeployOptimize($old_project_id,$project_id){
83 //复制优化表 141 //复制优化表
84 $optimizeModel = new DeployOptimize(); 142 $optimizeModel = new DeployOptimize();
85 - $optimizeData = $optimizeModel::where('project_id', $this->param['project_id'])->first(); 143 + $optimizeData = $optimizeModel::where('project_id', $old_project_id)->first();
86 if(!empty($optimizeData)){ 144 if(!empty($optimizeData)){
87 $optimizeData = $optimizeData->getAttributes(); 145 $optimizeData = $optimizeData->getAttributes();
88 unset($optimizeData['id'],$optimizeData['domain'],$optimizeData['backlink'],$optimizeData['ai_video']); 146 unset($optimizeData['id'],$optimizeData['domain'],$optimizeData['backlink'],$optimizeData['ai_video']);
@@ -90,45 +148,59 @@ class CopyProject extends Command @@ -90,45 +148,59 @@ class CopyProject extends Command
90 $optimizeData['api_no'] = 0; 148 $optimizeData['api_no'] = 0;
91 $optimizeModel->insert($optimizeData); 149 $optimizeModel->insert($optimizeData);
92 } 150 }
  151 + return true;
  152 + }
  153 +
  154 + /**
  155 + * @remark :复制付费表
  156 + * @name :copyPayment
  157 + * @author :lyh
  158 + * @method :post
  159 + * @time :2025/1/15 15:03
  160 + */
  161 + public function copyPayment($old_project_id,$project_id){
93 //复制付费表 162 //复制付费表
94 $paymentModel = new Payment(); 163 $paymentModel = new Payment();
95 - $paymentData = $paymentModel::where('project_id', $this->param['project_id'])->first(); 164 + $paymentData = $paymentModel::where('project_id', $old_project_id)->first();
96 if(!empty($paymentData)){ 165 if(!empty($paymentData)){
97 $paymentData = $paymentData->getAttributes(); 166 $paymentData = $paymentData->getAttributes();
98 unset($paymentData['id']); 167 unset($paymentData['id']);
99 $paymentData['project_id'] = $project_id; 168 $paymentData['project_id'] = $project_id;
100 $paymentModel->insert($paymentData); 169 $paymentModel->insert($paymentData);
101 } 170 }
  171 + return true;
  172 + }
  173 +
  174 + public function copyAfter($old_project_id,$project_id){
102 //复制售后表 175 //复制售后表
103 $afterModel = new After(); 176 $afterModel = new After();
104 - $afterData = $afterModel::where('project_id', $this->param['project_id'])->first(); 177 + $afterData = $afterModel::where('project_id',$old_project_id)->first();
105 if(!empty($afterData)){ 178 if(!empty($afterData)){
106 $afterData = $afterData->getAttributes(); 179 $afterData = $afterData->getAttributes();
107 unset($afterData['id']); 180 unset($afterData['id']);
108 $afterData['project_id'] = $project_id; 181 $afterData['project_id'] = $project_id;
109 $afterModel->insert($afterData); 182 $afterModel->insert($afterData);
110 } 183 }
  184 + return true;
  185 + }
  186 +
  187 + /**
  188 + * @remark :复制user
  189 + * @name :copyUser
  190 + * @author :lyh
  191 + * @method :post
  192 + * @time :2025/1/15 15:04
  193 + */
  194 + public function copyUser($old_project_id,$project_id){
111 //复制用户 195 //复制用户
112 $userModel = new UserModel(); 196 $userModel = new UserModel();
113 - $userData = $userModel::where('project_id', $this->param['project_id'])->where('role_id',0)->first(); 197 + $userData = $userModel::where('project_id', $old_project_id)->where('role_id',0)->first();
114 if(!empty($userData)){ 198 if(!empty($userData)){
115 $userData = $userData->getAttributes(); 199 $userData = $userData->getAttributes();
116 unset($userData['id']); 200 unset($userData['id']);
117 $userData['project_id'] = $project_id; 201 $userData['project_id'] = $project_id;
118 $userModel->insert($userData); 202 $userModel->insert($userData);
119 } 203 }
120 - DB::commit();  
121 - }catch (\Exception $e){  
122 - DB::rollBack();  
123 - $this->output('CopyProjectJob error, error message: ' . $e->getMessage());  
124 - $this->fail('error');  
125 - }  
126 - if($type != 0){  
127 - $this->copyMysql($this->param['project_id'],$project_id);  
128 - }  
129 - //修改项目状态  
130 - $projectModel->edit(['delete_status'=>0],['id'=>$project_id]);  
131 - $this->output('CopyProjectJob end, old project_id: ' . $this->param['project_id'] . ', new project_id: ' . $project_id);  
132 return true; 204 return true;
133 } 205 }
134 206
@@ -191,4 +263,5 @@ class CopyProject extends Command @@ -191,4 +263,5 @@ class CopyProject extends Command
191 Log::info($output); 263 Log::info($output);
192 return true; 264 return true;
193 } 265 }
  266 +
194 } 267 }