Skip to content

Commit

Permalink
Fix:修复无法财富兑换的问题
Browse files Browse the repository at this point in the history
  • Loading branch information
zhuchunshu committed Aug 6, 2023
1 parent 467afaf commit 98711dd
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 31 deletions.
Expand Up @@ -23,13 +23,13 @@
</div>

<div class="col-6 col-lg-3">
<label for="" class="form-label">{{get_options('wealth_credits_name', '金币')}}</label>
<label for="" class="form-label">{{get_options('wealth_credits_name', '积分')}}</label>
<input class="form-control" type="number" name="options[credits]" value="{{$user->options->credits?:0}}">
</div>

<div class="col-6 col-lg-3">
<label for="" class="form-label">{{get_options('wealth_golds_name', '金币')}}</label>
<input class="form-control" type="number" name="options[golds]" value="{{$user->options->golds?:0}}">
<input class="form-control" type="number" min="1" max="999999999" name="options[golds]" value="{{$user->options->golds?:0}}">
</div>

<div class="col-6 col-lg-3">
Expand Down
71 changes: 42 additions & 29 deletions app/Plugins/User/src/Controller/ExChangeApiController.php
@@ -1,6 +1,6 @@
<?php

declare (strict_types=1);
declare(strict_types=1);
/**
* This file is part of zhuchunshu.
* @link https://github.com/zhuchunshu
Expand All @@ -18,41 +18,44 @@
use Hyperf\HttpServer\Annotation\Middleware;
use Hyperf\HttpServer\Annotation\PostMapping;
use Hyperf\Utils\Arr;

#[Middleware(LoginMiddleware::class)]
#[Controller(prefix: '/api/user/exchange')]
class ExChangeApiController
{
// 余额转金币

#[PostMapping('moneyTo_golds')]
public function moneyTo_golds() : array
public function moneyTo_golds(): array
{
$data = request()->input('data');
$captcha = request()->input('captcha');
if (!$data || !$captcha) {
if (! $data || ! $captcha) {
return Json_Api(403, false, ['msg' => '请求参数不足']);
}
if (!captcha()->check($captcha)) {
if (! captcha()->check($captcha)) {
return Json_Api(403, false, ['msg' => '验证码错误']);
}
$data = de_stringify(request()->input('data'));
if (!Arr::has($data, 'moneyTo_golds_num')) {
if (! Arr::has($data, 'moneyTo_golds_num')) {
return Json_Api(403, false, ['msg' => '请求参数不足']);
}
// 兑换的金币数量
$moneyTo_golds_num = $data['moneyTo_golds_num'];
if (!is_numeric($moneyTo_golds_num) || $moneyTo_golds_num <= 0) {
if (! is_numeric($moneyTo_golds_num) || $moneyTo_golds_num <= 0) {
return Json_Api(403, false, ['msg' => '请求参数格式有误']);
}
$moneyTo_golds_num = (float) $moneyTo_golds_num;
$user = User::query()->with('Options')->find(auth()->id());
// 最多能兑换的金币数量
$dc = \Hyperf\Stringable\Str::after($user->Options->money, '.');
$dc = \Hyperf\Stringable\Str::after((string) $user->Options->money, '.');
$dc = \Hyperf\Stringable\Str::length($dc);
$max = intval($user->Options->money * get_options('wealth_how_many_money_to_golds', '1'));
$max = floatval($user->Options->money * get_options('wealth_how_many_money_to_golds', '1'));
if ($moneyTo_golds_num > $max) {
return Json_Api(403, false, ['msg' => '超出最大兑换限制']);
}
// 不能花的钱
$_money = round($user->Options->money - intval($user->Options->money * get_options('wealth_how_many_money_to_golds', '1')) / get_options('wealth_how_many_money_to_golds', '1'), $dc);
$_money = round($user->Options->money - floatval($user->Options->money * get_options('wealth_how_many_money_to_golds', '1')) / get_options('wealth_how_many_money_to_golds', '1'), $dc);
// 找钱
$give_change = (string) ($max - $moneyTo_golds_num) / get_options('wealth_how_many_money_to_golds', '1') + $_money;
// 扣费
Expand All @@ -61,42 +64,46 @@ public function moneyTo_golds() : array
$options_id = auth()->data()->options_id;
$option = UsersOption::query()->find($options_id);
PayAmountRecord::query()->create(['original' => $option->money, 'cash' => round($option->money - $deduction, $dc), 'user_id' => auth()->id(), 'remark' => '兑换' . get_options('wealth_golds_name', '金币')]);
UsersOption::query()->where('id', $options_id)->update(['money' => round($option->money - $deduction, $dc), 'golds' => intval($option->golds + $moneyTo_golds_num)]);
$option->setMoneyAttribute(round($option->money - $deduction, $dc));
$option->setGoldsAttribute(floatval($option->golds + $moneyTo_golds_num));
$option->save();
return Json_Api(201, true, ['msg' => '兑换成功!']);
}

// 金币转积分

#[PostMapping('goldsTo_credit')]
public function goldsTo_credit() : array
public function goldsTo_credit(): array
{
$data = request()->input('data');
$captcha = request()->input('captcha');
if (!$data || !$captcha) {
if (! $data || ! $captcha) {
return Json_Api(403, false, ['msg' => '请求参数不足']);
}
if (!captcha()->check($captcha)) {
if (! captcha()->check($captcha)) {
return Json_Api(403, false, ['msg' => '验证码错误']);
}
$data = de_stringify(request()->input('data'));
if (!Arr::has($data, 'goldsTo_credit_num')) {
if (! Arr::has($data, 'goldsTo_credit_num')) {
return Json_Api(403, false, ['msg' => '请求参数不足']);
}
// 兑换的金币数量
$goldsTo_credit_num = $data['goldsTo_credit_num'];
if (!is_numeric($goldsTo_credit_num) || $goldsTo_credit_num <= 0) {
if (! is_numeric($goldsTo_credit_num) || $goldsTo_credit_num <= 0) {
return Json_Api(403, false, ['msg' => '请求参数格式有误']);
}
$user = User::query()->with('Options')->find(auth()->id());
// 兑换比例
$proportion = get_options('wealth_how_many_golds_to_credit', 10);
// 最多能兑换的金币数量
$max = intval($user->Options->golds * $proportion);
$dc = \Hyperf\Stringable\Str::after($user->Options->golds, '.');
$max = floatval($user->Options->golds * $proportion);
$dc = \Hyperf\Stringable\Str::after((string) $user->Options->golds, '.');
$dc = \Hyperf\Stringable\Str::length($dc);
if ($goldsTo_credit_num > $max) {
return Json_Api(403, false, ['msg' => '超出最大兑换限制']);
}
// 不能花的钱
$_money = round($user->Options->golds - intval($user->Options->golds * $proportion) / $proportion, $dc);
$_money = round($user->Options->golds - floatval($user->Options->golds * $proportion) / $proportion, $dc);
// 找钱
$give_change = (string) ($max - $goldsTo_credit_num) / $proportion + $_money;
// 扣费
Expand All @@ -105,42 +112,46 @@ public function goldsTo_credit() : array
$options_id = auth()->data()->options_id;
$option = UsersOption::query()->find($options_id);
PayAmountRecord::query()->create(['original' => '【' . get_options('wealth_golds_name', '金币') . '】' . $option->golds, 'cash' => '【' . get_options('wealth_golds_name', '金币') . '】' . round($option->golds - $deduction, $dc), 'user_id' => auth()->id(), 'remark' => '兑换' . get_options('wealth_credit_name', '积分')]);
UsersOption::query()->where('id', $options_id)->update(['golds' => round($option->golds - $deduction, $dc), 'credits' => intval($option->credits + $goldsTo_credit_num)]);
$option->setGoldsAttribute(round($option->golds - $deduction, $dc));
$option->setCreditsAttribute(floatval($option->credits + $goldsTo_credit_num));
$option->save();
return Json_Api(201, true, ['msg' => '兑换成功!']);
}

// 余额转积分

#[PostMapping('moneyTo_credit')]
public function moneyTo_credit() : array
public function moneyTo_credit(): array
{
$data = request()->input('data');
$captcha = request()->input('captcha');
if (!$data || !$captcha) {
if (! $data || ! $captcha) {
return Json_Api(403, false, ['msg' => '请求参数不足']);
}
if (!captcha()->check($captcha)) {
if (! captcha()->check($captcha)) {
return Json_Api(403, false, ['msg' => '验证码错误']);
}
$data = de_stringify(request()->input('data'));
if (!Arr::has($data, 'moneyTo_credit_num')) {
if (! Arr::has($data, 'moneyTo_credit_num')) {
return Json_Api(403, false, ['msg' => '请求参数不足']);
}
// 兑换的金币数量
$moneyTo_credit_num = $data['moneyTo_credit_num'];
if (!is_numeric($moneyTo_credit_num) || $moneyTo_credit_num <= 0) {
if (! is_numeric($moneyTo_credit_num) || $moneyTo_credit_num <= 0) {
return Json_Api(403, false, ['msg' => '请求参数格式有误']);
}
$user = User::query()->with('Options')->find(auth()->id());
// 兑换比例
$proportion = get_options('wealth_how_many_money_to_credit', get_options('wealth_how_many_money_to_golds', '1') * get_options('wealth_how_many_golds_to_credit', 10));
// 最多能兑换的金币数量
$max = intval($user->Options->money * $proportion);
$dc = \Hyperf\Stringable\Str::after($user->Options->money, '.');
$max = floatval($user->Options->money * $proportion);
$dc = \Hyperf\Stringable\Str::after((string) $user->Options->money, '.');
$dc = \Hyperf\Stringable\Str::length($dc);
if ($moneyTo_credit_num > $max) {
return Json_Api(403, false, ['msg' => '超出最大兑换限制']);
}
// 不能花的钱
$_money = round($user->Options->money - intval($user->Options->money * $proportion) / $proportion, $dc);
$_money = round($user->Options->money - floatval($user->Options->money * $proportion) / $proportion, $dc);
// 找钱
$give_change = (string) ($max - $moneyTo_credit_num) / $proportion + $_money;
// 扣费
Expand All @@ -149,7 +160,9 @@ public function moneyTo_credit() : array
$options_id = auth()->data()->options_id;
$option = UsersOption::query()->find($options_id);
PayAmountRecord::query()->create(['original' => $option->money, 'cash' => round($option->money - $deduction, $dc), 'user_id' => auth()->id(), 'remark' => '兑换' . get_options('wealth_credit_name', '积分')]);
UsersOption::query()->where('id', $options_id)->update(['money' => round($option->money - $deduction, $dc), 'credits' => intval($option->credits + $moneyTo_credit_num)]);
$option->setMoneyAttribute(round($option->money - $deduction, $dc));
$option->setCreditsAttribute(floatval($option->credits + $moneyTo_credit_num));
$option->save();
return Json_Api(201, true, ['msg' => '兑换成功!']);
}
}
}

0 comments on commit 98711dd

Please sign in to comment.