作者 lyh

gx

  1 +<?php
  2 +/**
  3 + * @remark :
  4 + * @name :CreateProject.php
  5 + * @author :lyh
  6 + * @method :post
  7 + * @time :2025/1/6 10:34
  8 + */
  9 +
  10 +namespace App\Console\Commands\Project;
  11 +
  12 +use App\Helper\Arr;
  13 +use App\Models\Channel\Channel;
  14 +use App\Models\Com\UpdateLog;
  15 +use App\Models\Com\UpdateVisit;
  16 +use App\Models\Devops\Servers;
  17 +use App\Models\Devops\ServersIp;
  18 +use App\Models\Manage\Mobile;
  19 +use App\Models\Project\After;
  20 +use App\Models\Project\DeployBuild;
  21 +use App\Models\Project\DeployOptimize;
  22 +use App\Models\Project\Payment;
  23 +use App\Models\Project\Project;
  24 +use App\Models\User\User as UserModel;
  25 +use App\Services\ProjectServer;
  26 +use Hashids\Hashids;
  27 +use Illuminate\Console\Command;
  28 +use Illuminate\Support\Facades\DB;
  29 +
  30 +class CreateProject extends Command
  31 +{
  32 + protected $signature = 'create_project';
  33 + protected $description = '创建项目';
  34 +
  35 + public function handle(){
  36 + return $this->sync();
  37 + }
  38 +
  39 + public function sync($is_update = 0){
  40 + $title = date('Ymd') . '-广东威美建材科技有限公司';
  41 + $data = [
  42 + 'project'=>[
  43 + 'title' => $title,
  44 + 'company' => '广东威美建材科技有限公司',
  45 + 'lead_name' => '蔡伟文',
  46 + 'mobile' => '13929953235',
  47 + 'mysql_id'=>Project::MYSQL_ID,
  48 + 'serve_id'=>9,
  49 + 'qq' => '',
  50 + 'channel' => '{"user_id": "53", "zone_id": "4", "channel_id": "4"}',
  51 + 'requirement' => '',
  52 + 'cooperate_date' => '2019-04-01',
  53 + 'from_order_id' => '',
  54 + 'type' => $is_update,
  55 + 'is_upgrade'=>$is_update,
  56 + ],
  57 + 'deploy_build' => [
  58 + 'service_duration' => 0,
  59 + 'plan' => $this->versionData('标准版'),
  60 + 'login_mobile'=>'13929953235'
  61 + ],
  62 + 'deploy_optimize' => [
  63 +// 'api_no' => 0
  64 + ],
  65 + 'project_after' => [],
  66 + 'payment' => [
  67 + 'amount' => 0,
  68 + 'contract'=>[],
  69 + 'bill'=>[]
  70 + ],
  71 + ];
  72 + DB::beginTransaction();
  73 + try {
  74 + $id = $this->saveProject($data['project']);
  75 + $this->setPostId($data['deploy_build']['plan'],$id);
  76 + $this->savePayment($data['payment'],$id);
  77 + $this->saveDeployBuild($data['deploy_build'],$id);
  78 + $this->saveDeployOptimize($data['deploy_optimize'],$id);
  79 + $this->saveAfter($data['project_after'],$id);
  80 + $serversIpModel = new ServersIp();
  81 + $serversModel = new Servers();
  82 + $serversIpModel->where(['id'=>9])->increment('total',1);
  83 + $serversModel->where(['id'=>7])->increment('being_number',1);
  84 + if($is_update == 1){
  85 + //4.0或5.0更新到6.0
  86 + //初始化数据库
  87 + $this->initializationMysql($id);
  88 + //初始账号
  89 + $this->createUser($data['project']['mobile'],$id,$data['project']['lead_name']);
  90 + }
  91 + DB::commit();
  92 + }catch (\Exception $e){
  93 + DB::rollBack();
  94 + throw new \Exception($e->getMessage());
  95 + }
  96 + }
  97 +
  98 + /**
  99 + * @remark :获取版本
  100 + * @name :versionData
  101 + * @author :lyh
  102 + * @method :post
  103 + * @time :2023/8/9 14:46
  104 + */
  105 + public function versionData($param){
  106 + $data = Project::planMap();
  107 + $data = array_flip($data);
  108 + if(isset($data[$param])){
  109 + return $data[$param];
  110 + }else{
  111 + return 1;
  112 + }
  113 + }
  114 +
  115 + /**
  116 + * @remark :保存项目
  117 + * @name :saveProject
  118 + * @author :lyh
  119 + * @method :post
  120 + * @time :2023/8/30 15:53
  121 + */
  122 + public function saveProject($param){
  123 + $projectModel = new Project();
  124 + return $projectModel->addReturnId($param);
  125 + }
  126 +
  127 + /**
  128 + * @remark :设置post_id
  129 + * @name :setPostId
  130 + * @author :lyh
  131 + * @method :post
  132 + * @time :2023/8/9 14:47
  133 + */
  134 + public function setPostId($plan,$id){
  135 + $length = strlen((string)$id); // 获取变量的位数
  136 + $paddingLength = Project::TYPE_FIVE - $length; // 计算填充前面的 0 的位数
  137 + $zeros = str_repeat("0", $paddingLength);
  138 + $number = Project::TYPE_SIX.$plan.$zeros.$id;
  139 + $projectModel = new Project();
  140 + $projectModel->edit(['post_id'=>$number],['id'=>$id]);
  141 + return true;
  142 + }
  143 +
  144 + /**
  145 + * 保存优化部署
  146 + * @author zbj
  147 + * @date 2023/4/26
  148 + */
  149 + protected function saveAfter($param,$id){
  150 + $param['project_id'] = $id;
  151 + //查询数据是否存在
  152 + $afterModel = new After();
  153 + $info = $afterModel->read(['project_id'=>$id]);
  154 + if($info !== false){
  155 + $afterModel->edit($param,['id'=>$info['id']]);
  156 + }else{
  157 + $afterModel->add($param);
  158 + }
  159 + }
  160 +
  161 + /**
  162 + * @remark :保存付款续费
  163 + * @name :savePayment
  164 + * @author :lyh
  165 + * @method :post
  166 + * @time :2023/8/29 16:19
  167 + */
  168 + protected function savePayment($param,$id){
  169 + $param['project_id'] = $id;
  170 + $paymentModel= new Payment();
  171 + $param['contract'] = Arr::a2s($param['contract']);
  172 + $param['bill'] = Arr::a2s($param['bill']);
  173 + if(!isset($param['renewal_record'])){
  174 + $param['renewal_record'] = Arr::a2s([["amount"=> null, "remark"=> null, "expire_at"=> null]]);
  175 + }
  176 + $info = $paymentModel->read(['project_id'=>$id]);
  177 + if($info !== false){
  178 + $paymentModel->edit($param,['id'=>$info['id']]);
  179 + }else{
  180 + $paymentModel->add($param);
  181 + }
  182 + }
  183 +
  184 + /**
  185 + * @remark :保存建站部署
  186 + * @name :saveDeployBuild
  187 + * @author :lyh
  188 + * @method :post
  189 + * @time :2023/8/29 16:19
  190 + */
  191 + protected function saveDeployBuild($param,$id){
  192 + $param['project_id'] = $id;
  193 + $hashids = new Hashids('test_domain', 5, 'abcdefghjkmnpqrstuvwxyz1234567890');
  194 + $code = $hashids->encode($id);
  195 + $param['test_domain'] = 'https://v6-' . $code . '.globalso.site/';
  196 + $deployBuildModel = new DeployBuild();
  197 + $info = $deployBuildModel->read(['project_id'=>$id]);
  198 + if($info !== false){
  199 + $deployBuildModel->edit($param,['id'=>$info['id']]);
  200 + }else{
  201 + $deployBuildModel->add($param);
  202 + }
  203 + }
  204 +
  205 + /**
  206 + * @remark :保存优化信息
  207 + * @name :saveDeployOptimize
  208 + * @author :lyh
  209 + * @method :post
  210 + * @time :2023/8/30 16:11
  211 + */
  212 + protected function saveDeployOptimize($param,$id){
  213 + $param['project_id'] = $id;
  214 + $deployOptimizeModel = new DeployOptimize();
  215 + $info = $deployOptimizeModel->read(['project_id'=>$id]);
  216 + if($info !== false){
  217 + //存在就不处理了
  218 +// $deployOptimizeModel->edit($param,['id'=>$info['id']]);
  219 + }else{
  220 + $deployOptimizeModel->add($param);
  221 + }
  222 + }
  223 + /**
  224 + * 初始化数据库
  225 + * @param $project_id
  226 + * @author Akun
  227 + * @date 2023/09/19 15:12
  228 + */
  229 + public function initializationMysql($project_id){
  230 + //切换数据库配置
  231 + $project = ProjectServer::useProject($project_id);
  232 + //创建数据库
  233 + ProjectServer::createDatabase($project);
  234 + //创建表
  235 + ProjectServer::initTable();
  236 + //初始数据
  237 + ProjectServer::saveInitParam($project_id);
  238 + }
  239 +
  240 + /**
  241 + * 创建用户
  242 + * @param $mobile
  243 + * @param $project_id
  244 + * @param $lead_name
  245 + * @author Akun
  246 + * @date 2023/09/19 15:12
  247 + */
  248 + public function createUser($mobile,$project_id,$lead_name){
  249 + $userModel = new UserModel();
  250 + //查看当前项目是否存在号码库中
  251 + $mobileModel = new Mobile();
  252 + $mobileInfo = $mobileModel->read(['mobile'=>$mobile]);
  253 + if($mobileInfo === false){
  254 + //查看当前用户是否存在
  255 + $info = $userModel->read(['mobile'=>$mobile,'project_id'=>$project_id]);
  256 + if($info === false){
  257 + $data = [
  258 + 'mobile'=>$mobile,
  259 + 'password'=>base64_encode(md5('123456')),
  260 + 'project_id'=>$project_id,
  261 + 'name'=>$lead_name,
  262 + 'type'=>UserModel::TYPE_ONE
  263 + ];
  264 + $userModel->add($data);
  265 + }
  266 + }
  267 + return true;
  268 + }
  269 +}