support trojan and more optimization

This commit is contained in:
Tokumeikoi
2020-06-11 20:47:02 +08:00
parent 9b82df98f5
commit 943304eb02
21 changed files with 1159 additions and 76 deletions

View File

@ -124,21 +124,26 @@ class OrderService
$orderModel = Order::where('user_id', $user->id)
->where('cycle', '!=', 'reset_price')
->where('status', 3);
$surplusAmount = 0;
$orderSurplusMonth = 0;
$orderSurplusAmount = 0;
$userSurplusMonth = ($user->expired_at - time()) / 2678400;
foreach ($orderModel->get() as $item) {
// 兼容历史余留问题
if ($item->cycle === 'onetime_price') continue;
$surplusMonth = strtotime("+ {$strToMonth[$item->cycle]}month", $item->created_at->format('U'));
if (!$surplusMonth) continue;
$surplusMonth = ($surplusMonth - time()) / 2678400 / $strToMonth[$item->cycle];
if ($surplusMonth > 0) {
$surplusAmount = $surplusAmount + ($item['total_amount'] + $item['balance_amount']) * $surplusMonth;
}
$orderSurplusMonth = $orderSurplusMonth + $strToMonth[$item->cycle];
$orderSurplusAmount = $orderSurplusAmount + ($item['total_amount'] + $item['balance_amount']);
}
if (!$surplusAmount) {
$monthUnitPrice = $orderSurplusAmount / $orderSurplusMonth;
// 如果用户过期月大于订单过期月
if ($userSurplusMonth > $orderSurplusMonth) {
$orderSurplusAmount = $orderSurplusMonth * $monthUnitPrice;
} else {
$orderSurplusAmount = $userSurplusMonth * $monthUnitPrice;
}
if (!$orderSurplusAmount) {
return;
}
$order->surplus_amount = $surplusAmount > 0 ? $surplusAmount : 0;
$order->surplus_amount = $orderSurplusAmount > 0 ? $orderSurplusAmount : 0;
$order->surplus_order_ids = json_encode(array_map(function ($v) { return $v['id'];}, $orderModel->get()->toArray()));
}

View File

@ -137,7 +137,7 @@ class ServerService
}
}
public function log(int $userId, int $serverId, int $u, int $d, float $rate)
public function log(int $userId, int $serverId, int $u, int $d, float $rate, string $method)
{
if (($u + $d) <= 10240) return;
$timestamp = strtotime(date('Y-m-d H:0'));
@ -146,6 +146,7 @@ class ServerService
->where('server_id', $serverId)
->where('user_id', $userId)
->where('rate', $rate)
->where('method', $method)
->first();
if ($serverLog) {
$serverLog->u = $serverLog->u + $u;
@ -159,6 +160,7 @@ class ServerService
$serverLog->d = $d;
$serverLog->rate = $rate;
$serverLog->log_at = $timestamp;
$serverLog->method = $method;
$serverLog->save();
}
}