正在显示
1 个修改的文件
包含
155 行增加
和
82 行删除
| @@ -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,93 +43,164 @@ class CopyProject extends Command | @@ -42,93 +43,164 @@ 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(); | ||
| 50 | - $data = $data->getAttributes(); | ||
| 51 | - $type = $data['type']; | ||
| 52 | - $data['type'] = 0; | ||
| 53 | - $data['status'] = 0; | ||
| 54 | - $data['finish_remain_day'] = 0; | ||
| 55 | - $data['title'] = $data['title'].'-copy'; | ||
| 56 | - $data['delete_status'] = 1; | ||
| 57 | - unset($data['id'],$data['robots'],$data['is_translate_tag'],$data['is_translate'],$data['is_minor_languages'],$data['uptime']); | ||
| 58 | - $project_id = $projectModel->insertGetId($data); | ||
| 59 | - $hashids = new Hashids($data['from_order_id'], 13, 'abcdefghjkmnpqrstuvwxyz1234567890'); | ||
| 60 | - $projectModel->edit(['from_order_id'=>$hashids->encode($project_id)],['id'=>$project_id]); | ||
| 61 | - //复制设置的模版 | ||
| 62 | - $settingTemplateModel = new Setting(); | ||
| 63 | - $settingData = $settingTemplateModel::where('project_id', $this->param['project_id'])->first(); | ||
| 64 | - if(!empty($settingData)){ | ||
| 65 | - $data = [ | ||
| 66 | - 'template_id' =>$settingData['template_id'], | ||
| 67 | - 'project_id' => $project_id | ||
| 68 | - ]; | ||
| 69 | - $settingTemplateModel->add($data); | ||
| 70 | - } | ||
| 71 | - //复制部署表 | ||
| 72 | - $buildModel = new DeployBuild(); | ||
| 73 | - $buildData = $buildModel::where('project_id', $this->param['project_id'])->first(); | ||
| 74 | - if(!empty($buildData)){ | ||
| 75 | - $buildData = $buildData->getAttributes(); | ||
| 76 | - $buildData['project_id'] = $project_id; | ||
| 77 | - $hashids = new Hashids('test_domain', 5, 'abcdefghjkmnpqrstuvwxyz1234567890'); | ||
| 78 | - $code = $hashids->encode($project_id); | ||
| 79 | - $buildData['test_domain'] = 'https://v6-' . $code . '.globalso.site/'; | ||
| 80 | - unset($buildData['id']); | ||
| 81 | - $buildModel->insert($buildData); | ||
| 82 | - } | ||
| 83 | - //复制优化表 | ||
| 84 | - $optimizeModel = new DeployOptimize(); | ||
| 85 | - $optimizeData = $optimizeModel::where('project_id', $this->param['project_id'])->first(); | ||
| 86 | - if(!empty($optimizeData)){ | ||
| 87 | - $optimizeData = $optimizeData->getAttributes(); | ||
| 88 | - unset($optimizeData['id'],$optimizeData['domain'],$optimizeData['backlink'],$optimizeData['ai_video']); | ||
| 89 | - $optimizeData['project_id'] = $project_id; | ||
| 90 | - $optimizeData['api_no'] = 0; | ||
| 91 | - $optimizeModel->insert($optimizeData); | ||
| 92 | - } | ||
| 93 | - //复制付费表 | ||
| 94 | - $paymentModel = new Payment(); | ||
| 95 | - $paymentData = $paymentModel::where('project_id', $this->param['project_id'])->first(); | ||
| 96 | - if(!empty($paymentData)){ | ||
| 97 | - $paymentData = $paymentData->getAttributes(); | ||
| 98 | - unset($paymentData['id']); | ||
| 99 | - $paymentData['project_id'] = $project_id; | ||
| 100 | - $paymentModel->insert($paymentData); | ||
| 101 | - } | ||
| 102 | - //复制售后表 | ||
| 103 | - $afterModel = new After(); | ||
| 104 | - $afterData = $afterModel::where('project_id', $this->param['project_id'])->first(); | ||
| 105 | - if(!empty($afterData)){ | ||
| 106 | - $afterData = $afterData->getAttributes(); | ||
| 107 | - unset($afterData['id']); | ||
| 108 | - $afterData['project_id'] = $project_id; | ||
| 109 | - $afterModel->insert($afterData); | 48 | + $list = NoticeLog::where('type', NoticeLog::TYPE_COPY_PROJECT)->where('status', NoticeLog::STATUS_PENDING)->get(); |
| 49 | + if(empty($list)){ | ||
| 50 | + sleep(5); | ||
| 51 | + continue; | ||
| 110 | } | 52 | } |
| 111 | - //复制用户 | ||
| 112 | - $userModel = new UserModel(); | ||
| 113 | - $userData = $userModel::where('project_id', $this->param['project_id'])->where('role_id',0)->first(); | ||
| 114 | - if(!empty($userData)){ | ||
| 115 | - $userData = $userData->getAttributes(); | ||
| 116 | - unset($userData['id']); | ||
| 117 | - $userData['project_id'] = $project_id; | ||
| 118 | - $userModel->insert($userData); | 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 | + } | ||
| 119 | } | 78 | } |
| 120 | - DB::commit(); | ||
| 121 | - }catch (\Exception $e){ | ||
| 122 | - DB::rollBack(); | ||
| 123 | - $this->output('CopyProjectJob error, error message: ' . $e->getMessage()); | ||
| 124 | - $this->fail('error'); | ||
| 125 | } | 79 | } |
| 126 | - if($type != 0){ | ||
| 127 | - $this->copyMysql($this->param['project_id'],$project_id); | 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(); | ||
| 86 | + $data = $data->getAttributes(); | ||
| 87 | + $type = $data['type']; | ||
| 88 | + $data['type'] = 0; | ||
| 89 | + $data['status'] = 0; | ||
| 90 | + $data['finish_remain_day'] = 0; | ||
| 91 | + $data['title'] = $data['title'].'-copy'; | ||
| 92 | + $data['delete_status'] = 1; | ||
| 93 | + unset($data['id'],$data['robots'],$data['is_translate_tag'],$data['is_translate'],$data['is_minor_languages'],$data['uptime']); | ||
| 94 | + $project_id = $projectModel->insertGetId($data); | ||
| 95 | + $hashids = new Hashids($data['from_order_id'], 13, 'abcdefghjkmnpqrstuvwxyz1234567890'); | ||
| 96 | + $projectModel->edit(['from_order_id'=>$hashids->encode($project_id)],['id'=>$project_id]); | ||
| 97 | + //复制设置的模版 | ||
| 98 | + $settingTemplateModel = new Setting(); | ||
| 99 | + $settingData = $settingTemplateModel::where('project_id', $this->param['project_id'])->first(); | ||
| 100 | + if(!empty($settingData)){ | ||
| 101 | + $data = [ | ||
| 102 | + 'template_id' =>$settingData['template_id'], | ||
| 103 | + 'project_id' => $project_id | ||
| 104 | + ]; | ||
| 105 | + $settingTemplateModel->add($data); | ||
| 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){ | ||
| 118 | + //复制部署表 | ||
| 119 | + $buildModel = new DeployBuild(); | ||
| 120 | + $buildData = $buildModel::where('project_id', $old_project_id)->first(); | ||
| 121 | + if(!empty($buildData)){ | ||
| 122 | + $buildData = $buildData->getAttributes(); | ||
| 123 | + $buildData['project_id'] = $project_id; | ||
| 124 | + $hashids = new Hashids('test_domain', 5, 'abcdefghjkmnpqrstuvwxyz1234567890'); | ||
| 125 | + $code = $hashids->encode($project_id); | ||
| 126 | + $buildData['test_domain'] = 'https://v6-' . $code . '.globalso.site/'; | ||
| 127 | + unset($buildData['id']); | ||
| 128 | + $buildModel->insert($buildData); | ||
| 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){ | ||
| 141 | + //复制优化表 | ||
| 142 | + $optimizeModel = new DeployOptimize(); | ||
| 143 | + $optimizeData = $optimizeModel::where('project_id', $old_project_id)->first(); | ||
| 144 | + if(!empty($optimizeData)){ | ||
| 145 | + $optimizeData = $optimizeData->getAttributes(); | ||
| 146 | + unset($optimizeData['id'],$optimizeData['domain'],$optimizeData['backlink'],$optimizeData['ai_video']); | ||
| 147 | + $optimizeData['project_id'] = $project_id; | ||
| 148 | + $optimizeData['api_no'] = 0; | ||
| 149 | + $optimizeModel->insert($optimizeData); | ||
| 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){ | ||
| 162 | + //复制付费表 | ||
| 163 | + $paymentModel = new Payment(); | ||
| 164 | + $paymentData = $paymentModel::where('project_id', $old_project_id)->first(); | ||
| 165 | + if(!empty($paymentData)){ | ||
| 166 | + $paymentData = $paymentData->getAttributes(); | ||
| 167 | + unset($paymentData['id']); | ||
| 168 | + $paymentData['project_id'] = $project_id; | ||
| 169 | + $paymentModel->insert($paymentData); | ||
| 170 | + } | ||
| 171 | + return true; | ||
| 172 | + } | ||
| 173 | + | ||
| 174 | + public function copyAfter($old_project_id,$project_id){ | ||
| 175 | + //复制售后表 | ||
| 176 | + $afterModel = new After(); | ||
| 177 | + $afterData = $afterModel::where('project_id',$old_project_id)->first(); | ||
| 178 | + if(!empty($afterData)){ | ||
| 179 | + $afterData = $afterData->getAttributes(); | ||
| 180 | + unset($afterData['id']); | ||
| 181 | + $afterData['project_id'] = $project_id; | ||
| 182 | + $afterModel->insert($afterData); | ||
| 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){ | ||
| 195 | + //复制用户 | ||
| 196 | + $userModel = new UserModel(); | ||
| 197 | + $userData = $userModel::where('project_id', $old_project_id)->where('role_id',0)->first(); | ||
| 198 | + if(!empty($userData)){ | ||
| 199 | + $userData = $userData->getAttributes(); | ||
| 200 | + unset($userData['id']); | ||
| 201 | + $userData['project_id'] = $project_id; | ||
| 202 | + $userModel->insert($userData); | ||
| 128 | } | 203 | } |
| 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 | } |
-
请 注册 或 登录 后发表评论