add balance payment

This commit is contained in:
Tokumeikoi 2020-03-17 20:00:46 +08:00
parent 03e0b5d087
commit 111d2720bd
4 changed files with 62 additions and 11 deletions

View File

@ -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:

View File

@ -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, '订单创建失败');

View File

@ -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();
} }
} }

View File

@ -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;
}
} }