<?php namespace Combine\Lib; use Dever; class Core { # 合并用户数据 public function handle($uid, $drop) { $table = array ( 'passport/app', 'passport/wechat', 'act/feedback', 'act/comment', 'act/form_id', 'act/invite', 'act/like', 'act/live_comment', 'act/live_note', //'act/score',//积分相关的要加上,不能直接修改 'act/share', 'act/share_reflux', 'act/subscribe', 'act/watch', //'code/info', 'source/user', 'score/action_log', //'score/user',//积分相关的要加上,不能直接修改 //'score/user_level',//等级,不做合并,保留即可 'score/user_log',//积分日志 'message/inbox', 'invite/relation', //'pay/order',//支付系统单独建立,如果通过接口会有安全问题,因为数据是独立的,暂时不做合并 'journal/order', 'act/order', ); if (is_string($drop)) { $drop = explode(',', $drop); } foreach ($drop as $k => $v) { if ($v == $uid) { continue; } foreach ($table as $k1 => $v1) { Dever::db($v1)->updates(array('set_uid' => $uid, 'option_uid' => $v)); } # 处理一些特殊的情况 $this->other($uid, $v); # 积分相关 要把积分加上,再删掉之前的 $this->score($uid, $v, 'score/user'); $this->score($uid, $v, 'act/score'); } } private function other($uid, $drop_uid) { Dever::db('code/info')->updates(array('set_uid' => $uid, 'option_uid' => $drop_uid)); Dever::db('code/info')->updates(array('set_create_uid' => $uid, 'option_create_uid' => $drop_uid)); $journal = Dever::db('journal/info')->state(); if ($journal) { foreach ($journal as $k => $v) { Dever::setInput('set_product_id', $v['id']); Dever::db('code/info')->updates(array('set_uid' => $uid, 'option_uid' => $drop_uid)); Dever::db('code/info')->updates(array('set_create_uid' => $uid, 'option_create_uid' => $drop_uid)); } } Dever::db('invite/relation')->updates(array('set_to_uid' => $uid, 'option_to_uid' => $drop_uid)); } private function score($uid, $drop_uid, $table, $col = 'score') { $db = Dever::db($table); $user_score = $db->one(array('uid' => $uid)); $user_drop_score = $db->one(array('uid' => $drop_uid)); if ($user_score && $user_drop_score) { $score = $user_score[$col] + $user_drop_score[$col]; $update['where_id'] = $user_score['id']; $update['score'] = $score; $db->update($update); $db->delete($user_drop_score['id']); } elseif (!$user_score && $user_drop_score) { $score = $user_drop_score[$col]; $update['where_id'] = $user_drop_score['id']; $update['uid'] = $uid; $update['score'] = $score; $db->update($update); } } }