/** * 通过主键,删除一条记录 * @param integer $memberId * @return integer */ public function removeByPk($memberId) { if (($memberId = (int) $memberId) <= 0) { return false; } $portalTblName = $this->getTblprefix() . TableNames::getPortal(); $membersTblName = $this->getTblprefix() . TableNames::getMembers(); $socialTblName = $this->getTblprefix() . TableNames::getSocial(); $sql = 'SELECT `p`.*, `m`.*, `s`.* FROM `' . $portalTblName . '` AS `p` LEFT JOIN `' . $membersTblName . '` AS `m` ON `p`.`member_id` = `m`.`member_id` LEFT JOIN `' . $socialTblName . '` AS `s` ON `m`.`member_id` = `s`.`member_id` WHERE `m`.`member_id` = ?'; $row = $this->fetchAssoc($sql, $memberId); if (!$row || !is_array($row) || !isset($row['member_id'])) { return false; } Log::info(sprintf('Portal backup before remove: %s', serialize($row)), 0, __METHOD__); $commands = array(array('sql' => 'DELETE FROM `' . $portalTblName . '` WHERE `member_id` = ?', 'params' => $memberId), array('sql' => 'DELETE FROM `' . $membersTblName . '` WHERE `member_id` = ?', 'params' => $memberId), array('sql' => 'DELETE FROM `' . $socialTblName . '` WHERE `member_id` = ?', 'params' => $memberId)); return $this->doTransaction($commands); }
/** * 操作积分 * @param string $opType increase:增加、reduce:扣除、freeze:冻结、unfreeze:解冻、reduce_freeze:扣除冻结积分 * @param integer $memberId * @param integer $points * @param string $source * @param string $remarks * @param integer $creatorId * @return boolean */ public function opPoints($opType, $memberId, $points, $source, $remarks, $creatorId) { if ($opType !== 'increase' && $opType !== 'reduce' && $opType !== 'freeze' && $opType !== 'unfreeze' && $opType !== 'reduce_freeze') { return false; } if (($memberId = (int) $memberId) <= 0) { return false; } if (($points = (int) $points) <= 0) { return false; } if (($source = trim($source)) === '') { return false; } $tableName = $this->getTblprefix() . TableNames::getMembers(); $logTblName = $this->getTblprefix() . TableNames::getPointsLogs(); $sql = 'SELECT `points`, `points_freeze` FROM `' . $tableName . '` WHERE `member_id` = ?'; $row = $this->fetch($sql, $memberId); if (!$row || !is_array($row) || !isset($row['points'])) { return false; } $beforePoints = (int) $row['points']; $beforeFreezePoints = (int) $row['points_freeze']; $freezePoints = 0; if ($opType === 'freeze' || $opType === 'unfreeze' || $opType === 'reduce_freeze') { $freezePoints = $points; $points = 0; } $afterFreezePoints = $opType === 'freeze' ? $beforeFreezePoints + $freezePoints : $beforeFreezePoints - $freezePoints; switch (true) { case $opType === 'increase': $afterPoints = $beforePoints + $points; break; case $opType === 'reduce': $afterPoints = $beforePoints - $points; break; case $opType === 'freeze': $afterPoints = $beforePoints - $freezePoints; break; case $opType === 'unfreeze': $afterPoints = $beforePoints + $freezePoints; break; case $opType === 'reduce_freeze': default: $afterPoints = $beforePoints; break; } if ($afterPoints < 0 || $afterFreezePoints < 0) { return false; } $attributes = array('member_id' => $memberId, 'op_type' => $opType, 'before_points' => $beforePoints, 'after_points' => $afterPoints, 'points' => $points, 'before_freeze_points' => $beforeFreezePoints, 'after_freeze_points' => $afterFreezePoints, 'freeze_points' => $freezePoints, 'source' => $source, 'remarks' => $remarks, 'creator_id' => (int) $creatorId, 'dt_created' => date('Y-m-d H:i:s')); $commands = array(array('sql' => 'UPDATE `' . $tableName . '` SET `points` = ?, `points_freeze` = ? WHERE `member_id` = ?', 'params' => array('points' => $afterPoints, 'points_freeze' => $afterFreezePoints, 'member_id' => $memberId)), array('sql' => $this->getCommandBuilder()->createInsert($logTblName, array_keys($attributes)), 'params' => $attributes)); return $this->doTransaction($commands); }