Browse Source

MVC 规范化

兔姬桑 4 years ago
parent
commit
0d57b0ad3c
66 changed files with 1142 additions and 1154 deletions
  1. 2 2
      app/Components/Helpers.php
  2. 22 26
      app/Console/Commands/AutoClearLog.php
  3. 15 15
      app/Console/Commands/AutoJob.php
  4. 4 4
      app/Console/Commands/AutoPingNode.php
  5. 7 7
      app/Console/Commands/AutoReportNode.php
  6. 8 8
      app/Console/Commands/AutoStatisticsNodeDailyTraffic.php
  7. 8 8
      app/Console/Commands/AutoStatisticsNodeHourlyTraffic.php
  8. 8 8
      app/Console/Commands/AutoStatisticsUserDailyTraffic.php
  9. 8 8
      app/Console/Commands/AutoStatisticsUserHourlyTraffic.php
  10. 2 2
      app/Console/Commands/DailyJob.php
  11. 3 3
      app/Console/Commands/NodeBlockedDetection.php
  12. 13 13
      app/Console/Commands/UserTrafficAbnormalAutoWarning.php
  13. 19 19
      app/Console/Commands/fixDailyTrafficLogError.php
  14. 16 16
      app/Http/Controllers/Admin/EmailFilterController.php
  15. 3 3
      app/Http/Controllers/Admin/RuleController.php
  16. 117 129
      app/Http/Controllers/Admin/ShopController.php
  17. 4 4
      app/Http/Controllers/Admin/UserGroupController.php
  18. 55 53
      app/Http/Controllers/AdminController.php
  19. 8 8
      app/Http/Controllers/Api/LoginController.php
  20. 10 10
      app/Http/Controllers/Api/WebApi/BaseController.php
  21. 4 8
      app/Http/Controllers/Api/WebApi/TrojanController.php
  22. 5 9
      app/Http/Controllers/Api/WebApi/V2RayController.php
  23. 4 8
      app/Http/Controllers/Api/WebApi/VNetController.php
  24. 7 7
      app/Http/Controllers/AuthController.php
  25. 17 17
      app/Http/Controllers/Controller.php
  26. 1 1
      app/Http/Controllers/Gateway/AbstractPayment.php
  27. 46 46
      app/Http/Controllers/NodeController.php
  28. 1 1
      app/Http/Controllers/ServiceController.php
  29. 6 6
      app/Http/Controllers/User/SubscribeController.php
  30. 30 30
      app/Http/Controllers/UserController.php
  31. 2 2
      app/Http/Middleware/WebApi.php
  32. 25 0
      app/Models/EmailFilter.php
  33. 156 0
      app/Models/Node.php
  34. 8 8
      app/Models/NodeAuth.php
  35. 39 0
      app/Models/NodeDailyDataFlow.php
  36. 39 0
      app/Models/NodeHourlyDataFlow.php
  37. 29 0
      app/Models/NodeInfo.php
  38. 8 8
      app/Models/NodeLabel.php
  39. 27 0
      app/Models/NodeOnlineLog.php
  40. 44 0
      app/Models/NodeOnlineUserIp.php
  41. 39 0
      app/Models/NodePing.php
  42. 10 10
      app/Models/RuleLog.php
  43. 0 25
      app/Models/SensitiveWords.php
  44. 0 156
      app/Models/SsNode.php
  45. 0 29
      app/Models/SsNodeInfo.php
  46. 0 44
      app/Models/SsNodeIp.php
  47. 0 27
      app/Models/SsNodeOnlineLog.php
  48. 0 39
      app/Models/SsNodePing.php
  49. 0 39
      app/Models/SsNodeTrafficDaily.php
  50. 0 39
      app/Models/SsNodeTrafficHourly.php
  51. 12 12
      app/Models/UserBanedLog.php
  52. 47 0
      app/Models/UserDailyDataFlow.php
  53. 48 0
      app/Models/UserDataFlowLog.php
  54. 12 12
      app/Models/UserDataModifyLog.php
  55. 47 0
      app/Models/UserHourlyDataFlow.php
  56. 0 47
      app/Models/UserTrafficDaily.php
  57. 0 47
      app/Models/UserTrafficHourly.php
  58. 0 48
      app/Models/UserTrafficLog.php
  59. 18 19
      resources/views/admin/config/emailFilter.blade.php
  60. 1 0
      resources/views/admin/coupon/couponList.blade.php
  61. 9 9
      resources/views/admin/layouts.blade.php
  62. 25 16
      resources/views/admin/shop/index.blade.php
  63. 6 5
      resources/views/admin/shop/info.blade.php
  64. 9 14
      routes/web.php
  65. 20 20
      sql/db.sql
  66. 9 0
      sql/mod/20200804.sql

+ 2 - 2
app/Components/Helpers.php

@@ -8,8 +8,8 @@ use App\Models\NotificationLog;
 use App\Models\SsConfig;
 use App\Models\User;
 use App\Models\UserCreditLog;
+use App\Models\UserDataModifyLog;
 use App\Models\UserSubscribe;
