From 799c95bd75b3d554cdb826e5281db663acddc01c Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 26 Nov 2021 17:13:31 +0800 Subject: [PATCH] 1 --- .../controller/BaseAuthedController.class.php | 169 +++++++++--------- webapp/models/Bag.php | 126 +++++++++++++ 2 files changed, 210 insertions(+), 85 deletions(-) create mode 100644 webapp/models/Bag.php diff --git a/webapp/controller/BaseAuthedController.class.php b/webapp/controller/BaseAuthedController.class.php index 94dce8f1..976f8cff 100644 --- a/webapp/controller/BaseAuthedController.class.php +++ b/webapp/controller/BaseAuthedController.class.php @@ -1,6 +1,9 @@ _getSelfMysql(), - 'bag', - array( - 'id', - 'num' - ), - array( - 'id' => $itemId, - 'accountid' => $this->_getAccountId() - )); - if (empty($row)) { - return null; - } - return array( - 'item_id' => $row['id'], - 'item_num' => $row['num'] - ); - } - public function _getItemCount($itemId, $userInfo) { switch ($itemId) { case V_ITEM_GOLD: { - return $userInfo['coin_num']; + return $userInfo['gold']; } break; case V_ITEM_DIAMOND: { - return $userInfo['diamond_num']; + return $userInfo['diamond']; + } + break; + default: + { + return Bag::getItemCount($itemId); + } + break; + } + return 0; + } + + public function _isVirtualItem($itemId) + { + return in_array($itemId, array(V_ITEM_GOLD, V_ITEM_DIAMOND)); + } + + public function _addVirtualItem($itemId, $itemNum) + { + if ($itemNum <= 0){ + return; + } + switch ($itemId) { + case V_ITEM_GOLD: + { + $this->_updateUserInfo(array( + 'gold' => function () use($itemNum) { + return "gold + ${itemNum}"; + } + )); + } + break; + case V_ITEM_DIAMOND: + { + $this->_updateUserInfo(array( + 'diamond' => function () use($itemNum) { + return "diamond + ${itemNum}"; + } + )); } break; default: { - $row = SqlHelper::selectOne - ($this->_getSelfMysql(), - 'bag', - array( - 'id', - 'num' - ), - array( - 'id' => $itemId, - 'accountid' => $this->_getAccountId() - )); - return $row ? $row['num'] : 0; } break; } } - public function _isVirtualItem($itemId) + public function _decVirtualItem($itemId, $itemNum) { - $isVirtualItem = false; - return $isVirtualItem; + if ($itemNum <= 0){ + return; + } + switch ($itemId) { + case V_ITEM_GOLD: + { + $this->_updateUserInfo(array( + 'gold' => function () use($itemNum) { + return "GREATEST(0, gold - ${itemNum})"; + } + )); + } + break; + case V_ITEM_DIAMOND: + { + $this->_updateUserInfo(array( + 'diamond' => function () use($itemNum) { + return "GREATEST(0, diamond - ${itemNum})"; + } + )); + } + break; + default: + { + } + break; + } } - public function _addItem($items) + public function _addItems($items) { foreach ($items as $item) { if ($this->_isVirtualItem($item['item_id'])) { - if ($item['item_id'] == $this->goldID) { - $this->_addGold($item['item_num']); - } - else if ($item['item_id'] == $this->lotteryID){ - $this->addLottery($item['item_num']); - } + $this->_addVirtualItem($item['item_id'], $item['item_num']); } else { - SqlHelper::upsert - ($this->_getSelfMysql(), - 't_bag', - array( - 'accountid' => $this->_getAccountId(), - 'item_id' => $item['item_id'] - ), - array( - 'item_num' => function () use($item) { return "item_num + {$item['item_num']}";}, - 'modifytime' => $this->_getNowTime() - ), - array( - 'accountid' => $this->_getAccountId(), - 'item_id' => $item['item_id'], - 'item_num' => 1, - 'item_state' => 0, - 'try_expire_at' => 0, - 'createtime' => $this->_getNowTime(), - 'modifytime' => $this->_getNowTime() - ) - ); + Bag::addItem($item['item_id'], $item['item_num']); } } } + public function _addTryUsingItems($items) + { + foreach ($items as $item) { + Bag::addTryUsingItem($item['item_id'], $item['item_num'], $item['try_using_time']); + } + } + public function _decItems($items) { foreach ($items as $item) { if ($this->_isVirtualItem($item['item_id'])) { - // if ($item['item_id'] == VIRTUAL_ITEM_GOLD_ID) { - // $this->_decGold($item['item_num']); - // } + $this->_decVirtualItem($item['item_id'], $item['item_num']); } else { - SqlHelper::update - ($this->_getSelfMysql(), - 'bag', - array( - 'accountid' => $this->_getAccountId(), - 'id' => $item['item_id'] - ), - array( - 'num' => function () use($item) { - return "CASE WHEN num < {$item['item_num']} THEN 0 ELSE num - {$item['item_num']} END"; - }, - 'modify_time' => $this->_getNowTime() - ) - ); + Bag::decItem($item['item_id'], $item['item_num']); } } } @@ -235,7 +234,7 @@ class BaseAuthedController extends BaseController { public function _hasEnoughItems($items, &$lackItem) { $userInfo = $this->_getUserInfo(array( - 'golda', + 'gold', 'diamond', )); foreach ($items as $item) { diff --git a/webapp/models/Bag.php b/webapp/models/Bag.php new file mode 100644 index 00000000..b12fa038 --- /dev/null +++ b/webapp/models/Bag.php @@ -0,0 +1,126 @@ +_getSelfMysql(), + 't_bag', + array( + 'accountid' => myself()->_getAccountId(), + 'item_id' => $itemId, + ) + ); + return $row; + } + + public static function toDto($row) + { + return array( + 'item_id' => $row['item_id'], + 'item_num' => $row['item_num'], + 'item_state' => $row['item_state'], + 'try_expire_at' => $row['try_expire_at'], + ); + } + + public static function getItemCount($itemId) + { + $itemDb = self::find($itemId); + return $itemDb ? $itemDb['item_count'] : 0; + } + + public static function addItem($itemId, $itemNum) + { + if (myself()->_isVirtualItem($itemId)) { + return; + } + $itemMeta = mt\Item::get($itemId); + if (!$itemMeta) { + return; + } + SqlHelper::upsert + (myself()->_getSelfMysql(), + 't_bag', + array( + 'accountid' => myself()->_getAccountId(), + 'item_id' => $itemId + ), + array( + 'item_num' => function () use($item) { return "item_num + {$itemNum}";}, + 'modifytime' => myself()->_getNowTime(), + 'item_state' => self::GETED_STATE, + ), + array( + 'accountid' => myself()->_getAccountId(), + 'item_id' => $itemId, + 'item_num' => $itemNum, + 'item_state' => self::GETED_STATE, + 'try_expire_at' => 0, + 'createtime' => myself()->_getNowTime(), + 'modifytime' => myself()->_getNowTime() + ) + ); + } + + public static function addTryUsingItem($itemId, $itemNum, $tryUsingTime) + { + if (myself()->_isVirtualItem($itemId)) { + return; + } + $itemMeta = mt\Item::get($itemId); + if (!$itemMeta) { + return; + } + SqlHelper::upsert + (myself()->_getSelfMysql(), + 't_bag', + array( + 'accountid' => myself()->_getAccountId(), + 'item_id' => $itemId + ), + array( + ), + array( + 'accountid' => myself()->_getAccountId(), + 'item_id' => $itemId, + 'item_num' => $itemNum, + 'item_state' => self::TRY_USING_STATE, + 'try_expire_at' => myself()->_getNowTime() + $tryUsingTime, + 'createtime' => myself()->_getNowTime(), + 'modifytime' => myself()->_getNowTime() + ) + ); + } + + public static function decItem($itemId, $itemNum) + { + SqlHelper::update + (myself()->_getSelfMysql(), + 't_bag', + array( + 'accountid' => myself()->_getAccountId(), + 'item_id' => $itemId, + 'item_state' => self::GETED_STATE, + ), + array( + 'item_num' => function () use($itemNum) { + return "GREATEST(0, item_num - ${itemNum})"; + }, + 'modifytime' => myself()->_getNowTime(), + ) + ); + } + +}