mirror of
https://github.com/v2board/v2board.git
synced 2025-02-11 16:00:27 +08:00
add balance payment
This commit is contained in:
parent
03e0b5d087
commit
111d2720bd
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Console\Commands;
|
namespace App\Console\Commands;
|
||||||
|
|
||||||
|
use App\Services\OrderService;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
use App\Models\Order;
|
use App\Models\Order;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
@ -42,14 +43,14 @@ class CheckOrder extends Command
|
|||||||
*/
|
*/
|
||||||
public function handle()
|
public function handle()
|
||||||
{
|
{
|
||||||
$order = Order::get();
|
$orders = Order::get();
|
||||||
foreach ($order as $item) {
|
foreach ($orders as $item) {
|
||||||
switch ($item->status) {
|
switch ($item->status) {
|
||||||
// cancel
|
// cancel
|
||||||
case 0:
|
case 0:
|
||||||
if (strtotime($item->created_at) <= (time() - 1800)) {
|
if (strtotime($item->created_at) <= (time() - 1800)) {
|
||||||
$item->status = 2;
|
$orderService = new OrderService($item);
|
||||||
$item->save();
|
$orderService->cancel();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -4,6 +4,7 @@ namespace App\Http\Controllers\User;
|
|||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Http\Requests\User\OrderSave;
|
use App\Http\Requests\User\OrderSave;
|
||||||
|
use App\Services\UserService;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Cache;
|
use Illuminate\Support\Facades\Cache;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
@ -162,8 +163,7 @@ class OrderController extends Controller
|
|||||||
$order->cycle = $request->input('cycle');
|
$order->cycle = $request->input('cycle');
|
||||||
$order->trade_no = Helper::guid();
|
$order->trade_no = Helper::guid();
|
||||||
$order->total_amount = $plan[$request->input('cycle')];
|
$order->total_amount = $plan[$request->input('cycle')];
|
||||||
// discount start
|
// coupon start
|
||||||
// coupon
|
|
||||||
if (isset($coupon)) {
|
if (isset($coupon)) {
|
||||||
switch ($coupon->type) {
|
switch ($coupon->type) {
|
||||||
case 1:
|
case 1:
|
||||||
@ -181,13 +181,13 @@ class OrderController extends Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// user
|
// coupon complete
|
||||||
|
// discount start
|
||||||
if ($user->discount) {
|
if ($user->discount) {
|
||||||
$order->discount_amount = $order->discount_amount + ($order->total_amount * ($user->discount / 100));
|
$order->discount_amount = $order->discount_amount + ($order->total_amount * ($user->discount / 100));
|
||||||
}
|
}
|
||||||
// discount complete
|
|
||||||
$order->total_amount = $order->total_amount - $order->discount_amount;
|
|
||||||
// discount end
|
// discount end
|
||||||
|
$order->total_amount = $order->total_amount - $order->discount_amount;
|
||||||
// renew and change subscribe process
|
// renew and change subscribe process
|
||||||
if ($user->plan_id !== NULL && $order->plan_id !== $user->plan_id) {
|
if ($user->plan_id !== NULL && $order->plan_id !== $user->plan_id) {
|
||||||
if (!(int)config('v2board.plan_change_enable', 1)) abort(500, '目前不允许更改订阅,请联系客服或提交工单');
|
if (!(int)config('v2board.plan_change_enable', 1)) abort(500, '目前不允许更改订阅,请联系客服或提交工单');
|
||||||
@ -217,6 +217,27 @@ class OrderController extends Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// use balance
|
||||||
|
if ($user->balance && $order->total_amount > 0) {
|
||||||
|
$remainingBalance = $user->balance - $order->total_amount;
|
||||||
|
$userService = new UserService();
|
||||||
|
if ($remainingBalance > 0) {
|
||||||
|
if (!$userService->addBalance($order->user_id, $order->total_amount)) {
|
||||||
|
DB::rollBack();
|
||||||
|
abort(500, '余额不足');
|
||||||
|
}
|
||||||
|
$order->balance_amount = $order->total_amount;
|
||||||
|
$order->total_amount = 0;
|
||||||
|
} else {
|
||||||
|
if (!$userService->addBalance($order->user_id, $user->balance)) {
|
||||||
|
DB::rollBack();
|
||||||
|
abort(500, '余额不足');
|
||||||
|
}
|
||||||
|
$order->balance_amount = $user->balance;
|
||||||
|
$order->total_amount = $order->total_amount - $user->balance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!$order->save()) {
|
if (!$order->save()) {
|
||||||
DB::rollback();
|
DB::rollback();
|
||||||
abort(500, '订单创建失败');
|
abort(500, '订单创建失败');
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
namespace App\Services;
|
namespace App\Services;
|
||||||
|
|
||||||
use App\Models\Order;
|
use App\Models\Order;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
class OrderService
|
class OrderService
|
||||||
{
|
{
|
||||||
@ -13,8 +14,20 @@ class OrderService
|
|||||||
$this->order = $order;
|
$this->order = $order;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function cancel()
|
public function cancel():void
|
||||||
{
|
{
|
||||||
|
$order = $this->order;
|
||||||
|
DB::beginTransaction();
|
||||||
|
$order->status = 2;
|
||||||
|
if (!$order->save()) {
|
||||||
|
DB::rollBack();
|
||||||
|
}
|
||||||
|
if ($order->balance_amount) {
|
||||||
|
$userService = new UserService();
|
||||||
|
if (!$userService->addBalance($order->user_id, $order->balance_amount)) {
|
||||||
|
DB::rollBack();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DB::commit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -47,4 +47,20 @@ class UserService
|
|||||||
{
|
{
|
||||||
return User::all();
|
return User::all();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function addBalance(int $userId, int $balance):bool
|
||||||
|
{
|
||||||
|
$user = User::find($userId);
|
||||||
|
if (!$user) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$user->balance = $user->balance + $balance;
|
||||||
|
if ($user->balance < 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!$user->save()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user