Browse Source

修复折线统计图数据/时间不匹配的问题

兔姬桑 4 years ago
parent
commit
70001b1988

+ 18 - 14
app/Console/Commands/AutoClearLog.php

@@ -39,43 +39,47 @@ class AutoClearLog extends Command {
 	// 清除日志
 	private function clearLog(): void {
 		try{
-			// 自动清除30分钟以前的节点负载信息日志
+			// 清除节点负载信息日志
 			SsNodeInfo::query()->where('log_time', '<=', strtotime("-30 minutes"))->delete();
 
-			// 自动清除1小时以前的节点在线用户数日志
+			// 清除节点在线用户数日志
 			SsNodeOnlineLog::query()->where('log_time', '<=', strtotime("-1 hour"))->delete();
 
-			// 自动清除3天以前的用户流量日志
+			// 清除用户流量日志
 			UserTrafficLog::query()->where('log_time', '<=', strtotime("-3 days"))->delete();
 
-			// 自动清除3天以前的用户每时流量数据日志
+			// 清除用户每时流量数据日志
 			UserTrafficHourly::query()->where('created_at', '<=', date('Y-m-d H:i:s', strtotime('-3 days')))->delete();
 
-			// 自动清除1个月以前的用户每天流量数据日志
+			// 清除用户各节点的每天流量数据日志
 			UserTrafficDaily::query()
-			                ->where('created_at', '<=', date('Y-m-d H:i:s', strtotime('-1 month 5 days')))
+			                ->where('node_id', '<>', 0)
+			                ->where('created_at', '<=', date('Y-m-d H:i:s', strtotime('-1 month')))
 			                ->delete();
 
-			// 自动清除2个月以前的节点每小时流量数据日志
+			// 清除用户每天流量数据日志
+			UserTrafficDaily::query()->where('created_at', '<=', date('Y-m-d H:i:s', strtotime('-3 month')))->delete();
+
+			// 清除节点每小时流量数据日志
 			SsNodeTrafficHourly::query()
-			                   ->where('created_at', '<=', date('Y-m-d H:i:s', strtotime('-2 month')))
+			                   ->where('created_at', '<=', date('Y-m-d H:i:s', strtotime('-3 days')))
 			                   ->delete();
 
-			// 自动清除3个月以前的节点每天流量数据日志
+			// 清除节点每天流量数据日志
 			SsNodeTrafficDaily::query()
-			                  ->where('created_at', '<=', date('Y-m-d H:i:s', strtotime('-3 month')))
+			                  ->where('created_at', '<=', date('Y-m-d H:i:s', strtotime('-2 month')))
 			                  ->delete();
 
-			// 自动清除30天以前用户封禁日志
+			// 清除用户封禁日志
 			UserBanLog::query()->where('created_at', '<=', date('Y-m-d H:i:s', strtotime("-1 month")))->delete();
 
-			// 自动清除1月前用户连接IP
+			// 清除用户连接IP
 			SsNodeIp::query()->where('created_at', '<=', strtotime("-1 month"))->delete();
 
-			// 自动清除3个月以前用户登陆日志
+			// 清除用户登陆日志
 			UserLoginLog::query()->where('created_at', '<=', date('Y-m-d H:i:s', strtotime("-3 month")))->delete();
 
-			// 自动清除1个月前的用户订阅记录
+			// 清除用户订阅记录
 			UserSubscribeLog::query()
 			                ->where('request_time', '<=', date('Y-m-d H:i:s', strtotime("-1 month")))
 			                ->delete();

+ 1 - 2
app/Console/Commands/AutoJob.php

@@ -230,8 +230,7 @@ class AutoJob extends Command {
 
 				// 多往前取5分钟,防止数据统计任务执行时间过长导致没有数据
 				$totalTraffic = UserTrafficHourly::query()
-				                                 ->whereUserId($user->id)
-				                                 ->whereNodeId(0)
+				                                 ->userHourly($user->id)
 				                                 ->where('created_at', '>=', date('Y-m-d H:i:s', time() - 3900))
 				                                 ->sum('total');
 				if($totalTraffic >= (self::$systemConfig['traffic_ban_value'] * GB)){

+ 1 - 2
app/Console/Commands/UserTrafficAbnormalAutoWarning.php

@@ -50,8 +50,7 @@ class UserTrafficAbnormalAutoWarning extends Command {
 				// 推送通知管理员
 				if($vo->totalTraffic > (self::$systemConfig['traffic_ban_value'] * GB)){
 					$traffic = UserTrafficHourly::query()
-					                            ->whereNodeId(0)
-					                            ->whereUserId($vo->user_id)
+					                            ->userHourly($vo->user_id)
 					                            ->where('created_at', '>=', date('Y-m-d H:i:s', time() - 3900))
 					                            ->selectRaw("user_id, sum(`u`) as totalU, sum(`d`) as totalD, sum(total) as totalTraffic")
 					                            ->first();

+ 9 - 62
app/Http/Controllers/AdminController.php

@@ -27,7 +27,6 @@ use App\Models\UserCreditLog;
 use App\Models\UserGroup;
 use App\Models\UserLoginLog;
 use App\Models\UserSubscribe;
-use App\Models\UserTrafficDaily;
 use App\Models\UserTrafficHourly;
 use App\Models\UserTrafficLog;
 use App\Models\UserTrafficModifyLog;
@@ -88,12 +87,11 @@ class AdminController extends Controller {
 		$view['flowAbnormalUserCount'] = count($this->trafficAbnormal());// 1小时内流量异常用户
 		$view['nodeCount'] = SsNode::query()->count();
 		$view['unnormalNodeCount'] = SsNode::query()->whereStatus(0)->count();
-		$flowCount = SsNodeTrafficDaily::query()
-		                               ->where('created_at', '>=', date('Y-m-d 00:00:00', strtotime("-30 days")))
-		                               ->sum('total');
-		$view['flowCount'] = flowAutoShow($flowCount);
-		$totalFlowCount = SsNodeTrafficDaily::query()->sum('total');
-		$view['totalFlowCount'] = flowAutoShow($totalFlowCount);
+		$view['flowCount'] = flowAutoShow(SsNodeTrafficDaily::query()
+		                                                    ->where('created_at', '>=',
+			                                                    date('Y-m-d 00:00:00', strtotime("-30 days")))
+		                                                    ->sum('total'));
+		$view['totalFlowCount'] = flowAutoShow(SsNodeTrafficDaily::query()->sum('total'));
 		$view['totalCredit'] = User::query()->sum('credit') / 100;
 		$view['totalWaitRefAmount'] = ReferralLog::query()->whereIn('status', [0, 1])->sum('ref_amount') / 100;
 		$view['totalRefAmount'] = ReferralApply::query()->whereStatus(2)->sum('amount') / 100;
@@ -105,6 +103,8 @@ class AdminController extends Controller {
 		                                  ->where('created_at', '>=', date('Y-m-d 00:00:00'))
 		                                  ->where('created_at', '<=', date('Y-m-d 23:59:59'))
 		                                  ->count();
+		// 今日
+		$view['todayRegister'] = User::query()->whereDate('created_at', date('Y-m-d'))->count();
 
 		return Response::view('admin.index', $view);
 	}
@@ -218,8 +218,7 @@ class AdminController extends Controller {
 			// 流量异常警告
 			$time = date('Y-m-d H:i:s', time() - 3900);
 			$totalTraffic = UserTrafficHourly::query()
-			                                 ->whereUserId($user->id)
-			                                 ->whereNodeId(0)
+			                                 ->userHourly($user->id)
 			                                 ->where('created_at', '>=', $time)
 			                                 ->sum('total');
 			$user->trafficWarning = $totalTraffic > (self::$systemConfig['traffic_ban_value'] * GB)? 1 : 0;
@@ -743,60 +742,8 @@ class AdminController extends Controller {
 			return Redirect::to('admin/userList');
 		}
 
-		// 30天内的流量
-		$dailyData = [];
-		$hourlyData = [];
-		// 节点一个月内的流量
-		$userTrafficDaily = UserTrafficDaily::query()
-		                                    ->whereUserId($user->id)
-		                                    ->whereNodeId(0)
-		                                    ->where('created_at', '>=', date('Y-m'))
-		                                    ->orderBy('created_at')
-		                                    ->pluck('total')
-		                                    ->toArray();
-
-		$dailyTotal = date('d') - 1; // 今天不算,减一
-		$dailyCount = count($userTrafficDaily);
-		for($x = 0; $x < $dailyTotal - $dailyCount; $x++){
-			$dailyData[$x] = 0;
-		}
-		for($x = $dailyTotal - $dailyCount; $x < $dailyTotal; $x++){
-			$dailyData[$x] = round($userTrafficDaily[$x - ($dailyTotal - $dailyCount)] / GB, 3);
-		}
-
-		// 节点一天内的流量
-		$userTrafficHourly = UserTrafficHourly::query()
-		                                      ->whereUserId($user->id)
-		                                      ->whereNodeId(0)
-		                                      ->where('created_at', '>=', date('Y-m-d'))
-		                                      ->orderBy('created_at')
-		                                      ->pluck('total')
-		                                      ->toArray();
-		$hourlyTotal = date('H');
-		$hourlyCount = count($userTrafficHourly);
-		for($x = 0; $x < $hourlyTotal - $hourlyCount; $x++){
-			$hourlyData[$x] = 0;
-		}
-		for($x = ($hourlyTotal - $hourlyCount); $x < $hourlyTotal; $x++){
-			$hourlyData[$x] = round($userTrafficHourly[$x - ($hourlyTotal - $hourlyCount)] / GB, 3);
-		}
-
-		// 本月天数数据
-		$monthDays = [];
-		for($i = 1; $i <= date("d"); $i++){
-			$monthDays[] = $i;
-		}
-		// 本日小时数据
-		$dayHours = [];
-		for($i = 1; $i <= date("H"); $i++){
-			$dayHours[] = $i;
-		}
-
-		$view['trafficDaily'] = json_encode($dailyData);
-		$view['trafficHourly'] = json_encode($hourlyData);
-		$view['monthDays'] = json_encode($monthDays);
-		$view['dayHours'] = json_encode($dayHours);
 		$view['email'] = $user->email;
+		$view = array_merge($view, $this->dataFlowChart($user->id));
 
 		return Response::view('admin.logs.userMonitor', $view);
 	}

+ 2 - 2
app/Http/Controllers/Api/WebApi/TrojanController.php

@@ -10,7 +10,7 @@ use Illuminate\Http\JsonResponse;
 class TrojanController extends BaseController {
 	// 获取节点信息
 	public function getNodeInfo($id): JsonResponse {
-		$node = SsNode::query()->whereId($id)->first();
+		$node = SsNode::query()->find($id);
 
 		return $this->returnData('获取节点信息成功', 'success', 200, [
 			'id'           => $node->id,
@@ -27,7 +27,7 @@ class TrojanController extends BaseController {
 
 	// 获取节点可用的用户列表
 	public function getUserList($id): JsonResponse {
-		$node = SsNode::query()->whereId($id)->first();
+		$node = SsNode::query()->find($id);
 		$users = User::query()
 		             ->where('status', '<>', -1)
 		             ->whereEnable(1)

+ 2 - 2
app/Http/Controllers/Api/WebApi/V2RayController.php

@@ -12,7 +12,7 @@ use Illuminate\Http\Request;
 class V2RayController extends BaseController {
 	// 获取节点信息
 	public function getNodeInfo($id): JsonResponse {
-		$node = SsNode::query()->whereId($id)->first();
+		$node = SsNode::query()->find($id);
 		$nodeDv = NodeCertificate::query()->whereId($node->server)->first();
 
 		return $this->returnData('获取节点信息成功', 'success', 200, [
@@ -40,7 +40,7 @@ class V2RayController extends BaseController {
 
 	// 获取节点可用的用户列表
 	public function getUserList($id): JsonResponse {
-		$node = SsNode::query()->whereId($id)->first();
+		$node = SsNode::query()->find($id);
 		$users = User::query()
 		             ->where('status', '<>', -1)
 		             ->whereEnable(1)

+ 2 - 2
app/Http/Controllers/Api/WebApi/VNetController.php

@@ -10,7 +10,7 @@ use Illuminate\Http\JsonResponse;
 class VNetController extends BaseController {
 	// 获取节点信息
 	public function getNodeInfo($id): JsonResponse {
-		$node = SsNode::query()->whereId($id)->first();
+		$node = SsNode::query()->find($id);
 
 		return $this->returnData('获取节点信息成功', 'success', 200, [
 			'id'           => $node->id,
@@ -32,7 +32,7 @@ class VNetController extends BaseController {
 
 	// 获取节点可用的用户列表
 	public function getUserList($id): JsonResponse {
-		$node = SsNode::query()->whereId($id)->first();
+		$node = SsNode::query()->find($id);
 		$users = User::query()
 		             ->where('status', '<>', -1)
 		             ->whereEnable(1)

+ 44 - 2
app/Http/Controllers/Controller.php

@@ -4,14 +4,19 @@ namespace App\Http\Controllers;
 
 use App\Models\SensitiveWords;
 use App\Models\SsNode;
+use App\Models\SsNodeTrafficDaily;
+use App\Models\SsNodeTrafficHourly;
 use App\Models\User;
+use App\Models\UserTrafficDaily;
+use App\Models\UserTrafficHourly;
+use App\Models\UserTrafficLog;
+use DB;
 use Exception;
 use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
 use Illuminate\Foundation\Bus\DispatchesJobs;
 use Illuminate\Foundation\Validation\ValidatesRequests;
 use Illuminate\Http\UploadedFile;
 use Illuminate\Routing\Controller as BaseController;
-use Ramsey\Uuid\UuidInterface;
 use RuntimeException;
 use Str;
 
@@ -24,7 +29,7 @@ class Controller extends BaseController {
 	}
 
 	// 生成UUID
-	public function makeUUID(): UuidInterface {
+	public function makeUUID() {
 		return Str::uuid();
 	}
 
@@ -231,4 +236,41 @@ class Controller extends BaseController {
 	): string {
 		return 'ssr://'.base64url_encode($host.':'.$port.':'.$protocol.':'.$method.':'.$obfs.':'.base64url_encode($passwd).'/?obfsparam='.base64url_encode($obfs_param).'&protoparam='.base64url_encode($protocol_param).'&remarks='.base64url_encode($name).'&group='.base64url_encode($group).'&udpport='.$is_udp.'&uot=0');
 	}
+
+	// 流量使用图表
+	public function dataFlowChart($id, $is_node = 0): array {
+		if($is_node){
+			$currentFlow = UserTrafficLog::query()->whereNodeId($id);
+			$hourlyFlow = SsNodeTrafficHourly::query()->whereNodeId($id);
+			$dailyFlow = SsNodeTrafficDaily::query()->whereNodeId($id);
+		}else{
+			$currentFlow = UserTrafficLog::query()->whereUserId($id);
+			$hourlyFlow = UserTrafficHourly::query()->userHourly($id);
+			$dailyFlow = UserTrafficDaily::query()->userDaily($id);
+		}
+		$currentFlow = $currentFlow->where('log_time', '>=', strtotime(date('Y-m-d H:00')))->sum(DB::raw('u + d'));
+		$hourlyFlow = $hourlyFlow->whereDate('created_at', date('Y-m-d'))->pluck('total', 'created_at')->toArray();
+		$dailyFlow = $dailyFlow->whereMonth('created_at', date('n'))->pluck('total', 'created_at')->toArray();
+
+		// 节点一天内的流量
+		$hourlyData = array_fill(0, date('G') + 1, 0);
+		foreach($hourlyFlow as $date => $dataFlow){
+			$hourlyData[date('G', strtotime($date))] = round($dataFlow / GB, 3);
+		}
+		$hourlyData[date('G') + 1] = round($currentFlow / GB, 3);
+
+		// 节点一个月内的流量
+		$dailyData = array_fill(0, date('j'), 0);
+		foreach($dailyFlow as $date => $dataFlow){
+			$dailyData[date('j', strtotime($date)) - 1] = round($dataFlow / GB, 3);
+		}
+		$dailyData[date('j', strtotime(now())) - 1] = round((array_sum($hourlyFlow) + $currentFlow) / GB, 3);
+
+		return [
+			'trafficDaily'  => json_encode($dailyData),
+			'trafficHourly' => json_encode($hourlyData),
+			'monthDays'     => json_encode(range(1, date("j"), 1)),// 本月天数
+			'dayHours'      => json_encode(range(0, date("G"), 1))// 本日小时
+		];
+	}
 }

+ 1 - 1
app/Http/Controllers/Gateway/AbstractPayment.php

@@ -200,7 +200,7 @@ abstract class AbstractPayment {
 	protected function aliStyleSign($data, $key): string {
 		// 剃离sign,sign_type,空值
 		unset($data['sign'], $data['sign_type']);
-		array_filter($data);
+		$data = array_filter($data);
 
 		// 排序
 		ksort($data, SORT_STRING);

+ 0 - 3
app/Http/Controllers/Gateway/PayJs.php

@@ -40,9 +40,6 @@ class PayJs extends AbstractPayment {
 		$data = (new Pay($this::$config))->notify();
 
 		if($data['return_code'] == 1){
-			//			PaymentCallback::query()
-			//			               ->whereTradeNo($data['out_trade_no'])
-			//			               ->update(['out_trade_no' => $data['payjs_order_id'], 'status' => 1]);
 			$this->postPayment($data['out_trade_no'], 'PayJs');
 			exit("success");
 		}

+ 3 - 58
app/Http/Controllers/NodeController.php

@@ -413,71 +413,16 @@ class NodeController extends Controller {
 	// 节点流量监控
 	public function nodeMonitor(Request $request) {
 		$node_id = $request->input('id');
-		$node = SsNode::query()->whereId($node_id)->orderByDesc('sort')->first();
+		$node = SsNode::find($node_id);
 		if(!$node){
 			Session::flash('errorMsg', '节点不存在,请重试');
 
 			return Redirect::back();
 		}
 
-		// 查看流量
-		$dailyData = [];
-		$hourlyData = [];
-
-		// 节点一个月内的流量
-		$nodeTrafficDaily = SsNodeTrafficDaily::query()
-		                                      ->with(['info'])
-		                                      ->whereNodeId($node->id)
-		                                      ->where('created_at', '>=', date('Y-m'))
-		                                      ->orderBy('created_at')
-		                                      ->pluck('total')
-		                                      ->toArray();
-		$dailyTotal = date('d') - 1;//今天不算,减一
-		$dailyCount = count($nodeTrafficDaily);
-		for($x = 0; $x < ($dailyTotal - $dailyCount); $x++){
-			$dailyData[$x] = 0;
-		}
-		for($x = ($dailyTotal - $dailyCount); $x < $dailyTotal; $x++){
-			$dailyData[$x] = round($nodeTrafficDaily[$x - ($dailyTotal - $dailyCount)] / GB, 3);
-		}
-
-		// 节点一天内的流量
-		$nodeTrafficHourly = SsNodeTrafficHourly::query()
-		                                        ->with(['info'])
-		                                        ->whereNodeId($node->id)
-		                                        ->where('created_at', '>=', date('Y-m-d'))
-		                                        ->orderBy('created_at')
-		                                        ->pluck('total')
-		                                        ->toArray();
-		$hourlyTotal = date('H');
-		$hourlyCount = count($nodeTrafficHourly);
-		for($x = 0; $x < ($hourlyTotal - $hourlyCount); $x++){
-			$hourlyData[$x] = 0;
-		}
-		for($x = ($hourlyTotal - $hourlyCount); $x < $hourlyTotal; $x++){
-			$hourlyData[$x] = round($nodeTrafficHourly[$x - ($hourlyTotal - $hourlyCount)] / GB, 3);
-		}
-
-		$view['trafficDaily'] = ['nodeName' => $node->name, 'dailyData' => json_encode($dailyData)];
-
-		$view['trafficHourly'] = ['nodeName' => $node->name, 'hourlyData' => json_encode($hourlyData)];
-
-
-		// 本月天数数据
-		$monthDays = [];
-		for($i = 1; $i <= date("d"); $i++){
-			$monthDays[] = $i;
-		}
-		// 本日小时数据
-		$dayHours = [];
-		for($i = 1; $i <= date("H"); $i++){
-			$dayHours[] = $i;
-		}
-
 		$view['nodeName'] = $node->name;
 		$view['nodeServer'] = $node->server;
-		$view['monthDays'] = json_encode($monthDays);
-		$view['dayHours'] = json_encode($dayHours);
+		$view = array_merge($view, $this->DataFlowChart($node->id, 1));
 
 		return Response::view('admin.node.nodeMonitor', $view);
 	}
@@ -522,7 +467,7 @@ class NodeController extends Controller {
 
 	// 节点授权列表
 	public function authList(Request $request): \Illuminate\Http\Response {
-		$view['list'] = NodeAuth::query()->orderBy('id')->paginate(15)->appends($request->except('page'));
+		$view['list'] = NodeAuth::query()->orderBy('node_id')->paginate(15)->appends($request->except('page'));
 		return Response::view('admin.node.authList', $view);
 	}
 

+ 2 - 57
app/Http/Controllers/UserController.php

@@ -20,7 +20,6 @@ use App\Models\TicketReply;
 use App\Models\User;
 use App\Models\UserLoginLog;
 use App\Models\UserSubscribe;
-use App\Models\UserTrafficDaily;
 use App\Models\UserTrafficHourly;
 use Auth;
 use Cache;
@@ -66,8 +65,7 @@ class UserController extends Controller {
 		$view['noticeList'] = Article::type(2)->orderByDesc('id')->Paginate(1); // 公告
 		//流量异常判断
 		$hourlyTraffic = UserTrafficHourly::query()
-		                                  ->whereUserId($user->id)
-		                                  ->whereNodeId(0)
+		                                  ->userHourly($user->id)
 		                                  ->where('created_at', '>=', date('Y-m-d H:i:s', time() - Minute * 65))
 		                                  ->sum('total');
 		$view['isTrafficWarning'] = $hourlyTraffic >= (self::$systemConfig['traffic_ban_value'] * GB)?: 0;
@@ -78,60 +76,7 @@ class UserController extends Controller {
 		                                ->where('origin_amount', '>', 0)
 		                                ->doesntExist();
 		$view['userLoginLog'] = UserLoginLog::query()->whereUserId($user->id)->orderByDesc('id')->first(); // 近期登录日志
-
-		$dailyData = [];
-		$hourlyData = [];
-
-		// 节点一个月内的流量
-		// TODO:有bug
-		$userTrafficDaily = UserTrafficDaily::query()
-		                                    ->whereUserId($user->id)
-		                                    ->whereNodeId(0)
-		                                    ->where('created_at', '<=', date('Y-m-d'))
-		                                    ->orderBy('created_at')
-		                                    ->pluck('total')
-		                                    ->toArray();
-		$dailyTotal = date('d') - 1; // 今天不算,减一
-		$dailyCount = count($userTrafficDaily);
-		for($x = 0; $x < $dailyTotal - $dailyCount; $x++){
-			$dailyData[$x] = 0;
-		}
-		for($x = $dailyTotal - $dailyCount; $x < $dailyTotal; $x++){
-			$dailyData[$x] = round($userTrafficDaily[$x - ($dailyTotal - $dailyCount)] / GB, 3);
-		}
-
-		// 节点一天内的流量
-		$userTrafficHourly = UserTrafficHourly::query()
-		                                      ->whereUserId($user->id)
-		                                      ->whereNodeId(0)
-		                                      ->where('created_at', '>=', date('Y-m-d'))
-		                                      ->orderBy('created_at')
-		                                      ->pluck('total')
-		                                      ->toArray();
-		$hourlyTotal = date('H');
-		$hourlyCount = count($userTrafficHourly);
-		for($x = 0; $x < $hourlyTotal - $hourlyCount; $x++){
-			$hourlyData[$x] = 0;
-		}
-		for($x = ($hourlyTotal - $hourlyCount); $x < $hourlyTotal; $x++){
-			$hourlyData[$x] = round($userTrafficHourly[$x - ($hourlyTotal - $hourlyCount)] / GB, 3);
-		}
-
-		// 本月天数数据
-		$monthDays = [];
-		for($i = 1; $i <= date("d"); $i++){
-			$monthDays[] = $i;
-		}
-		// 本日小时数据
-		$dayHours = [];
-		for($i = 1; $i <= date("H"); $i++){
-			$dayHours[] = $i;
-		}
-
-		$view['trafficDaily'] = json_encode($dailyData);
-		$view['trafficHourly'] = json_encode($hourlyData);
-		$view['monthDays'] = json_encode($monthDays);
-		$view['dayHours'] = json_encode($dayHours);
+		$view = array_merge($view, $this->dataFlowChart($user->id));
 
 		return Response::view('user.index', $view);
 	}

+ 6 - 0
app/Models/UserTrafficDaily.php

@@ -22,6 +22,7 @@ use Illuminate\Database\Eloquent\Relations\HasOne;
  * @method static Builder|UserTrafficDaily newModelQuery()
  * @method static Builder|UserTrafficDaily newQuery()
  * @method static Builder|UserTrafficDaily query()
+ * @method static Builder|UserTrafficDaily userDaily($uid)
  * @method static Builder|UserTrafficDaily whereCreatedAt($value)
  * @method static Builder|UserTrafficDaily whereD($value)
  * @method static Builder|UserTrafficDaily whereId($value)
@@ -39,4 +40,9 @@ class UserTrafficDaily extends Model {
 	public function node(): HasOne {
 		return $this->hasOne(SsNode::class, 'id', 'node_id');
 	}
+
+	// 用户每天使用总流量
+	public function scopeUserDaily($query, $uid) {
+		return $query->whereUserId($uid)->whereNodeId(0);
+	}
 }

+ 6 - 0
app/Models/UserTrafficHourly.php

@@ -22,6 +22,7 @@ use Illuminate\Database\Eloquent\Relations\HasOne;
  * @method static Builder|UserTrafficHourly newModelQuery()
  * @method static Builder|UserTrafficHourly newQuery()
  * @method static Builder|UserTrafficHourly query()
+ * @method static Builder|UserTrafficHourly userHourly($uid)
  * @method static Builder|UserTrafficHourly whereCreatedAt($value)
  * @method static Builder|UserTrafficHourly whereD($value)
  * @method static Builder|UserTrafficHourly whereId($value)
@@ -39,4 +40,9 @@ class UserTrafficHourly extends Model {
 	public function node(): HasOne {
 		return $this->hasOne(SsNode::class, 'id', 'node_id');
 	}
+
+	// 用户每时使用总流量
+	public function scopeUserHourly($query, $uid) {
+		return $query->whereUserId($uid)->whereNodeId(0);
+	}
 }

+ 3 - 3
resources/views/admin/logs/userMonitor.blade.php

@@ -6,11 +6,11 @@
 				<h2 class="panel-title">用户流量</h2>
 			</div>
 			<div class="alert alert-info alert-dismissible">
-				<button class="close" data-dismiss="alert" aria-label="Close"><span
-							aria-hidden="true">&times;</span><span class="sr-only">{{trans('home.close')}}</span>
+				<button class="close" data-dismiss="alert" aria-label="Close">
+					<span aria-hidden="true">&times;</span><span class="sr-only">{{trans('home.close')}}</span>
 				</button>
 				<h4 class="block">{{$email}}</h4>
-				<strong>提示:</strong> 月流量统计不会统计当天,日流量统计不会统计当前小时;如果无统计数据,请检查定时任务是否正常。(每月1日和每日0时因为没有统计流量,不显示流量)
+				<strong>提示:</strong> 如果无统计数据,请检查定时任务是否正常。
 			</div>
 			<div class="panel-body">
 				<div class="row">

+ 5 - 5
resources/views/admin/node/nodeMonitor.blade.php

@@ -6,13 +6,13 @@
 				<h2 class="panel-title">节点流量</h2>
 			</div>
 			<div class="alert alert-info alert-dismissible">
-				<button class="close" data-dismiss="alert" aria-label="Close"><span
-							aria-hidden="true">&times;</span><span class="sr-only">{{trans('home.close')}}</span>
+				<button class="close" data-dismiss="alert" aria-label="Close">
+					<span aria-hidden="true">&times;</span><span class="sr-only">{{trans('home.close')}}</span>
 				</button>
 				<h4 class="block">{{$nodeName}}
 					<small class="pl-10">{{$nodeServer}}</small>
 				</h4>
-				<strong>提示:</strong> 月流量统计不会统计当天,日流量统计不会统计当前小时;如果无统计数据,请检查定时任务是否正常。
+				<strong>提示:</strong> 如果无统计数据,请检查定时任务是否正常。
 			</div>
 			<div class="panel-body">
 				<div class="row">
@@ -45,7 +45,7 @@
 					pointBackgroundColor: Config.colors("primary", 600),
 					pointHoverBackgroundColor: "#fff",
 					pointHoverBorderColor: Config.colors("primary", 600),
-					data: {{$trafficHourly['hourlyData']}},
+					data: {{$trafficHourly}},
 				}]
 			},
 			options: {
@@ -89,7 +89,7 @@
 					pointBackgroundColor: Config.colors("primary", 600),
 					pointHoverBackgroundColor: "#fff",
 					pointHoverBorderColor: Config.colors("primary", 600),
-					data: {{$trafficDaily['dailyData']}},
+					data: {{$trafficDaily}},
 				}]
 			},
 			options: {