-use App\Models\UserTrafficModifyLog;
 use Str;
 
 class Helpers {
@@ -236,7 +236,7 @@ class Helpers {
 	 * @return int
 	 */
 	public static function addUserTrafficModifyLog($userId, $oid, $before, $after, $description = ''): int {
-		$log = new UserTrafficModifyLog();
+		$log = new UserDataModifyLog();
 		$log->user_id = $userId;
 		$log->order_id = $oid;
 		$log->before = $before;

+ 22 - 26
app/Console/Commands/AutoClearLog.php

@@ -3,17 +3,17 @@
 namespace App\Console\Commands;
 
 use App\Components\Helpers;
-use App\Models\SsNodeInfo;
-use App\Models\SsNodeIp;
-use App\Models\SsNodeOnlineLog;
-use App\Models\SsNodeTrafficDaily;
-use App\Models\SsNodeTrafficHourly;
-use App\Models\UserBanLog;
+use App\Models\NodeInfo;
+use App\Models\NodeOnlineLog;
+use App\Models\NodeOnlineUserIp;
+use App\Models\NodeDailyDataFlow;
+use App\Models\NodeHourlyDataFlow;
+use App\Models\UserBanedLog;
+use App\Models\UserDailyDataFlow;
+use App\Models\UserDataFlowLog;
+use App\Models\UserHourlyDataFlow;
 use App\Models\UserLoginLog;
 use App\Models\UserSubscribeLog;
-use App\Models\UserTrafficDaily;
-use App\Models\UserTrafficHourly;
-use App\Models\UserTrafficLog;
 use Exception;
 use Illuminate\Console\Command;
 use Log;
@@ -40,41 +40,37 @@ class AutoClearLog extends Command {
 	private function clearLog(): void {
 		try{
 			// 清除节点负载信息日志
-			SsNodeInfo::query()->where('log_time', '<=', strtotime("-30 minutes"))->delete();
+			NodeInfo::query()->where('log_time', '<=', strtotime("-30 minutes"))->delete();
 
 			// 清除节点在线用户数日志
-			SsNodeOnlineLog::query()->where('log_time', '<=', strtotime("-1 hour"))->delete();
+			NodeOnlineLog::query()->where('log_time', '<=', strtotime("-1 hour"))->delete();
 
 			// 清除用户流量日志
-			UserTrafficLog::query()->where('log_time', '<=', strtotime("-3 days"))->delete();
+			UserDataFlowLog::query()->where('log_time', '<=', strtotime("-3 days"))->delete();
 
 			// 清除用户每时各流量数据日志
-			UserTrafficHourly::query()->where('created_at', '<=', date('Y-m-d H:i:s', strtotime('-3 days')))->delete();
+			UserHourlyDataFlow::query()->where('created_at', '<=', date('Y-m-d H:i:s', strtotime('-3 days')))->delete();
 
 			// 清除用户各节点的每天流量数据日志
-			UserTrafficDaily::query()
-			                ->where('node_id', '<>', 0)
-			                ->where('created_at', '<=', date('Y-m-d H:i:s', strtotime('-1 month')))
-			                ->delete();
+			UserDailyDataFlow::query()
+			                 ->where('node_id', '<>', 0)
+			                 ->where('created_at', '<=', date('Y-m-d H:i:s', strtotime('-1 month')))
+			                 ->delete();
 
 			// 清除用户每天流量数据日志
-			UserTrafficDaily::query()->where('created_at', '<=', date('Y-m-d H:i:s', strtotime('-3 month')))->delete();
+			UserDailyDataFlow::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('-3 days')))
-			                   ->delete();
+			NodeHourlyDataFlow::query()->where('created_at', '<=', date('Y-m-d H:i:s', strtotime('-3 days')))->delete();
 
 			// 清除节点每天流量数据日志
-			SsNodeTrafficDaily::query()
-			                  ->where('created_at', '<=', date('Y-m-d H:i:s', strtotime('-2 month')))
-			                  ->delete();
+			NodeDailyDataFlow::query()->where('created_at', '<=', date('Y-m-d H:i:s', strtotime('-2 month')))->delete();
 
 			// 清除用户封禁日志
-			UserBanLog::query()->where('created_at', '<=', date('Y-m-d H:i:s', strtotime("-3 month")))->delete();
+			UserBanedLog::query()->where('created_at', '<=', date('Y-m-d H:i:s', strtotime("-3 month")))->delete();
 
 			// 清除用户连接IP
-			SsNodeIp::query()->where('created_at', '<=', strtotime("-1 month"))->delete();
+			NodeOnlineUserIp::query()->where('created_at', '<=', strtotime("-1 month"))->delete();
 
 			// 清除用户登陆日志
 			UserLoginLog::query()->where('created_at', '<=', date('Y-m-d H:i:s', strtotime("-3 month")))->delete();

+ 15 - 15
app/Console/Commands/AutoJob.php

@@ -7,15 +7,15 @@ use App\Components\PushNotification;
 use App\Models\Config;
 use App\Models\Coupon;
 use App\Models\Invite;
+use App\Models\Node;
+use App\Models\NodeInfo;
 use App\Models\Order;
 use App\Models\Payment;
-use App\Models\SsNode;
-use App\Models\SsNodeInfo;
 use App\Models\User;
-use App\Models\UserBanLog;
+use App\Models\UserBanedLog;
+use App\Models\UserHourlyDataFlow;
 use App\Models\UserSubscribe;
 use App\Models\UserSubscribeLog;
-use App\Models\UserTrafficHourly;
 use App\Models\VerifyCode;
 use Cache;
 use DB;
@@ -210,7 +210,7 @@ class AutoJob extends Command {
 	 * @param  string  $description  封禁理由
 	 */
 	private function addUserBanLog($userId, $minutes, $description): void {
-		$log = new UserBanLog();
+		$log = new UserBanedLog();
 		$log->user_id = $userId;
 		$log->minutes = $minutes;
 		$log->description = $description;
@@ -229,10 +229,10 @@ class AutoJob extends Command {
 				}
 
 				// 多往前取5分钟,防止数据统计任务执行时间过长导致没有数据
-				$totalTraffic = UserTrafficHourly::query()
-				                                 ->userHourly($user->id)
-				                                 ->where('created_at', '>=', date('Y-m-d H:i:s', time() - 3900))
-				                                 ->sum('total');
+				$totalTraffic = UserHourlyDataFlow::query()
+				                                  ->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){
 					User::query()->whereId($user->id)->update([
 						'enable'   => 0,
@@ -309,13 +309,13 @@ class AutoJob extends Command {
 	// 检测节点是否离线
 	private function checkNodeStatus(): void {
 		if(self::$systemConfig['is_node_offline']){
-			foreach(SsNode::query()->whereIsRelay(0)->whereStatus(1)->get() as $node){
+			foreach(Node::query()->whereIsRelay(0)->whereStatus(1)->get() as $node){
 				// 10分钟内无节点负载信息则认为是后端炸了
-				$nodeTTL = SsNodeInfo::query()
-				                     ->whereNodeId($node->id)
-				                     ->where('log_time', '>=', strtotime("-10 minutes"))
-				                     ->latest('log_time')
-				                     ->doesntExist();
+				$nodeTTL = NodeInfo::query()
+				                   ->whereNodeId($node->id)
+				                   ->where('log_time', '>=', strtotime("-10 minutes"))
+				                   ->latest('log_time')
+				                   ->doesntExist();
 				if($nodeTTL && self::$systemConfig['offline_check_times']){
 					// 已通知次数
 					$cacheKey = 'offline_check_times'.$node->id;

+ 4 - 4
app/Console/Commands/AutoPingNode.php

@@ -3,8 +3,8 @@
 namespace App\Console\Commands;
 
 use App\Components\NetworkDetection;
-use App\Models\SsNode;
-use App\Models\SsNodePing;
+use App\Models\Node;
+use App\Models\NodePing;
 use Illuminate\Console\Command;
 use Log;
 
@@ -15,7 +15,7 @@ class AutoPingNode extends Command {
 	public function handle(): void {
 		$jobStartTime = microtime(true);
 
-		foreach(SsNode::query()->whereIsRelay(0)->whereStatus(1)->get() as $node){
+		foreach(Node::query()->whereIsRelay(0)->whereStatus(1)->get() as $node){
 			$this->pingNode($node->id, $node->is_ddns? $node->server : $node->ip);
 		}
 
@@ -30,7 +30,7 @@ class AutoPingNode extends Command {
 		$result = NetworkDetection::ping($ip);
 
 		if($result){
-			$obj = new SsNodePing();
+			$obj = new NodePing();
 			$obj->node_id = $nodeId;
 			$obj->ct = (int) $result['telecom']['time'];//电信
 			$obj->cu = (int) $result['Unicom']['time'];// 联通

+ 7 - 7
app/Console/Commands/AutoReportNode.php

@@ -4,8 +4,8 @@ namespace App\Console\Commands;
 
 use App\Components\Helpers;
 use App\Components\PushNotification;
-use App\Models\SsNode;
-use App\Models\SsNodeTrafficDaily;
+use App\Models\Node;
+use App\Models\NodeDailyDataFlow;
 use Illuminate\Console\Command;
 use Log;
 
@@ -17,14 +17,14 @@ class AutoReportNode extends Command {
 		$jobStartTime = microtime(true);
 
 		if(Helpers::systemConfig()['node_daily_report']){
-			$nodeList = SsNode::query()->whereStatus(1)->get();
+			$nodeList = Node::query()->whereStatus(1)->get();
 			if($nodeList->isNotEmpty()){
 				$msg = "|节点|上行流量|下行流量|合计|\r\n| :------ | :------ | :------ |\r\n";
 				foreach($nodeList as $node){
-					$log = SsNodeTrafficDaily::query()
-					                         ->whereNodeId($node->id)
-					                         ->whereDate('created_at', date("Y-m-d", strtotime('-1 days')))
-					                         ->first();
+					$log = NodeDailyDataFlow::query()
+					                        ->whereNodeId($node->id)
+					                        ->whereDate('created_at', date("Y-m-d", strtotime('-1 days')))
+					                        ->first();
 
 					if($log){
 						$msg .= '|'.$node->name.'|'.flowAutoShow($log->u).'|'.flowAutoShow($log->d).'|'.$log->traffic."\r\n";

+ 8 - 8
app/Console/Commands/AutoStatisticsNodeDailyTraffic.php

@@ -2,9 +2,9 @@
 
 namespace App\Console\Commands;
 
-use App\Models\SsNode;
-use App\Models\SsNodeTrafficDaily;
-use App\Models\UserTrafficLog;
+use App\Models\Node;
+use App\Models\NodeDailyDataFlow;
+use App\Models\UserDataFlowLog;
 use Illuminate\Console\Command;
 use Log;
 
@@ -15,7 +15,7 @@ class AutoStatisticsNodeDailyTraffic extends Command {
 	public function handle(): void {
 		$jobStartTime = microtime(true);
 
-		foreach(SsNode::query()->whereStatus(1)->orderBy('id')->get() as $node){
+		foreach(Node::query()->whereStatus(1)->orderBy('id')->get() as $node){
 			$this->statisticsByNode($node->id);
 		}
 
@@ -26,16 +26,16 @@ class AutoStatisticsNodeDailyTraffic extends Command {
 	}
 
 	private function statisticsByNode($node_id): void {
-		$query = UserTrafficLog::query()
-		                       ->whereNodeId($node_id)
-		                       ->whereBetween('log_time', [strtotime(date('Y-m-d')), time()]);
+		$query = UserDataFlowLog::query()
+		                        ->whereNodeId($node_id)
+		                        ->whereBetween('log_time', [strtotime(date('Y-m-d')), time()]);
 
 		$u = $query->sum('u');
 		$d = $query->sum('d');
 		$total = $u + $d;
 
 		if($total){ // 有数据才记录
-			$obj = new SsNodeTrafficDaily();
+			$obj = new NodeDailyDataFlow();
 			$obj->node_id = $node_id;
 			$obj->u = $u;
 			$obj->d = $d;

+ 8 - 8
app/Console/Commands/AutoStatisticsNodeHourlyTraffic.php

@@ -2,9 +2,9 @@
 
 namespace App\Console\Commands;
 
-use App\Models\SsNode;
-use App\Models\SsNodeTrafficHourly;
-use App\Models\UserTrafficLog;
+use App\Models\Node;
+use App\Models\NodeHourlyDataFlow;
+use App\Models\UserDataFlowLog;
 use Illuminate\Console\Command;
 use Log;
 
@@ -15,7 +15,7 @@ class AutoStatisticsNodeHourlyTraffic extends Command {
 	public function handle(): void {
 		$jobStartTime = microtime(true);
 
-		foreach(SsNode::query()->whereStatus(1)->orderBy('id')->get() as $node){
+		foreach(Node::query()->whereStatus(1)->orderBy('id')->get() as $node){
 			$this->statisticsByNode($node->id);
 		}
 
@@ -26,16 +26,16 @@ class AutoStatisticsNodeHourlyTraffic extends Command {
 	}
 
 	private function statisticsByNode($node_id): void {
-		$query = UserTrafficLog::query()
-		                       ->whereNodeId($node_id)
-		                       ->whereBetween('log_time', [strtotime("-1 hour"), time()]);
+		$query = UserDataFlowLog::query()
+		                        ->whereNodeId($node_id)
+		                        ->whereBetween('log_time', [strtotime("-1 hour"), time()]);
 
 		$u = $query->sum('u');
 		$d = $query->sum('d');
 		$total = $u + $d;
 
 		if($total){ // 有数据才记录
-			$obj = new SsNodeTrafficHourly();
+			$obj = new NodeHourlyDataFlow();
 			$obj->node_id = $node_id;
 			$obj->u = $u;
 			$obj->d = $d;

+ 8 - 8
app/Console/Commands/AutoStatisticsUserDailyTraffic.php

@@ -2,10 +2,10 @@
 
 namespace App\Console\Commands;
 
-use App\Models\SsNode;
+use App\Models\Node;
 use App\Models\User;
-use App\Models\UserTrafficDaily;
-use App\Models\UserTrafficLog;
+use App\Models\UserDailyDataFlow;
+use App\Models\UserDataFlowLog;
 use Illuminate\Console\Command;
 use Log;
 
@@ -21,7 +21,7 @@ class AutoStatisticsUserDailyTraffic extends Command {
 			$this->statisticsByUser($user->id);
 
 			// 统计每个节点产生的流量
-			foreach(SsNode::query()->whereStatus(1)->orderBy('id')->get() as $node){
+			foreach(Node::query()->whereStatus(1)->orderBy('id')->get() as $node){
 				$this->statisticsByUser($user->id, $node->id);
 			}
 		}
@@ -33,9 +33,9 @@ class AutoStatisticsUserDailyTraffic extends Command {
 	}
 
 	private function statisticsByUser($user_id, $node_id = 0): void {
-		$query = UserTrafficLog::query()
-		                       ->whereUserId($user_id)
-		                       ->whereBetween('log_time', [strtotime(date('Y-m-d')), time()]);
+		$query = UserDataFlowLog::query()
+		                        ->whereUserId($user_id)
+		                        ->whereBetween('log_time', [strtotime(date('Y-m-d')), time()]);
 
 		if($node_id){
 			$query->whereNodeId($node_id);
@@ -46,7 +46,7 @@ class AutoStatisticsUserDailyTraffic extends Command {
 		$total = $u + $d;
 
 		if($total){ // 有数据才记录
-			$obj = new UserTrafficDaily();
+			$obj = new UserDailyDataFlow();
 			$obj->user_id = $user_id;
 			$obj->node_id = $node_id;
 			$obj->u = $u;

+ 8 - 8
app/Console/Commands/AutoStatisticsUserHourlyTraffic.php

@@ -2,10 +2,10 @@
 
 namespace App\Console\Commands;
 
-use App\Models\SsNode;
+use App\Models\Node;
 use App\Models\User;
-use App\Models\UserTrafficHourly;
-use App\Models\UserTrafficLog;
+use App\Models\UserDataFlowLog;
+use App\Models\UserHourlyDataFlow;
 use Illuminate\Console\Command;
 use Log;
 
@@ -21,7 +21,7 @@ class AutoStatisticsUserHourlyTraffic extends Command {
 			$this->statisticsByNode($user->id);
 
 			// 统计每个节点产生的流量
-			foreach(SsNode::query()->whereStatus(1)->orderBy('id')->get() as $node){
+			foreach(Node::query()->whereStatus(1)->orderBy('id')->get() as $node){
 				$this->statisticsByNode($user->id, $node->id);
 			}
 		}
@@ -33,9 +33,9 @@ class AutoStatisticsUserHourlyTraffic extends Command {
 	}
 
 	private function statisticsByNode($user_id, $node_id = 0): void {
-		$query = UserTrafficLog::query()
-		                       ->whereUserId($user_id)
-		                       ->whereBetween('log_time', [strtotime("-1 hour"), time()]);
+		$query = UserDataFlowLog::query()
+		                        ->whereUserId($user_id)
+		                        ->whereBetween('log_time', [strtotime("-1 hour"), time()]);
 
 		if($node_id){
 			$query->whereNodeId($node_id);
@@ -46,7 +46,7 @@ class AutoStatisticsUserHourlyTraffic extends Command {
 		$total = $u + $d;
 
 		if($total){ // 有数据才记录
-			$obj = new UserTrafficHourly();
+			$obj = new UserHourlyDataFlow();
 			$obj->user_id = $user_id;
 			$obj->node_id = $node_id;
 			$obj->u = $u;

+ 2 - 2
app/Console/Commands/DailyJob.php

@@ -8,7 +8,7 @@ use App\Models\Invite;
 use App\Models\Order;
 use App\Models\Ticket;
 use App\Models\User;
-use App\Models\UserBanLog;
+use App\Models\UserBanedLog;
 use Illuminate\Console\Command;
 use Log;
 
@@ -90,7 +90,7 @@ class DailyJob extends Command {
 	 * @param  string  $description  封禁理由
 	 */
 	private function addUserBanLog($userId, $minutes, $description): void {
-		$log = new UserBanLog();
+		$log = new UserBanedLog();
 		$log->user_id = $userId;
 		$log->minutes = $minutes;
 		$log->description = $description;

+ 3 - 3
app/Console/Commands/NodeBlockedDetection.php

@@ -6,7 +6,7 @@ use App\Components\Helpers;
 use App\Components\NetworkDetection;
 use App\Components\PushNotification;
 use App\Mail\nodeCrashWarning;
-use App\Models\SsNode;
+use App\Models\Node;
 use Cache;
 use Illuminate\Console\Command;
 use Log;
@@ -42,7 +42,7 @@ class NodeBlockedDetection extends Command {
 
 	// 监测节点状态
 	private function checkNodes(): void {
-		$nodeList = SsNode::query()->whereIsRelay(0)->whereStatus(1)->where('detection_type', '>', 0)->get();
+		$nodeList = Node::query()->whereIsRelay(0)->whereStatus(1)->where('detection_type', '>', 0)->get();
 		$sendText = false;
 		$message = "| 线路 | 协议 | 状态 |\r\n| ------ | ------ | ------ |\r\n";
 		$additionalMessage = '';
@@ -94,7 +94,7 @@ class NodeBlockedDetection extends Command {
 					Cache::increment($cacheKey);
 				}else{
 					Cache::forget($cacheKey);
-					SsNode::query()->whereId($node->id)->update(['status' => 0]);
+					Node::query()->whereId($node->id)->update(['status' => 0]);
 					$additionalMessage .= "\r\n节点【{$node->name}】自动进入维护状态\r\n";
 				}
 			}

+ 13 - 13
app/Console/Commands/UserTrafficAbnormalAutoWarning.php

@@ -5,7 +5,7 @@ namespace App\Console\Commands;
 use App\Components\Helpers;
 use App\Components\PushNotification;
 use App\Models\User;
-use App\Models\UserTrafficHourly;
+use App\Models\UserHourlyDataFlow;
 use Illuminate\Console\Command;
 use Log;
 
@@ -34,13 +34,13 @@ class UserTrafficAbnormalAutoWarning extends Command {
 	// 用户流量异常警告
 	private function userTrafficAbnormalWarning(): void {
 		// 1小时内流量异常用户(多往前取5分钟,防止数据统计任务执行时间过长导致没有数据)
-		$userTotalTrafficList = UserTrafficHourly::query()
-		                                         ->whereNodeId(0)
-		                                         ->where('total', '>', MB * 50)
-		                                         ->where('created_at', '>=', date('Y-m-d H:i:s', time() - 3900))
-		                                         ->groupBy('user_id')
-		                                         ->selectRaw("user_id, sum(total) as totalTraffic")
-		                                         ->get(); // 只统计100M以上的记录,加快查询速度
+		$userTotalTrafficList = UserHourlyDataFlow::query()
+		                                          ->whereNodeId(0)
+		                                          ->where('total', '>', MB * 50)
+		                                          ->where('created_at', '>=', date('Y-m-d H:i:s', time() - 3900))
+		                                          ->groupBy('user_id')
+		                                          ->selectRaw("user_id, sum(total) as totalTraffic")
+		                                          ->get(); // 只统计100M以上的记录,加快查询速度
 		if(!$userTotalTrafficList->isEmpty()){
 			$title = "流量异常用户提醒";
 
@@ -49,11 +49,11 @@ class UserTrafficAbnormalAutoWarning extends Command {
 
 				// 推送通知管理员
 				if($vo->totalTraffic > self::$systemConfig['traffic_ban_value'] * GB){
-					$traffic = UserTrafficHourly::query()
-					                            ->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")
-					                            ->firstOrFail();
+					$traffic = UserHourlyDataFlow::query()
+					                             ->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")
+					                             ->firstOrFail();
 
 					$content = "用户**{$user->email}(ID:{$user->id})**,最近1小时**上行流量:".flowAutoShow($traffic->totalU).",下行流量:".flowAutoShow($traffic->totalD).",共计:".flowAutoShow($traffic->totalTraffic)."**。";
 

+ 19 - 19
app/Console/Commands/fixDailyTrafficLogError.php

@@ -2,9 +2,9 @@
 
 namespace App\Console\Commands;
 
-use App\Models\SsNodeTrafficDaily;
-use App\Models\UserTrafficDaily;
-use App\Models\UserTrafficLog;
+use App\Models\NodeDailyDataFlow;
+use App\Models\UserDailyDataFlow;
+use App\Models\UserDataFlowLog;
 use Illuminate\Console\Command;
 use Log;
 
@@ -17,29 +17,29 @@ class fixDailyTrafficLogError extends Command {
 	public function handle(): void {
 		// set value
 		$this->end = date('Y-m-d 23:59:59', strtotime("-1 days"));
-		$nodeArray = UserTrafficLog::query()->distinct()->pluck('node_id')->toArray();
+		$nodeArray = UserDataFlowLog::query()->distinct()->pluck('node_id')->toArray();
 
 		Log::info('----------------------------【修复原版本的每日流量计算错误】开始----------------------------');
 		Log::info('----------------------------【节点流量日志修正】开始----------------------------');
-		foreach(SsNodeTrafficDaily::all() as $log){
-			SsNodeTrafficDaily::query()->whereId($log->id)->update([
+		foreach(NodeDailyDataFlow::all() as $log){
+			NodeDailyDataFlow::query()->whereId($log->id)->update([
 				'created_at' => date('Y-m-d H:i:s', strtotime("-1 days", strtotime($log->created_at)))
 			]);
 		}
 
 		Log::info('----------------------------【添加节点流量日志】开始----------------------------');
 		foreach($nodeArray as $nodeId){
-			$query = UserTrafficLog::query()
-			                       ->whereNodeId($nodeId)
-			                       ->whereBetween('log_time',
-				                       [strtotime(date('Y-m-d', strtotime("-1 days"))), strtotime($this->end)]);
+			$query = UserDataFlowLog::query()
+			                        ->whereNodeId($nodeId)
+			                        ->whereBetween('log_time',
+				                        [strtotime(date('Y-m-d', strtotime("-1 days"))), strtotime($this->end)]);
 
 			$u = $query->sum('u');
 			$d = $query->sum('d');
 			$total = $u + $d;
 
 			if($total){ // 有数据才记录
-				$obj = new SsNodeTrafficDaily();
+				$obj = new NodeDailyDataFlow();
 				$obj->node_id = $nodeId;
 				$obj->u = $u;
 				$obj->d = $d;
@@ -52,13 +52,13 @@ class fixDailyTrafficLogError extends Command {
 		Log::info('----------------------------【添加节点流量日志】结束----------------------------');
 		Log::info('----------------------------【节点流量日志修正】结束----------------------------');
 		Log::info('----------------------------【用户流量日志修正】开始----------------------------');
-		foreach(UserTrafficDaily::all() as $log){
-			UserTrafficDaily::query()->whereId($log->id)->update([
+		foreach(UserDailyDataFlow::all() as $log){
+			UserDailyDataFlow::query()->whereId($log->id)->update([
 				'created_at' => date('Y-m-d H:i:s', strtotime("-1 days", strtotime($log->created_at)))
 			]);
 		}
 		Log::info('----------------------------【用户个人流量日志修正】开始----------------------------');
-		foreach(UserTrafficLog::query()->distinct()->pluck('user_id')->toArray() as $userId){
+		foreach(UserDataFlowLog::query()->distinct()->pluck('user_id')->toArray() as $userId){
 			// 统计一次所有节点的总和
 			$this->statisticsByUser($userId);
 			// 统计每个节点产生的流量
@@ -72,10 +72,10 @@ class fixDailyTrafficLogError extends Command {
 	}
 
 	private function statisticsByUser($user_id, $node_id = 0): void {
-		$query = UserTrafficLog::query()
-		                       ->whereUserId($user_id)
-		                       ->whereBetween('log_time',
-			                       [strtotime(date('Y-m-d', strtotime("-1 days"))), strtotime($this->end)]);
+		$query = UserDataFlowLog::query()
+		                        ->whereUserId($user_id)
+		                        ->whereBetween('log_time',
+			                        [strtotime(date('Y-m-d', strtotime("-1 days"))), strtotime($this->end)]);
 
 		if($node_id){
 			$query->whereNodeId($node_id);
@@ -86,7 +86,7 @@ class fixDailyTrafficLogError extends Command {
 		$total = $u + $d;
 
 		if($total){ // 有数据才记录
-			$obj = new UserTrafficDaily();
+			$obj = new UserDailyDataFlow();
 			$obj->user_id = $user_id;
 			$obj->node_id = $node_id;
 			$obj->u = $u;

+ 16 - 16
app/Http/Controllers/Admin/SensitiveWordsController.php → app/Http/Controllers/Admin/EmailFilterController.php

@@ -3,41 +3,41 @@
 namespace App\Http\Controllers\Admin;
 
 use App\Http\Controllers\Controller;
-use App\Models\SensitiveWords;
+use App\Models\EmailFilter;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Response;
 use Validator;
 
 /**
- * 敏感词管理控制器
+ * 邮箱后缀管理控制器
  *
- * Class SensitiveWordsController
+ * Class EmailFilterController
  *
  * @package App\Http\Controllers\Controller
  */
-class SensitiveWordsController extends Controller {
-	// 敏感词列表
-	public function sensitiveWordsList(): \Illuminate\Http\Response {
-		$view['list'] = SensitiveWords::query()->orderByDesc('id')->paginate(15);
+class EmailFilterController extends Controller {
+	// 邮箱过滤列表
+	public function filterList(): \Illuminate\Http\Response {
+		$view['list'] = EmailFilter::query()->orderByDesc('id')->paginate(15);
 
-		return Response::view('admin.config.sensitiveWordsList', $view);
+		return Response::view('admin.config.emailFilter', $view);
 	}
 
-	// 添加敏感词
-	public function addSensitiveWords(Request $request): ?JsonResponse {
+	// 添加邮箱后缀
+	public function addSuffix(Request $request): ?JsonResponse {
 		$validator = Validator::make($request->all(), [
 			'words' => 'required|unique:sensitive_words'
 		], [
-			'words.required' => '添加失败:请填写敏感词',
-			'words.unique'   => '添加失败:敏感词已存在'
+			'words.required' => '添加失败:请填写邮箱后缀',
+			'words.unique'   => '添加失败:邮箱后缀已存在'
 		]);
 
 		if($validator->fails()){
 			return Response::json(['status' => 'fail', 'message' => $validator->getMessageBag()->first()]);
 		}
 
-		$obj = new SensitiveWords();
+		$obj = new EmailFilter();
 		$obj->type = $request->input('type');
 		$obj->words = strtolower($request->input('words'));
 		$obj->save();
@@ -48,9 +48,9 @@ class SensitiveWordsController extends Controller {
 		return Response::json(['status' => 'fail', 'message' => '添加失败']);
 	}
 
-	// 删除敏感词
-	public function delSensitiveWords(Request $request): ?JsonResponse {
-		$result = SensitiveWords::query()->whereId($request->input('id'))->delete();
+	// 删除邮箱后缀
+	public function delSuffix(Request $request): ?JsonResponse {
+		$result = EmailFilter::query()->whereId($request->input('id'))->delete();
 		if($result){
 			return Response::json(['status' => 'success', 'message' => '删除成功']);
 		}

+ 3 - 3
app/Http/Controllers/Admin/RuleController.php

@@ -3,11 +3,11 @@
 namespace App\Http\Controllers\Admin;
 
 use App\Http\Controllers\Controller;
+use App\Models\Node;
 use App\Models\Rule;
 use App\Models\RuleGroup;
 use App\Models\RuleGroupNode;
 use App\Models\RuleLog;
-use App\Models\SsNode;
 use Exception;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
@@ -246,7 +246,7 @@ class RuleController extends Controller {
 		}
 
 		$view['ruleGroup'] = RuleGroup::find($id);
-		$view['nodeList'] = SsNode::all();
+		$view['nodeList'] = Node::all();
 
 		return Response::view('admin.rule.assignNode', $view);
 	}
@@ -274,7 +274,7 @@ class RuleController extends Controller {
 			$query->whereRuleId($ruleId);
 		}
 
-		$view['nodeList'] = SsNode::all();
+		$view['nodeList'] = Node::all();
 		$view['ruleList'] = Rule::all();
 		$view['ruleLogs'] = $query->latest()->paginate(15)->appends($request->except('page'));
 		return Response::view('admin.rule.ruleLogList', $view);

+ 117 - 129
app/Http/Controllers/Admin/ShopController.php

@@ -8,6 +8,7 @@ use App\Models\Level;
 use DB;
 use Exception;
 use Illuminate\Http\JsonResponse;
+use Illuminate\Http\RedirectResponse;
 use Illuminate\Http\Request;
 use Log;
 use Redirect;
@@ -24,7 +25,7 @@ use Validator;
  */
 class ShopController extends Controller {
 	// 商品列表
-	public function goodsList(Request $request): \Illuminate\Http\Response {
+	public function index(Request $request): \Illuminate\Http\Response {
 		$type = $request->input('type');
 		$status = $request->input('status');
 
@@ -40,159 +41,146 @@ class ShopController extends Controller {
 
 		$view['goodsList'] = $query->orderByDesc('status')->paginate(10)->appends($request->except('page'));
 
-		return Response::view('admin.shop.goodsList', $view);
+		return Response::view('admin.shop.index', $view);
+	}
+
+	// 添加商品页面
+	public function create(): \Illuminate\Http\Response {
+		$view['goods'] = null;
+		$view['levelList'] = Level::query()->orderBy('level')->get();
+
+		return Response::view('admin.shop.info', $view);
 	}
 
 	// 添加商品
-	public function addGoods(Request $request) {
-		if($request->isMethod('POST')){
-			$validator = Validator::make($request->all(), [
-				'name'    => 'required',
-				'traffic' => 'required|integer|min:1024|max:10240000|nullable',
-				'price'   => 'required|numeric|min:0',
-				'type'    => 'required',
-				'renew'   => 'required_unless:type,2|min:0',
-				'days'    => 'required|integer',
-			], [
-				'traffic.min' => '内含流量不能低于1MB',
-				'traffic.max' => '内含流量不能超过10TB',
-			]);
-
-			if($validator->fails()){
-				return Redirect::back()->withInput()->withErrors($validator->errors());
-			}
+	public function store(Request $request): RedirectResponse {
+		$validator = Validator::make($request->all(), [
+			'name'    => 'required',
+			'traffic' => 'required|integer|min:1|max:10240000|nullable',
+			'price'   => 'required|numeric|min:0',
+			'type'    => 'required',
+			'renew'   => 'required_unless:type,2|min:0',
+			'days'    => 'required|integer',
+		], [
+			'traffic.min' => '内含流量不能低于1MB',
+			'traffic.max' => '内含流量不能超过10TB',
+		]);
+
+		if($validator->fails()){
+			return Redirect::back()->withInput()->withErrors($validator->errors());
+		}
 
-			// 商品LOGO
-			$logo = null;
-			if($request->hasFile('logo')){
-				$logo = $this->uploadFile($request->file('logo'));
+		// 商品LOGO
+		$logo = null;
+		if($request->hasFile('logo')){
+			$logo = $this->uploadFile($request->file('logo'));
 
-				if(!$logo){
-					return Redirect::back()->withInput()->withErrors('LOGO不合法');
-				}
+			if(!$logo){
+				return Redirect::back()->withInput()->withErrors('LOGO不合法');
 			}
+		}
 
-			try{
-				DB::beginTransaction();
-
-				$goods = new Goods();
-				$goods->name = $request->input('name');
-				$goods->logo = $logo?: null;
-				$goods->traffic = $request->input('traffic');
-				$goods->type = $request->input('type');
-				$goods->price = round($request->input('price'), 2);
-				$goods->level = $request->input('level');
-				$goods->renew = round($request->input('renew'), 2);
-				$goods->period = $request->input('period');
-				$goods->info = $request->input('info');
-				$goods->description = $request->input('description');
-				$goods->days = $request->input('days');
-				$goods->invite_num = $request->input('invite_num');
-				$goods->limit_num = $request->input('limit_num');
-				$goods->color = $request->input('color');
-				$goods->sort = $request->input('sort');
-				$goods->is_hot = $request->input('is_hot', 0);
-				$goods->status = $request->input('status', 0);
-				$goods->save();
-
-				DB::commit();
-
-				return Redirect::back()->with('successMsg', '添加成功');
-			}catch(Exception $e){
-				DB::rollBack();
-				Log::info($e);
-
-				return Redirect::back()->withInput()->withErrors('添加失败');
-			}
-		}else{
-			$view['levelList'] = Level::query()->orderBy('level')->get();
+		try{
+			DB::beginTransaction();
+
+			$obj = new Goods();
+			$obj->name = $request->input('name');
+			$obj->logo = $logo?: null;
+			$obj->traffic = $request->input('traffic');
+			$obj->type = $request->input('type');
+			$obj->price = round($request->input('price'), 2);
+			$obj->level = $request->input('level');
+			$obj->renew = round($request->input('renew'), 2);
+			$obj->period = $request->input('period');
+			$obj->info = $request->input('info');
+			$obj->description = $request->input('description');
+			$obj->days = $request->input('days');
+			$obj->invite_num = $request->input('invite_num');
+			$obj->limit_num = $request->input('limit_num');
+			$obj->color = $request->input('color');
+			$obj->sort = $request->input('sort');
+			$obj->is_hot = $request->input('is_hot', 0);
+			$obj->status = $request->input('status', 0);
+			$obj->save();
+
+			DB::commit();
+
+			return Redirect::back()->with('successMsg', '添加成功');
+		}catch(Exception $e){
+			DB::rollBack();
+			Log::info($e);
 
-			return Response::view('admin.shop.goodsInfo', $view);
+			return Redirect::back()->withInput()->withErrors('添加失败');
 		}
 	}
 
-	// 编辑商品
-	public function editGoods(Request $request) {
-		$id = $request->input('id');
-		if($request->isMethod('POST')){
-			$validator = Validator::make($request->all(), [
-				'name'    => 'required',
-				'traffic' => 'required|integer|min:1024|max:10240000|nullable',
-				'price'   => 'required|numeric|min:0',
-				'type'    => 'required',
-				'renew'   => 'required_unless:type,2|min:0',
-				'days'    => 'required|integer',
-			], [
-				'traffic.min' => '内含流量不能低于1MB',
-				'traffic.max' => '内含流量不能超过10TB',
-			]);
-
-			if($validator->fails()){
-				return Redirect::back()->withInput()->withErrors($validator->errors());
-			}
+	// 编辑商品页面
+	public function edit($id): \Illuminate\Http\Response {
+		$view['goods'] = Goods::find($id);
+		$view['levelList'] = Level::query()->orderBy('level')->get();
 
-			$goods = Goods::find($id);
-			if(!$goods){
-				Session::flash('errorMsg', '商品不存在');
+		return Response::view('admin.shop.info', $view);
+	}
 
-				return Redirect::back();
-			}
+	// 编辑商品
+	public function update(Request $request, $id) {
+		$goods = Goods::find($id);
+		if(!$goods){
+			Session::flash('errorMsg', '商品不存在');
 
-			// 商品LOGO
-			if($request->hasFile('logo')){
-				$logo = $this->uploadFile($request->file('logo'));
+			return Redirect::back();
+		}
 
-				if(!$logo){
-					Session::flash('errorMsg', 'LOGO不合法');
+		// 商品LOGO
+		if($request->hasFile('logo')){
+			$logo = $this->uploadFile($request->file('logo'));
 
-					return Redirect::back()->withInput();
-				}
-				Goods::query()->whereId($id)->update(['logo' => $logo]);
-			}
+			if(!$logo){
+				Session::flash('errorMsg', 'LOGO不合法');
 
-			try{
-				DB::beginTransaction();
-
-				$data = [
-					'name'        => $request->input('name'),
-					'price'       => round($request->input('price'), 2) * 100,
-					'level'       => $request->input('level'),
-					'renew'       => round($request->input('renew'), 2) * 100,
-					'period'      => $request->input('period'),
-					'info'        => $request->input('info'),
-					'description' => $request->input('description'),
-					'invite_num'  => $request->input('invite_num'),
-					'limit_num'   => $request->input('limit_num'),
-					'color'       => $request->input('color'),
-					'sort'        => $request->input('sort'),
-					'is_hot'      => $request->input('is_hot', 0),
-					'status'      => $request->input('status', 0)
-				];
-
-				Goods::query()->whereId($id)->update($data);
-
-				Session::flash('successMsg', '编辑成功');
-
-				DB::commit();
-			}catch(Exception $e){
-				Session::flash('errorMsg', '编辑失败');
-
-				DB::rollBack();
+				return Redirect::back()->withInput();
 			}
-
-			return Redirect::to('shop/edit?id='.$id);
+			Goods::query()->whereId($id)->update(['logo' => $logo]);
 		}
 
-		$goods = Goods::find($id);
-		$view['levelList'] = Level::query()->orderBy('level')->get();
+		try{
+			DB::beginTransaction();
+
+			$data = [
+				'name'        => $request->input('name'),
+				'price'       => round($request->input('price'), 2) * 100,
+				'level'       => $request->input('level'),
+				'renew'       => round($request->input('renew'), 2) * 100,
+				'period'      => $request->input('period'),
+				'info'        => $request->input('info'),
+				'description' => $request->input('description'),
+				'invite_num'  => $request->input('invite_num'),
+				'limit_num'   => $request->input('limit_num'),
+				'color'       => $request->input('color'),
+				'sort'        => $request->input('sort'),
+				'is_hot'      => $request->input('is_hot', 0),
+				'status'      => $request->input('status', 0)
+			];
+
+			Goods::query()->whereId($id)->update($data);
+
+			Session::flash('successMsg', '编辑成功');
+
+			DB::commit();
+		}catch(Exception $e){
+			Session::flash('errorMsg', '编辑失败');
 
-		return view('admin.shop.goodsInfo', $view)->with(compact('goods'));
+			DB::rollBack();
+		}
+
+		return Redirect::back();
 	}
 
 	// 删除商品
-	public function delGoods(Request $request): JsonResponse {
+	public function destroy($id): JsonResponse {
 		try{
-			Goods::query()->whereId($request->input('id'))->delete();
+			$goods = Goods::query()->findOrFail($id)->delete();
+
 		}catch(Exception $e){
 			Session::flash('errorMsg', '编辑失败'.$e);
 		}

+ 4 - 4
app/Http/Controllers/Admin/GroupController.php → app/Http/Controllers/Admin/UserGroupController.php

@@ -3,7 +3,7 @@
 namespace App\Http\Controllers\Admin;
 
 use App\Http\Controllers\Controller;
-use App\Models\SsNode;
+use App\Models\Node;
 use App\Models\User;
 use App\Models\UserGroup;
 use Exception;
@@ -13,7 +13,7 @@ use Redirect;
 use Response;
 use Validator;
 
-class GroupController extends Controller {
+class UserGroupController extends Controller {
 	public function userGroupList(Request $request): \Illuminate\Http\Response {
 		$view['list'] = UserGroup::query()->paginate(15)->appends($request->except('page'));
 		return Response::view('admin.group.groupList', $view);
@@ -41,7 +41,7 @@ class GroupController extends Controller {
 			}
 			return Redirect::back()->withInput()->withErrors('操作失败');
 		}
-		$view['nodeList'] = SsNode::query()->whereStatus(1)->get();
+		$view['nodeList'] = Node::query()->whereStatus(1)->get();
 		return Response::view('admin.group.groupInfo', $view);
 	}
 
@@ -90,7 +90,7 @@ class GroupController extends Controller {
 		if(!$userGroup){
 			return Redirect::back();
 		}
-		$view['nodeList'] = SsNode::query()->whereStatus(1)->get();
+		$view['nodeList'] = Node::query()->whereStatus(1)->get();
 
 		return view('admin.group.groupInfo', $view)->with(compact('userGroup'));
 	}

+ 55 - 53
app/Http/Controllers/AdminController.php

@@ -12,24 +12,24 @@ use App\Models\Country;
 use App\Models\Invite;
 use App\Models\Label;
 use App\Models\Level;
+use App\Models\Node;
+use App\Models\NodeLabel;
+use App\Models\NodeOnlineUserIp;
+use App\Models\NodeDailyDataFlow;
 use App\Models\NotificationLog;
 use App\Models\Order;
 use App\Models\ReferralApply;
 use App\Models\ReferralLog;
 use App\Models\SsConfig;
-use App\Models\SsNode;
-use App\Models\SsNodeIp;
-use App\Models\SsNodeLabel;
-use App\Models\SsNodeTrafficDaily;
 use App\Models\User;
-use App\Models\UserBanLog;
+use App\Models\UserBanedLog;
 use App\Models\UserCreditLog;
+use App\Models\UserDataFlowLog;
+use App\Models\UserDataModifyLog;
 use App\Models\UserGroup;
+use App\Models\UserHourlyDataFlow;
 use App\Models\UserLoginLog;
 use App\Models\UserSubscribe;
-use App\Models\UserTrafficHourly;
-use App\Models\UserTrafficLog;
-use App\Models\UserTrafficModifyLog;
 use Auth;
 use DB;
 use Exception;
@@ -79,13 +79,13 @@ class AdminController extends Controller {
 		                                     ->count(); // 流量超过100G的用户
 
 		$view['flowAbnormalUserCount'] = count($this->trafficAbnormal());// 1小时内流量异常用户
-		$view['nodeCount'] = SsNode::query()->count();
-		$view['unnormalNodeCount'] = SsNode::query()->whereStatus(0)->count();
-		$view['flowCount'] = flowAutoShow(SsNodeTrafficDaily::query()
-		                                                    ->where('created_at', '>=',
-			                                                    date('Y-m-d', strtotime("-30 days")))
-		                                                    ->sum('total'));
-		$view['totalFlowCount'] = flowAutoShow(SsNodeTrafficDaily::query()->sum('total'));
+		$view['nodeCount'] = Node::query()->count();
+		$view['unnormalNodeCount'] = Node::query()->whereStatus(0)->count();
+		$view['flowCount'] = flowAutoShow(NodeDailyDataFlow::query()
+		                                                   ->where('created_at', '>=',
+			                                                  date('Y-m-d', strtotime("-30 days")))
+		                                                   ->sum('total'));
+		$view['totalFlowCount'] = flowAutoShow(NodeDailyDataFlow::query()->sum('total'));
 		$view['totalCredit'] = User::query()->where('credit', '<>', 0)->sum('credit') / 100;
 		$view['totalWaitRefAmount'] = ReferralLog::query()->whereIn('status', [0, 1])->sum('ref_amount') / 100;
 		$view['totalRefAmount'] = ReferralApply::query()->whereStatus(2)->sum('amount') / 100;
@@ -102,13 +102,13 @@ class AdminController extends Controller {
 	// 1小时内流量异常用户
 	private function trafficAbnormal(): array {
 		$result = [];
-		$userTotalTrafficList = UserTrafficHourly::query()
-		                                         ->whereNodeId(0)
-		                                         ->where('total', '>', MB * 50)
-		                                         ->where('created_at', '>=', date('Y-m-d H:i:s', time() - 3900))
-		                                         ->groupBy('user_id')
-		                                         ->selectRaw("user_id, sum(total) as totalTraffic")
-		                                         ->get(); // 只统计50M以上的记录,加快速度
+		$userTotalTrafficList = UserHourlyDataFlow::query()
+		                                          ->whereNodeId(0)
+		                                          ->where('total', '>', MB * 50)
+		                                          ->where('created_at', '>=', date('Y-m-d H:i:s', time() - 3900))
+		                                          ->groupBy('user_id')
+		                                          ->selectRaw("user_id, sum(total) as totalTraffic")
+		                                          ->get(); // 只统计50M以上的记录,加快速度
 		foreach($userTotalTrafficList as $user){
 			if($user->totalTraffic > self::$systemConfig['traffic_ban_value'] * GB){
 				$result[] = $user->user_id;
@@ -202,10 +202,10 @@ class AdminController extends Controller {
 
 			// 流量异常警告
 			$time = date('Y-m-d H:i:s', time() - 3900);
-			$totalTraffic = UserTrafficHourly::query()
-			                                 ->userHourly($user->id)
-			                                 ->where('created_at', '>=', $time)
-			                                 ->sum('total');
+			$totalTraffic = UserHourlyDataFlow::query()
+			                                  ->userHourly($user->id)
+			                                  ->where('created_at', '>=', $time)
+			                                  ->sum('total');
 			$user->trafficWarning = $totalTraffic > (self::$systemConfig['traffic_ban_value'] * GB)? 1 : 0;
 
 			// 订阅地址
@@ -431,9 +431,9 @@ class AdminController extends Controller {
 
 			User::query()->whereId($id)->delete();
 			UserSubscribe::query()->whereUserId($id)->delete();
-			UserBanLog::query()->whereUserId($id)->delete();
+			UserBanedLog::query()->whereUserId($id)->delete();
 			UserCreditLog::query()->whereUserId($id)->delete();
-			UserTrafficModifyLog::query()->whereUserId($id)->delete();
+			UserDataModifyLog::query()->whereUserId($id)->delete();
 			UserLoginLog::query()->whereUserId($id)->delete();
 
 			DB::commit();
@@ -569,7 +569,7 @@ class AdminController extends Controller {
 		$startTime = $request->input('startTime');
 		$endTime = $request->input('endTime');
 
-		$query = UserTrafficLog::query()->with(['user', 'node']);
+		$query = UserDataFlowLog::query()->with(['user', 'node']);
 
 		if(isset($port)){
 			$query->whereHas('user', static function($q) use ($port) {
@@ -610,7 +610,7 @@ class AdminController extends Controller {
 		}
 
 		$view['list'] = $list;
-		$view['nodeList'] = SsNode::query()->whereStatus(1)->orderByDesc('sort')->latest()->get();
+		$view['nodeList'] = Node::query()->whereStatus(1)->orderByDesc('sort')->latest()->get();
 
 		return Response::view('admin.logs.trafficLog', $view);
 	}
@@ -629,7 +629,7 @@ class AdminController extends Controller {
 		if($request->isMethod('POST')){
 			$infoType = $request->input('type');
 
-			$node = SsNode::find($request->input('id'));
+			$node = Node::find($request->input('id'));
 			if($node->type == 1){
 				if($node->compatible){
 					$proxyType = 'SS';
@@ -646,12 +646,12 @@ class AdminController extends Controller {
 
 		}
 
-		$view['nodeList'] = SsNode::query()
-		                          ->whereStatus(1)
-		                          ->orderByDesc('sort')
-		                          ->orderBy('id')
-		                          ->paginate(15)
-		                          ->appends($request->except('page'));
+		$view['nodeList'] = Node::query()
+		                        ->whereStatus(1)
+		                        ->orderByDesc('sort')
+		                        ->orderBy('id')
+		                        ->paginate(15)
+		                        ->appends($request->except('page'));
 		$view['user'] = $user;
 
 		return Response::view('admin.user.export', $view);
@@ -763,7 +763,7 @@ class AdminController extends Controller {
 
 		$labelList = Label::all();
 		foreach($labelList as $label){
-			$label->nodeCount = SsNodeLabel::query()->whereLabelId($label->id)->groupBy('label_id')->count();
+			$label->nodeCount = NodeLabel::query()->whereLabelId($label->id)->groupBy('label_id')->count();
 		}
 
 		$view['methodList'] = SsConfig::type(1)->get();
@@ -995,7 +995,7 @@ class AdminController extends Controller {
 		}
 
 		// 校验该国家/地区下是否存在关联节点
-		$existNode = SsNode::query()->whereCountryCode($country->code)->get();
+		$existNode = Node::query()->whereCountryCode($country->code)->get();
 		if(!$existNode){
 			return Response::json(['status' => 'fail', 'message' => '该国家/地区下存在关联节点,请先取消关联']);
 		}
@@ -1022,7 +1022,7 @@ class AdminController extends Controller {
 		}
 
 		// 校验该国家/地区下是否存在关联节点
-		$existNode = SsNode::query()->whereCountryCode($country->code)->get();
+		$existNode = Node::query()->whereCountryCode($country->code)->get();
 		if(!$existNode){
 			return Response::json(['status' => 'fail', 'message' => '该国家/地区下存在关联节点,请先取消关联']);
 		}
@@ -1359,7 +1359,7 @@ class AdminController extends Controller {
 	public function userBanLogList(Request $request): \Illuminate\Http\Response {
 		$email = $request->input('email');
 
-		$query = UserBanLog::query()->with(['user'])->latest();
+		$query = UserBanedLog::query()->with(['user'])->latest();
 
 		if(isset($email)){
 			$query->whereHas('user', static function($q) use ($email) {
@@ -1376,7 +1376,7 @@ class AdminController extends Controller {
 	public function userTrafficLogList(Request $request): \Illuminate\Http\Response {
 		$email = $request->input('email');
 
-		$query = UserTrafficModifyLog::query()->with(['user', 'order', 'order.goods']);
+		$query = UserDataModifyLog::query()->with(['user', 'order', 'order.goods']);
 
 		if(isset($email)){
 			$query->whereHas('user', static function($q) use ($email) {
@@ -1418,14 +1418,14 @@ class AdminController extends Controller {
 		if(!$userList->isEmpty()){
 			foreach($userList as $user){
 				// 最近5条在线IP记录,如果后端设置为60秒上报一次,则为10分钟内的在线IP
-				$user->onlineIPList = SsNodeIp::query()
-				                              ->with(['node'])
-				                              ->whereType('tcp')
-				                              ->wherePort($user->port)
-				                              ->where('created_at', '>=', strtotime("-10 minutes"))
-				                              ->latest()
-				                              ->limit(5)
-				                              ->get();
+				$user->onlineIPList = NodeOnlineUserIp::query()
+				                                      ->with(['node'])
+				                                      ->whereType('tcp')
+				                                      ->wherePort($user->port)
+				                                      ->where('created_at', '>=', strtotime("-10 minutes"))
+				                                      ->latest()
+				                                      ->limit(5)
+				                                      ->get();
 			}
 		}
 
@@ -1493,7 +1493,7 @@ class AdminController extends Controller {
 			DB::beginTransaction();
 
 			Label::query()->whereId($id)->delete();
-			SsNodeLabel::query()->whereLabelId($id)->delete(); // 删除节点关联
+			NodeLabel::query()->whereLabelId($id)->delete(); // 删除节点关联
 
 			DB::commit();
 
@@ -1533,7 +1533,9 @@ class AdminController extends Controller {
 		$nodeId = $request->input('nodeId');
 		$userId = $request->input('id');
 
-		$query = SsNodeIp::query()->with(['node', 'user'])->where('created_at', '>=', strtotime("-120 seconds"));
+		$query = NodeOnlineUserIp::query()
+		                         ->with(['node', 'user'])
+		                         ->where('created_at', '>=', strtotime("-120 seconds"));
 
 		if(isset($ip)){
 			$query->whereIp($ip);
@@ -1584,7 +1586,7 @@ class AdminController extends Controller {
 		}
 
 		$view['list'] = $list->paginate(20)->appends($request->except('page'));
-		$view['nodeList'] = SsNode::query()->whereStatus(1)->orderByDesc('sort')->latest()->get();
+		$view['nodeList'] = Node::query()->whereStatus(1)->orderByDesc('sort')->latest()->get();
 
 		return Response::view('admin.logs.onlineIPMonitor', $view);
 	}

+ 8 - 8
app/Http/Controllers/Api/LoginController.php

@@ -4,7 +4,7 @@ namespace App\Http\Controllers\Api;
 
 use App\Components\Helpers;
 use App\Http\Controllers\Controller;
-use App\Models\SsNode;
+use App\Models\Node;
 use App\Models\User;
 use App\Models\UserSubscribe;
 use App\Models\UserSubscribeLog;
@@ -77,13 +77,13 @@ class LoginController extends Controller {
 			$url = self::$systemConfig['subscribe_domain']?: self::$systemConfig['website_url'];
 
 			// 节点列表
-			$nodeList = SsNode::query()
-			                  ->whereStatus(1)
-			                  ->GroupNodePermit($user->group_id)
-			                  ->where('level', '<=', $user->level)
-			                  ->orderByDesc('sort')
-			                  ->orderBy('id')
-			                  ->get();
+			$nodeList = Node::query()
+			                ->whereStatus(1)
+			                ->GroupNodePermit($user->group_id)
+			                ->where('level', '<=', $user->level)
+			                ->orderByDesc('sort')
+			                ->orderBy('id')
+			                ->get();
 
 			$c_nodes = collect();
 			foreach($nodeList as $node){

+ 10 - 10
app/Http/Controllers/Api/WebApi/BaseController.php

@@ -2,16 +2,16 @@
 
 namespace App\Http\Controllers\Api\WebApi;
 
+use App\Models\Node;
+use App\Models\NodeInfo;
+use App\Models\NodeOnlineLog;
+use App\Models\NodeOnlineUserIp;
 use App\Models\Rule;
 use App\Models\RuleGroup;
 use App\Models\RuleGroupNode;
 use App\Models\RuleLog;
-use App\Models\SsNode;
-use App\Models\SsNodeInfo;
-use App\Models\SsNodeIp;
-use App\Models\SsNodeOnlineLog;
 use App\Models\User;
-use App\Models\UserTrafficLog;
+use App\Models\UserDataFlowLog;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Response;
@@ -27,7 +27,7 @@ class BaseController {
 			return $this->returnData('上报节点心跳信息失败,请检查字段');
 		}
 
-		$obj = new SsNodeInfo();
+		$obj = new NodeInfo();
 		$obj->node_id = $id;
 		$obj->uptime = (int) $request->input('uptime');
 		//$obj->load = $request->input('load');
@@ -66,7 +66,7 @@ class BaseController {
 				return $this->returnData('上报节点在线情况失败,请检查字段');
 			}
 
-			$obj = new SsNodeIp();
+			$obj = new NodeOnlineUserIp();
 			$obj->node_id = $id;
 			$obj->user_id = $input['uid'];
 			$obj->ip = $input['ip'];
@@ -80,7 +80,7 @@ class BaseController {
 			$onlineCount++;
 		}
 
-		$obj = new SsNodeOnlineLog();
+		$obj = new NodeOnlineLog();
 		$obj->node_id = $id;
 		$obj->online_user = $onlineCount;
 		$obj->log_time = time();
@@ -100,9 +100,9 @@ class BaseController {
 				return $this->returnData('上报用户流量日志失败,请检查字段');
 			}
 
-			$rate = SsNode::find($id)->traffic_rate;
+			$rate = Node::find($id)->traffic_rate;
 
-			$obj = new UserTrafficLog();
+			$obj = new UserDataFlowLog();
 			$obj->user_id = (int) $input['uid'];
 			$obj->u = (int) $input['upload'] * $rate;
 			$obj->d = (int) $input['download'] * $rate;

+ 4 - 8
app/Http/Controllers/Api/WebApi/TrojanController.php

@@ -3,14 +3,14 @@
 namespace App\Http\Controllers\Api\WebApi;
 
 use App\Components\Helpers;
-use App\Models\SsNode;
+use App\Models\Node;
 use App\Models\User;
 use Illuminate\Http\JsonResponse;
 
 class TrojanController extends BaseController {
 	// 获取节点信息
 	public function getNodeInfo($id): JsonResponse {
-		$node = SsNode::find($id);
+		$node = Node::find($id);
 
 		return $this->returnData('获取节点信息成功', 'success', 200, [
 			'id'           => $node->id,
@@ -27,12 +27,8 @@ class TrojanController extends BaseController {
 
 	// 获取节点可用的用户列表
 	public function getUserList($id): JsonResponse {
-		$node = SsNode::find($id);
-		$users = User::query()
-		             ->activeUser()
-		             ->groupUserPermit($node->id)
-		             ->where('level', '>=', $node->level)
-		             ->get();
+		$node = Node::find($id);
+		$users = User::query()->activeUser()->groupUserPermit($node->id)->where('level', '>=', $node->level)->get();
 		$data = [];
 
 		foreach($users as $user){

+ 5 - 9
app/Http/Controllers/Api/WebApi/V2RayController.php

@@ -3,8 +3,8 @@
 namespace App\Http\Controllers\Api\WebApi;
 
 use App\Components\Helpers;
+use App\Models\Node;
 use App\Models\NodeCertificate;
-use App\Models\SsNode;
 use App\Models\User;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
@@ -12,7 +12,7 @@ use Illuminate\Http\Request;
 class V2RayController extends BaseController {
 	// 获取节点信息
 	public function getNodeInfo($id): JsonResponse {
-		$node = SsNode::find($id);
+		$node = Node::find($id);
 		$nodeDv = NodeCertificate::query()->whereDomain($node->v2_host)->first();
 
 		return $this->returnData('获取节点信息成功', 'success', 200, [
@@ -40,12 +40,8 @@ class V2RayController extends BaseController {
 
 	// 获取节点可用的用户列表
 	public function getUserList($id): JsonResponse {
-		$node = SsNode::find($id);
-		$users = User::query()
-		             ->activeUser()
-		             ->groupUserPermit($node->id)
-		             ->where('level', '>=', $node->level)
-		             ->get();
+		$node = Node::find($id);
+		$users = User::query()->activeUser()->groupUserPermit($node->id)->where('level', '>=', $node->level)->get();
 		$data = [];
 
 		foreach($users as $user){
@@ -66,7 +62,7 @@ class V2RayController extends BaseController {
 		$pem = $request->input('pem');
 
 		if($request->has(['key', 'pem'])){
-			$node = SsNode::find($id);
+			$node = Node::find($id);
 			$Dv = NodeCertificate::query()->whereDomain($node->v2_host)->first();
 			if($Dv){
 				$ret = NodeCertificate::query()->whereId($Dv->id)->update(['key' => $key, 'pem' => $pem]);

+ 4 - 8
app/Http/Controllers/Api/WebApi/VNetController.php

@@ -3,14 +3,14 @@
 namespace App\Http\Controllers\Api\WebApi;
 
 use App\Components\Helpers;
-use App\Models\SsNode;
+use App\Models\Node;
 use App\Models\User;
 use Illuminate\Http\JsonResponse;
 
 class VNetController extends BaseController {
 	// 获取节点信息
 	public function getNodeInfo($id): JsonResponse {
-		$node = SsNode::find($id);
+		$node = Node::find($id);
 
 		return $this->returnData('获取节点信息成功', 'success', 200, [
 			'id'           => $node->id,
@@ -32,12 +32,8 @@ class VNetController extends BaseController {
 
 	// 获取节点可用的用户列表
 	public function getUserList($id): JsonResponse {
-		$node = SsNode::find($id);
-		$users = User::query()
-		             ->activeUser()
-		             ->groupUserPermit($node->id)
-		             ->where('level', '>=', $node->level)
-		             ->get();
+		$node = Node::find($id);
+		$users = User::query()->activeUser()->groupUserPermit($node->id)->where('level', '>=', $node->level)->get();
 		$data = [];
 
 		foreach($users as $user){

+ 7 - 7
app/Http/Controllers/AuthController.php

@@ -8,8 +8,8 @@ use App\Components\QQWry;
 use App\Mail\activeUser;
 use App\Mail\resetPassword;
 use App\Mail\sendVerifyCode;
+use App\Models\EmailFilter;
 use App\Models\Invite;
-use App\Models\SensitiveWords;
 use App\Models\User;
 use App\Models\UserLoginLog;
 use App\Models\UserSubscribe;
@@ -409,9 +409,9 @@ class AuthController extends Controller {
 			return Redirect::to('login')->withInput();
 		}
 
-		$view['emailList'] = self::$systemConfig['is_email_filtering'] != 2? false : SensitiveWords::query()
-		                                                                                           ->whereType(2)
-		                                                                                           ->get();
+		$view['emailList'] = self::$systemConfig['is_email_filtering'] != 2? false : EmailFilter::query()
+		                                                                                        ->whereType(2)
+		                                                                                        ->get();
 		Session::put('register_token', makeRandStr(16));
 
 		return Response::view('auth.register', $view);
@@ -419,12 +419,12 @@ class AuthController extends Controller {
 
 	//邮箱检查
 	private function emailChecker($email, $returnType = 0) {
-		$sensitiveWords = $this->sensitiveWords(self::$systemConfig['is_email_filtering']);
+		$emailFilterList = $this->emailFilterList(self::$systemConfig['is_email_filtering']);
 		$emailSuffix = explode('@', $email); // 提取邮箱后缀
 		switch(self::$systemConfig['is_email_filtering']){
 			// 黑名单
 			case 1:
-				if(in_array(strtolower($emailSuffix[1]), $sensitiveWords, true)){
+				if(in_array(strtolower($emailSuffix[1]), $emailFilterList, true)){
 					if($returnType){
 						return Redirect::back()->withErrors(trans('auth.email_banned'));
 					}
@@ -433,7 +433,7 @@ class AuthController extends Controller {
 				break;
 			//白名单
 			case 2:
-				if(!in_array(strtolower($emailSuffix[1]), $sensitiveWords, true)){
+				if(!in_array(strtolower($emailSuffix[1]), $emailFilterList, true)){
 					if($returnType){
 						return Redirect::back()->withErrors(trans('auth.email_invalid'));
 					}

+ 17 - 17
app/Http/Controllers/Controller.php

@@ -2,14 +2,14 @@
 
 namespace App\Http\Controllers;
 
-use App\Models\SensitiveWords;
-use App\Models\SsNode;
-use App\Models\SsNodeTrafficDaily;
-use App\Models\SsNodeTrafficHourly;
+use App\Models\EmailFilter;
+use App\Models\Node;
+use App\Models\NodeDailyDataFlow;
+use App\Models\NodeHourlyDataFlow;
 use App\Models\User;
-use App\Models\UserTrafficDaily;
-use App\Models\UserTrafficHourly;
-use App\Models\UserTrafficLog;
+use App\Models\UserDailyDataFlow;
+use App\Models\UserDataFlowLog;
+use App\Models\UserHourlyDataFlow;
 use DB;
 use Exception;
 use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
@@ -89,9 +89,9 @@ class Controller extends BaseController {
 		return $i;
 	}
 
-	// 获取敏感词
-	public function sensitiveWords($type): array {
-		return SensitiveWords::query()->whereType($type)->get()->pluck('words')->toArray();
+	// 获取邮箱后缀
+	public function emailFilterList($type): array {
+		return EmailFilter::query()->whereType($type)->pluck('words')->toArray();
 	}
 
 	// 将Base64图片转换为本地图片并保存
@@ -147,7 +147,7 @@ class Controller extends BaseController {
 	 */
 	public function getUserNodeInfo($uid, $nodeId, $infoType): string {
 		$user = User::whereId($uid)->firstOrFail();
-		$node = SsNode::whereId($nodeId)->firstOrFail();
+		$node = Node::whereId($nodeId)->firstOrFail();
 		$scheme = null;
 		// 获取分组名称
 		$group = $node->level_name;
@@ -240,13 +240,13 @@ class Controller extends BaseController {
 	// 流量使用图表
 	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);
+			$currentFlow = UserDataFlowLog::query()->whereNodeId($id);
+			$hourlyFlow = NodeHourlyDataFlow::query()->whereNodeId($id);
+			$dailyFlow = NodeDailyDataFlow::query()->whereNodeId($id);
 		}else{
-			$currentFlow = UserTrafficLog::query()->whereUserId($id);
-			$hourlyFlow = UserTrafficHourly::query()->userHourly($id);
-			$dailyFlow = UserTrafficDaily::query()->userDaily($id);
+			$currentFlow = UserDataFlowLog::query()->whereUserId($id);
+			$hourlyFlow = UserHourlyDataFlow::query()->userHourly($id);
+			$dailyFlow = UserDailyDataFlow::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();

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

@@ -86,7 +86,7 @@ abstract class AbstractPayment {
 						$q->where('type', '<=', 2);
 					})->whereIsExpire(0)->whereStatus(2)->where('oid', '<>', $order->oid)->update([
 						'expired_at' => date('Y-m-d H:i:s'),
-						'is_expire' => 1
+						'is_expire'  => 1
 					]);
 
 					User::query()->whereId($order->user_id)->update(['u' => 0, 'd' => 0, 'transfer_enable' => 0]);

+ 46 - 46
app/Http/Controllers/NodeController.php

@@ -7,21 +7,21 @@ use App\Components\NetworkDetection;
 use App\Models\Country;
 use App\Models\Label;
 use App\Models\Level;
+use App\Models\Node;
 use App\Models\NodeAuth;
 use App\Models\NodeCertificate;
+use App\Models\NodeInfo;
+use App\Models\NodeLabel;
+use App\Models\NodeOnlineLog;
+use App\Models\NodePing;
 use App\Models\NodeRule;
+use App\Models\NodeDailyDataFlow;
+use App\Models\NodeHourlyDataFlow;
 use App\Models\RuleGroup;
-use App\Models\SsNode;
-use App\Models\SsNodeInfo;
-use App\Models\SsNodeLabel;
-use App\Models\SsNodeOnlineLog;
-use App\Models\SsNodePing;
-use App\Models\SsNodeTrafficDaily;
-use App\Models\SsNodeTrafficHourly;
+use App\Models\UserDailyDataFlow;
+use App\Models\UserDataFlowLog;
 use App\Models\UserGroup;
-use App\Models\UserTrafficDaily;
-use App\Models\UserTrafficHourly;
-use App\Models\UserTrafficLog;
+use App\Models\UserHourlyDataFlow;
 use DB;
 use Exception;
 use Illuminate\Http\JsonResponse;
@@ -37,7 +37,7 @@ class NodeController extends Controller {
 	public function nodeList(Request $request): \Illuminate\Http\Response {
 		$status = $request->input('status');
 
-		$query = SsNode::query();
+		$query = Node::query();
 
 		if(isset($status)){
 			$query->whereStatus($status);
@@ -46,23 +46,23 @@ class NodeController extends Controller {
 		$nodeList = $query->orderByDesc('status')->orderBy('id')->paginate(15)->appends($request->except('page'));
 		foreach($nodeList as $node){
 			// 在线人数
-			$online_log = SsNodeOnlineLog::query()
-			                             ->whereNodeId($node->id)
-			                             ->where('log_time', '>=', strtotime("-5 minutes"))
-			                             ->latest('log_time')
-			                             ->first();
+			$online_log = NodeOnlineLog::query()
+			                           ->whereNodeId($node->id)
+			                           ->where('log_time', '>=', strtotime("-5 minutes"))
+			                           ->latest('log_time')
+			                           ->first();
 			$node->online_users = empty($online_log)? 0 : $online_log->online_user;
 
 			// 已产生流量
-			$totalTraffic = SsNodeTrafficDaily::query()->whereNodeId($node->id)->sum('total');
+			$totalTraffic = NodeDailyDataFlow::query()->whereNodeId($node->id)->sum('total');
 			$node->transfer = flowAutoShow($totalTraffic);
 
 			// 负载(10分钟以内)
-			$node_info = SsNodeInfo::query()
-			                       ->whereNodeId($node->id)
-			                       ->where('log_time', '>=', strtotime("-10 minutes"))
-			                       ->latest('log_time')
-			                       ->first();
+			$node_info = NodeInfo::query()
+			                     ->whereNodeId($node->id)
+			                     ->where('log_time', '>=', strtotime("-10 minutes"))
+			                     ->latest('log_time')
+			                     ->first();
 			$node->isOnline = empty($node_info) || empty($node_info->load)? 0 : 1;
 			$node->load = $node->isOnline? $node_info->load : '离线';
 			$node->uptime = empty($node_info)? 0 : seconds2time($node_info->uptime);
@@ -75,7 +75,7 @@ class NodeController extends Controller {
 
 	public function checkNode(Request $request): JsonResponse {
 		$id = $request->input('id');
-		$node = SsNode::find($id);
+		$node = Node::find($id);
 		// 使用DDNS的node先获取ipv4地址
 		if($node->is_ddns){
 			$ip = gethostbyname($node->server);
@@ -103,7 +103,7 @@ class NodeController extends Controller {
 			try{
 				DB::beginTransaction();
 
-				$node = new SsNode();
+				$node = new Node();
 				$node->type = $request->input('type');
 				$node->name = $request->input('name');
 				$node->country_code = $request->input('country_code');
@@ -228,11 +228,11 @@ class NodeController extends Controller {
 	// 生成节点标签
 	private function makeLabels($nodeId, $labels): void {
 		// 先删除所有该节点的标签
-		SsNodeLabel::query()->whereNodeId($nodeId)->delete();
+		NodeLabel::query()->whereNodeId($nodeId)->delete();
 
 		if(!empty($labels) && is_array($labels)){
 			foreach($labels as $label){
-				$nodeLabel = new SsNodeLabel();
+				$nodeLabel = new NodeLabel();
 				$nodeLabel->node_id = $nodeId;
 				$nodeLabel->label_id = $label;
 				$nodeLabel->save();
@@ -242,7 +242,7 @@ class NodeController extends Controller {
 
 	// 获取节点地理位置
 	private function getNodeGeo($id): bool {
-		$nodes = SsNode::query()->whereStatus(1);
+		$nodes = Node::query()->whereStatus(1);
 		if($id){
 			$nodes = $nodes->whereId($id)->get();
 		}else{
@@ -252,7 +252,7 @@ class NodeController extends Controller {
 		foreach($nodes as $node){
 			$data = getIPInfo($node->is_ddns == 1? gethostbyname($node->server) : $node->ip);
 			if($data){
-				$ret = SsNode::query()->whereId($node->id)->update(['geo' => $data['latitude'].','.$data['longitude']]);
+				$ret = Node::query()->whereId($node->id)->update(['geo' => $data['latitude'].','.$data['longitude']]);
 				if($ret){
 					$result++;
 				}
@@ -328,7 +328,7 @@ class NodeController extends Controller {
 				// 生成节点标签
 				$this->makeLabels($id, $request->input('labels'));
 
-				SsNode::query()->whereId($id)->update($data);
+				Node::query()->whereId($id)->update($data);
 				// TODO:更新节点绑定的域名DNS(将节点IP更新到域名DNS 的A记录)
 
 				DB::commit();
@@ -342,7 +342,7 @@ class NodeController extends Controller {
 				return Response::json(['status' => 'fail', 'message' => '编辑失败:'.$e->getMessage()]);
 			}
 		}else{
-			$node = SsNode::query()->with(['label'])->whereId($id)->first();
+			$node = Node::query()->with(['label'])->whereId($id)->first();
 			if($node){
 				$node->labels = $node->label->pluck('label_id');
 			}
@@ -364,7 +364,7 @@ class NodeController extends Controller {
 	public function delNode(Request $request): ?JsonResponse {
 		$id = $request->input('id');
 
-		$node = SsNode::find($id);
+		$node = Node::find($id);
 		if(!$node){
 			return Response::json(['status' => 'fail', 'message' => '节点不存在,请重试']);
 		}
@@ -372,16 +372,16 @@ class NodeController extends Controller {
 		try{
 			DB::beginTransaction();
 			// 删除分组关联、节点标签、节点相关日志
-			SsNode::query()->whereId($id)->delete();
-			SsNodeLabel::query()->whereNodeId($id)->delete();
-			SsNodeInfo::query()->whereNodeId($id)->delete();
-			SsNodeOnlineLog::query()->whereNodeId($id)->delete();
-			SsNodeTrafficDaily::query()->whereNodeId($id)->delete();
-			SsNodeTrafficHourly::query()->whereNodeId($id)->delete();
-			SsNodePing::query()->whereNodeId($id)->delete();
-			UserTrafficDaily::query()->whereNodeId($id)->delete();
-			UserTrafficHourly::query()->whereNodeId($id)->delete();
-			UserTrafficLog::query()->whereNodeId($id)->delete();
+			Node::query()->whereId($id)->delete();
+			NodeLabel::query()->whereNodeId($id)->delete();
+			NodeInfo::query()->whereNodeId($id)->delete();
+			NodeOnlineLog::query()->whereNodeId($id)->delete();
+			NodeDailyDataFlow::query()->whereNodeId($id)->delete();
+			NodeHourlyDataFlow::query()->whereNodeId($id)->delete();
+			NodePing::query()->whereNodeId($id)->delete();
+			UserDailyDataFlow::query()->whereNodeId($id)->delete();
+			UserHourlyDataFlow::query()->whereNodeId($id)->delete();
+			UserDataFlowLog::query()->whereNodeId($id)->delete();
 			NodeAuth::query()->whereNodeId($id)->delete();
 			NodeRule::query()->whereNodeId($id)->delete();
 			foreach(RuleGroup::all() as $RuleGroup){
@@ -413,7 +413,7 @@ class NodeController extends Controller {
 	// 节点流量监控
 	public function nodeMonitor(Request $request) {
 		$node_id = $request->input('id');
-		$node = SsNode::find($node_id);
+		$node = Node::find($node_id);
 		if(!$node){
 			Session::flash('errorMsg', '节点不存在,请重试');
 
@@ -429,7 +429,7 @@ class NodeController extends Controller {
 
 	// Ping节点延迟
 	public function pingNode(Request $request): ?JsonResponse {
-		$node = SsNode::find($request->input('id'));
+		$node = Node::find($request->input('id'));
 		if(!$node){
 			return Response::json(['status' => 'fail', 'message' => '节点不存在,请重试']);
 		}
@@ -454,12 +454,12 @@ class NodeController extends Controller {
 	// Ping节点延迟日志
 	public function pingLog(Request $request): \Illuminate\Http\Response {
 		$node_id = $request->input('nodeId');
-		$query = SsNodePing::query();
+		$query = NodePing::query();
 		if(isset($node_id)){
 			$query->whereNodeId($node_id);
 		}
 
-		$view['nodeList'] = SsNode::query()->orderBy('id')->get();
+		$view['nodeList'] = Node::query()->orderBy('id')->get();
 		$view['pingLogs'] = $query->latest()->paginate(15)->appends($request->except('page'));
 
 		return Response::view('admin.logs.nodePingLog', $view);
@@ -473,7 +473,7 @@ class NodeController extends Controller {
 
 	// 添加节点授权
 	public function addAuth(): JsonResponse {
-		$nodeArray = SsNode::query()->whereStatus(1)->orderBy('id')->pluck('id')->toArray();
+		$nodeArray = Node::query()->whereStatus(1)->orderBy('id')->pluck('id')->toArray();
 		$authArray = NodeAuth::query()->orderBy('id')->pluck('node_id')->toArray();
 
 		if($nodeArray == $authArray){

+ 1 - 1
app/Http/Controllers/ServiceController.php

@@ -23,7 +23,7 @@ class ServiceController extends Controller {
 		//激活预支付套餐
 		Order::query()->whereOid($prepaidOrder->oid)->update([
 			'expired_at' => date("Y-m-d H:i:s", strtotime("+".$prepaidGood->days." days")),
-			'status'    => 2
+			'status'     => 2
 		]);
 		//取出用户信息
 		$user = User::find($prepaidOrder->user_id);

+ 6 - 6
app/Http/Controllers/User/SubscribeController.php

@@ -4,7 +4,7 @@ namespace App\Http\Controllers\User;
 
 use App\Components\Helpers;
 use App\Http\Controllers\Controller;
-use App\Models\SsNode;
+use App\Models\Node;
 use App\Models\User;
 use App\Models\UserSubscribe;
 use App\Models\UserSubscribeLog;
@@ -72,11 +72,11 @@ class SubscribeController extends Controller {
 		$this->subscribeLog($subscribe->id, getClientIp(), $request->headers);
 
 		// 获取这个账号可用节点
-		$query = SsNode::query()
-		               ->whereStatus(1)
-		               ->whereIsSubscribe(1)
-		               ->groupNodePermit($user->group_id)
-		               ->where('level', '<=', $user->level);
+		$query = Node::query()
+		             ->whereStatus(1)
+		             ->whereIsSubscribe(1)
+		             ->groupNodePermit($user->group_id)
+		             ->where('level', '<=', $user->level);
 
 		if($this->subType === 1){
 			$query = $query->whereIn('type', [1, 4]);

+ 30 - 30
app/Http/Controllers/UserController.php

@@ -10,17 +10,17 @@ use App\Models\Article;
 use App\Models\Coupon;
 use App\Models\Goods;
 use App\Models\Invite;
+use App\Models\Node;
+use App\Models\NodeInfo;
+use App\Models\NodeLabel;
+use App\Models\NodePing;
 use App\Models\Order;
-use App\Models\SsNode;
-use App\Models\SsNodeInfo;
-use App\Models\SsNodeLabel;
-use App\Models\SsNodePing;
 use App\Models\Ticket;
 use App\Models\TicketReply;
 use App\Models\User;
+use App\Models\UserHourlyDataFlow;
 use App\Models\UserLoginLog;
 use App\Models\UserSubscribe;
-use App\Models\UserTrafficHourly;
 use Auth;
 use Cache;
 use DB;
@@ -64,10 +64,10 @@ class UserController extends Controller {
 		$view['unusedPercent'] = $totalTransfer > 0? round($unusedTransfer / $totalTransfer, 2) : 0;
 		$view['noticeList'] = Article::type(2)->latest()->Paginate(1); // 公告
 		//流量异常判断
-		$hourlyTraffic = UserTrafficHourly::query()
-		                                  ->userHourly($user->id)
-		                                  ->where('created_at', '>=', date('Y-m-d H:i:s', time() - Minute * 65))
-		                                  ->sum('total');
+		$hourlyTraffic = UserHourlyDataFlow::query()
+		                                   ->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;
 		//付费用户判断
 		$view['not_paying_user'] = Order::uid()
@@ -118,7 +118,7 @@ class UserController extends Controller {
 		if($request->isMethod('POST')){
 			$infoType = $request->input('type');
 
-			$node = SsNode::find($request->input('id'));
+			$node = Node::find($request->input('id'));
 			// 生成节点信息
 			if($node->type == 1){
 				$proxyType = $node->compatible? 'SS' : 'SSR';
@@ -131,33 +131,33 @@ class UserController extends Controller {
 		}
 
 		// 获取当前用户可用节点
-		$nodeList = SsNode::query()
-		                  ->whereStatus(1)
-		                  ->groupNodePermit($user->group_id)
-		                  ->where('level', '<=', $user->level)
-		                  ->orderByDesc('sort')
-		                  ->orderBy('id')
-		                  ->get();
+		$nodeList = Node::query()
+		                ->whereStatus(1)
+		                ->groupNodePermit($user->group_id)
+		                ->where('level', '<=', $user->level)
+		                ->orderByDesc('sort')
+		                ->orderBy('id')
+		                ->get();
 
 		$nodesGeo = $nodeList->pluck('name', 'geo')->toArray();
 		foreach($nodeList as $node){
-			$node->ct = number_format(SsNodePing::query()->whereNodeId($node->id)->where('ct', '>', '0')->avg('ct'), 1,
+			$node->ct = number_format(NodePing::query()->whereNodeId($node->id)->where('ct', '>', '0')->avg('ct'), 1,
 				'.', '');
-			$node->cu = number_format(SsNodePing::query()->whereNodeId($node->id)->where('cu', '>', '0')->avg('cu'), 1,
+			$node->cu = number_format(NodePing::query()->whereNodeId($node->id)->where('cu', '>', '0')->avg('cu'), 1,
 				'.', '');
-			$node->cm = number_format(SsNodePing::query()->whereNodeId($node->id)->where('cm', '>', '0')->avg('cm'), 1,
+			$node->cm = number_format(NodePing::query()->whereNodeId($node->id)->where('cm', '>', '0')->avg('cm'), 1,
 				'.', '');
-			$node->hk = number_format(SsNodePing::query()->whereNodeId($node->id)->where('hk', '>', '0')->avg('hk'), 1,
+			$node->hk = number_format(NodePing::query()->whereNodeId($node->id)->where('hk', '>', '0')->avg('hk'), 1,
 				'.', '');
 
 			// 节点在线状态
-			$node->offline = SsNodeInfo::query()
-			                           ->whereNodeId($node->id)
-			                           ->where('log_time', '>=', strtotime("-10 minutes"))
-			                           ->latest('log_time')
-			                           ->doesntExist();
+			$node->offline = NodeInfo::query()
+			                         ->whereNodeId($node->id)
+			                         ->where('log_time', '>=', strtotime("-10 minutes"))
+			                         ->latest('log_time')
+			                         ->doesntExist();
 			// 节点标签
-			$node->labels = SsNodeLabel::query()->whereNodeId($node->id)->get();
+			$node->labels = NodeLabel::query()->whereNodeId($node->id)->get();
 		}
 		$view['nodeList'] = $nodeList?: [];
 		$view['nodesGeo'] = $nodesGeo;
@@ -543,14 +543,14 @@ class UserController extends Controller {
 	public function help(): \Illuminate\Http\Response {
 		//$view['articleList'] = Article::type(1)->orderByDesc('sort')->latest()->limit(10)->paginate(5);
 		$data = [];
-		if(SsNode::query()->whereIn('type', [1, 4])->whereStatus(1)->exists()){
+		if(Node::query()->whereIn('type', [1, 4])->whereStatus(1)->exists()){
 			$data[] = 'ss';
 			//array_push
 		}
-		if(SsNode::query()->whereType(2)->whereStatus(1)->exists()){
+		if(Node::query()->whereType(2)->whereStatus(1)->exists()){
 			$data[] = 'v2';
 		}
-		if(SsNode::query()->whereType(3)->whereStatus(1)->exists()){
+		if(Node::query()->whereType(3)->whereStatus(1)->exists()){
 			$data[] = 'trojan';
 		}
 

+ 2 - 2
app/Http/Middleware/WebApi.php

@@ -2,8 +2,8 @@
 
 namespace App\Http\Middleware;
 
+use App\Models\Node;
 use App\Models\NodeAuth;
-use App\Models\SsNode;
 use Closure;
 use Illuminate\Http\JsonResponse;
 use Response;
@@ -30,7 +30,7 @@ class WebApi {
 			return $this->returnData('Your Node Id is null!');
 		}
 
-		$node = SsNode::find($id);
+		$node = Node::find($id);
 		if(!$node){// node不存在
 			return $this->returnData('Unknown Node!');
 		}

+ 25 - 0
app/Models/EmailFilter.php

@@ -0,0 +1,25 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 邮箱后缀过滤
+ *
+ * @property int    $id
+ * @property int    $type  类型:1-黑名单、2-白名单
+ * @property string $words 邮箱后缀
+ * @method static Builder|EmailFilter newModelQuery()
+ * @method static Builder|EmailFilter newQuery()
+ * @method static Builder|EmailFilter query()
+ * @method static Builder|EmailFilter whereId($value)
+ * @method static Builder|EmailFilter whereType($value)
+ * @method static Builder|EmailFilter whereWords($value)
+ * @mixin \Eloquent
+ */
+class EmailFilter extends Model {
+	public $timestamps = false;
+	protected $table = 'email_filter';
+}

+ 156 - 0
app/Models/Node.php

@@ -0,0 +1,156 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\HasMany;
+use Illuminate\Database\Eloquent\Relations\HasOne;
+
+/**
+ * 节点配置信息
+ *
+ * @property int                                                                   $id
+ * @property int                                                                   $type           服务类型:1-Shadowsocks(R)、2-V2ray、3-Trojan、4-VNet
+ * @property string                                                                $name           名称
+ * @property string                                                                $country_code   国家代码
+ * @property string|null                                                           $server         服务器域名地址
+ * @property string|null                                                           $ip             服务器IPV4地址
+ * @property string|null                                                           $ipv6           服务器IPV6地址
+ * @property int                                                                   $level          等级:0-无等级,全部可见
+ * @property int                                                                   $speed_limit    节点限速,为0表示不限速,单位Byte
+ * @property int                                                                   $client_limit   设备数限制
+ * @property string|null                                                           $relay_server   中转地址
+ * @property int|null                                                              $relay_port     中转端口
+ * @property string|null                                                           $description    节点简单描述
+ * @property string|null                                                           $geo            节点地理位置
+ * @property string                                                                $method         加密方式
+ * @property string                                                                $protocol       协议
+ * @property string|null                                                           $protocol_param 协议参数
+ * @property string                                                                $obfs           混淆
+ * @property string|null                                                           $obfs_param     混淆参数
+ * @property float                                                                 $traffic_rate   流量比率
+ * @property int                                                                   $is_subscribe   是否允许用户订阅该节点:0-否、1-是
+ * @property int                                                                   $is_ddns        是否使用DDNS:0-否、1-是
+ * @property int                                                                   $is_relay       是否中转节点:0-否、1-是
+ * @property int                                                                   $is_udp         是否启用UDP:0-不启用、1-启用
+ * @property int                                                                   $push_port      消息推送端口
+ * @property int                                                                   $detection_type 节点检测: 0-关闭、1-只检测TCP、2-只检测ICMP、3-检测全部
+ * @property int                                                                   $compatible     兼容SS
+ * @property int                                                                   $single         启用单端口功能:0-否、1-是
+ * @property int|null                                                              $port           单端口的端口号或连接端口号
+ * @property string|null                                                           $passwd         单端口的连接密码
+ * @property int                                                                   $sort           排序值,值越大越靠前显示
+ * @property int                                                                   $status         状态:0-维护、1-正常
+ * @property int                                                                   $v2_alter_id    V2Ray额外ID
+ * @property int                                                                   $v2_port        V2Ray服务端口
+ * @property string                                                                $v2_method      V2Ray加密方式
+ * @property string                                                                $v2_net         V2Ray传输协议
+ * @property string                                                                $v2_type        V2Ray伪装类型
+ * @property string                                                                $v2_host        V2Ray伪装的域名
+ * @property string                                                                $v2_path        V2Ray的WS/H2路径
+ * @property int                                                                   $v2_tls         V2Ray连接TLS:0-未开启、1-开启
+ * @property string|null                                                           $tls_provider   V2Ray节点的TLS提供商授权信息
+ * @property \Illuminate\Support\Carbon                                            $created_at     创建时间
+ * @property \Illuminate\Support\Carbon                                            $updated_at     最后更新时间
+ * @property-read \App\Models\NodeAuth|null                                        $auth
+ * @property-read string                                                           $level_name
+ * @property-read string                                                           $type_label
+ * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\NodeLabel[] $label
+ * @property-read int|null                                                         $label_count
+ * @method static Builder|Node groupNodePermit($group_id = 0)
+ * @method static Builder|Node newModelQuery()
+ * @method static Builder|Node newQuery()
+ * @method static Builder|Node query()
+ * @method static Builder|Node whereClientLimit($value)
+ * @method static Builder|Node whereCompatible($value)
+ * @method static Builder|Node whereCountryCode($value)
+ * @method static Builder|Node whereCreatedAt($value)
+ * @method static Builder|Node whereDescription($value)
+ * @method static Builder|Node whereDetectionType($value)
+ * @method static Builder|Node whereGeo($value)
+ * @method static Builder|Node whereId($value)
+ * @method static Builder|Node whereIp($value)
+ * @method static Builder|Node whereIpv6($value)
+ * @method static Builder|Node whereIsDdns($value)
+ * @method static Builder|Node whereIsRelay($value)
+ * @method static Builder|Node whereIsSubscribe($value)
+ * @method static Builder|Node whereIsUdp($value)
+ * @method static Builder|Node whereLevel($value)
+ * @method static Builder|Node whereMethod($value)
+ * @method static Builder|Node whereName($value)
+ * @method static Builder|Node whereObfs($value)
+ * @method static Builder|Node whereObfsParam($value)
+ * @method static Builder|Node wherePasswd($value)
+ * @method static Builder|Node wherePort($value)
+ * @method static Builder|Node whereProtocol($value)
+ * @method static Builder|Node whereProtocolParam($value)
+ * @method static Builder|Node wherePushPort($value)
+ * @method static Builder|Node whereRelayPort($value)
+ * @method static Builder|Node whereRelayServer($value)
+ * @method static Builder|Node whereServer($value)
+ * @method static Builder|Node whereSingle($value)
+ * @method static Builder|Node whereSort($value)
+ * @method static Builder|Node whereSpeedLimit($value)
+ * @method static Builder|Node whereStatus($value)
+ * @method static Builder|Node whereTlsProvider($value)
+ * @method static Builder|Node whereTrafficRate($value)
+ * @method static Builder|Node whereType($value)
+ * @method static Builder|Node whereUpdatedAt($value)
+ * @method static Builder|Node whereV2AlterId($value)
+ * @method static Builder|Node whereV2Host($value)
+ * @method static Builder|Node whereV2Method($value)
+ * @method static Builder|Node whereV2Net($value)
+ * @method static Builder|Node whereV2Path($value)
+ * @method static Builder|Node whereV2Port($value)
+ * @method static Builder|Node whereV2Tls($value)
+ * @method static Builder|Node whereV2Type($value)
+ * @mixin \Eloquent
+ */
+class Node extends Model {
+	protected $table = 'ss_node';
+
+	public function label(): HasMany {
+		return $this->hasMany(NodeLabel::class, 'node_id', 'id');
+	}
+
+	public function auth(): HasOne {
+		return $this->hasOne(NodeAuth::class, 'node_id', 'id');
+	}
+
+	public function getLevelNameAttribute(): string {
+		return Level::whereLevel($this->attributes['level'])->first()->name;
+	}
+
+	// Node查询,查用户所在分组Node权限
+	public function scopeGroupNodePermit($query, $group_id = 0) {
+		$userGroup = UserGroup::find($group_id);
+		if($userGroup){
+			$nodes = explode(',', $userGroup->nodes);
+			if($nodes){
+				return $query->whereIn('id', $nodes);
+			}
+		}
+		return $query;
+	}
+
+	public function getTypeLabelAttribute(): string {
+		switch($this->attributes['type']){
+			case 1:
+				$type_label = 'ShadowsocksR';
+				break;
+			case 2:
+				$type_label = 'V2Ray';
+				break;
+			case 3:
+				$type_label = 'Trojan';
+				break;
+			case 4:
+				$type_label = 'VNet';
+				break;
+			default:
+				$type_label = 'UnKnown';
+		}
+		return $type_label;
+	}
+}

+ 8 - 8
app/Models/NodeAuth.php

@@ -9,13 +9,13 @@ use Illuminate\Database\Eloquent\Relations\HasOne;
 /**
  * 节点授权密钥
  *
- * @property int                          $id
- * @property int                          $node_id    授权节点ID
- * @property string                       $key        认证KEY
- * @property string                       $secret     通信密钥
- * @property \Illuminate\Support\Carbon   $created_at 创建时间
- * @property \Illuminate\Support\Carbon   $updated_at 最后更新时间
- * @property-read \App\Models\SsNode|null $node
+ * @property int                        $id
+ * @property int                        $node_id    授权节点ID
+ * @property string                     $key        认证KEY
+ * @property string                     $secret     通信密钥
+ * @property \Illuminate\Support\Carbon $created_at 创建时间
+ * @property \Illuminate\Support\Carbon $updated_at 最后更新时间
+ * @property-read \App\Models\Node|null $node
  * @method static Builder|NodeAuth newModelQuery()
  * @method static Builder|NodeAuth newQuery()
  * @method static Builder|NodeAuth query()
@@ -31,6 +31,6 @@ class NodeAuth extends Model {
 	protected $table = 'node_auth';
 
 	public function node(): HasOne {
-		return $this->hasOne(SsNode::class, 'id', 'node_id');
+		return $this->hasOne(Node::class, 'id', 'node_id');
 	}
 }

+ 39 - 0
app/Models/NodeDailyDataFlow.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\HasOne;
+
+/**
+ * 节点每日流量统计
+ *
+ * @property int                        $id
+ * @property int                        $node_id    节点ID
+ * @property int                        $u          上传流量
+ * @property int                        $d          下载流量
+ * @property int                        $total      总流量
+ * @property string|null                $traffic    总流量(带单位)
+ * @property \Illuminate\Support\Carbon $created_at 创建时间
+ * @property-read \App\Models\Node|null $info
+ * @method static Builder|NodeDailyDataFlow newModelQuery()
+ * @method static Builder|NodeDailyDataFlow newQuery()
+ * @method static Builder|NodeDailyDataFlow query()
+ * @method static Builder|NodeDailyDataFlow whereCreatedAt($value)
+ * @method static Builder|NodeDailyDataFlow whereD($value)
+ * @method static Builder|NodeDailyDataFlow whereId($value)
+ * @method static Builder|NodeDailyDataFlow whereNodeId($value)
+ * @method static Builder|NodeDailyDataFlow whereTotal($value)
+ * @method static Builder|NodeDailyDataFlow whereTraffic($value)
+ * @method static Builder|NodeDailyDataFlow whereU($value)
+ * @mixin \Eloquent
+ */
+class NodeDailyDataFlow extends Model {
+	const UPDATED_AT = null;
+	protected $table = 'node_daily_data_flow';
+
+	public function info(): HasOne {
+		return $this->hasOne(Node::class, 'id', 'node_id');
+	}
+}

+ 39 - 0
app/Models/NodeHourlyDataFlow.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\HasOne;
+
+/**
+ * 节点每日流量统计
+ *
+ * @property int                        $id
+ * @property int                        $node_id    节点ID
+ * @property int                        $u          上传流量
+ * @property int                        $d          下载流量
+ * @property int                        $total      总流量
+ * @property string|null                $traffic    总流量(带单位)
+ * @property \Illuminate\Support\Carbon $created_at 创建时间
+ * @property-read \App\Models\Node|null $info
+ * @method static Builder|NodeHourlyDataFlow newModelQuery()
+ * @method static Builder|NodeHourlyDataFlow newQuery()
+ * @method static Builder|NodeHourlyDataFlow query()
+ * @method static Builder|NodeHourlyDataFlow whereCreatedAt($value)
+ * @method static Builder|NodeHourlyDataFlow whereD($value)
+ * @method static Builder|NodeHourlyDataFlow whereId($value)
+ * @method static Builder|NodeHourlyDataFlow whereNodeId($value)
+ * @method static Builder|NodeHourlyDataFlow whereTotal($value)
+ * @method static Builder|NodeHourlyDataFlow whereTraffic($value)
+ * @method static Builder|NodeHourlyDataFlow whereU($value)
+ * @mixin \Eloquent
+ */
+class NodeHourlyDataFlow extends Model {
+	const UPDATED_AT = null;
+	protected $table = 'node_hourly_data_flow';
+
+	public function info(): HasOne {
+		return $this->hasOne(Node::class, 'id', 'node_id');
+	}
+}

+ 29 - 0
app/Models/NodeInfo.php

@@ -0,0 +1,29 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 节点负载信息
+ *
+ * @property int    $id
+ * @property int    $node_id  节点ID
+ * @property int    $uptime   后端存活时长,单位秒
+ * @property string $load     负载
+ * @property int    $log_time 记录时间
+ * @method static Builder|NodeInfo newModelQuery()
+ * @method static Builder|NodeInfo newQuery()
+ * @method static Builder|NodeInfo query()
+ * @method static Builder|NodeInfo whereId($value)
+ * @method static Builder|NodeInfo whereLoad($value)
+ * @method static Builder|NodeInfo whereLogTime($value)
+ * @method static Builder|NodeInfo whereNodeId($value)
+ * @method static Builder|NodeInfo whereUptime($value)
+ * @mixin \Eloquent
+ */
+class NodeInfo extends Model {
+	public $timestamps = false;
+	protected $table = 'ss_node_info';
+}

+ 8 - 8
app/Models/SsNodeLabel.php → app/Models/NodeLabel.php

@@ -13,17 +13,17 @@ use Illuminate\Database\Eloquent\Relations\HasOne;
  * @property int                         $node_id  节点ID
  * @property int                         $label_id 标签ID
  * @property-read \App\Models\Label|null $labelInfo
- * @method static Builder|SsNodeLabel newModelQuery()
- * @method static Builder|SsNodeLabel newQuery()
- * @method static Builder|SsNodeLabel query()
- * @method static Builder|SsNodeLabel whereId($value)
- * @method static Builder|SsNodeLabel whereLabelId($value)
- * @method static Builder|SsNodeLabel whereNodeId($value)
+ * @method static Builder|NodeLabel newModelQuery()
+ * @method static Builder|NodeLabel newQuery()
+ * @method static Builder|NodeLabel query()
+ * @method static Builder|NodeLabel whereId($value)
+ * @method static Builder|NodeLabel whereLabelId($value)
+ * @method static Builder|NodeLabel whereNodeId($value)
  * @mixin \Eloquent
  */
-class SsNodeLabel extends Model {
+class NodeLabel extends Model {
 	public $timestamps = false;
-	protected $table = 'ss_node_label';
+	protected $table = 'node_label';
 
 	public function labelInfo(): HasOne {
 		return $this->hasOne(Label::class, 'id', 'label_id');

+ 27 - 0
app/Models/NodeOnlineLog.php

@@ -0,0 +1,27 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 节点用户在线情况
+ *
+ * @property int $id
+ * @property int $node_id     节点ID
+ * @property int $online_user 在线用户数
+ * @property int $log_time    记录时间
+ * @method static Builder|NodeOnlineLog newModelQuery()
+ * @method static Builder|NodeOnlineLog newQuery()
+ * @method static Builder|NodeOnlineLog query()
+ * @method static Builder|NodeOnlineLog whereId($value)
+ * @method static Builder|NodeOnlineLog whereLogTime($value)
+ * @method static Builder|NodeOnlineLog whereNodeId($value)
+ * @method static Builder|NodeOnlineLog whereOnlineUser($value)
+ * @mixin \Eloquent
+ */
+class NodeOnlineLog extends Model {
+	public $timestamps = false;
+	protected $table = 'node_ping';
+}

+ 44 - 0
app/Models/NodeOnlineUserIp.php

@@ -0,0 +1,44 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
+
+/**
+ * 节点在线用户IP信息
+ *
+ * @property int                   $id
+ * @property int                   $node_id    节点ID
+ * @property int                   $user_id    用户ID
+ * @property int                   $port       端口
+ * @property string                $type       类型:all、tcp、udp
+ * @property string|null           $ip         连接IP:每个IP用,号隔开
+ * @property int                   $created_at 上报时间
+ * @property-read \App\Models\Node $node
+ * @property-read \App\Models\User $user
+ * @method static Builder|NodeOnlineUserIp newModelQuery()
+ * @method static Builder|NodeOnlineUserIp newQuery()
+ * @method static Builder|NodeOnlineUserIp query()
+ * @method static Builder|NodeOnlineUserIp whereCreatedAt($value)
+ * @method static Builder|NodeOnlineUserIp whereId($value)
+ * @method static Builder|NodeOnlineUserIp whereIp($value)
+ * @method static Builder|NodeOnlineUserIp whereNodeId($value)
+ * @method static Builder|NodeOnlineUserIp wherePort($value)
+ * @method static Builder|NodeOnlineUserIp whereType($value)
+ * @method static Builder|NodeOnlineUserIp whereUserId($value)
+ * @mixin \Eloquent
+ */
+class NodeOnlineUserIp extends Model {
+	public $timestamps = false;
+	protected $table = 'ss_node_ip';
+
+	public function node(): BelongsTo {
+		return $this->belongsTo(Node::class, 'node_id', 'id');
+	}
+
+	public function user(): BelongsTo {
+		return $this->belongsTo(User::class, 'user_id', 'id');
+	}
+}

+ 39 - 0
app/Models/NodePing.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\HasOne;
+
+/**
+ * 节点定时Ping测速
+ *
+ * @property int                        $id
+ * @property int                        $node_id    对应节点id
+ * @property int                        $ct         电信
+ * @property int                        $cu         联通
+ * @property int                        $cm         移动
+ * @property int                        $hk         香港
+ * @property \Illuminate\Support\Carbon $created_at 创建时间
+ * @property-read \App\Models\Node|null $node
+ * @method static Builder|NodePing newModelQuery()
+ * @method static Builder|NodePing newQuery()
+ * @method static Builder|NodePing query()
+ * @method static Builder|NodePing whereCm($value)
+ * @method static Builder|NodePing whereCreatedAt($value)
+ * @method static Builder|NodePing whereCt($value)
+ * @method static Builder|NodePing whereCu($value)
+ * @method static Builder|NodePing whereHk($value)
+ * @method static Builder|NodePing whereId($value)
+ * @method static Builder|NodePing whereNodeId($value)
+ * @mixin \Eloquent
+ */
+class NodePing extends Model {
+	const UPDATED_AT = null;
+	protected $table = 'ss_node_ping';
+
+	public function node(): HasOne {
+		return $this->hasOne(Node::class, 'id', 'node_id');
+	}
+}

+ 10 - 10
app/Models/RuleLog.php

@@ -9,15 +9,15 @@ use Illuminate\Database\Eloquent\Relations\HasOne;
 /**
  * 触发审计规则日志
  *
- * @property int                          $id
- * @property int                          $user_id    用户ID
- * @property int                          $node_id    节点ID
- * @property int                          $rule_id    规则ID,0表示白名单模式下访问访问了非规则允许的网址
- * @property string                       $reason     触发原因
- * @property \Illuminate\Support\Carbon   $created_at 创建时间
- * @property-read \App\Models\SsNode|null $node
- * @property-read \App\Models\Rule|null   $rule
- * @property-read \App\Models\User|null   $user
+ * @property int                        $id
+ * @property int                        $user_id    用户ID
+ * @property int                        $node_id    节点ID
+ * @property int                        $rule_id    规则ID,0表示白名单模式下访问访问了非规则允许的网址
+ * @property string                     $reason     触发原因
+ * @property \Illuminate\Support\Carbon $created_at 创建时间
+ * @property-read \App\Models\Node|null $node
+ * @property-read \App\Models\Rule|null $rule
+ * @property-read \App\Models\User|null $user
  * @method static Builder|RuleLog newModelQuery()
  * @method static Builder|RuleLog newQuery()
  * @method static Builder|RuleLog query()
@@ -38,7 +38,7 @@ class RuleLog extends Model {
 	}
 
 	public function node(): HasOne {
-		return $this->hasOne(SsNode::class, 'id', 'node_id');
+		return $this->hasOne(Node::class, 'id', 'node_id');
 	}
 
 	public function rule(): HasOne {

+ 0 - 25
app/Models/SensitiveWords.php

@@ -1,25 +0,0 @@
-<?php
-
-namespace App\Models;
-
-use Illuminate\Database\Eloquent\Builder;
-use Illuminate\Database\Eloquent\Model;
-
-/**
- * 敏感词
- *
- * @property int    $id
- * @property int    $type  类型:1-黑名单、2-白名单
- * @property string $words 敏感词
- * @method static Builder|SensitiveWords newModelQuery()
- * @method static Builder|SensitiveWords newQuery()
- * @method static Builder|SensitiveWords query()
- * @method static Builder|SensitiveWords whereId($value)
- * @method static Builder|SensitiveWords whereType($value)
- * @method static Builder|SensitiveWords whereWords($value)
- * @mixin \Eloquent
- */
-class SensitiveWords extends Model {
-	public $timestamps = false;
-	protected $table = 'sensitive_words';
-}

+ 0 - 156
app/Models/SsNode.php

@@ -1,156 +0,0 @@
-<?php
-
-namespace App\Models;
-
-use Illuminate\Database\Eloquent\Builder;
-use Illuminate\Database\Eloquent\Model;
-use Illuminate\Database\Eloquent\Relations\HasMany;
-use Illuminate\Database\Eloquent\Relations\HasOne;
-
-/**
- * SS节点信息
- *
- * @property int                                                                     $id
- * @property int                                                                     $type           服务类型:1-Shadowsocks(R)、2-V2ray、3-Trojan、4-VNet
- * @property string                                                                  $name           名称
- * @property string                                                                  $country_code   国家代码
- * @property string|null                                                             $server         服务器域名地址
- * @property string|null                                                             $ip             服务器IPV4地址
- * @property string|null                                                             $ipv6           服务器IPV6地址
- * @property int                                                                     $level          等级:0-无等级,全部可见
- * @property int                                                                     $speed_limit    节点限速,为0表示不限速,单位Byte
- * @property int                                                                     $client_limit   设备数限制
- * @property string|null                                                             $relay_server   中转地址
- * @property int|null                                                                $relay_port     中转端口
- * @property string|null                                                             $description    节点简单描述
- * @property string|null                                                             $geo            节点地理位置
- * @property string                                                                  $method         加密方式
- * @property string                                                                  $protocol       协议
- * @property string|null                                                             $protocol_param 协议参数
- * @property string                                                                  $obfs           混淆
- * @property string|null                                                             $obfs_param     混淆参数
- * @property float                                                                   $traffic_rate   流量比率
- * @property int                                                                     $is_subscribe   是否允许用户订阅该节点:0-否、1-是
- * @property int                                                                     $is_ddns        是否使用DDNS:0-否、1-是
- * @property int                                                                     $is_relay       是否中转节点:0-否、1-是
- * @property int                                                                     $is_udp         是否启用UDP:0-不启用、1-启用
- * @property int                                                                     $push_port      消息推送端口
- * @property int                                                                     $detection_type 节点检测: 0-关闭、1-只检测TCP、2-只检测ICMP、3-检测全部
- * @property int                                                                     $compatible     兼容SS
- * @property int                                                                     $single         启用单端口功能:0-否、1-是
- * @property int|null                                                                $port           单端口的端口号或连接端口号
- * @property string|null                                                             $passwd         单端口的连接密码
- * @property int                                                                     $sort           排序值,值越大越靠前显示
- * @property int                                                                     $status         状态:0-维护、1-正常
- * @property int                                                                     $v2_alter_id    V2Ray额外ID
- * @property int                                                                     $v2_port        V2Ray服务端口
- * @property string                                                                  $v2_method      V2Ray加密方式
- * @property string                                                                  $v2_net         V2Ray传输协议
- * @property string                                                                  $v2_type        V2Ray伪装类型
- * @property string                                                                  $v2_host        V2Ray伪装的域名
- * @property string                                                                  $v2_path        V2Ray的WS/H2路径
- * @property int                                                                     $v2_tls         V2Ray连接TLS:0-未开启、1-开启
- * @property string|null                                                             $tls_provider   V2Ray节点的TLS提供商授权信息
- * @property \Illuminate\Support\Carbon                                              $created_at     创建时间
- * @property \Illuminate\Support\Carbon                                              $updated_at     最后更新时间
- * @property-read \App\Models\NodeAuth|null                                          $auth
- * @property-read string                                                             $level_name
- * @property-read string                                                             $type_label
- * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\SsNodeLabel[] $label
- * @property-read int|null                                                           $label_count
- * @method static Builder|SsNode groupNodePermit($group_id = 0)
- * @method static Builder|SsNode newModelQuery()
- * @method static Builder|SsNode newQuery()
- * @method static Builder|SsNode query()
- * @method static Builder|SsNode whereClientLimit($value)
- * @method static Builder|SsNode whereCompatible($value)
- * @method static Builder|SsNode whereCountryCode($value)
- * @method static Builder|SsNode whereCreatedAt($value)
- * @method static Builder|SsNode whereDescription($value)
- * @method static Builder|SsNode whereDetectionType($value)
- * @method static Builder|SsNode whereGeo($value)
- * @method static Builder|SsNode whereId($value)
- * @method static Builder|SsNode whereIp($value)
- * @method static Builder|SsNode whereIpv6($value)
- * @method static Builder|SsNode whereIsDdns($value)
- * @method static Builder|SsNode whereIsRelay($value)
- * @method static Builder|SsNode whereIsSubscribe($value)
- * @method static Builder|SsNode whereIsUdp($value)
- * @method static Builder|SsNode whereLevel($value)
- * @method static Builder|SsNode whereMethod($value)
- * @method static Builder|SsNode whereName($value)
- * @method static Builder|SsNode whereObfs($value)
- * @method static Builder|SsNode whereObfsParam($value)
- * @method static Builder|SsNode wherePasswd($value)
- * @method static Builder|SsNode wherePort($value)
- * @method static Builder|SsNode whereProtocol($value)
- * @method static Builder|SsNode whereProtocolParam($value)
- * @method static Builder|SsNode wherePushPort($value)
- * @method static Builder|SsNode whereRelayPort($value)
- * @method static Builder|SsNode whereRelayServer($value)
- * @method static Builder|SsNode whereServer($value)
- * @method static Builder|SsNode whereSingle($value)
- * @method static Builder|SsNode whereSort($value)
- * @method static Builder|SsNode whereSpeedLimit($value)
- * @method static Builder|SsNode whereStatus($value)
- * @method static Builder|SsNode whereTlsProvider($value)
- * @method static Builder|SsNode whereTrafficRate($value)
- * @method static Builder|SsNode whereType($value)
- * @method static Builder|SsNode whereUpdatedAt($value)
- * @method static Builder|SsNode whereV2AlterId($value)
- * @method static Builder|SsNode whereV2Host($value)
- * @method static Builder|SsNode whereV2Method($value)
- * @method static Builder|SsNode whereV2Net($value)
- * @method static Builder|SsNode whereV2Path($value)
- * @method static Builder|SsNode whereV2Port($value)
- * @method static Builder|SsNode whereV2Tls($value)
- * @method static Builder|SsNode whereV2Type($value)
- * @mixin \Eloquent
- */
-class SsNode extends Model {
-	protected $table = 'ss_node';
-
-	public function label(): HasMany {
-		return $this->hasMany(SsNodeLabel::class, 'node_id', 'id');
-	}
-
-	public function auth(): HasOne {
-		return $this->hasOne(NodeAuth::class, 'node_id', 'id');
-	}
-
-	public function getLevelNameAttribute(): string {
-		return Level::whereLevel($this->attributes['level'])->first()->name;
-	}
-
-	// Node查询,查用户所在分组Node权限
-	public function scopeGroupNodePermit($query, $group_id = 0) {
-		$userGroup = UserGroup::find($group_id);
-		if($userGroup){
-			$nodes = explode(',', $userGroup->nodes);
-			if($nodes){
-				return $query->whereIn('id', $nodes);
-			}
-		}
-		return $query;
-	}
-
-	public function getTypeLabelAttribute(): string {
-		switch($this->attributes['type']){
-			case 1:
-				$type_label = 'ShadowsocksR';
-				break;
-			case 2:
-				$type_label = 'V2Ray';
-				break;
-			case 3:
-				$type_label = 'Trojan';
-				break;
-			case 4:
-				$type_label = 'VNet';
-				break;
-			default:
-				$type_label = 'UnKnown';
-		}
-		return $type_label;
-	}
-}

+ 0 - 29
app/Models/SsNodeInfo.php

@@ -1,29 +0,0 @@
-<?php
-
-namespace App\Models;
-
-use Illuminate\Database\Eloquent\Builder;
-use Illuminate\Database\Eloquent\Model;
-
-/**
- * SS节点负载情况
- *
- * @property int    $id
- * @property int    $node_id  节点ID
- * @property int    $uptime   后端存活时长,单位秒
- * @property string $load     负载
- * @property int    $log_time 记录时间
- * @method static Builder|SsNodeInfo newModelQuery()
- * @method static Builder|SsNodeInfo newQuery()
- * @method static Builder|SsNodeInfo query()
- * @method static Builder|SsNodeInfo whereId($value)
- * @method static Builder|SsNodeInfo whereLoad($value)
- * @method static Builder|SsNodeInfo whereLogTime($value)
- * @method static Builder|SsNodeInfo whereNodeId($value)
- * @method static Builder|SsNodeInfo whereUptime($value)
- * @mixin \Eloquent
- */
-class SsNodeInfo extends Model {
-	public $timestamps = false;
-	protected $table = 'ss_node_info';
-}

+ 0 - 44
app/Models/SsNodeIp.php

@@ -1,44 +0,0 @@
-<?php
-
-namespace App\Models;
-
-use Illuminate\Database\Eloquent\Builder;
-use Illuminate\Database\Eloquent\Model;
-use Illuminate\Database\Eloquent\Relations\BelongsTo;
-
-/**
- * SS节点在线IP信息
- *
- * @property int                     $id
- * @property int                     $node_id    节点ID
- * @property int                     $user_id    用户ID
- * @property int                     $port       端口
- * @property string                  $type       类型:all、tcp、udp
- * @property string|null             $ip         连接IP:每个IP用,号隔开
- * @property int                     $created_at 上报时间
- * @property-read \App\Models\SsNode $node
- * @property-read \App\Models\User   $user
- * @method static Builder|SsNodeIp newModelQuery()
- * @method static Builder|SsNodeIp newQuery()
- * @method static Builder|SsNodeIp query()
- * @method static Builder|SsNodeIp whereCreatedAt($value)
- * @method static Builder|SsNodeIp whereId($value)
- * @method static Builder|SsNodeIp whereIp($value)
- * @method static Builder|SsNodeIp whereNodeId($value)
- * @method static Builder|SsNodeIp wherePort($value)
- * @method static Builder|SsNodeIp whereType($value)
- * @method static Builder|SsNodeIp whereUserId($value)
- * @mixin \Eloquent
- */
-class SsNodeIp extends Model {
-	public $timestamps = false;
-	protected $table = 'ss_node_ip';
-
-	public function node(): BelongsTo {
-		return $this->belongsTo(SsNode::class, 'node_id', 'id');
-	}
-
-	public function user(): BelongsTo {
-		return $this->belongsTo(User::class, 'user_id', 'id');
-	}
-}

+ 0 - 27
app/Models/SsNodeOnlineLog.php

@@ -1,27 +0,0 @@
-<?php
-
-namespace App\Models;
-
-use Illuminate\Database\Eloquent\Builder;
-use Illuminate\Database\Eloquent\Model;
-
-/**
- * SS节点用户在线情况
- *
- * @property int $id
- * @property int $node_id     节点ID
- * @property int $online_user 在线用户数
- * @property int $log_time    记录时间
- * @method static Builder|SsNodeOnlineLog newModelQuery()
- * @method static Builder|SsNodeOnlineLog newQuery()
- * @method static Builder|SsNodeOnlineLog query()
- * @method static Builder|SsNodeOnlineLog whereId($value)
- * @method static Builder|SsNodeOnlineLog whereLogTime($value)
- * @method static Builder|SsNodeOnlineLog whereNodeId($value)
- * @method static Builder|SsNodeOnlineLog whereOnlineUser($value)
- * @mixin \Eloquent
- */
-class SsNodeOnlineLog extends Model {
-	public $timestamps = false;
-	protected $table = 'ss_node_online_log';
-}

+ 0 - 39
app/Models/SsNodePing.php

@@ -1,39 +0,0 @@
-<?php
-
-namespace App\Models;
-
-use Illuminate\Database\Eloquent\Builder;
-use Illuminate\Database\Eloquent\Model;
-use Illuminate\Database\Eloquent\Relations\HasOne;
-
-/**
- * 节点定时Ping测速
- *
- * @property int                          $id
- * @property int                          $node_id    对应节点id
- * @property int                          $ct         电信
- * @property int                          $cu         联通
- * @property int                          $cm         移动
- * @property int                          $hk         香港
- * @property \Illuminate\Support\Carbon   $created_at 创建时间
- * @property-read \App\Models\SsNode|null $node
- * @method static Builder|SsNodePing newModelQuery()
- * @method static Builder|SsNodePing newQuery()
- * @method static Builder|SsNodePing query()
- * @method static Builder|SsNodePing whereCm($value)
- * @method static Builder|SsNodePing whereCreatedAt($value)
- * @method static Builder|SsNodePing whereCt($value)
- * @method static Builder|SsNodePing whereCu($value)
- * @method static Builder|SsNodePing whereHk($value)
- * @method static Builder|SsNodePing whereId($value)
- * @method static Builder|SsNodePing whereNodeId($value)
- * @mixin \Eloquent
- */
-class SsNodePing extends Model {
-	const UPDATED_AT = null;
-	protected $table = 'ss_node_ping';
-
-	public function node(): HasOne {
-		return $this->hasOne(SsNode::class, 'id', 'node_id');
-	}
-}

+ 0 - 39
app/Models/SsNodeTrafficDaily.php

@@ -1,39 +0,0 @@
-<?php
-
-namespace App\Models;
-
-use Illuminate\Database\Eloquent\Builder;
-use Illuminate\Database\Eloquent\Model;
-use Illuminate\Database\Eloquent\Relations\HasOne;
-
-/**
- * 节点每日流量统计
- *
- * @property int                          $id
- * @property int                          $node_id    节点ID
- * @property int                          $u          上传流量
- * @property int                          $d          下载流量
- * @property int                          $total      总流量
- * @property string|null                  $traffic    总流量(带单位)
- * @property \Illuminate\Support\Carbon   $created_at 创建时间
- * @property-read \App\Models\SsNode|null $info
- * @method static Builder|SsNodeTrafficDaily newModelQuery()
- * @method static Builder|SsNodeTrafficDaily newQuery()
- * @method static Builder|SsNodeTrafficDaily query()
- * @method static Builder|SsNodeTrafficDaily whereCreatedAt($value)
- * @method static Builder|SsNodeTrafficDaily whereD($value)
- * @method static Builder|SsNodeTrafficDaily whereId($value)
- * @method static Builder|SsNodeTrafficDaily whereNodeId($value)
- * @method static Builder|SsNodeTrafficDaily whereTotal($value)
- * @method static Builder|SsNodeTrafficDaily whereTraffic($value)
- * @method static Builder|SsNodeTrafficDaily whereU($value)
- * @mixin \Eloquent
- */
-class SsNodeTrafficDaily extends Model {
-	const UPDATED_AT = null;
-	protected $table = 'ss_node_traffic_daily';
-
-	public function info(): HasOne {
-		return $this->hasOne(SsNode::class, 'id', 'node_id');
-	}
-}

+ 0 - 39
app/Models/SsNodeTrafficHourly.php

@@ -1,39 +0,0 @@
-<?php
-
-namespace App\Models;
-
-use Illuminate\Database\Eloquent\Builder;
-use Illuminate\Database\Eloquent\Model;
-use Illuminate\Database\Eloquent\Relations\HasOne;
-
-/**
- * 节点每日流量统计
- *
- * @property int                          $id
- * @property int                          $node_id    节点ID
- * @property int                          $u          上传流量
- * @property int                          $d          下载流量
- * @property int                          $total      总流量
- * @property string|null                  $traffic    总流量(带单位)
- * @property \Illuminate\Support\Carbon   $created_at 创建时间
- * @property-read \App\Models\SsNode|null $info
- * @method static Builder|SsNodeTrafficHourly newModelQuery()
- * @method static Builder|SsNodeTrafficHourly newQuery()
- * @method static Builder|SsNodeTrafficHourly query()
- * @method static Builder|SsNodeTrafficHourly whereCreatedAt($value)
- * @method static Builder|SsNodeTrafficHourly whereD($value)
- * @method static Builder|SsNodeTrafficHourly whereId($value)
- * @method static Builder|SsNodeTrafficHourly whereNodeId($value)
- * @method static Builder|SsNodeTrafficHourly whereTotal($value)
- * @method static Builder|SsNodeTrafficHourly whereTraffic($value)
- * @method static Builder|SsNodeTrafficHourly whereU($value)
- * @mixin \Eloquent
- */
-class SsNodeTrafficHourly extends Model {
-	const UPDATED_AT = null;
-	protected $table = 'ss_node_traffic_hourly';
-
-	public function info(): HasOne {
-		return $this->hasOne(SsNode::class, 'id', 'node_id');
-	}
-}

+ 12 - 12
app/Models/UserBanLog.php → app/Models/UserBanedLog.php

@@ -17,20 +17,20 @@ use Illuminate\Database\Eloquent\Relations\HasOne;
  * @property \Illuminate\Support\Carbon $created_at  创建时间
  * @property \Illuminate\Support\Carbon $updated_at  最后更新时间
  * @property-read \App\Models\User|null $user
- * @method static Builder|UserBanLog newModelQuery()
- * @method static Builder|UserBanLog newQuery()
- * @method static Builder|UserBanLog query()
- * @method static Builder|UserBanLog whereCreatedAt($value)
- * @method static Builder|UserBanLog whereDescription($value)
- * @method static Builder|UserBanLog whereId($value)
- * @method static Builder|UserBanLog whereMinutes($value)
- * @method static Builder|UserBanLog whereStatus($value)
- * @method static Builder|UserBanLog whereUpdatedAt($value)
- * @method static Builder|UserBanLog whereUserId($value)
+ * @method static Builder|UserBanedLog newModelQuery()
+ * @method static Builder|UserBanedLog newQuery()
+ * @method static Builder|UserBanedLog query()
+ * @method static Builder|UserBanedLog whereCreatedAt($value)
+ * @method static Builder|UserBanedLog whereDescription($value)
+ * @method static Builder|UserBanedLog whereId($value)
+ * @method static Builder|UserBanedLog whereMinutes($value)
+ * @method static Builder|UserBanedLog whereStatus($value)
+ * @method static Builder|UserBanedLog whereUpdatedAt($value)
+ * @method static Builder|UserBanedLog whereUserId($value)
  * @mixin \Eloquent
  */
-class UserBanLog extends Model {
-	protected $table = 'user_ban_log';
+class UserBanedLog extends Model {
+	protected $table = 'user_baned_log';
 
 	public function user(): HasOne {
 		return $this->hasOne(User::class, 'id', 'user_id');

+ 47 - 0
app/Models/UserDailyDataFlow.php

@@ -0,0 +1,47 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\HasOne;
+
+/**
+ * 用户每日流量统计
+ *
+ * @property int                        $id
+ * @property int                        $user_id    用户ID
+ * @property int                        $node_id    节点ID,0表示统计全部节点
+ * @property int                        $u          上传流量
+ * @property int                        $d          下载流量
+ * @property int                        $total      总流量
+ * @property string|null                $traffic    总流量(带单位)
+ * @property \Illuminate\Support\Carbon $created_at 创建时间
+ * @property-read \App\Models\Node|null $node
+ * @method static Builder|UserDailyDataFlow newModelQuery()
+ * @method static Builder|UserDailyDataFlow newQuery()
+ * @method static Builder|UserDailyDataFlow query()
+ * @method static Builder|UserDailyDataFlow userDaily($uid)
+ * @method static Builder|UserDailyDataFlow whereCreatedAt($value)
+ * @method static Builder|UserDailyDataFlow whereD($value)
+ * @method static Builder|UserDailyDataFlow whereId($value)
+ * @method static Builder|UserDailyDataFlow whereNodeId($value)
+ * @method static Builder|UserDailyDataFlow whereTotal($value)
+ * @method static Builder|UserDailyDataFlow whereTraffic($value)
+ * @method static Builder|UserDailyDataFlow whereU($value)
+ * @method static Builder|UserDailyDataFlow whereUserId($value)
+ * @mixin \Eloquent
+ */
+class UserDailyDataFlow extends Model {
+	const UPDATED_AT = null;
+	protected $table = 'user_daily_data_flow';
+
+	public function node(): HasOne {
+		return $this->hasOne(Node::class, 'id', 'node_id');
+	}
+
+	// 用户每天使用总流量
+	public function scopeUserDaily($query, $uid) {
+		return $query->whereUserId($uid)->whereNodeId(0);
+	}
+}

+ 48 - 0
app/Models/UserDataFlowLog.php

@@ -0,0 +1,48 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
+
+/**
+ * 用户流量记录
+ *
+ * @property int                   $id
+ * @property int                   $user_id  用户ID
+ * @property int                   $node_id  节点ID
+ * @property int                   $u        上传流量
+ * @property int                   $d        下载流量
+ * @property float                 $rate     倍率
+ * @property string                $traffic  产生流量
+ * @property int                   $log_time 记录时间
+ * @property-read \App\Models\Node $node
+ * @property-read \App\Models\User $user
+ * @method static Builder|UserDataFlowLog newModelQuery()
+ * @method static Builder|UserDataFlowLog newQuery()
+ * @method static Builder|UserDataFlowLog query()
+ * @method static Builder|UserDataFlowLog whereD($value)
+ * @method static Builder|UserDataFlowLog whereId($value)
+ * @method static Builder|UserDataFlowLog whereLogTime($value)
+ * @method static Builder|UserDataFlowLog whereNodeId($value)
+ * @method static Builder|UserDataFlowLog whereRate($value)
+ * @method static Builder|UserDataFlowLog whereTraffic($value)
+ * @method static Builder|UserDataFlowLog whereU($value)
+ * @method static Builder|UserDataFlowLog whereUserId($value)
+ * @mixin \Eloquent
+ */
+class UserDataFlowLog extends Model {
+	public $timestamps = false;
+	protected $table = 'user_traffic_log';
+
+	// 关联账号
+	public function user(): BelongsTo {
+		return $this->belongsTo(User::class, 'user_id', 'id');
+	}
+
+	// 关联节点
+	public function node(): BelongsTo {
+		return $this->belongsTo(Node::class, 'node_id', 'id');
+	}
+}

+ 12 - 12
app/Models/UserTrafficModifyLog.php → app/Models/UserDataModifyLog.php

@@ -18,21 +18,21 @@ use Illuminate\Database\Eloquent\Relations\HasOne;
  * @property \Illuminate\Support\Carbon  $created_at  创建时间
  * @property-read \App\Models\Order|null $order
  * @property-read \App\Models\User|null  $user
- * @method static Builder|UserTrafficModifyLog newModelQuery()
- * @method static Builder|UserTrafficModifyLog newQuery()
- * @method static Builder|UserTrafficModifyLog query()
- * @method static Builder|UserTrafficModifyLog whereAfter($value)
- * @method static Builder|UserTrafficModifyLog whereBefore($value)
- * @method static Builder|UserTrafficModifyLog whereCreatedAt($value)
- * @method static Builder|UserTrafficModifyLog whereDescription($value)
- * @method static Builder|UserTrafficModifyLog whereId($value)
- * @method static Builder|UserTrafficModifyLog whereOrderId($value)
- * @method static Builder|UserTrafficModifyLog whereUserId($value)
+ * @method static Builder|UserDataModifyLog newModelQuery()
+ * @method static Builder|UserDataModifyLog newQuery()
+ * @method static Builder|UserDataModifyLog query()
+ * @method static Builder|UserDataModifyLog whereAfter($value)
+ * @method static Builder|UserDataModifyLog whereBefore($value)
+ * @method static Builder|UserDataModifyLog whereCreatedAt($value)
+ * @method static Builder|UserDataModifyLog whereDescription($value)
+ * @method static Builder|UserDataModifyLog whereId($value)
+ * @method static Builder|UserDataModifyLog whereOrderId($value)
+ * @method static Builder|UserDataModifyLog whereUserId($value)
  * @mixin \Eloquent
  */
-class UserTrafficModifyLog extends Model {
+class UserDataModifyLog extends Model {
 	const UPDATED_AT = null;
-	protected $table = 'user_traffic_modify_log';
+	protected $table = 'user_data_modify_log';
 
 	// 关联账号
 	public function user(): HasOne {

+ 47 - 0
app/Models/UserHourlyDataFlow.php

@@ -0,0 +1,47 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\HasOne;
+
+/**
+ * 用户流量每小时统计
+ *
+ * @property int                        $id
+ * @property int                        $user_id    用户ID
+ * @property int                        $node_id    节点ID,0表示统计全部节点
+ * @property int                        $u          上传流量
+ * @property int                        $d          下载流量
+ * @property int                        $total      总流量
+ * @property string|null                $traffic    总流量(带单位)
+ * @property \Illuminate\Support\Carbon $created_at 创建时间
+ * @property-read \App\Models\Node|null $node
+ * @method static Builder|UserHourlyDataFlow newModelQuery()
+ * @method static Builder|UserHourlyDataFlow newQuery()
+ * @method static Builder|UserHourlyDataFlow query()
+ * @method static Builder|UserHourlyDataFlow userHourly($uid)
+ * @method static Builder|UserHourlyDataFlow whereCreatedAt($value)
+ * @method static Builder|UserHourlyDataFlow whereD($value)
+ * @method static Builder|UserHourlyDataFlow whereId($value)
+ * @method static Builder|UserHourlyDataFlow whereNodeId($value)
+ * @method static Builder|UserHourlyDataFlow whereTotal($value)
+ * @method static Builder|UserHourlyDataFlow whereTraffic($value)
+ * @method static Builder|UserHourlyDataFlow whereU($value)
+ * @method static Builder|UserHourlyDataFlow whereUserId($value)
+ * @mixin \Eloquent
+ */
+class UserHourlyDataFlow extends Model {
+	const UPDATED_AT = null;
+	protected $table = 'user_hourly_data_flow';
+
+	public function node(): HasOne {
+		return $this->hasOne(Node::class, 'id', 'node_id');
+	}
+
+	// 用户每时使用总流量
+	public function scopeUserHourly($query, $uid) {
+		return $query->whereUserId($uid)->whereNodeId(0);
+	}
+}

+ 0 - 47
app/Models/UserTrafficDaily.php

@@ -1,47 +0,0 @@
-<?php
-
-namespace App\Models;
-
-use Illuminate\Database\Eloquent\Builder;
-use Illuminate\Database\Eloquent\Model;
-use Illuminate\Database\Eloquent\Relations\HasOne;
-
-/**
- * 用户每日流量统计
- *
- * @property int                          $id
- * @property int                          $user_id    用户ID
- * @property int                          $node_id    节点ID,0表示统计全部节点
- * @property int                          $u          上传流量
- * @property int                          $d          下载流量
- * @property int                          $total      总流量
- * @property string|null                  $traffic    总流量(带单位)
- * @property \Illuminate\Support\Carbon   $created_at 创建时间
- * @property-read \App\Models\SsNode|null $node
- * @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)
- * @method static Builder|UserTrafficDaily whereNodeId($value)
- * @method static Builder|UserTrafficDaily whereTotal($value)
- * @method static Builder|UserTrafficDaily whereTraffic($value)
- * @method static Builder|UserTrafficDaily whereU($value)
- * @method static Builder|UserTrafficDaily whereUserId($value)
- * @mixin \Eloquent
- */
-class UserTrafficDaily extends Model {
-	const UPDATED_AT = null;
-	protected $table = 'user_traffic_daily';
-
-	public function node(): HasOne {
-		return $this->hasOne(SsNode::class, 'id', 'node_id');
-	}
-
-	// 用户每天使用总流量
-	public function scopeUserDaily($query, $uid) {
-		return $query->whereUserId($uid)->whereNodeId(0);
-	}
-}

+ 0 - 47
app/Models/UserTrafficHourly.php

@@ -1,47 +0,0 @@
-<?php
-
-namespace App\Models;
-
-use Illuminate\Database\Eloquent\Builder;
-use Illuminate\Database\Eloquent\Model;
-use Illuminate\Database\Eloquent\Relations\HasOne;
-
-/**
- * 用户流量每小时统计
- *
- * @property int                          $id
- * @property int                          $user_id    用户ID
- * @property int                          $node_id    节点ID,0表示统计全部节点
- * @property int                          $u          上传流量
- * @property int                          $d          下载流量
- * @property int                          $total      总流量
- * @property string|null                  $traffic    总流量(带单位)
- * @property \Illuminate\Support\Carbon   $created_at 创建时间
- * @property-read \App\Models\SsNode|null $node
- * @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)
- * @method static Builder|UserTrafficHourly whereNodeId($value)
- * @method static Builder|UserTrafficHourly whereTotal($value)
- * @method static Builder|UserTrafficHourly whereTraffic($value)
- * @method static Builder|UserTrafficHourly whereU($value)
- * @method static Builder|UserTrafficHourly whereUserId($value)
- * @mixin \Eloquent
- */
-class UserTrafficHourly extends Model {
-	const UPDATED_AT = null;
-	protected $table = 'user_traffic_hourly';
-
-	public function node(): HasOne {
-		return $this->hasOne(SsNode::class, 'id', 'node_id');
-	}
-
-	// 用户每时使用总流量
-	public function scopeUserHourly($query, $uid) {
-		return $query->whereUserId($uid)->whereNodeId(0);
-	}
-}

+ 0 - 48
app/Models/UserTrafficLog.php

@@ -1,48 +0,0 @@
-<?php
-
-namespace App\Models;
-
-use Illuminate\Database\Eloquent\Builder;
-use Illuminate\Database\Eloquent\Model;
-use Illuminate\Database\Eloquent\Relations\BelongsTo;
-
-/**
- * 用户流量记录
- *
- * @property int                     $id
- * @property int                     $user_id  用户ID
- * @property int                     $node_id  节点ID
- * @property int                     $u        上传流量
- * @property int                     $d        下载流量
- * @property float                   $rate     倍率
- * @property string                  $traffic  产生流量
- * @property int                     $log_time 记录时间
- * @property-read \App\Models\SsNode $node
- * @property-read \App\Models\User   $user
- * @method static Builder|UserTrafficLog newModelQuery()
- * @method static Builder|UserTrafficLog newQuery()
- * @method static Builder|UserTrafficLog query()
- * @method static Builder|UserTrafficLog whereD($value)
- * @method static Builder|UserTrafficLog whereId($value)
- * @method static Builder|UserTrafficLog whereLogTime($value)
- * @method static Builder|UserTrafficLog whereNodeId($value)
- * @method static Builder|UserTrafficLog whereRate($value)
- * @method static Builder|UserTrafficLog whereTraffic($value)
- * @method static Builder|UserTrafficLog whereU($value)
- * @method static Builder|UserTrafficLog whereUserId($value)
- * @mixin \Eloquent
- */
-class UserTrafficLog extends Model {
-	public $timestamps = false;
-	protected $table = 'user_traffic_log';
-
-	// 关联账号
-	public function user(): BelongsTo {
-		return $this->belongsTo(User::class, 'user_id', 'id');
-	}
-
-	// 关联节点
-	public function node(): BelongsTo {
-		return $this->belongsTo(SsNode::class, 'node_id', 'id');
-	}
-}

+ 18 - 19
resources/views/admin/config/sensitiveWordsList.blade.php → resources/views/admin/config/emailFilter.blade.php

@@ -6,11 +6,11 @@
 	<div class="page-content container">
 		<div class="panel">
 			<div class="panel-heading">
-				<h2 class="panel-title">敏感词列表
+				<h2 class="panel-title">邮箱过滤列表
 					<small>(用于屏蔽注册邮箱后缀)</small>
 				</h2>
 				<div class="panel-actions">
-					<button class="btn btn-primary" data-toggle="modal" data-target="#add_sensitive_words"> 添加敏感词
+					<button class="btn btn-primary" data-toggle="modal" data-target="#add_email_suffix"> 添加邮箱后缀
 					</button>
 				</div>
 			</div>
@@ -20,7 +20,7 @@
 					<tr>
 						<th> #</th>
 						<th> 类型</th>
-						<th> 敏感词</th>
+						<th> 邮箱后缀</th>
 						<th> 操作</th>
 					</tr>
 					</thead>
@@ -31,7 +31,7 @@
 							<td> {{$vo->type==1? '黑':'白'}} </td>
 							<td> {{$vo->words}} </td>
 							<td>
-								<button class="btn btn-danger" onclick="delWord('{{$vo->id}}','{{$vo->words}}')">
+								<button class="btn btn-danger" onclick="delSuffix('{{$vo->id}}','{{$vo->words}}')">
 									<i class="icon wb-trash"></i>
 								</button>
 							</td>
@@ -55,14 +55,14 @@
 		</div>
 	</div>
 
-	<div id="add_sensitive_words" class="modal fade" tabindex="-1" data-focus-on="input:first" data-keyboard="false">
+	<div id="add_email_suffix" class="modal fade" tabindex="-1" data-focus-on="input:first" data-keyboard="false">
 		<div class="modal-dialog modal-simple modal-center modal-lg">
 			<div class="modal-content">
 				<div class="modal-header">
 					<button type="button" class="close" data-dismiss="modal" aria-label="Close">
 						<span aria-hidden="true">×</span>
 					</button>
-					<h4 class="modal-title"> 添加敏感词 </h4>
+					<h4 class="modal-title"> 添加邮箱后缀 </h4>
 				</div>
 				<div class="modal-body">
 					<div class="form-group row">
@@ -79,15 +79,15 @@
 						</div>
 					</div>
 					<div class="form-group row">
-						<label class="col-form-label col-md-2" for="words">敏感词</label>
+						<label class="col-form-label col-md-2" for="words">邮箱后缀</label>
 						<div class="col-md-9">
-							<input type="text" class="form-control" name="words" id="words" placeholder="请填入敏感词"/>
+							<input type="text" class="form-control" name="words" id="words" placeholder="请填入邮箱后缀"/>
 						</div>
 					</div>
 				</div>
 				<div class="modal-footer">
 					<button data-dismiss="modal" class="btn btn-danger"> 关 闭</button>
-					<button data-dismiss="modal" class="btn btn-success" onclick="addSensitiveWords()"> 提 交</button>
+					<button data-dismiss="modal" class="btn btn-success" onclick="addEmailSuffix()"> 提 交</button>
 				</div>
 			</div>
 		</div>
@@ -96,19 +96,18 @@
 @endsection
 @section('script')
 	<script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
-	<script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"
-			type="text/javascript"></script>
+	<script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
 	<script type="text/javascript">
-		// 添加敏感词
-		function addSensitiveWords() {
+		// 添加邮箱后缀
+		function addEmailSuffix() {
 			const words = $('#words').val();
 			if (words.trim() === '') {
-				swal.fire({title: '敏感词不能为空', type: 'warning', timer: 1000, showConfirmButton: false});
+				swal.fire({title: '邮箱后缀不能为空', type: 'warning', timer: 1000, showConfirmButton: false});
 				$("#words").focus();
 				return false;
 			}
 
-			$.post("/sensitiveWords/add", {
+			$.post("/filter/add", {
 				_token: '{{csrf_token()}}',
 				type: $("input:radio[name='type']:checked").val(),
 				words: words
@@ -122,18 +121,18 @@
 			});
 		}
 
-		// 删除敏感词
-		function delWord(id, name) {
+		// 删除邮箱后缀
+		function delSuffix(id, name) {
 			swal.fire({
 				title: '警告',
-				text: '确定删除敏感词 【' + name + '】 ?',
+				text: '确定删除邮箱后缀 【' + name + '】 ?',
 				type: 'warning',
 				showCancelButton: true,
 				cancelButtonText: '取消',
 				confirmButtonText: '确定',
 			}).then((result) => {
 				if (result.value) {
-					$.post("/sensitiveWords/delete", {id: id, _token: '{{csrf_token()}}'}, function (ret) {
+					$.post("/filter/delete", {id: id, _token: '{{csrf_token()}}'}, function (ret) {
 						if (ret.status === 'success') {
 							swal.fire({title: ret.message, type: 'success', timer: 1000, showConfirmButton: false})
 								.then(() => window.location.reload())

+ 1 - 0
resources/views/admin/coupon/couponList.blade.php

@@ -119,6 +119,7 @@
 	<script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
 	<script type="text/javascript">
 		$(document).ready(function () {
+			$("#sn").val({{Request::get('sn')}});
 			$('#type').val({{Request::get('type')}});
 			$('#status').val({{Request::get('status')}});
 		});

+ 9 - 9
resources/views/admin/layouts.blade.php

@@ -230,14 +230,14 @@
 					</li>
 				</ul>
 			</li>
-			<li class="site-menu-item has-sub {{in_array(Request::path(), ['shop', 'shop/add', 'shop/edit', 'coupon', 'coupon/add', 'admin/orderList']) ? 'active open' : ''}}">
+			<li class="site-menu-item has-sub {{Str::contains(Request::path(), ['goods', 'coupon', 'admin/orderList']) ? 'active open' : ''}}">
 				<a href="javascript:void(0)">
 					<i class="site-menu-icon wb-shopping-cart" aria-hidden="true"></i>
 					<span class="site-menu-title">商品系统</span>
 				</a>
 				<ul class="site-menu-sub">
-					<li class="site-menu-item {{in_array(Request::path(), ['shop', 'shop/add', 'shop/edit']) ? 'active open' : ''}}">
-						<a href="/shop">
+					<li class="site-menu-item {{Str::contains(Request::path(),'goods') ? 'active open' : ''}}">
+						<a href="{{route('goods.index')}}">
 							<span class="site-menu-title">商品管理</span>
 						</a>
 					</li>
@@ -362,15 +362,15 @@
 					</li>
 				</ul>
 			</li>
-			<li class="site-menu-item has-sub {{in_array(Request::path(), ['sensitiveWords', 'admin/config', 'admin/system']) ? 'active open' : ''}}">
+			<li class="site-menu-item has-sub {{in_array(Request::path(), ['filter', 'admin/config', 'admin/system']) ? 'active open' : ''}}">
 				<a href="javascript:void(0)">
 					<i class="site-menu-icon wb-settings" aria-hidden="true"></i>
 					<span class="site-menu-title">设置</span>
 				</a>
 				<ul class="site-menu-sub">
-					<li class="site-menu-item {{in_array(Request::path(), ['sensitiveWords']) ? 'active open' : ''}}">
-						<a href="/sensitiveWords">
-							<span class="site-menu-title">敏感词管理</span>
+					<li class="site-menu-item {{in_array(Request::path(), ['filter']) ? 'active open' : ''}}">
+						<a href="/filter">
+							<span class="site-menu-title">邮箱后缀管理</span>
 						</a>
 					</li>
 					<li class="site-menu-item {{in_array(Request::path(), ['admin/config']) ? 'active open' : ''}}">
@@ -391,8 +391,8 @@
 <div class="page">
 	<!--[if lt IE 8]>
 	<p class="browserupgrade">您正在使用 <strong>过时/老旧</strong> 的浏览器。 为了您的使用体验,请
-		<a href="http://browsehappy.com/">升级您的浏览器</a> <br/>You are using an <strong>outdated</strong> browser. Please
-		<a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.
+	<a href="http://browsehappy.com/">升级您的浏览器</a> <br/>You are using an <strong>outdated</strong> browser. Please
+	<a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.
 	</p>
 	<![endif]-->
 	@yield('content')

+ 25 - 16
resources/views/admin/shop/goodsList.blade.php → resources/views/admin/shop/index.blade.php

@@ -8,7 +8,7 @@
 			<div class="panel-heading">
 				<h1 class="panel-title"><i class="icon wb-shopping-cart" aria-hidden="true"></i>商品列表</h1>
 				<div class="panel-actions">
-					<a href="/shop/add" class="btn btn-primary"><i class="icon wb-plus"></i>添加商品</a>
+					<a href="{{route('goods.create')}}" class="btn btn-primary"><i class="icon wb-plus"></i>添加商品</a>
 				</div>
 			</div>
 			<div class="panel-body">
@@ -29,7 +29,7 @@
 					</div>
 					<div class="form-group col-lg-2 col-sm-4 btn-group">
 						<button class="btn btn-primary" onclick="Search()">搜 索</button>
-						<a href="/shop" class="btn btn-danger">重 置</a>
+						<a href="{{route('goods.index')}}" class="btn btn-danger">重 置</a>
 					</div>
 				</div>
 				<table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
@@ -64,8 +64,9 @@
 							</td>
 							<td>
 								@if($goods->logo)
-									<a href="{{$goods->logo}}" target="_blank"><img src="{{$goods->logo}}" alt="logo"
-												class="h-50"/></a>
+									<a href="{{$goods->logo}}" target="_blank">
+										<img src="{{$goods->logo}}" alt="logo" class="h-50"/>
+									</a>
 								@endif
 							</td>
 							<td> {{$goods->traffic_label}} </td>
@@ -90,11 +91,12 @@
 							</td>
 							<td>
 								<div class="btn-group">
-									<a href="/shop/edit?id={{$goods->id}}" class="btn btn-primary"><i
-												class="icon wb-edit"></i></a>
-									<button class="btn btn-danger"
-											onclick="delGoods('{{$goods->id}}','{{$goods->name}}')"><i
-												class="icon wb-trash"></i></button>
+									<a href="{{route('goods.edit',$goods->id)}}" class="btn btn-primary">
+										<i class="icon wb-edit"></i>
+									</a>
+									<button onclick="delGoods('{{route('goods.destroy',$goods->id)}}','{{$goods->name}}')" class="btn btn-danger">
+										<i class="icon wb-trash"></i>
+									</button>
 								</div>
 							</td>
 						</tr>
@@ -129,11 +131,11 @@
 
 		// 搜索
 		function Search() {
-			window.location.href = '/shop?type=' + $("#type option:selected").val() + '&status=' + $("#status option:selected").val();
+			window.location.href = '{{route('goods.index')}}?type=' + $("#type option:selected").val() + '&status=' + $("#status option:selected").val();
 		}
 
 		// 删除商品
-		function delGoods(id, name) {
+		function delGoods(url, name) {
 			swal.fire({
 				title: '警告',
 				text: '确定删除商品 【' + name + '】 ?',
@@ -143,11 +145,18 @@
 				confirmButtonText: '确定',
 			}).then((result) => {
 				if (result.value) {
-					$.post("/shop/delete", {id: id, _token: '{{csrf_token()}}'}, function (ret) {
-						swal.fire({title: ret.message, type: 'success', timer: 1000, showConfirmButton: false,})
-							.then(() => {
-								window.location.reload();
-							})
+					$.ajax({
+						url: url,
+						type: 'DELETE',
+						dataType: 'json',
+						data: {_token: '{{csrf_token()}}'},
+						success: function (ret) {
+							swal.fire({title: ret.message, type: 'success', timer: 1000, showConfirmButton: false,})
+								.then(() => {
+									window.location.reload();
+								})
+						},
+
 					});
 				}
 			});

+ 6 - 5
resources/views/admin/shop/goodsInfo.blade.php → resources/views/admin/shop/info.blade.php

@@ -5,9 +5,9 @@
 	<link href="/assets/global/vendor/ascolorpicker/asColorPicker.min.css" type="text/css" rel="stylesheet">
 	<link href="/assets/global/vendor/dropify/dropify.min.css" type="text/css" rel="stylesheet">
 	<style type="text/css">
-		.text-help {
-			padding-left: 1.0715rem;
-		}
+        .text-help {
+            padding-left: 1.0715rem;
+        }
 	</style>
 @endsection
 @section('content')
@@ -19,7 +19,7 @@
 					@isset($goods) 编辑商品 @else 添加商品 @endisset
 				</h1>
 				<div class="panel-actions">
-					<a href="{{url('/shop')}}" class="btn btn-danger">返 回</a>
+					<a href="{{route('goods.index')}}" class="btn btn-danger">返 回</a>
 				</div>
 			</div>
 			@if (Session::has('successMsg'))
@@ -47,8 +47,9 @@
 				</div>
 			@endif
 			<div class="panel-body">
-				<form action=@isset($goods){{url('/shop/edit?id='.$goods->id)}} @else {{url('/shop/add')}} @endisset"" method="post" enctype="multipart/form-data" class="form-horizontal" role="form">
+				<form action=@isset($goods){{route('goods.update',$goods->id)}} @else {{route('goods.store')}} @endisset method="post" enctype="multipart/form-data" class="form-horizontal" role="form">
 					{{csrf_field()}}
+					@isset($goods) @method('PUT') @endisset
 					<div class="form-row">
 						<div class="col-lg-6 col-md-12">
 							<div class="form-group row">

+ 9 - 14
routes/web.php

@@ -119,12 +119,7 @@ Route::group(['middleware' => ['isForbidden', 'isAdminLogin', 'isAdmin']], funct
 			Route::get('export', 'CouponController@exportCoupon'); // 导出优惠券
 		});
 
-		Route::group(['prefix' => 'shop'], function() {
-			Route::any('/', 'ShopController@goodsList'); // 商品列表
-			Route::any('add', 'ShopController@addGoods'); // 添加商品
-			Route::any('edit', 'ShopController@editGoods'); // 编辑商品
-			Route::post('delete', 'ShopController@delGoods'); // 删除商品
-		});
+		Route::resource('goods', 'ShopController')->except('show');// 商品管理
 
 		Route::group(['prefix' => 'subscribe'], function() {
 			Route::get('/', 'SubscribeController@subscribeList'); // 订阅码列表
@@ -138,10 +133,10 @@ Route::group(['middleware' => ['isForbidden', 'isAdminLogin', 'isAdmin']], funct
 			Route::post("add", "MarketingController@addPushMarketing"); // 推送消息
 		});
 
-		Route::group(['prefix' => 'sensitiveWords'], function() {
-			Route::get("/", "SensitiveWordsController@sensitiveWordslist"); // 敏感词列表
-			Route::post("add", "SensitiveWordsController@addSensitiveWords"); // 添加敏感词
-			Route::post("delete", "SensitiveWordsController@delSensitiveWords"); // 删除敏感词
+		Route::group(['prefix' => 'filter'], function() {
+			Route::get("/", "EmailFilterController@filterList"); // 邮箱过滤列表
+			Route::post("add", "EmailFilterController@addSuffix"); // 添加邮箱后缀
+			Route::post("delete", "EmailFilterController@delSuffix"); // 删除邮箱后缀
 		});
 
 		// 工具相关
@@ -171,10 +166,10 @@ Route::group(['middleware' => ['isForbidden', 'isAdminLogin', 'isAdmin']], funct
 		});
 
 		Route::group(['prefix' => 'group'], function() {
-			Route::get('/', 'GroupController@userGroupList'); // 用户分组列表(分组控制)
-			Route::match(['GET', 'POST'], 'add', 'GroupController@addUserGroup'); // 添加用户分组
-			Route::match(['GET', 'POST'], 'edit', 'GroupController@editUserGroup');// 编辑用户分组
-			Route::delete('delete', 'GroupController@delUserGroup'); // 删除用户分组
+			Route::get('/', 'UserGroupController@userGroupList'); // 用户分组列表(分组控制)
+			Route::match(['GET', 'POST'], 'add', 'UserGroupController@addUserGroup'); // 添加用户分组
+			Route::match(['GET', 'POST'], 'edit', 'UserGroupController@editUserGroup');// 编辑用户分组
+			Route::delete('delete', 'UserGroupController@delUserGroup'); // 删除用户分组
 		});
 	});
 

+ 20 - 20
sql/db.sql

@@ -103,9 +103,9 @@ CREATE TABLE `ss_node_online_log`
 
 
 -- ----------------------------
--- Table structure for ss_node_ping
+-- Table structure for node_ping
 -- ----------------------------
-CREATE TABLE `ss_node_ping`
+CREATE TABLE `node_ping`
 (
     `id`         INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
     `node_id`    INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '对应节点id',
@@ -120,9 +120,9 @@ CREATE TABLE `ss_node_ping`
 
 
 -- ----------------------------
--- Table structure for ss_node_label
+-- Table structure for node_label
 -- ----------------------------
-CREATE TABLE `ss_node_label`
+CREATE TABLE `node_label`
 (
     `id`       INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
     `node_id`  INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '节点ID',
@@ -746,9 +746,9 @@ CREATE TABLE `user_credit_log`
 
 
 -- ----------------------------
--- Table structure for user_traffic_modify_log
+-- Table structure for user_data_modify_log
 -- ----------------------------
-CREATE TABLE `user_traffic_modify_log`
+CREATE TABLE `user_data_modify_log`
 (
     `id`          INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
     `user_id`     INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '用户ID',
@@ -816,9 +816,9 @@ CREATE TABLE `notification_log`
 
 
 -- ----------------------------
--- Table structure for sensitive_words
+-- Table structure for email_filter
 -- ----------------------------
-CREATE TABLE `sensitive_words`
+CREATE TABLE `email_filter`
 (
     `id`    INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
     `type`  TINYINT(1)       NOT NULL DEFAULT '1' COMMENT '类型:1-黑名单、2-白名单',
@@ -828,9 +828,9 @@ CREATE TABLE `sensitive_words`
 
 
 -- ----------------------------
--- Records of sensitive_words
+-- Records of email_filter
 -- ----------------------------
-INSERT INTO `sensitive_words`(`type`, `words`)
+INSERT INTO `email_filter`(`type`, `words`)
 VALUES ('1', 'chacuo.com'),
        ('1', '1766258.com'),
        ('1', '3202.com'),
@@ -1010,9 +1010,9 @@ CREATE TABLE `user_subscribe_log`
 
 
 -- ----------------------------
--- Table structure for user_traffic_daily
+-- Table structure for user_daily_data_flow
 -- ----------------------------
-CREATE TABLE `user_traffic_daily`
+CREATE TABLE `user_daily_data_flow`
 (
     `id`         INT(10) UNSIGNED    NOT NULL AUTO_INCREMENT,
     `user_id`    INT(10) UNSIGNED    NOT NULL DEFAULT '0' COMMENT '用户ID',
@@ -1028,9 +1028,9 @@ CREATE TABLE `user_traffic_daily`
 
 
 -- ----------------------------
--- Table structure for user_traffic_hourly
+-- Table structure for user_hourly_data_flow
 -- ----------------------------
-CREATE TABLE `user_traffic_hourly`
+CREATE TABLE `user_hourly_data_flow`
 (
     `id`         INT(10) UNSIGNED    NOT NULL AUTO_INCREMENT,
     `user_id`    INT(10) UNSIGNED    NOT NULL DEFAULT '0' COMMENT '用户ID',
@@ -1046,9 +1046,9 @@ CREATE TABLE `user_traffic_hourly`
 
 
 -- ----------------------------
--- Table structure for node_traffic_daily
+-- Table structure for node_daily_data_flow
 -- ----------------------------
-CREATE TABLE `ss_node_traffic_daily`
+CREATE TABLE `node_daily_data_flow`
 (
     `id`         INT(10) UNSIGNED    NOT NULL AUTO_INCREMENT,
     `node_id`    INT(10) UNSIGNED    NOT NULL DEFAULT '0' COMMENT '节点ID',
@@ -1063,9 +1063,9 @@ CREATE TABLE `ss_node_traffic_daily`
 
 
 -- ----------------------------
--- Table structure for node_traffic_hourly
+-- Table structure for node_hourly_data_flow
 -- ----------------------------
-CREATE TABLE `ss_node_traffic_hourly`
+CREATE TABLE `node_hourly_data_flow`
 (
     `id`         INT(10) UNSIGNED    NOT NULL AUTO_INCREMENT,
     `node_id`    INT(10) UNSIGNED    NOT NULL DEFAULT '0' COMMENT '节点ID',
@@ -1080,9 +1080,9 @@ CREATE TABLE `ss_node_traffic_hourly`
 
 
 -- ----------------------------
--- Table structure for user_ban_log
+-- Table structure for user_baned_log
 -- ----------------------------
-CREATE TABLE `user_ban_log`
+CREATE TABLE `user_baned_log`
 (
     `id`          INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
     `user_id`     INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '用户ID',

+ 9 - 0
sql/mod/20200804.sql

@@ -0,0 +1,9 @@
+RENAME TABLE `sensitive_words` TO `email_filter`;
+RENAME TABLE `ss_node_traffic_daily` TO `node_daily_data_flow`;
+RENAME TABLE `ss_node_traffic_hourly` TO `node_hourly_data_flow`;
+RENAME TABLE `ss_node_label` TO `node_label`;
+RENAME TABLE `ss_node_ping` TO `node_ping`;
+RENAME TABLE `user_ban_log` TO `user_baned_log`;
+RENAME TABLE `user_traffic_daily` TO `user_daily_data_flow`;
+RENAME TABLE `user_traffic_modify_log` TO `user_data_modify_log`;
+RENAME TABLE `user_traffic_hourly` TO `user_hourly_data_flow`;