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

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="submit" value="Перевести кредиты">
</form>
<span class="wrap">Комиссия: <?= Config::$bank_comission * 100 ?>% от переводимой суммы, но не менее 1 кр.</span>
<span class="wrap">Комиссия: <?= Config::$bank_commission * 100 ?>% от переводимой суммы, но не менее 1 кр.</span>
</div>
<?php endif; ?>

View File

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