_getMysql($accountId); if (UserWalletRecord::find($conn, $txHash)) { myself()->_rspOk(); return; } UserWalletRecord::add($conn, $txHash, $dir, $account, $type, $value); if (!in_array($dir, array(0, 1))){ myself()->_rspErr(1, ''); return; } if (!in_array($type, array(1, 2))){ myself()->_rspErr(2, ''); return; } if (strlen($value) <= 18){ myself()->_rspErr(4, ''); return; } $value = substr($value, 0, -18); if ($value < 0 || empty($value)) { myself()->_rspErr(3, ''); return; } $gold = 0; $diamond = 0; if ($type == 1) { $gold = $value; } else { $diamond = $value; } if ($dir == 1) { $gold = -$gold; $diamond = -$diamond; } $userRow = SqlHelper::ormSelect( $conn, 't_user', array( 'account_id' => $accountId, )); if ($userRow) { SqlHelper::update( $conn, 't_user', array( 'account_id' => $accountId, ), array( 'gold' => function() use($gold) { return "CASE WHEN gold + ${gold} < 0 THEN 0 ELSE gold + ${gold} END"; }, 'diamond' => function() use($diamond) { return "CASE WHEN diamond + ${diamond} < 0 THEN 0 ELSE diamond + ${diamond} END"; }, )); } else { SqlHelper::upsert( $conn, 't_user_wallet_offline', array( 'account_id' => $accountId, ), array( 'gold' => function() use($gold) { return "CASE WHEN gold + ${gold} < 0 THEN 0 ELSE gold + ${gold} END"; }, 'diamond' => function() use($diamond) { return "CASE WHEN diamond + ${diamond} < 0 THEN 0 ELSE diamond + ${diamond} END"; }, 'modifytime' => myself()->_getNowTime() ), array( 'account_id' => $accountId, 'gold' => $gold, 'diamond' => $diamond, 'createtime' => myself()->_getNowTime(), 'modifytime' => myself()->_getNowTime() )); } UserWalletRecord::update($conn, $txHash, array( 'state' => 1, 'modifytime' => myself()->_getNowTime() )); myself()->_rspOk(); } }