www.gusucode.com > KPPW众包威客PHP开源建站系统 v3.0源码程序 > KPPW/app/Console/Commands/VersionMigration.php
<?php namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\DB; class VersionMigration extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'update:kppw27'; /** * The console command description. * * @var string */ protected $description = 'update KPPW2.7 database to KPPW3.0'; //kppw27数据库对象 protected $kppw27; //kppw30数据库对象 protected $kppw30; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { $this->warn('转移数据前请先做好备份!并移动KPPW2.7 data目录及upload子目录移动到KPPW3.0 public目录下'); //kppw2.7数据库配置数组 /*$v27database = []; $v27database['host'] = $this->ask('请输入KPPW2.7数据库主机地址'); $v27database['database'] = $this->ask('请输入KPPW2.7数据库名称'); $v27database['username'] = $this->ask('请输入KPPW2.7数据库用户名'); $v27database['password'] = $this->ask('请输入KPPW2.7数据库密码'); $v27database['prefix'] = $this->ask('请输入KPPW2.7数据库表前缀'); //kppw3.0数据库配置数组 $v30database = []; $v30database['host'] = $this->ask('请输入KPPW3.0数据库主机地址'); $v30database['database'] = $this->ask('请输入KPPW3.0数据库名称'); $v30database['username'] = $this->ask('请输入KPPW3.0数据库用户名'); $v30database['password'] = $this->ask('请输入KPPW3.0数据库密码'); $v30database['prefix'] = $this->ask('请输入KPPW3.0数据库表前缀');*/ $v27database = [ 'host' => '127.0.0.1', 'database' => 'kppw26', 'username' => 'root', 'password' => '123456', 'prefix' => 'keke_witkey_' ]; $v30database = [ 'host' => '127.0.0.1', 'database' => 'kppw0729', 'username' => 'root', 'password' => '123456', 'prefix' => 'kppw_' ]; $this->setDatabase('kppw27', $v27database); $this->setDatabase('kppw30', $v30database); $data = [ 'host' => [$v27database['host'], $v30database['host']], 'database' => [$v27database['database'], $v30database['database']], 'username' => [$v27database['username'], $v30database['username']], 'password' => [$v27database['password'], $v30database['password']], 'prefix' => [$v27database['prefix'], $v30database['prefix']] ]; $this->table(['KPPW2.7', 'KPPW3.0'], $data); if ($this->confirm('确定开始迁移数据么?', true)){ $this->kppw27 = DB::connection('kppw27'); // $this->kppw30 = DB::connection('kppw30'); // $this->info('正在执行迁移...'); $this->kppw30->table('users')->truncate(); $this->kppw30->table('user_detail')->truncate(); //转移用户数据 $arrSpace = $this->kppw27->table('space')->leftJoin('auth_email','auth_email.uid','=','space.uid')->where('auth_email.auth_status',1)->get(); $new_arr = array(); $info_arr = array(); if (!empty($arrSpace)){ foreach ($arrSpace as $k => $v) { $salt = \CommonClass::random(4); $password = md5(md5('123456' . $salt)); $dateTime = date('Y-m-d H:i:s', time()); $new_arr[] = array( 'id' => $v->uid, 'name' => $v->username, 'email' => !empty($v->email)?$v->email:Null, 'password' => $password, 'alternate_password' => $password, 'salt' => $salt, 'status' => 1, 'created_at' => $dateTime, 'updated_at' => $dateTime, ); $info_arr[] = array( 'uid' => $v->uid, 'realname' => $v->truename, 'mobile' => $v->mobile, 'qq' => $v->qq, 'balance' => $v->balance, 'created_at' => $dateTime, 'updated_at' => $dateTime, 'introduce' => $v->summary, 'employee_praise_rate' => $v->seller_good_num, 'employer_praise_rate' => $v->buyer_good_num, 'receive_task_num' => $v->take_num, 'publish_task_num' => $v->pub_num, ); } //一次性执行插入操作 $this->kppw30->table('users')->insert($new_arr); $this->kppw30->table('user_detail')->insert($info_arr); } $this->kppw30->table('article')->truncate(); $this->kppw30->table('article_category')->truncate(); //转移文章数据 $arrArticle = $this->kppw27->table('article')->get(); $new_article_arr = array(); if(!empty($arrArticle)){ foreach($arrArticle as $k => $v){ $new_article_arr[] = array( 'id' => $v->art_id, 'cat_id' => $v->art_cat_id, 'user_id' => $v->uid, 'title' => $v->art_title, 'author' => $v->username, 'from' => $v->art_source, 'pic' => $v->art_pic, 'created_at' => date('Y-m-d H:i:s',$v->pub_time), 'content' => $v->content, 'view_times' => $v->views, 'seotitle' => $v->seo_title, 'keywords' => $v->seo_keyword, 'description' => $v->seo_desc, 'updated_at' => date('Y-m-d H:i:s', time()), 'display_order' => $v->listorder ); } //一次性执行插入操作 $this->kppw30->table('article')->insert($new_article_arr); } //转移文章分类数据 $arrArticleCategory = $this->kppw27->table('article_category')->get(); $new_article_category_arr = array(); if(!empty($arrArticleCategory)){ foreach($arrArticleCategory as $key => $value){ $new_article_category_arr[] = array( 'id' => $value->art_cat_id, 'pid' => $value->art_cat_pid, 'cate_name' => $value->cat_name, 'display_order' => $value->listorder, 'created_at' => date('Y-m-d H:i:s',$value->on_time), 'updated_at' => date('Y-m-d H:i:s', time()), 'seotitle' => $value->seo_title, 'keyword' => $value->seo_keyword, 'description' => $value->seo_desc ); } //一次性执行插入操作 $this->kppw30->table('article_category')->insert($new_article_category_arr); } //转移分类数据 $this->kppw30->table('cate')->truncate(); $arrIndustry = $this->kppw27->table('industry')->get(); $new_cate_arr = []; if (!empty($arrIndustry)){ foreach ($arrIndustry as $k => $v){ $new_cate_arr[] = [ 'id' => $v->indus_id, 'name' => $v->indus_name, //'任务分类名称', 'pid' => $v->indus_pid, //'父级分类ID', 'sort' => $v->listorder, //'排序,指的是任务分类在本级的排序', 'choose_num' => 0, 'created_at' => date('Y-m-d H:i:s', time()), 'updated_at' => date('Y-m-d H:i:s', time()) ]; } $this->kppw30->table('cate')->insert($new_cate_arr); } //转移任务数据 $this->kppw30->table('task')->truncate(); $arrTask = $this->kppw27->table('task')->where('model_id', 1)->get(); $new_task_arr = []; if (!empty($arrTask)){ foreach ($arrTask as $k => $v){ if (!in_array($v->task_status, array(7, 11, 13))){ $task_id_arr[] = $v->task_id; switch ($v->task_status){ case 0: $status = 1; break; case 1: $status = $v->is_trust == 1 ? 2 : 1; break; case 2: $status = 4; break; case 3: $status = 5; break; case 4: $status = 5; break; case 5: $status = 7; break; case 6: $status = 7; break; case 8: $status = 9; break; case 9: $status = 10; break; case 10: $status = 10; break; } $new_task_arr[] = [ 'id' => $v->task_id, 'title' => $v->task_title, 'desc' => $v->task_desc, 'type_id' => 1, //'任务类型ID ', 'cate_id' => $v->indus_id, //'任务分类ID', 'phone' => '', 'region_limit' => 0, //'地域限制 0表示不限制地域 1表示限制地域', 'status' => $status, //'任务状态:\n0 暂不发布 \n1 已经发布 2托管赏金\n 3审核通过\n 4威客交稿\n 5雇主选稿\n 6任务公示\n 7交付验收\n 8双方互评 9已结束 10失败 11维权 ', 'bounty' => $v->task_cash, 'bounty_status' => $v->is_trust, //赏金状态\n0 未托管\n1 已托管', 'created_at' => $v->start_time, 'updated_at' => $v->start_time, 'verified_at' => $v->start_time, //'审核时间' 'begin_at' => $v->start_time, //'任务开始时间', 'end_at' => '', //'任务结束时间', 'delivery_deadline' => $v->sub_time, //'交稿结束时间', 'selected_work_at' => $v->sub_time, //'选稿时间', 'publicity_at' => '', //'任务公示时间', 'checked_at' => date('Y-m-d H:i:s',time()), //'验收期进入时间', 'comment_at' => '', //'双方互评开始', 'show_cash' => $v->task_cash, //'展示赏金', 'real_cash' => $v->task_cash, //'实付赏金', 'deposit_cash' => $v->task_cash, //'已托管金额', 'province' => '', 'city' => '', 'area' => '', 'view_count' => $v->view_num, //'浏览次数', 'delivery_count' => $v->work_num, //'投稿数量', 'username' => '', //'用户名', 'uid' => $v->uid, //'雇主ID', 'worker_num' => 1, //'服务商数量', 'top_status' => $v->is_top, ///'是否置顶', 'service' => ''//'增值服务的id', ]; } } $this->kppw30->table('task')->insert($new_task_arr); } //转移稿件 $this->kppw30->table('work')->truncate(); $new_work_arr = []; $arrWork = $this->kppw27->table('task_work')->whereIn('task_id', $task_id_arr)->get(); if (!empty($arrWork)){ foreach ($arrWork as $k => $v){ switch ($v->work_status){ case 0: case 5: case 7: $status = 0; break; case 4: $status = 1; break; case 8: $status = 0; $forbidden = 1; break; } $new_work_arr[] = [ 'id' => $v->work_id, 'desc' => $v->work_desc, 'task_id' => $v->task_id, 'status' => $status, //'状态 0表示威客投稿 1表示威客中标 2表示威客交付 3表示验收成功 4表示验收失败(交易维权)', 'forbidden' => 0, //'是否禁用稿件 0表示启用 1表示禁用', 'uid' => $v->uid, //'威客ID', 'bid_by' => 0, //'中标选中对象 0表示雇主选中 1表示系统选中', 'bid_at' => $v->work_time, //'中标时间', 'created_at' => $v->work_time ]; } $this->kppw30->table('work')->insert($new_work_arr); } //转移附件 $this->kppw30->table('attachment')->truncate(); $this->kppw30->table('task_attachment')->truncate(); $this->kppw30->table('work_attachment')->truncate(); $arr_file = $this->kppw27->table('file')->get(); if (!empty($arr_file)){ $new_attachment_arr = []; $new_task_attachment_arr = []; $new_work_attachment_arr = []; foreach ($arr_file as $k => $v){ $new_attachment_arr[] = [ 'id' => $v->file_id, 'name' => $v->file_name, 'url' => $v->save_name, 'status' => 1, 'user_id' => $v->uid, 'disk' => 'public', 'created_at' => $v->on_time ]; $new_task_attachment_arr[] = [ 'task_id' => $v->task_id, 'attachment_id' => $v->file_id, 'created_at' => $v->on_time ]; $new_work_attachment_arr[] = [ 'task_id' => $v->task_id, 'work_id' => $v->work_id, 'attachment_id' => $v->file_id, 'created_at' => $v->on_time ]; } $this->kppw30->table('attachment')->insert($new_attachment_arr); $this->kppw30->table('task_attachment')->insert($new_task_attachment_arr); $this->kppw30->table('work_attachment')->insert($new_work_attachment_arr); } $this->info('转移完成'); } } /** * 动态设置数据库配置信息 * * @param $connectionParam * @param $databaseInfo */ public function setDatabase($connectionParam, $databaseInfo) { Config::set('database.connections.' . $connectionParam . '.host', $databaseInfo['host']); Config::set('database.connections.' . $connectionParam . '.database', $databaseInfo['database']); Config::set('database.connections.' . $connectionParam . '.username', $databaseInfo['username']); Config::set('database.connections.' . $connectionParam . '.password', $databaseInfo['password']); Config::set('database.connections.' . $connectionParam . '.prefix', $databaseInfo['prefix']); } }