aozhiwei cb954f34a7 1
2022-01-13 16:40:27 +08:00

165 lines
4.7 KiB
PHP

<?php
namespace models;
require_once('mt/Item.php');
require_once('mt/ChipQuality.php');
require_once('mt/AttrHelper.php');
use mt;
use phpcommon\SqlHelper;
class Bag extends BaseModel {
public static function find($itemId)
{
$row = SqlHelper::ormSelectOne(
myself()->_getSelfMysql(),
't_bag',
array(
'account_id' => myself()->_getAccountId(),
'item_id' => $itemId,
)
);
return $row;
}
public static function findByType($type, $subType = null)
{
foreach (self::all() as $itemDto) {
if ($itemDto['item_num'] > 0) {
$itemMeta = mt\Item::get($itemDto['item_id']);
if ($itemMeta['type'] == $type) {
if (is_null($subType)) {
return $itemDto;
} else {
if ($itemMeta['sub_type'] == $subType) {
return $itemDto;
}
}
}
}
}
return null;
}
public static function toDto($row)
{
return array(
'item_uniid' => $row['idx'],
'item_id' => $row['item_id'],
'item_num' => $row['item_num'],
'attr' => emptyReplace(json_decode($row['rand_attr'], true), array()),
);
}
public static function all()
{
$itemList = array();
SqlHelper::ormSelect(
myself()->_getSelfMysql(),
't_bag',
array(
'account_id' => myself()->_getAccountId()
),
function ($row) use(&$itemList) {
if ($row['item_num'] > 0) {
array_push($itemList, $row);
}
}
);
return $itemList;
}
public static function getAttrs()
{
$items = self::all();
$attrs = array();
foreach ($items as $item) {
$dbAttrs = emptyReplace(json_decode($item['rand_attr'], true), array());
mt\AttrHelper::mergeAttr($attrs, $dbAttrs);
}
return $attrs;
}
public static function getItemCount($itemId)
{
$itemDb = self::find($itemId);
return $itemDb ? $itemDb['item_num'] : 0;
}
public static function addItem($itemId, $itemNum)
{
if (myself()->_isVirtualItem($itemId)) {
return;
}
if ($itemNum <= 0) {
return;
}
$itemMeta = mt\Item::get($itemId);
if (!$itemMeta) {
return;
}
if ($itemMeta['cannot_stack']) {
$randAttr = array();
if (mt\Item::isRandAttrItem($itemMeta)) {
$qualityMeta = mt\ChipQuality::getByQuality($itemMeta['quality']);
if ($qualityMeta) {
$randAttr = mt\ChipQuality::getRandAttr($qualityMeta);
}
}
SqlHelper::insert
(myself()->_getSelfMysql(),
't_bag',
array(
'account_id' => myself()->_getAccountId(),
'item_id' => $itemId,
'item_num' => 1,
'rand_attr' => json_encode($randAttr),
'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime()
)
);
} else {
SqlHelper::upsert
(myself()->_getSelfMysql(),
't_bag',
array(
'account_id' => myself()->_getAccountId(),
'item_id' => $itemId
),
array(
'item_num' => function () use($itemNum) { return "item_num + {$itemNum}";},
'modifytime' => myself()->_getNowTime(),
),
array(
'account_id' => myself()->_getAccountId(),
'item_id' => $itemId,
'item_num' => $itemNum,
'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime()
)
);
}
}
public static function decItem($itemId, $itemNum)
{
SqlHelper::update
(myself()->_getSelfMysql(),
't_bag',
array(
'account_id' => myself()->_getAccountId(),
'item_id' => $itemId,
),
array(
'item_num' => function () use($itemNum) {
return "GREATEST(0, item_num - ${itemNum})";
},
'modifytime' => myself()->_getNowTime(),
)
);
}
}