diff --git a/doc/Hero.py b/doc/Hero.py index 490807a9..8df64e77 100644 --- a/doc/Hero.py +++ b/doc/Hero.py @@ -111,6 +111,35 @@ class Hero(object): 'desc': '升阶', 'group': 'Hero', 'url': 'webapp/index.php?c=Hero&a=upgradeQuality', + 'params': [ + _common.ReqHead(), + ['trans_id', 0, 'transId'], + ['token_id1', 0, '英雄token'], + ['token_id2', 0, '耗材英雄token'], + ], + 'response': [ + _common.RspHead(), + ] + }, + { + 'name': 'receiveUpgradeQuality', + 'desc': '领取升阶', + 'group': 'Hero', + 'url': 'webapp/index.php?c=Hero&a=receiveUpgradeQuality', + 'params': [ + _common.ReqHead(), + ['trans_id', 0, 'transId'], + ['token_id', 0, '英雄token'], + ], + 'response': [ + _common.RspHead(), + ] + }, + { + 'name': 'upgradeQualityOld', + 'desc': '升阶', + 'group': 'Hero', + 'url': 'webapp/index.php?c=Hero&a=upgradeQualityOld', 'params': [ _common.ReqHead(), ['hero_uniid', 0, '英雄唯一id'], diff --git a/doc/_common.py b/doc/_common.py index e9ee62ae..a407aaf0 100644 --- a/doc/_common.py +++ b/doc/_common.py @@ -278,8 +278,10 @@ class QualityingHero(object): def __init__(self): self.fields = [ - ['info', Hero(), '英雄信息'], - ['countdown', 0, '倒计时'], + ['trans_id', 0, 'transId'], + ['state', 0, '0升阶中,1可领取'], + ['heroInfo', Hero(), '升阶英雄信息'], + ['costHeroInfo', Hero(), '材料英雄信息'], ] class HeroSkin(object): diff --git a/sql/gamedb.sql b/sql/gamedb.sql index 6b0aebc0..0ce8a7bb 100644 --- a/sql/gamedb.sql +++ b/sql/gamedb.sql @@ -832,3 +832,23 @@ CREATE TABLE `t_nft_up_event` ( UNIQUE KEY `trans_id` (`trans_id`) ) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; /*!40101 SET character_set_client = @saved_cs_client */; + + +DROP TABLE IF EXISTS `t_nft_up_receive`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `t_nft_up_receive` ( + `idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id', + `account_id` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id(channel + "_" + gameid + "_" + openid)', + `trans_id` varchar(255) NOT NULL DEFAULT '' COMMENT '事务id', + `token_id1` varchar(60) NOT NULL DEFAULT '' COMMENT 'token_id1', + `token_id2` varchar(60) NOT NULL DEFAULT '' COMMENT 'token_id2', + `state` int(11) NOT NULL DEFAULT '0' COMMENT '0进阶中,1可领取', + `token_type` int(11) NOT NULL DEFAULT '0' COMMENT '1英雄,2枪械', + `from_data` int(11) NOT NULL DEFAULT '0' COMMENT '0本地,1链', + `createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间', + `modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间', + PRIMARY KEY (`idx`), + UNIQUE KEY `trans_id` (`trans_id`) +) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; +/*!40101 SET character_set_client = @saved_cs_client */; diff --git a/webapp/controller/CallbackController.class.php b/webapp/controller/CallbackController.class.php index f790640e..9e919730 100644 --- a/webapp/controller/CallbackController.class.php +++ b/webapp/controller/CallbackController.class.php @@ -14,6 +14,7 @@ require_once('models/Hero.php'); require_once('models/Gun.php'); require_once('models/Chip.php'); require_once('models/DynData.php'); +require_once('models/NftUpReceive.php'); require_once('phpcommon/bchelper.php'); @@ -27,6 +28,7 @@ use models\Hero; use models\Gun; use models\Chip; use models\DynData; +use models\NftUpReceive; class CallbackController extends BaseController { private $accountId; @@ -150,8 +152,9 @@ class CallbackController extends BaseController { public function heroUpgradeQuality(){ $transId = getReqVal('trans_id', '0'); - $tokenId = getReqVal('token_id', '0'); - if (!$transId || !$tokenId){ + $tokenId1 = getReqVal('token_id1', '0'); + $tokenId2 = getReqVal('token_id2', '0'); + if (!$transId || !$tokenId1){ myself()->_rspErr(1, 'param error'); return; } @@ -163,7 +166,7 @@ class CallbackController extends BaseController { myself()->_getMysql($this->accountId), 't_hero', array( - 'token_id' => $tokenId, + 'token_id' => $tokenId1, ) ); if ( !$heroDb ){ @@ -172,7 +175,7 @@ class CallbackController extends BaseController { } $nextQualityMeta = mt\HeroQuality::getByQuality($heroDb['quality']+1); if (! $nextQualityMeta){ - $this->_rspErr(1, 'quality is full'); + myself()->_rspOk(); return; } @@ -184,27 +187,35 @@ class CallbackController extends BaseController { ( myself()->_getMysql($this->accountId), 't_hero', array( - 'token_id' => $tokenId, + 'token_id' => $tokenId1, ), array( 'hero_tili' => $heroDb['hero_tili']+($nextHeroTili-$heroTili), 'skill_points' => $heroDb['skill_points'] + $nextQualityMeta['skill_point'], 'quality' => $heroDb['quality']+1, 'advanced_count' => $heroDb['advanced_count'] + 1, - 'lock_type' => 0, - 'unlock_time' => 0, +// 'lock_type' => 0, +// 'unlock_time' => 0, 'labour' => 0, ) ); NftUpEvent::add($this->accountId, array( 'trans_id' => $transId, - 'token_id' => $tokenId, + 'token_id' => $tokenId1, 'value' => 1, 'createtime' => myself()->_getNowTime(), 'modifytime' => myself()->_getNowTime(), ) ); + $param = array( + 'trans_id'=>$transId, + 'token_id1'=>$tokenId1, + 'token_id2'=>$tokenId2, + 'token_type'=>1, + ); + NftUpReceive::upsert($this->accountId,$param); + if ($heroDb['quality'] + 1 > $this->_getDynDataV(TN_HERO_MAX_QUALITY, 0)) { $this->_setDynDataV(TN_HERO_MAX_QUALITY, 0, $heroDb['quality'] + 1); } @@ -237,7 +248,7 @@ class CallbackController extends BaseController { } $nextQualityMeta = mt\GunQuality::getByQuality($gunDb['quality']+1); if (!$nextQualityMeta) { - $this->_rspErr(1, 'quality is full'); + myself()->_rspOk(); return; } $gunLucky = \services\FormulaService::Weapon_Advanced_Lucky_Value($gunDb['quality']); diff --git a/webapp/controller/HeroController.class.php b/webapp/controller/HeroController.class.php index 61cf192f..af739469 100644 --- a/webapp/controller/HeroController.class.php +++ b/webapp/controller/HeroController.class.php @@ -15,6 +15,7 @@ require_once('models/Hero.php'); require_once('models/Bag.php'); require_once('models/HeroSkin.php'); require_once('models/Chip.php'); +require_once('models/NftUpReceive.php'); require_once('services/AwardService.php'); require_once('services/PropertyChgService.php'); @@ -28,6 +29,7 @@ use models\Hero; use models\Bag; use models\HeroSkin; use models\Chip; +use models\NftUpReceive; use services\LogService; class HeroController extends BaseAuthedController { @@ -205,22 +207,46 @@ class HeroController extends BaseAuthedController { public function getUpgradeQualityList() { - $infos = array(); - for ($i = 0; $i < kMaxHeroUpQualityNum; ++$i) { - $heroUniId = $this->_getV(TN_HERO_QUALITY_UP, $i); - $info = null; - if ($heroUniId) { - $heroDb = Hero::find($heroUniId); - if ($heroDb) { - $heroDto = Hero::toDto($heroDb); - $info = array( - 'info' => $heroDto, - 'countdown' => $heroDto['unlock_lefttime'] - ); +// $infos = array(); +// for ($i = 0; $i < kMaxHeroUpQualityNum; ++$i) { +// $heroUniId = $this->_getV(TN_HERO_QUALITY_UP, $i); +// $info = null; +// if ($heroUniId) { +// $heroDb = Hero::find($heroUniId); +// if ($heroDb) { +// $heroDto = Hero::toDto($heroDb); +// $info = array( +// 'info' => $heroDto, +// 'countdown' => $heroDto['unlock_lefttime'] +// ); +// } +// } +// array_push($infos, $info); +// } +// $this->_rspData(array( +// 'infos' => $infos +// )); + $list = NftUpReceive::all(myself()->_getAccountId(),1); + $infos = array(); + foreach ($list as $value){ + if ($this->_getNowTime() - $value['createtime'] < 24*3600 && !$value['from_data']){ + $hero = Hero::findByTokenId2($value['token_id1']); + $costHero = Hero::findByTokenId2($value['token_id2']); + $heroDto = null; + $costHeroDto = null; + if ($hero && $costHero){ + $heroDto = Hero::toDto($hero); + $costHeroDto = Hero::toDto($costHero); } + $info = array( + 'trans_id'=>$value['trans_id'], + 'state'=>$value['state'], + 'heroInfo'=>$heroDto, + 'costHeroInfo'=>$costHeroDto, + ); + array_push($infos,$info); } - array_push($infos, $info); - } + } $this->_rspData(array( 'infos' => $infos )); @@ -617,7 +643,7 @@ class HeroController extends BaseAuthedController { )); } - public function upgradeQuality() + public function upgradeQualityOld() { $costHeroUniId = getReqVal('cost_hero_uniid', 0); $heroUniId = getReqVal('hero_uniid', 0); @@ -821,5 +847,61 @@ class HeroController extends BaseAuthedController { } + public function upgradeQuality(){ + $tokenId1 = getReqVal('token_id1', ''); + $tokenId2 = getReqVal('token_id2', ''); + $transId = getReqVal('trans_id', ''); + if (!$tokenId1 || !$tokenId2 || !$transId){ + $this->_rspErr(1, ' error param'); + return; + } + if (NftUpReceive::find(myself()->_getAccountId(),$transId)){ + $this->_rspErr(1, ' error param trans_id '); + return; + } + Hero::updateByTokenId($tokenId1, + array( + 'lock_type' => Hero::QUALITY_LOCK, + 'unlock_time' => $this->_getNowTime() + 3600 * 24, + ) + ); + Hero::updateByTokenId($tokenId2, + array( + 'lock_type' => Hero::COST_LOCK, + 'unlock_time' => $this->_getNowTime() + 3600 * 24, + ) + ); + NftUpReceive::add( + myself()->_getAccountId(), + array( + 'account_id' => myself()->_getAccountId(), + 'trans_id' => $transId, + 'token_id1' => $tokenId1, + 'token_id2' => $tokenId2, + 'state' => 0, + 'token_type' => 1, + 'from_data' => 0, + 'createtime' => $this->_getNowTime(), + 'modifytime' => $this->_getNowTime() + ) + ); + myself()->_rspOk(); + } + public function receiveUpgradeQuality(){ + $transId = getReqVal('trans_id', ''); + $tokenId = getReqVal('token_id', ''); + if (!$tokenId || !$transId){ + $this->_rspErr(1, ' error param'); + return; + } + Hero::updateByTokenId($tokenId, + array( + 'lock_type' => Hero::NO_LOCK, + 'unlock_time' => 0, + ) + ); + NftUpReceive::setAccountIdNull(myself()->_getAccountId(),$transId); + myself()->_rspOk(); + } } diff --git a/webapp/models/Hero.php b/webapp/models/Hero.php index b0c65b37..af360733 100644 --- a/webapp/models/Hero.php +++ b/webapp/models/Hero.php @@ -63,6 +63,18 @@ class Hero extends BaseModel { return $row; } + public static function findByTokenId2($tokenId) + { + $row = SqlHelper::ormSelectOne( + myself()->_getMysql($tokenId), + 't_hero', + array( + 'token_id' => $tokenId, + ) + ); + return $row; + } + private static function internalFind($accountId, $heroUniId) { $row = SqlHelper::ormSelectOne( @@ -174,14 +186,14 @@ class Hero extends BaseModel { $lockType = 0; $unlockTime = 0; - /*if ($row['lock_type'] != 0 && $row['unlock_time'] - myself()->_getNowTime() > 0) { - $lockType = $row['lock_type']; - $unlockTime = $row['unlock_time']; - }*/ - { + if ($row['lock_type'] != 0 && $row['unlock_time'] - myself()->_getNowTime() > 0) { $lockType = $row['lock_type']; $unlockTime = $row['unlock_time']; } +// { +// $lockType = $row['lock_type']; +// $unlockTime = $row['unlock_time']; +// } $qualityMeta = mt\HeroQuality::getByQuality($row['quality']); $todayGetGold = $row['today_get_gold']; diff --git a/webapp/models/NftUpReceive.php b/webapp/models/NftUpReceive.php new file mode 100644 index 00000000..a7478d0c --- /dev/null +++ b/webapp/models/NftUpReceive.php @@ -0,0 +1,81 @@ +_getMysql($accountId), + 't_nft_up_receive', + array( + 'trans_id' => $transId, + ) + ); + return $row; + } + + public static function add($accountId,$fieldKv){ + return SqlHelper::insert( + myself()->_getMysql($accountId), + 't_nft_up_receive', + $fieldKv + ); + } + + public static function all($accountId,$tokenType) + { + $row = SqlHelper::ormSelect( + myself()->_getMysql($accountId), + 't_nft_up_receive', + array( + 'account_id' => $accountId, + 'token_type' => $tokenType, + ) + ); + return $row; + } + + public static function upsert($accountId,$data){ + SqlHelper::upsert( + myself()->_getMysql($accountId), + 't_nft_up_receive', + array( + 'trans_id' => $data['trans_id'] + ), + array( + 'state' => 1, + 'modifytime' => myself()->_getNowTime() + ), + array( + 'account_id' => $accountId, + 'trans_id' => $data['trans_id'], + 'token_id1' => $data['token_id1'], + 'token_id2' => $data['token_id2'], + 'state' => 0, + 'token_type' => $data['token_type'], + 'from_data' => 1, + 'createtime' => myself()->_getNowTime(), + 'modifytime' => myself()->_getNowTime() + ) + ); + } + + public static function setAccountIdNull($accountId,$transId){ + SqlHelper::update( + myself()->_getMysql($accountId), + 't_nft_up_receive', + array( + 'trans_id' => $transId, + ), + array( + 'account_id' => '', + ) + ); + } + +} \ No newline at end of file