/**
  * 获取campaign
  * @param int $campaignId
  * @return array
  */
 static function getById($campaignId)
 {
     $redis = RedisFactory::open()->connect($campaignId);
     $key = sprintf(self::$REDIS_KEYS['getById'], $campaignId);
     $result = $redis->get($key)->getResult();
     if ($result === false) {
         // 初始化
         $db = DatabaseFactory::open();
         $result = $db->createCommand("SELECT * FROM g_campaign WHERE id=:id")->findFirst(array(':id' => $campaignId));
         if (empty($result)) {
             $result = array();
         }
         $redis->set($key, $result);
     }
     return $result;
 }
    /**
     * 已领取总数(redis重启后,通过command从DB导入到redis)
     * @param int $campaignId
     * @param int $userId
     */
    static function receivedTotal($campaignId, $userId)
    {
        $redis = self::getRedis()->connect($userId);
        $keyReceiveByUserId = sprintf(self::$REDIS_KEYS['receiveByUserId'], $campaignId, $userId);
        $keyReceiveByUserIdIsInit = sprintf(self::$REDIS_KEYS['receiveByUserIdIsInit'], $campaignId, $userId);
        $result = $redis->multi()->scard($keyReceiveByUserId)->get($keyReceiveByUserIdIsInit)->exec()->getResult();
        list($total, $isInit) = $result;
        if ($isInit == false) {
            // 初始化该用户的领取信息
            $db = DatabaseFactory::open();
            $rows = $db->createCommand('
									SELECT giftbagCode FROM g_campaign_mapping_giftbag
									WHERE campaignId=:campaignId AND userId=:userId
							')->findAll(array(':campaignId' => $campaignId, ':userId' => $userId));
            if ($rows) {
                // 同步到领取列表
                foreach ($rows as $row) {
                    $redis->multiChunk('sadd', $keyReceiveByUserId, $row['giftbagCode']);
                }
                $redis->multiChunkFlush();
            }
            // 获取最新的总数
            $result = $redis->multi()->scard($keyReceiveByUserId)->set($keyReceiveByUserIdIsInit, true)->exec()->getResult();
            list($total, $isInit) = $result;
        }
        return $total;
    }
示例#3
0
 /**
  * 新增用户
  * @param array $userData
  * @return int insertId
  */
 static function add($userData)
 {
     $salt = StringUtil::random(10);
     // 初始化
     $db = DatabaseFactory::open();
     $result = $db->createCommand("\n\t\t\tINSERT INTO `g_user` (username,mobile,password,salt)\n\t\t\t\tVALUES (:username,:mobile,:password,:salt)\n\t\t")->execute(array(':username' => $userData['username'], ':mobile' => $userData['mobile'], ':password' => self::encodePassword($userData['password'], $salt), ':salt' => $salt));
     if ($result) {
         $userId = $db->getInsertId();
         $redis = self::getRedis();
         $redis->connect($userId)->del(sprintf(self::$REDIS_KEYS['getById'], $userId));
         $redis->connect($userData['username'])->del(sprintf(self::$REDIS_KEYS['getByUsername'], $userData['username']));
         $redis->connect($userData['mobile'])->del(sprintf(self::$REDIS_KEYS['getByMobile'], $userData['mobile']));
         return $userId;
     } else {
         return false;
     }
 }
    /**
     * 批量插入 giftbag code - campaign - user的mapping的最终操作
     */
    private function insertMappingFlush()
    {
        if (empty($this->mappingValues) == false) {
            $db = DatabaseFactory::open();
            $db->createCommand('
				INSERT INTO g_campaign_mapping_giftbag (campaignId,userId, giftbagCode)
				VALUES (' . implode('),(', $this->mappingValues) . ')
			')->execute();
            $this->mappingValues = array();
        }
    }