Beispiel #1
0
 public function perform()
 {
     # Run task
     $args = $this->args;
     //the key for wrong number for store in redis
     $wrongKey = self::MEMBER_WRONG;
     switch ($args['type']) {
         case self::JOB_DELETE_REDIS_CODE:
             if (!isset($args['filename']) || !isset($args['accountId'])) {
                 ResqueUtil::log(['error' => 'missing param', 'param' => $args]);
                 return false;
             }
             $redis = \Yii::$app->cache->redis;
             $cacheSetInsert = self::SET_HEAD_INSERT . md5($args['accountId'] . "_" . $args['fileName']);
             $cacheSetUpdate = self::SET_HEAD_UPDATE . md5($args['accountId'] . "_" . $args['fileName']);
             $redis->del($cacheSetInsert);
             $redis->del($cacheSetUpdate);
             unset($commonKey, $cacheTotalKey, $count);
             break;
         case self::JOB_INSERT:
             if (!isset($args['accountId']) || empty($args['filename']) || empty($args['hostInfo'])) {
                 ResqueUtil::log(['error' => 'missing params', 'param' => $args]);
             }
             $redis = Yii::$app->cache->redis;
             $cacheKey = $args['accountId'] . "_" . $args['filename'];
             $createdAt = new \MongoDate(time());
             $redis->expire($cacheKey, self::EXPIRE);
             $cacheSetInsert = self::SET_HEAD_INSERT . md5($cacheKey);
             $cacheSetUpdate = self::SET_HEAD_UPDATE . md5($cacheKey);
             // status
             $cacheSetLackProperties = self::MEMBER_IMPORT_NO_PROPERTY . md5($cacheKey);
             // get total of excel.
             $totalInsert = $redis->scard($cacheSetInsert);
             $totalUpdate = $redis->scard($cacheSetUpdate);
             // batch insert member.
             $memberInsert = [];
             $keyInsert = $redis->smembers($cacheSetInsert);
             // update member.
             $keyUpdate = $redis->smembers($cacheSetUpdate);
             // unserialize.
             if (count($keyInsert) > 0) {
                 $defaultCard = MemberShipCard::getDefault(new MongoId($args['accountId']));
                 if (empty($defaultCard)) {
                     ResqueUtil::log('Lack of default MemberShip Card');
                     // 0
                     $redis->Hset($cacheSetLackProperties, $wrongKey, self::MEMBER_NO_DEFAULT_PROPERTIES);
                     return false;
                 }
                 $cardId = $defaultCard->_id;
                 $origin = Member::PORTAL;
                 $tels = [];
                 for ($rowIndex = 0; $rowIndex < $totalInsert; $rowIndex++) {
                     $memberKey = unserialize($keyInsert[$rowIndex]);
                     $cardNumber = Member::generateCardNumber();
                     $properties = [];
                     $memberTag = [];
                     foreach ($memberKey[0] as $item) {
                         if (!empty($item['name'])) {
                             if ($item['name'] == Member::DEFAULT_PROPERTIES_MOBILE) {
                                 $telItem = $item;
                             }
                             $properties[] = $item;
                         } else {
                             $memberTag[] = $item['tags'];
                         }
                     }
                     $tels[] = $telItem;
                     $memberMessage = ["properties" => $properties, "tags" => $memberTag, "cardId" => $cardId, "origin" => $origin, "cardNumber" => empty($cardNumber) ? 0 : $cardNumber, "location" => ["country" => "", "province" => "", "city" => "", "detail" => ""], "avatar" => Yii::$app->params['defaultAvatar'], "score" => 0, "totalScore" => 0, "socials" => [], "qrcodeViewed" => false, "isDisabled" => false, "totalScoreAfterZeroed" => 0, "accountId" => new MongoId($args['accountId']), "cardProvideTime" => new \MongoDate()];
                     $memberInsert[] = $memberMessage;
                 }
                 // batch insert member.
                 $insertMemberResult = Member::batchInsert($memberInsert);
                 if ($insertMemberResult) {
                     ResqueUtil::log(['ok' => 'Batch insert member is success', 'data' => $memberInsert]);
                 } else {
                     ResqueUtil::log(['error' => 'Batch insert member is fail', 'data' => $memberInsert]);
                     $redis->Hset($cacheSetLackProperties, $wrongKey, self::MEMBER_NO_DEFAULT_PROPERTIES);
                 }
                 //create qrcode.
                 foreach ($tels as $param) {
                     $member = Member::findOne(['properties' => ['$elemMatch' => ['name' => $param['name'], 'value' => $param['value']]], 'accountId' => new MongoId($args['accountId'])]);
                     Member::webhookEvent($member);
                     MemberLogs::record($member->_id, new MongoId($args['accountId']), MemberLogs::OPERATION_VIEWED);
                     if (!defined('KLP') || !KLP) {
                         $a = Yii::$app->qrcode->create($args['hostInfo'], Qrcode::TYPE_MEMBER, $member->_id, new MongoId($args['accountId']));
                     }
                     Member::birthdayScore($member);
                 }
             }
             // update member.
             if (count($keyUpdate) > 0) {
                 for ($rowIndex = 0; $rowIndex < $totalUpdate; $rowIndex++) {
                     $memberKey = unserialize($keyUpdate[$rowIndex]);
                     $memberProperty = $memberKey[0];
                     $condition = [];
                     $updateData = [];
                     $memberUpdate = [];
                     $memberTag = [];
                     foreach ($memberProperty as $member) {
                         if (!empty($member['name'])) {
                             if ($member['name'] == Member::DEFAULT_PROPERTIES_MOBILE) {
                                 $condition = ["properties.value" => $member['value']];
                             }
                             $memberUpdate[] = $member;
                         } else {
                             $memberTag[] = $member['tags'];
                         }
                     }
                     $updateData[] = ["properties" => $memberUpdate, "tags" => $memberTag];
                     $updateMemberResult = Member::updateAll(['$set' => $updateData[0]], $condition);
                     if ($updateMemberResult) {
                         ResqueUtil::log(['ok' => 'Update member is success', 'data' => $memberInsert]);
                     } else {
                         ResqueUtil::log(['error' => 'Update member is fail', 'data' => $memberInsert]);
                         $redis->Hset($cacheSetLackProperties, $wrongKey, self::MEMBER_NO_DEFAULT_PROPERTIES);
                     }
                 }
             }
             break;
         default:
             break;
     }
 }