Example #1
0
 public function ihm()
 {
     $now = time();
     $query = Member::find()->from(self::tableName() . ' member')->where(['and', 'regtime>1439879084', "regtime<{$now}"])->asArray()->select(['member.*', 'mdetail.sex', 'mdetail.company'])->leftJoin(MemberDetail::tableName() . ' mdetail', 'member.userid=mdetail.userid');
     // ->groupBy(['member.mobile']);
     // $query = $query->from(Member::tableName());
     $user = new UserBaseInfo();
     // $user_openid = new UserOpenid();
     $fileLogger = FileLogger::getInstance('iheima.log');
     foreach ($query->batch(1000, Yii::$app->iheima) as $rows) {
         $params = [];
         $openId = [];
         if (!arr_null($rows)) {
             foreach ($rows as $row) {
                 $openIds = openId('iHeiMa');
                 $params[] = ['username' => $row['username'], 'password' => $row['password'], 'password_salt' => $row['salt'], 'mobile' => $row['mobile'], 'email' => $row['email'], 'gender' => $row['sex'], 'reg_ip' => $row['regip'], 'last_login_time' => $row['lastlogintime'], 'last_login_ip' => $row['lastloginip'], 'create_time' => $row['regtime'], 'update_time' => time(), 'status' => $row['status'], 'open_id' => $openIds];
                 $openId[] = ['openid' => $openIds, 'userid' => $row['userid'], 'flag' => 'iheima'];
             }
             $result = $user->batchInsertUser($params);
             if (!$result) {
                 $fileLogger->writeOne('同步失败' . json_encode($row['email']), Logger::LEVEL_INFO, 'iHeiMa用户同步失败');
                 return false;
             }
             // $rt = $user_openid->batchInsert($openId);
             // if (!$rt) {
             //     return false;
             // }
             //$fileLogger->writeOne('同步成功' . json_encode($params), Logger::LEVEL_INFO, 'iHeiMa用户同步成功');
         }
     }
     $fileLogger->writeOne(json_encode($openId), Logger::LEVEL_INFO, 'iHeiMa用户openId与用户id对应关系数据');
     return $openId;
 }
 /**
  * iheima会员数据导出到数据中心
  */
 public function actionIhm()
 {
     $member = new Member();
     $connection = Yii::$app->iheima;
     $transaction = $connection->beginTransaction();
     try {
         $result = $member->ihm();
         if ($result) {
             echo 'success', "\r\n";
             $transaction->commit();
         } else {
             echo 'failure', "\r\n";
             $transaction->rollBack();
         }
     } catch (Exception $ex) {
         $transaction->rollBack();
         FileLogger::getInstance('iheima.exception.log')->writeOne($ex->getMessage(), Logger::LEVEL_ERROR, 'iHeiMa数据导出');
         echo 'exception', "\r\n";
     }
 }
 private function _store($data)
 {
     $mMember = new Member();
     $insertData = ['username' => uniqid() . mt_rand(10, 99), 'password' => $data['password'], 'email' => empty($data['email']) ? $data['mobile'] . '@iheima.com' : $data['mobile'], 'groupid' => 6, 'regip' => '', 'regtime' => $data['create_time'], 'lastloginip' => '', 'salt' => $data['password_salt'], 'mobile' => $data['mobile'], 'open_id' => $data['open_id']];
     return $mMember->store($insertData);
 }
 public function actionReport($startTime = false, $endTime = false)
 {
     date_default_timezone_set('PRC');
     if (empty($startTime) && empty($endTime)) {
         $startTime = strtotime(date('Y-m-d 00:00:00', strtotime("-1 day")));
         $endTime = strtotime(date('Y-m-d 23:59:59', strtotime("-1 day")));
     } else {
         if (empty($startTime) || empty($endTime)) {
             $tmp = $startTime;
             $startTime = strtotime($tmp . ' 00:00:00');
             $endTime = strtotime($tmp . ' 23:59:59');
         } else {
             if ($startTime > $endTime) {
                 $tmp = $startTime;
                 $startTime = $endTime;
                 $endTime = $tmp;
             }
             $startTime = strtotime($startTime);
             $endTime = strtotime($endTime);
         }
     }
     //获取i黑马注册用户的信息
     $ihmUsers = Member::getByTime($startTime, $endTime);
     //获取数据中心注册用户的信息
     $dcUsers = UserBaseInfo::getByTime($startTime, $endTime);
     if (empty($dcUsers) && empty($ihmUsers)) {
         $errorMessage[] = date('Y-m-d H:i:s', $startTime) . '至' . date('Y-m-d H:i:s', $endTime) . ' 无用户注册。';
     } else {
         if (empty($dcUsers) && isset($ihmUsers)) {
             $errorMessage[] = date('Y-m-d H:i:s', $startTime) . '至' . date('Y-m-d H:i:s', $endTime) . ' 数据中心中无用户注册,而i黑马有用户注册。';
         } else {
             $ihmOpenIds = array();
             foreach ($ihmUsers as $key => $user) {
                 $mobile = $user['mobile'];
                 if (isset($ihmOpenIds[$mobile])) {
                     if (is_string($ihmOpenIds[$mobile])) {
                         $ihmOpenIds[$mobile] = [$ihmOpenIds[$mobile], $user['open_id']];
                     } else {
                         if (is_array($ihmOpenIds[$mobile])) {
                             $ihmOpenIds[$mobile][] = $user['open_id'];
                         }
                     }
                 } else {
                     $ihmOpenIds[$mobile] = $user['open_id'];
                 }
             }
             foreach ($dcUsers as $key => $user) {
                 $mobile = $ihmOpenIds[$user['mobile']];
                 if (!isset($mobile)) {
                     $errorMessage[] = $user['mobile'] . '(' . $user['open_id'] . ') : 同步失败';
                 } else {
                     if (is_array($mobile)) {
                         $mobile = implode(", ", $mobile);
                         $errorMessage[] = $user['mobile'] . '(' . $user['open_id'] . ') : 存在多OPENID (' . $mobile . ')';
                     } else {
                         if (is_string($mobile)) {
                             if ($mobile != $user['open_id']) {
                                 $errorMessage[] = $user['mobile'] . '(' . $user['open_id'] . ') : OPENID不匹配(' . $user['open_id'] . ',' . $mobile . ')';
                             }
                         }
                     }
                 }
             }
         }
     }
     $errorMessage = implode("<br/>", $errorMessage);
     //发送邮件操作
     $userID = UserBaseInfo::SYSTEM_USER;
     $email = Yii::$app->params['syncUserEmail'];
     $data = ['userID' => $userID, 'to' => $email, 'appID' => '100000', 'business' => S_SYNCUSER_CHECK, 'tplno' => 5, 'subject' => '检测同步用户报告', 'content' => $errorMessage];
     $sender = Yii::$app->mailer;
     $result = $sender->check($data, true);
     if (!$result[0]) {
         $result = $sender->exec($result[1]);
     } else {
         //邮箱发送失败记录到日志文件中
         FileLogger::getInstance(date('Ymd') . '_sync_user_report.log')->writeOne('邮箱发送失败', Logger::LEVEL_ERROR, 'report');
     }
 }