作者 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,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 }