/** * 获取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; }
/** * 新增用户 * @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(); } }