add onetime plan

This commit is contained in:
Tokumeikoi 2020-02-28 01:03:05 +08:00
parent a7b3d6e778
commit 0f9cb9696d
3 changed files with 62 additions and 5 deletions

View File

@ -60,15 +60,21 @@ class CheckOrder extends Command
}
}
private function orderHandle($order)
private function orderHandle(Order $order)
{
$user = User::find($order->user_id);
return $this->buy($order, $user);
$plan = Plan::find($order->plan_id);
switch ($plan->type) {
// cycle
case 0: return $this->buyByCycle($order, $user, $plan);
// onetime
case 1: return $this->buyByOneTime($order, $user, $plan);
}
return $this->buy($order, $user, $plan);
}
private function buy($order, $user)
private function buyByCycle(Order $order, User $user, Plan $plan)
{
$plan = Plan::find($order->plan_id);
// change plan process
if ($order->type == 3) {
$user->expired_at = time();
@ -83,7 +89,24 @@ class CheckOrder extends Command
$user->plan_id = $plan->id;
$user->group_id = $plan->group_id;
$user->expired_at = $this->getTime($order->cycle, $user->expired_at);
if ($user->save()) {
$order->status = 3;
$order->save();
}
}
private function buyByOneTime(Order $order, User $user, Plan $plan)
{
if ($order->refund_amount) {
$user->balance = $user->balance + $order->refund_amount;
}
$user->transfer_enable = $plan->transfer_enable * 1073741824;
$user->enable = 1;
$user->u = 0;
$user->d = 0;
$user->plan_id = $plan->id;
$user->group_id = $plan->group_id;
$user->expired_at = 0;
if ($user->save()) {
$order->status = 3;
$order->save();

View File

@ -38,7 +38,10 @@ class ResetTraffic extends Command
*/
public function handle()
{
DB::table('v2_user')->update([
// get plans of cycle type
$plans = Plan::where('type', 0)->get();
$users = User::whereIn('plan_id', $plans)->get();
$users->update([
'u' => 0,
'd' => 0
]);

View File

@ -0,0 +1,31 @@
<?php
namespace App\Services;
use App\Models\User;
class ServerService
{
public function getAvailableUsers($groupId)
{
return User::whereIn('group_id', $groupId)
->whereRaw('u + d < transfer_enable')
->where(function ($query) {
$query->where('expired_at', '>=', time())
->orWhere('expired_at', 0);
})
->select([
'id',
'email',
't',
'u',
'd',
'transfer_enable',
'enable',
'v2ray_uuid',
'v2ray_alter_id',
'v2ray_level'
])
->get();
}
}