game2006api/webapp/models/HeroSkin.php
2023-09-04 11:25:41 +08:00

225 lines
6.2 KiB
PHP

<?php
namespace models;
require_once('mt/Hero.php');
require_once('services/NftService.php');
use mt;
use services\NftService;
use phpcommon\SqlHelper;
class HeroSkin extends BaseModel {
const GETED_STATE = 0;
const FREE_STATE = 1;
// public static function find($skinId)
// {
// $row = SqlHelper::ormSelectOne(
// myself()->_getSelfMysql(),
// 't_hero_skin',
// array(
// 'account_id' => myself()->_getAccountId(),
// 'skin_id' => $skinId
// )
// );
// return $row;
// }
public static function find($skinUniId)
{
return self::internalFind(myself()->_getAccountId(), myself()->_getAddress(), $skinUniId);
}
// public static function findBx($accountId,$skinUniId)
// {
// return self::internalFind($accountId, User::findUserAddress($accountId), $skinUniId);
// }
public static function findByAccountId($accountId, $skinUniId)
{
return self::internalFind($accountId, User::findUserAddress($accountId), $skinUniId);
}
// public static function takeonSkin($skinId,$heroId){
// $row = self::findBx($heroId);
// SqlHelper::update(
// myself()->_getSelfMysql(),
// 't_hero_skin',
// array(
// 'account_id' => myself()->_getAccountId(),
// 'skin_id' => $row['skin_id']
// ),
// array(
// 'hero_id'=>0
// )
// );
// SqlHelper::upsert(
// myself()->_getSelfMysql(),
// 't_hero_skin',
// array(
// 'account_id' => myself()->_getAccountId(),
// 'skin_id' => $skinId
// ),
// array(
// 'hero_id'=>$heroId
// ),
// array(
// 'account_id' => myself()->_getAccountId(),
// 'skin_id' => $skinId,
// 'skin_state' => 0,
// 'get_from' => 0,
// 'consume_num' => 0,
// 'try_expire_at' => 0,
// 'hero_id' => $heroId,
// 'createtime' => myself()->_getNowTime(),
// 'modifytime' => myself()->_getNowTime()
// )
// );
// }
public static function getSkinList($cb){
SqlHelper::ormSelect(
myself()->_getSelfMysql(),
't_hero_skin',
array(
'account_id' => myself()->_getAccountId()
),
function ($row) use($cb) {
$cb($row);
}
);
foreach (NftService::getHeroSkin(myself()->_getAddress()) as $nftDb) {
if (! $nftDb['deleted']){
$row = SqlHelper::ormSelectOne(
myself()->_getSelfMysql(),
't_hero_skin',
array(
'token_id' => $nftDb['token_id'],
)
);
if ($row) {
$cb($row);
}
}
}
}
public static function toDto($meta)
{
$row = self::find($meta['id']);
$is_have = 0;
$use_state = 0;
if ($row || $meta['isdefaultskin'] == 1){
$is_have = 1;
}
if ($row && $row['hero_id']){
$use_state = 1;
}
return array(
'skin_id'=>$meta['id'],
'is_have' => $is_have,
'use_state' => $use_state,
);
}
// public static function addSkin($itemMeta)
// {
// $heroId = 0;
// if ($itemMeta['isdefaultskin'] == 1){
// $heroId = $itemMeta['playerid'];
// }
// SqlHelper::upsert(
// myself()->_getSelfMysql(),
// 't_hero_skin',
// array(
// 'account_id' => myself()->_getAccountId(),
// 'skin_id' => $itemMeta['id']
// ),
// array(),
// array(
// 'account_id' => myself()->_getAccountId(),
// 'skin_id' => $itemMeta['id'],
// 'skin_state' => 0,
// 'get_from' => 0,
// 'consume_num' => 0,
// 'try_expire_at' => 0,
// 'hero_id' => $heroId,
// 'createtime' => myself()->_getNowTime(),
// 'modifytime' => myself()->_getNowTime()
// )
// );
// }
private static function internalFind($accountId, $address, $skinUniId)
{
$row = SqlHelper::ormSelectOne(
myself()->_getMysql($accountId),
't_hero_skin',
array(
'idx' => $skinUniId,
)
);
if ($row) {
$row['skin_uniid'] = $row['idx'];
if ($row['account_id'] != $accountId) {
$openId = $address;
if (!NftService::isHeroSkinOwner($openId, $row['token_id'])) {
$row = null;
}
}
}
return $row;
}
public static function addFreeHeroSkin($heroSkinMeta)
{
return self::internalAddHeroSkin(
myself()->_getSelfMysql(),
$heroSkinMeta,
myself()->_getAccountId(),
null,
self::FREE_STATE);
}
public static function addHeroSkin($heroSkinMeta)
{
return self::internalAddHeroSkin(
myself()->_getSelfMysql(),
$heroSkinMeta,
myself()->_getAccountId(),
null,
self::GETED_STATE);
}
private static function internalAddHeroSkin($conn, $heroSkinMeta, $accountId, $tokenId,$state)
{
$fieldsKv = array(
'skin_id' => $heroSkinMeta['id'],
'skin_state' => $state,
'get_from' => 0,
'consume_num' => 0,
'try_expire_at' => 0,
'hero_id' => $heroSkinMeta['playerid'],
'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime()
);
if ($accountId) {
$fieldsKv['account_id'] = $accountId;
}
if ($tokenId) {
$fieldsKv['token_id'] = $tokenId;
}
SqlHelper::insert(
$conn,
't_hero_skin',
$fieldsKv
);
}
}