Более явное документирование функций банка, логгирование получения средств.

This commit is contained in:
lopar 2020-10-28 01:41:42 +02:00
parent 4251027063
commit 8a9bb64b53
3 changed files with 32 additions and 28 deletions

View File

@ -87,6 +87,6 @@ Template::header('Банк');
<input type="hidden" name="action" value="sendMoney"> <input type="hidden" name="action" value="sendMoney">
<input type="submit" value="Перевести кредиты"> <input type="submit" value="Перевести кредиты">
</form> </form>
<span class="wrap">Комиссия: <?= Config::$bank_comission * 100 ?>% от переводимой суммы, но не менее 1 кр.</span> <span class="wrap">Комиссия: <?= Config::$bank_commission * 100 ?>% от переводимой суммы, но не менее 1 кр.</span>
</div> </div>
<?php endif; ?> <?php endif; ?>

View File

@ -37,58 +37,60 @@ class Bank
} }
/** /**
* Комиссия: self::BANK_COMISSION от переводимой суммы, но не менее 1 кр. * Комиссия: процент от переводимой суммы, но не менее 1 кр. Задаётся в config.php.
* *
* @param $amount * @param int $amount сумма.
* *
* @return int * @return int
*/ */
private function bankComission($amount) private function bankCommission(int $amount):int
{ {
$bankComission = round($amount * Config::$bank_comission); $bankCommission = round($amount * Config::$bank_commission);
if ($bankComission < 1) { if ($bankCommission < 1) {
return 1; return 1;
} else { } else {
return (int)$bankComission; return (int)$bankCommission;
} }
} }
/** /**
* Пишем банковское событие в лог в БД * Пишем банковское событие в лог в БД
* *
* @param int $receiverId - user_id получателя * @param int $receiverId ID получателя.
* @param int $amount * @param int $amount сумма.
* @param string $operationType * @param string $operationType тип банковской операции.
* @param int $senderId * @param int $senderId ID отправителя (ID игрока, если не указано иное).
* *
* @return void
* @throws \Krugozor\Database\Mysql\Exception * @throws \Krugozor\Database\Mysql\Exception
*/ */
private function bankLogs(int $receiverId, int $amount, string $operationType, int $senderId = 0) private function bankLogs(int $receiverId, int $amount, string $operationType, int $senderId = 0):void
{ {
if (!$senderId) { if (!$senderId) {
$senderId = $this->user_id; $senderId = $this->user_id;
} }
$text = ''; $text = '';
if ($operationType === "sendMoney") { if ($operationType == "sendMoney") {
$text = self::LOG_SEND . " Комиссия: " . $this->bankComission($amount); $text = self::LOG_SEND . " Комиссия: " . $this->bankCommission($amount);
} elseif ($operationType === "depositMoney") { } elseif ($operationType == "depositMoney") {
$receiverId = $this->user_id; $receiverId = $this->user_id;
$text = self::LOG_DEPOSIT; $text = self::LOG_DEPOSIT;
} elseif ($operationType === "withdrawMoney") { } elseif ($operationType == "withdrawMoney") {
$receiverId = $this->user_id; $receiverId = $this->user_id;
$text = self::LOG_WITHDRAW . " Комиссия: " . $this->bankComission($amount); $text = self::LOG_WITHDRAW . " Комиссия: " . $this->bankCommission($amount);
} elseif ($operationType == "receiveMoney") {
$text = self::LOG_RECEIVE;
} }
db::c()->query('INSERT INTO `bank_logs` (sender_id, receiver_id, amount_result, type, text) db::c()->query('INSERT INTO `bank_logs` (sender_id, receiver_id, amount_result, type, text)
VALUES (?i, ?i, ?i, "?s", "?s")', $senderId, $receiverId, $amount, $operationType, $text); VALUES (?i, ?i, ?i, "?s", "?s")', $senderId, $receiverId, $amount, $operationType, $text);
} }
/** /**
* Перевод денег между бансковскими счетами игроков с банковской комиссией. * Перевод денег между банковскими счетами игроков с банковской комиссией.
* *
* @param int $receiver * @param int $receiver ID получателя.
* @param int $amount * @param int $amount сумма.
* *
* @return void * @return void
* @throws \Krugozor\Database\Mysql\Exception * @throws \Krugozor\Database\Mysql\Exception
@ -102,7 +104,7 @@ class Bank
if (!$receiverWallet) { if (!$receiverWallet) {
throw new Exception(self::ERROR_NO_BANK_ACCOUNT); throw new Exception(self::ERROR_NO_BANK_ACCOUNT);
} }
$amountWithComission = $amount + $this->bankComission($amount); $amountWithComission = $amount + $this->bankCommission($amount);
if ($amountWithComission > $this->money) { if ($amountWithComission > $this->money) {
throw new Exception(self::ERROR_NO_MONEY_IN_BANK_ACCOUNT); throw new Exception(self::ERROR_NO_MONEY_IN_BANK_ACCOUNT);
} }
@ -119,7 +121,7 @@ class Bank
/** /**
* Пополнение банковского счёта игрока * Пополнение банковского счёта игрока
* *
* @param int $amount - сумма * @param int $amount сумма.
* *
* @return void * @return void
* @throws \Krugozor\Database\Mysql\Exception * @throws \Krugozor\Database\Mysql\Exception
@ -146,7 +148,7 @@ class Bank
/** /**
* Снятие денег с банковского счёта игрока с банковской комиссией. * Снятие денег с банковского счёта игрока с банковской комиссией.
* *
* @param int $amount - сумма * @param int $amount сумма.
* *
* @return void * @return void
* @throws \Krugozor\Database\Mysql\Exception * @throws \Krugozor\Database\Mysql\Exception
@ -156,7 +158,7 @@ class Bank
if ($amount <= 0) { if ($amount <= 0) {
throw new Exception(self::ERROR_WRONG_AMOUNT); throw new Exception(self::ERROR_WRONG_AMOUNT);
} }
$amountWithComission = $amount + $this->bankComission($amount); $amountWithComission = $amount + $this->bankCommission($amount);
if ($this->money < $amountWithComission) { if ($this->money < $amountWithComission) {
throw new Exception(self::ERROR_NO_MONEY_IN_BANK_ACCOUNT); throw new Exception(self::ERROR_NO_MONEY_IN_BANK_ACCOUNT);
} }
@ -177,6 +179,7 @@ class Bank
* @param int $user_id ID пользователя. * @param int $user_id ID пользователя.
* @param string $operationType Тип операции. По умолчанию пусто. Если ввести, система запишет событие в банковский лог. * @param string $operationType Тип операции. По умолчанию пусто. Если ввести, система запишет событие в банковский лог.
* *
* @return void
* @throws \Krugozor\Database\Mysql\Exception * @throws \Krugozor\Database\Mysql\Exception
*/ */
public static function setBankMoney(int $amount, int $user_id, string $operationType = ''): void public static function setBankMoney(int $amount, int $user_id, string $operationType = ''): void
@ -190,9 +193,10 @@ class Bank
/** /**
* Установить количество денег на руках. * Установить количество денег на руках.
* *
* @param int $amount - сумма. * @param int $amount сумма.
* @param int $user_id - ID пользователя. * @param int $user_id ID пользователя.
* *
* @return void
* @throws \Krugozor\Database\Mysql\Exception * @throws \Krugozor\Database\Mysql\Exception
*/ */
public static function setWalletMoney(int $amount, int $user_id): void public static function setWalletMoney(int $amount, int $user_id): void

View File

@ -66,7 +66,7 @@ trait Config
public static $clan_register_cost = 10000; //стоимость public static $clan_register_cost = 10000; //стоимость
public static $clan_register_lock = 1; //запрет на регистрацию public static $clan_register_lock = 1; //запрет на регистрацию
//Банк //Банк
public static $bank_comission = 0.05; //5% public static $bank_commission = 0.05; //5%
// Старая таблица опыта // Старая таблица опыта
public static $exptable = [ public static $exptable = [
0 => [0, 0, 0, 0, 0, 20], 0 => [0, 0, 0, 0, 0, 20],