一键添加

This commit is contained in:
hujiabin 2022-08-19 16:03:52 +08:00
parent 1c38233e4e
commit 9ed05aa0a3
3 changed files with 98 additions and 3 deletions

View File

@ -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'],
], '芯片信息']
]
},

View File

@ -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<count($data);$i++){
$data[$i]['cost'] = \services\FormulaService::getChipCumulativeCost($data[$i]['chip_grade']);
if ($i<20){
$cost += $data[$i]['cost'];
array_push($chip_param,$data[$i]);
}else{
array_push($chip_param_out,$data[$i]);
}
}
if ($cost>$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);
}
}
}

View File

@ -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;
}