This commit is contained in:
aozhiwei 2021-11-26 17:13:31 +08:00
parent fedb66fae1
commit 799c95bd75
2 changed files with 210 additions and 85 deletions

View File

@ -1,6 +1,9 @@
<?php <?php
require_once('models/Bag.php');
use phpcommon\SqlHelper; use phpcommon\SqlHelper;
use models\Bag;
class BaseAuthedController extends BaseController { class BaseAuthedController extends BaseController {
@ -110,124 +113,120 @@ class BaseAuthedController extends BaseController {
); );
} }
public function _getItem($itemId)
{
$row = SqlHelper::selectOne
($this->_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) public function _getItemCount($itemId, $userInfo)
{ {
switch ($itemId) { switch ($itemId) {
case V_ITEM_GOLD: case V_ITEM_GOLD:
{ {
return $userInfo['coin_num']; return $userInfo['gold'];
} }
break; break;
case V_ITEM_DIAMOND: 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; break;
default: default:
{ {
$row = SqlHelper::selectOne
($this->_getSelfMysql(),
'bag',
array(
'id',
'num'
),
array(
'id' => $itemId,
'accountid' => $this->_getAccountId()
));
return $row ? $row['num'] : 0;
} }
break; break;
} }
} }
public function _isVirtualItem($itemId) public function _decVirtualItem($itemId, $itemNum)
{ {
$isVirtualItem = false; if ($itemNum <= 0){
return $isVirtualItem; 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) { foreach ($items as $item) {
if ($this->_isVirtualItem($item['item_id'])) { if ($this->_isVirtualItem($item['item_id'])) {
if ($item['item_id'] == $this->goldID) { $this->_addVirtualItem($item['item_id'], $item['item_num']);
$this->_addGold($item['item_num']);
}
else if ($item['item_id'] == $this->lotteryID){
$this->addLottery($item['item_num']);
}
} else { } else {
SqlHelper::upsert Bag::addItem($item['item_id'], $item['item_num']);
($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()
)
);
} }
} }
} }
public function _addTryUsingItems($items)
{
foreach ($items as $item) {
Bag::addTryUsingItem($item['item_id'], $item['item_num'], $item['try_using_time']);
}
}
public function _decItems($items) public function _decItems($items)
{ {
foreach ($items as $item) { foreach ($items as $item) {
if ($this->_isVirtualItem($item['item_id'])) { if ($this->_isVirtualItem($item['item_id'])) {
// if ($item['item_id'] == VIRTUAL_ITEM_GOLD_ID) { $this->_decVirtualItem($item['item_id'], $item['item_num']);
// $this->_decGold($item['item_num']);
// }
} else { } else {
SqlHelper::update Bag::decItem($item['item_id'], $item['item_num']);
($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()
)
);
} }
} }
} }
@ -235,7 +234,7 @@ class BaseAuthedController extends BaseController {
public function _hasEnoughItems($items, &$lackItem) public function _hasEnoughItems($items, &$lackItem)
{ {
$userInfo = $this->_getUserInfo(array( $userInfo = $this->_getUserInfo(array(
'golda', 'gold',
'diamond', 'diamond',
)); ));
foreach ($items as $item) { foreach ($items as $item) {

126
webapp/models/Bag.php Normal file
View File

@ -0,0 +1,126 @@
<?php
namespace models;
require_once('mt/Item.php');
use mt;
use phpcommon\SqlHelper;
class Bag extends BaseModel {
const GETED_STATE = 0;
const TRY_USING_STATE = 1;
public static function find($itemId)
{
$row = SqlHelper::ormSelectOne(
myself()->_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(),
)
);
}
}