From 9ed05aa0a3e92857bf0224bad1da21a1ce2afc8b Mon Sep 17 00:00:00 2001 From: hujiabin Date: Fri, 19 Aug 2022 16:03:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=80=E9=94=AE=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/Chip.py | 16 +++++ webapp/controller/ChipController.class.php | 83 +++++++++++++++++++++- webapp/models/Chip.php | 2 +- 3 files changed, 98 insertions(+), 3 deletions(-) diff --git a/doc/Chip.py b/doc/Chip.py index a77aca76..595cfaa8 100644 --- a/doc/Chip.py +++ b/doc/Chip.py @@ -178,6 +178,22 @@ class Chip(object): 'response': [ _common.RspHead(), ] + },{ + 'name': 'aKeySynthetic', + 'desc': '芯片合成一键添加', + 'group': 'Chip', + 'url': 'webapp/index.php?c=Chip&a=aKeySynthetic', + 'params': [ + _common.ReqHead(), + ['token_id', '', '源芯片token id'], + ], + 'response': [ + _common.RspHead(), + ['!data', [ + ['cost', '', '所添加芯片的总累计价值'], + ['token_ids', '', '芯片token id 例如:token_id1 token_id2 token_id3'], + ], '芯片信息'] + ] }, diff --git a/webapp/controller/ChipController.class.php b/webapp/controller/ChipController.class.php index 3f38f241..89468983 100644 --- a/webapp/controller/ChipController.class.php +++ b/webapp/controller/ChipController.class.php @@ -57,7 +57,7 @@ class ChipController extends BaseAuthedController $chipList = Chip::all($type); $chipDtoList = array(); foreach ($chipList as $item) { - if ($item['supper_state']==0 && $item['inlay_state']==0){ + if ($item['supper_state']==0 && $item['inlay_state']==0 && $item['state']==0){ array_push($chipDtoList, Chip::toDto($item)); } } @@ -226,7 +226,7 @@ class ChipController extends BaseAuthedController return; } $chip_main = Chip::getChipByTokenId($token_id_main); - $upgrade_cost = \services\FormulaService::getChipUpgradeCost($chip_main['chip_grade']+1); + $upgrade_cost = \services\FormulaService::getChipUpgradeCost($chip_main['chip_grade']+1); if ($upgrade_cost==0){ $this->_rspErr(1, 'Error in calculation formula'); return; @@ -296,11 +296,76 @@ class ChipController extends BaseAuthedController } public function aKeySynthetic(){ + $token_id = trim(getReqVal('token_id', 0)); + if (! $token_id) { + $this->_rspErr(1, 'Please enter instructions'); + return; + } + $chip = Chip::getChipByTokenId($token_id); + $upgrade_cost =\services\FormulaService::getChipUpgradeCost($chip['chip_grade']+1); //芯片升星价值 + $chipList = Chip::all(1); + $chipDtoList = array(); + foreach ($chipList as $item) { + if ($item['supper_state']==0 && $item['inlay_state']==0 && $item['state']==0 && $item['token_id'] != $token_id && $item['chip_grade'] <= $chip['chip_grade']){ + array_push($chipDtoList, $item); + } + }; + $data = $this->_orderByChip($chipDtoList,'asc'); + $chip_param = []; + $chip_param_out = []; + if (count($data) > 20) { + $cost = 0; + for ($i=0;$i$upgrade_cost){ + $diff_cost = $cost - $upgrade_cost; + foreach ($chip_param as $k=>$value){ + if ($diff_cost>$value['cost']){ + $diff_cost -= $value['cost']; + unset($chip_param[$k]); + } + } + }else{ + $chip_param = $this->_bestFun($upgrade_cost,$chip_param,$chip_param_out); + } + + }else{ + $cost = 0; + foreach ($data as $k=>$val){ + $data[$k]['cost'] = \services\FormulaService::getChipCumulativeCost($data[$k]['chip_grade']); + $cost += $data[$k]['cost']; + } + if ($cost > $upgrade_cost){ + $diff_cost = $cost - $upgrade_cost; + foreach ($data as $k=>$value){ + if ($diff_cost>$value['cost']){ + $diff_cost -= $value['cost']; + unset($data[$k]); + } + } + } + $chip_param = $data; + } + $cumulative_cost = 0; + $token_id_arr = []; + foreach ($chip_param as $value){ + $cumulative_cost += $value['cost']; + array_push($token_id_arr,$value['token_id']); + } + $this->_rspData(['data'=>['cost'=>$cumulative_cost,'token_ids'=>implode(' ',$token_id_arr)]]); } + public function test(){ $chip = Chip::getChipByTokenId(1660629357); print_r($chip); @@ -461,4 +526,18 @@ class ChipController extends BaseAuthedController Chip::update($chip['token_id'],['lucky_temporary'=>$lucky_pro-$lucky, 'chip_grade'=>$new_grade]); } + private function _bestFun($upgrade_cost,$chip_param,$chip_param_out){ + $cost = 0; + foreach ($chip_param as $v){ + $cost += $v['cost']; + }; + if ($cost>$upgrade_cost){ + return $chip_param; + }else{ + array_shift($chip_param); + array_push($chip_param,array_shift($chip_param_out)); + return $this->_bestFun($upgrade_cost,$chip_param,$chip_param_out); + } + } + } \ No newline at end of file diff --git a/webapp/models/Chip.php b/webapp/models/Chip.php index d593da8e..ce02e3f2 100644 --- a/webapp/models/Chip.php +++ b/webapp/models/Chip.php @@ -103,7 +103,7 @@ class Chip extends BaseModel public static function internalAddItem($conn, $itemId, $itemNum, $accountId, $tokenId) { - $grade = rand(1,15);//随机一个等级 + $grade = rand(1,4);//随机一个等级 if (myself()->_isVirtualItem($itemId)) { return; }