Browse Source

feat: dynamic rate implement in WebAPI

M1Screw 2 years ago
parent
commit
88a66b86e6

+ 5 - 1
resources/views/tabler/user/server.tpl

@@ -59,7 +59,11 @@
                                                                     </li>
                                                                     <li class="list-inline-item">
                                                                         <i class="ti ti-rocket"></i>&nbsp;
-                                                                        {$server["traffic_rate"]} 倍
+                                                                        {if $server["is_dynamic_rate"]}
+                                                                            动态倍率
+                                                                        {else}
+                                                                            {$server["traffic_rate"]} 倍
+                                                                        {/if}
                                                                     </li>
                                                                     <li class="list-inline-item">
                                                                         <i class="ti ti-server-2"></i>&nbsp;

+ 1 - 0
src/Controllers/User/ServerController.php

@@ -48,6 +48,7 @@ final class ServerController extends BaseController
             $array_node['online_user'] = $node->online_user;
             $array_node['online'] = $node->getNodeOnlineStatus();
             $array_node['traffic_rate'] = $node->traffic_rate;
+            $array_node['is_dynamic_rate'] = $node->is_dynamic_rate;
             $array_node['node_bandwidth'] = Tools::autoBytes($node->node_bandwidth);
             $array_node['node_bandwidth_limit'] = $node->node_bandwidth_limit === 0 ? '无限制' :
                 Tools::autoBytes($node->node_bandwidth_limit);

+ 15 - 1
src/Controllers/WebAPI/UserController.php

@@ -8,6 +8,7 @@ use App\Controllers\BaseController;
 use App\Models\DetectLog;
 use App\Models\Node;
 use App\Services\DB;
+use App\Services\DynamicRate;
 use App\Utils\ResponseHelper;
 use App\Utils\Tools;
 use Psr\Http\Message\ResponseInterface;
@@ -167,7 +168,20 @@ final class UserController extends BaseController
                 transfer_total = transfer_total + ?,
                 transfer_today = transfer_today + ? WHERE id = ?
         ');
-        $rate = (float) $node->traffic_rate;
+
+        if ($node->is_dynamic_rate) {
+            $dynamic_rate_config = json_decode($node->dynamic_rate_config);
+            $rate = DynamicRate::getRateByTime(
+                (float) $dynamic_rate_config?->max_rate,
+                (int) $dynamic_rate_config?->max_rate_time,
+                (float) $dynamic_rate_config?->min_rate,
+                (int) $dynamic_rate_config?->min_rate_time,
+                (int) date('H')
+            );
+        } else {
+            $rate = (float) $node->traffic_rate;
+        }
+
         $sum = 0;
 
         foreach ($data as $log) {

+ 4 - 4
src/Services/DynamicRate.php

@@ -12,9 +12,9 @@ final class DynamicRate
         float $min_rate,
         int $min_rate_time,
         string $method = 'logistic',
-    ): array|string {
+    ): array {
         if (! self::validateData($max_rate, $max_rate_time, $min_rate, $min_rate_time)) {
-            return 'Invalid data';
+            return [];
         }
 
         $rates = [];
@@ -33,9 +33,9 @@ final class DynamicRate
         int $min_rate_time,
         int $time,
         string $method = 'logistic',
-    ): float|string {
+    ): float {
         if (! self::validateData($max_rate, $max_rate_time, $min_rate, $min_rate_time)) {
-            return 'Invalid data';
+            return 1;
         }
 
         if ($time === $max_rate_time || $max_rate_time === $min_rate_time || $max_rate === $min_rate) {