Browse Source

使用数据库5.7版本JSON特性, 并使用laravel特性做存储修改

兔姬桑 4 years ago
parent
commit
76cf653ef5

+ 39 - 0
app/Console/Commands/updateTextToJson.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace App\Console\Commands;
+
+use App\Models\ReferralApply;
+use App\Models\RuleGroup;
+use App\Models\UserGroup;
+use Illuminate\Console\Command;
+use Log;
+
+class updateTextToJson extends Command {
+	protected $signature = 'updateTextToJson';
+	protected $description = '转换原有数列至新数列';
+
+	public function handle(): void {
+		Log::info('----------------------------【数据转换】开始----------------------------');
+		foreach(ReferralApply::all() as $referralApply){
+			$referralApply->link_logs = $this->convertToJson($referralApply->link_logs);
+			$referralApply->save();
+		}
+		Log::info('转换返利表完成');
+		foreach(UserGroup::all() as $userGroup){
+			$userGroup->nodes = $this->convertToJson($userGroup->nodes);
+			$userGroup->save();
+		}
+		Log::info('转换用户分组表完成');
+		foreach(RuleGroup::all() as $ruleGroup){
+			$ruleGroup->rules = $this->convertToJson($ruleGroup->rules);
+			$ruleGroup->nodes = $this->convertToJson($ruleGroup->nodes);
+			$ruleGroup->save();
+		}
+		Log::info('转换审核规则表完成');
+		Log::info('----------------------------【数据转换】结束----------------------------');
+	}
+
+	private function convertToJson($string): array {
+		return explode(',', $string);
+	}
+}

+ 2 - 0
app/Console/Kernel.php

@@ -14,6 +14,7 @@ use App\Console\Commands\DailyJob;
 use App\Console\Commands\fixDailyTrafficLogError;
 use App\Console\Commands\NodeBlockedDetection;
 use App\Console\Commands\ServiceTimer;
+use App\Console\Commands\updateTextToJson;
 use App\Console\Commands\updateTicket;
 use App\Console\Commands\updateUserLevel;
 use App\Console\Commands\updateUserName;
@@ -43,6 +44,7 @@ class Kernel extends ConsoleKernel {
 		fixDailyTrafficLogError::class,
 		NodeBlockedDetection::class,
 		ServiceTimer::class,
+		updateTextToJson::class,
 		updateTicket::class,
 		updateUserLevel::class,
 		updateUserName::class,

+ 4 - 6
app/Http/Controllers/Admin/AffiliateController.php

@@ -52,10 +52,9 @@ class AffiliateController extends Controller {
 		$list = null;
 		$apply = ReferralApply::query()->with(['user'])->whereId($id)->first();
 		if($apply && $apply->link_logs){
-			$link_logs = explode(',', $apply->link_logs);
 			$list = ReferralLog::query()
 			                   ->with(['user', 'order.goods'])
-			                   ->whereIn('id', $link_logs)
+			                   ->whereIn('id', $apply->link_logs)
 			                   ->paginate(15)
 			                   ->appends($request->except('page'));
 		}
@@ -74,12 +73,11 @@ class AffiliateController extends Controller {
 		$ret = ReferralApply::query()->whereId($id)->update(['status' => $status]);
 		if($ret){
 			// 审核申请的时候将关联的
-			$referralApply = ReferralApply::find($id);
-			$log_ids = explode(',', $referralApply->link_logs);
+			$referralApply = ReferralApply::findOrFail($id);
 			if($referralApply && $status == 1){
-				ReferralLog::query()->whereIn('id', $log_ids)->update(['status' => 1]);
+				ReferralLog::query()->whereIn('id', $referralApply->link_logs)->update(['status' => 1]);
 			}elseif($referralApply && $status == 2){
-				ReferralLog::query()->whereIn('id', $log_ids)->update(['status' => 2]);
+				ReferralLog::query()->whereIn('id', $referralApply->link_logs)->update(['status' => 2]);
 			}
 		}
 

+ 14 - 184
app/Http/Controllers/Admin/RuleController.php

@@ -6,18 +6,16 @@ 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 Exception;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
-use Redirect;
 use Response;
 use Validator;
 
 class RuleController extends Controller {
 	// 审计规则列表
-	public function ruleList(Request $request): \Illuminate\Http\Response {
+	public function index(Request $request): \Illuminate\Http\Response {
 		$type = $request->input('type');
 		$query = Rule::query();
 
@@ -26,11 +24,11 @@ class RuleController extends Controller {
 		}
 
 		$view['rules'] = $query->paginate(15)->appends($request->except('page'));
-		return Response::view('admin.rule.ruleList', $view);
+		return Response::view('admin.rule.index', $view);
 	}
 
 	// 添加审计规则
-	public function addRule(Request $request): ?JsonResponse {
+	public function store(Request $request): JsonResponse {
 		$validator = Validator::make($request->all(), [
 			'type'    => 'required|between:1,4',
 			'name'    => 'required',
@@ -54,18 +52,8 @@ class RuleController extends Controller {
 	}
 
 	// 编辑审计规则
-	public function editRule(Request $request): ?JsonResponse {
-		$validator = Validator::make($request->all(), [
-			'id'           => 'required|exists:rule,id',
-			'rule_name'    => 'required',
-			'rule_pattern' => 'required',
-		]);
-
-		if($validator->fails()){
-			return Response::json(['status' => 'fail', 'message' => $validator->errors()->all()]);
-		}
-
-		$ret = Rule::query()->whereId($request->input('id'))->update([
+	public function update(Request $request, $id): JsonResponse {
+		$ret = Rule::query()->whereId($id)->update([
 			'name'    => $request->input('rule_name'),
 			'pattern' => $request->input('rule_pattern')
 		]);
@@ -76,16 +64,15 @@ class RuleController extends Controller {
 	}
 
 	// 删除审计规则
-	public function delRule(Request $request): JsonResponse {
-		$id = $request->input('id');
+	public function destroy($id): JsonResponse {
 		try{
-			Rule::query()->whereId($id)->delete();
+			Rule::whereId($id)->delete();
 
-			foreach(RuleGroup::all() as $RuleGroup){
-				$rules = explode(',', $RuleGroup->rules);
-				if(in_array($id, $rules, true)){
-					$rules = implode(',', array_diff($rules, [$id]));
-					RuleGroup::query()->whereId($RuleGroup->id)->update(['rules' => $rules]);
+			foreach(RuleGroup::all() as $ruleGroup){
+				$rules = $ruleGroup->rules;
+				if($rules && in_array($id, $rules, true)){
+					$ruleGroup->rules = array_merge(array_diff($rules, [$id]));
+					$ruleGroup->save();
 				}
 			}
 		}catch(Exception $e){
@@ -94,163 +81,6 @@ class RuleController extends Controller {
 		return Response::json(['status' => 'success', 'message' => '操作成功']);
 	}
 
-	// 审计规则分组列表
-	public function ruleGroupList(Request $request): \Illuminate\Http\Response {
-		$view['ruleGroupList'] = RuleGroup::query()->paginate(15)->appends($request->except('page'));
-		return Response::view('admin.rule.ruleGroupList', $view);
-	}
-
-	// 添加审计规则分组
-	public function addRuleGroup(Request $request) {
-		if($request->isMethod('POST')){
-			$validator = Validator::make($request->all(), [
-				'name'  => 'required',
-				'type'  => 'required|boolean',
-				'rules' => 'required',
-			]);
-
-			if($validator->fails()){
-				return Redirect::back()->withInput()->withErrors($validator->errors());
-			}
-
-			$obj = new RuleGroup();
-			$obj->name = $request->input('name');
-			$obj->type = (int) $request->input('type');
-			$obj->rules = implode(',', $request->input('rules'));
-			$obj->save();
-
-			if($obj->id){
-				return Redirect::back()->with('successMsg', '操作成功');
-			}
-			return Redirect::back()->withInput()->withErrors('操作失败');
-		}
-		$view['ruleList'] = Rule::all();
-		return Response::view('admin.rule.ruleGroupInfo', $view);
-	}
-
-	// 编辑审计规则分组
-	public function editRuleGroup(Request $request) {
-		$id = $request->input('id');
-		if($request->isMethod('POST')){
-			$validator = Validator::make($request->all(), [
-				'id'   => 'required',
-				'name' => 'required',
-				'type' => 'required|boolean'
-			]);
-
-			if($validator->fails()){
-				return Redirect::back()->withInput()->withErrors($validator->errors());
-			}
-			$name = $request->input('name');
-			$type = (int) $request->input('type');
-			$rules = $request->input('rules');
-			$ruleGroup = RuleGroup::find($id);
-			if(!$ruleGroup){
-				return Redirect::back()->withInput()->withErrors('未找到需要编辑的审计规则分组!');
-			}
-
-			$data = [];
-			if($ruleGroup->name != $name){
-				$data['name'] = $name;
-			}
-			if($ruleGroup->type != $type){
-				$data['type'] = $type;
-			}
-			if($rules){
-				$ruleStr = implode(',', $rules);
-				if($ruleGroup->rules != $ruleStr){
-					$data['rules'] = $ruleStr;
-				}elseif($data == []){
-					return Redirect::back()->with('successMsg', '检测为未修改,无变动!');
-				}
-			}elseif(isset($ruleGroup->rules)){
-				$data['rules'] = $rules;
-			}
-			$ret = RuleGroup::query()->whereId($id)->update($data);
-			if($ret){
-				return Redirect::back()->with('successMsg', '操作成功');
-			}
-			return Redirect::back()->withInput()->withErrors('操作失败');
-		}
-
-		$ruleGroup = RuleGroup::find($id);
-		if(!$ruleGroup){
-			return Redirect::back();
-		}
-		$view['ruleList'] = Rule::all();
-
-		return view('admin.rule.ruleGroupInfo', $view)->with(compact('ruleGroup'));
-	}
-
-	// 删除审计规则分组
-	public function delRuleGroup(Request $request): JsonResponse {
-		$id = $request->input('id');
-		$ruleGroup = RuleGroup::query()->whereId($id)->get();
-		if(!$ruleGroup){
-			return Response::json(['status' => 'fail', 'message' => '删除失败,未找到审计规则分组']);
-		}
-		try{
-			RuleGroup::query()->whereId($id)->delete();
-			RuleGroupNode::query()->whereRuleGroupId($id)->delete();
-
-		}catch(Exception $e){
-			return Response::json(['status' => 'fail', 'message' => '删除失败,'.$e->getMessage()]);
-		}
-
-		return Response::json(['status' => 'success', 'message' => '清理成功']);
-	}
-
-	// 规则分组关联节点
-	public function assignNode(Request $request) {
-		$id = $request->input('id');
-		if($request->isMethod('POST')){
-			$nodes = $request->input('nodes');
-			$validator = Validator::make($request->all(), [
-				'id' => 'required',
-			]);
-
-			if($validator->fails()){
-				return Redirect::back()->withInput()->withErrors($validator->errors());
-			}
-
-			$ruleGroup = RuleGroup::find($id);
-			if(!$ruleGroup){
-				return Redirect::back()->withInput()->withErrors('未找到审计规则分组!');
-			}
-
-			try{
-				if($nodes){
-					$nodeStr = implode(',', $nodes);
-					// 无变动 不改动
-					if($ruleGroup->nodes == $nodeStr){
-						return Redirect::back()->with('successMsg', '检测为未修改,无变动!');
-					}
-					RuleGroup::query()->whereId($id)->update(['nodes' => $nodeStr]);
-					RuleGroupNode::query()->whereRuleGroupId($id)->delete();
-
-					foreach($nodes as $nodeId){
-						$obj = new RuleGroupNode();
-						$obj->rule_group_id = $id;
-						$obj->node_id = $nodeId;
-						$obj->save();
-					}
-				}else{
-					RuleGroup::query()->whereId($id)->update(['nodes' => $nodes]);
-					RuleGroupNode::query()->whereRuleGroupId($id)->delete();
-				}
-			}catch(Exception $e){
-				return Redirect::back()->withInput()->withErrors($e->getMessage());
-			}
-
-			return Redirect::back()->with('successMsg', '操作成功');
-		}
-
-		$view['ruleGroup'] = RuleGroup::find($id);
-		$view['nodeList'] = Node::all();
-
-		return Response::view('admin.rule.assignNode', $view);
-	}
-
 	// 用户触发审计规则日志
 	public function ruleLogList(Request $request): \Illuminate\Http\Response {
 		$uid = $request->input('uid');
@@ -277,11 +107,11 @@ class RuleController extends Controller {
 		$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);
+		return Response::view('admin.rule.log', $view);
 	}
 
 	// 清除所有审计触发日志
-	public function clearLog(): ?JsonResponse {
+	public function clearLog(): JsonResponse {
 		try{
 			$ret = RuleLog::query()->delete();
 		}catch(Exception $e){

+ 141 - 0
app/Http/Controllers/Admin/RuleGroupController.php

@@ -0,0 +1,141 @@
+<?php
+
+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 Exception;
+use Illuminate\Http\JsonResponse;
+use Illuminate\Http\RedirectResponse;
+use Illuminate\Http\Request;
+use Redirect;
+use Response;
+use Validator;
+
+class RuleGroupController extends Controller {
+	// 审计规则分组列表
+	public function index(): \Illuminate\Http\Response {
+		$view['ruleGroupList'] = RuleGroup::query()->paginate(15);
+
+		return Response::view('admin.rule.group.index', $view);
+	}
+
+	// 添加审计规则分组页面
+	public function create(): \Illuminate\Http\Response {
+		$view['ruleList'] = Rule::all();
+
+		return Response::view('admin.rule.group.info', $view);
+	}
+
+	// 添加审计规则分组
+	public function store(Request $request): RedirectResponse {
+		$validator = Validator::make($request->all(), [
+			'name'  => 'required',
+			'type'  => 'required|boolean',
+			'rules' => 'required',
+		]);
+
+		if($validator->fails()){
+			return Redirect::back()->withInput()->withErrors($validator->errors());
+		}
+
+		$obj = new RuleGroup();
+		$obj->name = $request->input('name');
+		$obj->type = (int) $request->input('type');
+		$obj->rules = $request->input('rules');
+		$obj->save();
+
+		if($obj->id){
+			return Redirect::back()->with('successMsg', '操作成功');
+		}
+		return Redirect::back()->withInput()->withErrors('操作失败');
+	}
+
+	// 编辑审计规则分组页面
+	public function edit($id): \Illuminate\Http\Response {
+		$view['ruleGroup'] = RuleGroup::findOrFail($id);
+		$view['ruleList'] = Rule::all();
+
+		return Response::view('admin.rule.group.info', $view);
+	}
+
+	// 编辑审计规则分组
+	public function update(Request $request, $id): RedirectResponse {
+		$validator = Validator::make($request->all(), [
+			'name' => 'required',
+			'type' => 'required|boolean'
+		]);
+		if($validator->fails()){
+			return Redirect::back()->withInput()->withErrors($validator->errors());
+		}
+		$name = $request->input('name');
+		$type = (int) $request->input('type');
+		$rules = $request->input('rules');
+		$ruleGroup = RuleGroup::findOrFail($id);
+
+		$ruleGroup->name = $name;
+		$ruleGroup->type = $type;
+		$ruleGroup->rules = $rules;
+		if($ruleGroup->save()){
+			return Redirect::back()->with('successMsg', '操作成功');
+		}
+
+		return Redirect::back()->withInput()->withErrors('操作失败');
+	}
+
+	// 删除审计规则分组
+	public function destroy($id): JsonResponse {
+		try{
+			RuleGroup::whereId($id)->delete();
+			RuleGroupNode::query()->whereRuleGroupId($id)->delete();
+
+		}catch(Exception $e){
+			return Response::json(['status' => 'fail', 'message' => '删除失败,'.$e->getMessage()]);
+		}
+
+		return Response::json(['status' => 'success', 'message' => '清理成功']);
+	}
+
+	// 规则分组关联节点
+	public function assignNode($id): \Illuminate\Http\Response {
+		$view['ruleGroup'] = RuleGroup::find($id);
+		$view['nodeList'] = Node::all();
+
+		return Response::view('admin.rule.group.assign', $view);
+	}
+
+	public function assign(Request $request, $id) {
+		$nodes = $request->input('nodes');
+		$ruleGroup = RuleGroup::findOrFail($id);
+
+		try{
+			if($ruleGroup->nodes === $nodes){
+				return Redirect::back()->with('successMsg', '检测为未修改,无变动!');
+			}
+			RuleGroupNode::query()->whereRuleGroupId($id)->delete();
+			if($nodes){
+				$ruleGroup->nodes = $nodes;
+				if(!$ruleGroup->save()){
+					return Redirect::back()->withErrors("更新错误!");
+				}
+
+				foreach($nodes as $nodeId){
+					$obj = new RuleGroupNode();
+					$obj->rule_group_id = $id;
+					$obj->node_id = $nodeId;
+					$obj->save();
+				}
+			}else{
+				RuleGroup::query()->whereId($id)->update(['nodes' => null]);
+			}
+
+		}catch(Exception $e){
+			return Redirect::back()->withInput()->withErrors($e->getMessage());
+		}
+
+		return Redirect::back()->with('successMsg', '操作成功');
+	}
+}

+ 42 - 76
app/Http/Controllers/Admin/UserGroupController.php

@@ -8,107 +8,73 @@ use App\Models\User;
 use App\Models\UserGroup;
 use Exception;
 use Illuminate\Http\JsonResponse;
+use Illuminate\Http\RedirectResponse;
 use Illuminate\Http\Request;
 use Redirect;
 use Response;
 use Validator;
 
 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);
+	public function index(): \Illuminate\Http\Response {
+		$view['list'] = UserGroup::query()->paginate(15);
+		return Response::view('admin.user.group.index', $view);
 	}
 
-	// 添加用户分组
-	public function addUserGroup(Request $request) {
-		if($request->isMethod('POST')){
-			$validator = Validator::make($request->all(), [
-				'name'  => 'required',
-				'nodes' => 'required',
-			]);
+	// 添加用户分组页面
+	public function create(): \Illuminate\Http\Response {
+		$view['nodeList'] = Node::query()->whereStatus(1)->get();
+		return Response::view('admin.user.group.info', $view);
+	}
 
-			if($validator->fails()){
-				return Redirect::back()->withInput()->withErrors($validator->errors());
-			}
+	// 添加用户分组
+	public function store(Request $request): RedirectResponse {
+		$validator = Validator::make($request->all(), [
+			'name'  => 'required',
+			'nodes' => 'required',
+		]);
+
+		if($validator->fails()){
+			return Redirect::back()->withInput()->withErrors($validator->errors());
+		}
 
-			$ret = UserGroup::query()->insert([
-				'name'  => $request->input('name'),
-				'nodes' => implode(',', $request->input('nodes'))
-			]);
+		$obj = new UserGroup();
+		$obj->name = $request->input('name');
+		$obj->nodes = $request->input('nodes');
+		$obj->save();
 
-			if($ret){
-				return Redirect::back()->with('successMsg', '操作成功');
-			}
-			return Redirect::back()->withInput()->withErrors('操作失败');
+		if($obj->id){
+			return Redirect::back()->with('successMsg', '操作成功');
 		}
-		$view['nodeList'] = Node::query()->whereStatus(1)->get();
-		return Response::view('admin.group.groupInfo', $view);
+		return Redirect::back()->withInput()->withErrors('操作失败');
 	}
 
-	// 编辑用户分组
-	public function editUserGroup(Request $request) {
-		$id = $request->input('id');
-		if($request->isMethod('POST')){
-			$validator = Validator::make($request->all(), [
-				'id'   => 'required',
-				'name' => 'required',
-			]);
-
-			if($validator->fails()){
-				return Redirect::back()->withInput()->withErrors($validator->errors());
-			}
-			$name = $request->input('name');
-			$nodes = $request->input('nodes');
-			$userGroup = UserGroup::find($id);
-			if(!$userGroup){
-				return Redirect::back()->withInput()->withErrors('未找到需要编辑的用户分组!');
-			}
-
-			$data = [];
-			if($userGroup->name != $name){
-				$data['name'] = $name;
-			}
+	// 编辑用户分组页面
+	public function edit($id): \Illuminate\Http\Response {
+		$view['userGroup'] = UserGroup::findOrFail($id);
+		$view['nodeList'] = Node::query()->whereStatus(1)->get();
 
-			if($nodes){
-				$nodeStr = implode(',', $nodes);
-				if($userGroup->nodes != $nodeStr){
-					$data['nodes'] = $nodeStr;
-				}elseif($data == []){
-					return Redirect::back()->with('successMsg', '检测为未修改,无变动!');
-				}
-			}elseif(isset($userGroup->nodes)){
-				$data['nodes'] = $nodes;
-			}
-			$ret = UserGroup::query()->whereId($id)->update($data);
-			if($ret){
-				return Redirect::back()->with('successMsg', '操作成功');
-			}
-			return Redirect::back()->withInput()->withErrors('操作失败');
-		}
+		return Response::view('admin.user.group.info', $view);
+	}
 
-		$userGroup = UserGroup::find($id);
-		if(!$userGroup){
-			return Redirect::back();
+	// 编辑用户分组
+	public function update(Request $request, $id) {
+		$userGroup = UserGroup::findOrFail($id);
+		$userGroup->name = $request->input('name');
+		$userGroup->nodes = $request->input('nodes');
+		if($userGroup->save()){
+			return Redirect::back()->with('successMsg', '操作成功');
 		}
-		$view['nodeList'] = Node::query()->whereStatus(1)->get();
 
-		return view('admin.group.groupInfo', $view)->with(compact('userGroup'));
+		return Redirect::back()->withInput()->withErrors('操作失败');
 	}
 
 	// 删除用户分组
-	public function delUserGroup(Request $request): JsonResponse {
-		$id = $request->input('id');
+	public function destroy($id): JsonResponse {
 		// 校验该分组下是否存在关联账号
-		$userCount = User::query()->whereGroupId($id)->count();
-		if($userCount){
+		if(User::query()->whereGroupId($id)->count()){
 			return Response::json(['status' => 'fail', 'message' => '该分组下存在关联账号,请先取消关联!']);
 		}
 
-		$userGroup = UserGroup::find($id);
-		if(!$userGroup){
-			return Response::json(['status' => 'fail', 'message' => '删除失败,未找到用户分组']);
-		}
-
 		try{
 			UserGroup::query()->whereId($id)->delete();
 		}catch(Exception $e){

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

@@ -135,7 +135,7 @@ class BaseController {
 		if($nodeRule){
 			$ruleGroup = RuleGroup::find($nodeRule->rule_group_id);
 			if($ruleGroup){
-				foreach(explode(',', $ruleGroup->rules) as $ruleId){
+				foreach($ruleGroup->rules as $ruleId){
 					$rule = Rule::find($ruleId);
 					if($rule){
 						$new = [

+ 13 - 12
app/Http/Controllers/NodeController.php

@@ -10,13 +10,13 @@ use App\Models\Level;
 use App\Models\Node;
 use App\Models\NodeAuth;
 use App\Models\NodeCertificate;
+use App\Models\NodeDailyDataFlow;
+use App\Models\NodeHourlyDataFlow;
 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\UserDailyDataFlow;
 use App\Models\UserDataFlowLog;
@@ -384,18 +384,19 @@ class NodeController extends Controller {
 			UserDataFlowLog::query()->whereNodeId($id)->delete();
 			NodeAuth::query()->whereNodeId($id)->delete();
 			NodeRule::query()->whereNodeId($id)->delete();
-			foreach(RuleGroup::all() as $RuleGroup){
-				$nodes = explode(',', $RuleGroup->nodes);
-				if(in_array($id, $nodes, true)){
-					$nodes = implode(',', array_diff($nodes, [$id]));
-					RuleGroup::query()->whereId($RuleGroup->id)->update(['nodes' => $nodes]);
+			foreach(RuleGroup::all() as $ruleGroup){
+				$nodes = $ruleGroup->nodes;
+				if($nodes && in_array($id, $nodes, true)){
+					$ruleGroup->nodes = array_merge(array_diff($nodes, [$id]));
+					$ruleGroup->save();
 				}
 			}
-			foreach(UserGroup::all() as $UserGroup){
-				$nodes = explode(',', $UserGroup->nodes);
-				if(in_array($id, $nodes, true)){
-					$nodes = implode(',', array_diff($nodes, [$id]));
-					UserGroup::query()->whereId($UserGroup->id)->update(['nodes' => $nodes]);
+
+			foreach(UserGroup::all() as $userGroup){
+				$nodes = $userGroup->nodes;
+				if($nodes && in_array($id, $nodes, true)){
+					$userGroup->nodes = array_merge(array_diff($nodes, [$id]));
+					$userGroup->save();
 				}
 			}
 

+ 8 - 9
app/Http/Controllers/User/AffiliateController.php

@@ -65,15 +65,14 @@ class AffiliateController extends Controller {
 			]);
 		}
 
-		$ret = ReferralApply::query()->insert([
-			'user_id'   => Auth::id(),
-			'before'    => $ref_amount,
-			'after'     => 0,
-			'amount'    => $ref_amount,
-			'link_logs' => implode(',', ReferralLog::uid()->whereStatus(0)->pluck('id')->toArray()),// 取出本次申请关联返利日志ID
-			'status'    => 0
-		]);
-		if($ret){
+		$ref = new ReferralApply();
+		$ref->user_id = Auth::id();
+		$ref->before = $ref_amount;
+		$ref->after = 0;
+		$ref->amount = $ref_amount;
+		$ref->link_logs = ReferralLog::uid()->whereStatus(0)->pluck('id')->toArray();
+		$ref->status = 0;
+		if($ref->save()){
 			return Response::json(['status' => 'success', 'message' => '申请成功,请等待管理员审核']);
 		}
 

+ 1 - 4
app/Models/Node.php

@@ -126,10 +126,7 @@ class Node extends Model {
 	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->whereIn('id', $userGroup->nodes);
 		}
 		return $query;
 	}

+ 4 - 1
app/Models/ReferralApply.php

@@ -15,7 +15,7 @@ use Illuminate\Database\Eloquent\Relations\HasOne;
  * @property int                        $before     操作前可提现金额,单位分
  * @property int                        $after      操作后可提现金额,单位分
  * @property int                        $amount     本次提现金额,单位分
- * @property string                     $link_logs  关联返利日志ID,例如:1,3,4
+ * @property array                      $link_logs  关联返利日志ID,例如:1,3,4
  * @property int                        $status     状态:-1-驳回、0-待审核、1-审核通过待打款、2-已打款
  * @property \Illuminate\Support\Carbon $created_at 创建时间
  * @property \Illuminate\Support\Carbon $updated_at 最后更新时间
@@ -37,6 +37,9 @@ use Illuminate\Database\Eloquent\Relations\HasOne;
  */
 class ReferralApply extends Model {
 	protected $table = 'referral_apply';
+	protected $casts = [
+		'link_logs' => 'array'
+	];
 
 	public function scopeUid($query) {
 		return $query->whereUserId(Auth::id());

+ 6 - 2
app/Models/RuleGroup.php

@@ -11,8 +11,8 @@ use Illuminate\Database\Eloquent\Model;
  * @property int                        $id
  * @property int                        $type       模式:1-阻断、0-放行
  * @property string                     $name       分组名称
- * @property string|null                $rules      关联的规则ID,多个用,号分隔
- * @property string|null                $nodes      关联的节点ID,多个用,号分隔
+ * @property array|null                 $rules      关联的规则ID,多个用,号分隔
+ * @property array|null                 $nodes      关联的节点ID,多个用,号分隔
  * @property \Illuminate\Support\Carbon $created_at 创建时间
  * @property \Illuminate\Support\Carbon $updated_at 最后更新时间
  * @property-read string                $type_label
@@ -30,6 +30,10 @@ use Illuminate\Database\Eloquent\Model;
  */
 class RuleGroup extends Model {
 	protected $table = 'rule_group';
+	protected $casts = [
+		'rules' => 'array',
+		'nodes' => 'array'
+	];
 
 	public function getTypeLabelAttribute(): string {
 		if($this->attributes['type']){

+ 2 - 2
app/Models/User.php

@@ -163,8 +163,8 @@ class User extends Authenticatable {
 		$groups = [0];
 		if($node_id){
 			foreach(UserGroup::all() as $userGroup){
-				$nodes = explode(',', $userGroup->nodes);
-				if(in_array($node_id, $nodes, true)){
+				$nodes = $userGroup->nodes;
+				if($nodes && in_array($node_id, $nodes, true)){
 					$groups[] = $userGroup->id;
 				}
 			}

+ 6 - 3
app/Models/UserGroup.php

@@ -8,9 +8,9 @@ use Illuminate\Database\Eloquent\Model;
 /**
  * 用户分组控制
  *
- * @property int         $id
- * @property string      $name  分组名称
- * @property string|null $nodes 关联的节点ID,多个用,号分隔
+ * @property int        $id
+ * @property string     $name  分组名称
+ * @property array|null $nodes 关联的节点ID,多个用,号分隔
  * @method static Builder|UserGroup newModelQuery()
  * @method static Builder|UserGroup newQuery()
  * @method static Builder|UserGroup query()
@@ -22,4 +22,7 @@ use Illuminate\Database\Eloquent\Model;
 class UserGroup extends Model {
 	public $timestamps = false;
 	protected $table = 'user_group';
+	protected $casts = [
+		'nodes' => 'array'
+	];
 }

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

@@ -124,7 +124,7 @@
 							<span class="site-menu-title">用户管理</span>
 						</a>
 					</li>
-					<li class="site-menu-item {{in_array(Request::path(), ['group', 'group/add', 'group/edit']) ? 'active open' : ''}}">
+					<li class="site-menu-item {{Str::in_array(Request::path(), ['group']) ? 'active open' : ''}}">
 						<a href="/group">
 							<span class="site-menu-title">用戶分组</span>
 						</a>

+ 3 - 3
resources/views/admin/rule/assignNode.blade.php → resources/views/admin/rule/group/assign.blade.php

@@ -30,8 +30,8 @@
 				</div>
 			@endif
 			<div class="panel-body">
-				<form action={{url('/rule/group/assign')}} method="post" enctype="multipart/form-data" class="form-horizontal">
-					<input name="id" value="{{$ruleGroup->id}}" required hidden/>
+				<form action={{route('rule.group.assign',$ruleGroup->id)}} method="post" enctype="multipart/form-data" class="form-horizontal">
+					@method('PUT')
 					@csrf
 					<div class="form-group row">
 						<label class="col-md-2 col-sm-3 col-form-label" for="name">所属分组</label>
@@ -67,7 +67,7 @@
 	<script src="/assets/global/js/jquery.quicksearch.js" type="text/javascript"></script>
 	<script type="text/javascript">
 		$(document).ready(function () {
-			$('#nodes').multiSelect('select',{!! json_encode(explode(',', $ruleGroup->nodes)) !!});
+			$('#nodes').multiSelect('select',@json($ruleGroup->nodes));
 		})
 
 		// 权限列表

+ 17 - 11
resources/views/admin/rule/ruleGroupList.blade.php → resources/views/admin/rule/group/index.blade.php

@@ -8,7 +8,7 @@
 			<div class="panel-heading">
 				<h2 class="panel-title">规则分组</h2>
 				<div class="panel-actions">
-					<a href="/rule/group/add" class="btn btn-outline-primary">
+					<a href="{{route('rule.group.create')}}" class="btn btn-outline-primary">
 						<i class="icon wb-plus" aria-hidden="true"></i>添加分组
 					</a>
 				</div>
@@ -31,13 +31,13 @@
 							<td> {!! $ruleGroup->type_label !!} </td>
 							<td>
 								<div class="btn-group">
-									<a href="/rule/group/assign?id={{$ruleGroup->id}}" class="btn btn-sm btn-outline-primary">
+									<a href="{{route('rule.group.editNode',$ruleGroup->id)}}" class="btn btn-sm btn-outline-primary">
 										<i class="icon wb-plus" aria-hidden="true"></i>分配节点
 									</a>
-									<a href="/rule/group/edit?id={{$ruleGroup->id}}" class="btn btn-sm btn-outline-primary">
+									<a href="{{route('rule.group.edit',$ruleGroup->id)}}" class="btn btn-sm btn-outline-primary">
 										<i class="icon wb-edit"></i>编辑
 									</a>
-									<button onclick="delRuleGroup('{{$ruleGroup->id}}', '{{$ruleGroup->name}}')" class="btn btn-sm btn-outline-danger">
+									<button onclick="delRuleGroup('{{route('rule.group.destroy',$ruleGroup->id)}}', '{{$ruleGroup->name}}')" class="btn btn-sm btn-outline-danger">
 										<i class="icon wb-trash"></i>删除
 									</button>
 								</div>
@@ -67,7 +67,7 @@
 	<script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
 	<script type="text/javascript">
 		// 删除规则分组
-		function delRuleGroup(id, name) {
+		function delRuleGroup(url, name) {
 			swal.fire({
 				title: '警告',
 				text: '确定删除分组 【' + name + '】 ?',
@@ -77,12 +77,18 @@
 				confirmButtonText: '{{trans('home.ticket_confirm')}}',
 			}).then((result) => {
 				if (result.value) {
-					$.post("/rule/group/delete", {_token: '{{csrf_token()}}', id: id}, function (ret) {
-						if (ret.status === 'success') {
-							swal.fire({title: ret.message, type: 'success', timer: 1000, showConfirmButton: false})
-								.then(() => window.location.reload())
-						} else {
-							swal.fire({title: ret.message, type: "error"});
+					$.ajax({
+						type: 'DELETE',
+						url: url,
+						data: {_token: '{{csrf_token()}}'},
+						dataType: 'json',
+						success: function (ret) {
+							if (ret.status === 'success') {
+								swal.fire({title: ret.message, type: 'success', timer: 1000, showConfirmButton: false})
+									.then(() => window.location.reload())
+							} else {
+								swal.fire({title: ret.message, type: "error"}).then(() => window.location.reload())
+							}
 						}
 					});
 				}

+ 4 - 4
resources/views/admin/rule/ruleGroupInfo.blade.php → resources/views/admin/rule/group/info.blade.php

@@ -8,7 +8,7 @@
 			<div class="panel-heading">
 				<h2 class="panel-title">@isset($ruleGroup)编辑@else添加@endisset规则分组</h2>
 				<div class="panel-actions">
-					<a href="/rule/group" class="btn btn-danger">返 回</a>
+					<a href="{{route('rule.group.index')}}" class="btn btn-danger">返 回</a>
 				</div>
 			</div>
 			@if (Session::has('successMsg'))
@@ -30,8 +30,8 @@
 				</div>
 			@endif
 			<div class="panel-body">
-				<form action=@isset($ruleGroup){{url('/rule/group/edit')}}@else{{url('/rule/group/add')}}@endisset method="post" enctype="multipart/form-data" class="form-horizontal">
-					@isset($ruleGroup)<input name="id" value="{{$ruleGroup->id}}" hidden/>@endisset
+				<form action=@isset($ruleGroup){{route('rule.group.update',$ruleGroup->id)}}@else{{route('rule.group.store')}}@endisset method="post" enctype="multipart/form-data" class="form-horizontal">
+					@isset($ruleGroup)@method('PUT')@endisset
 					@csrf
 					<div class="form-group row">
 						<label class="col-md-2 col-sm-3 col-form-label" for="name">分组名称</label>
@@ -89,7 +89,7 @@
 		$(document).ready(function () {
 			$('#name').val('{{$ruleGroup->name}}');
 			$("input[name='type'][value='{{$ruleGroup->type}}']").click();
-			$('#rules').multiSelect('select',{!! json_encode(explode(',', $ruleGroup->rules)) !!});
+			$('#rules').multiSelect('select',@json($ruleGroup->rules));
 		})
 		@endisset
 		// 权限列表

+ 41 - 25
resources/views/admin/rule/ruleList.blade.php → resources/views/admin/rule/index.blade.php

@@ -51,9 +51,9 @@
 								<input type="text" class="form-control" name="rule_pattern" id="rule_pattern_{{$rule->id}}" value="{{$rule->pattern}}"/>
 							</td>
 							<td>
-								<button class="btn btn-sm btn-outline-primary" onclick="editRule('{{$rule->id}}')">
-									<i class="icon wb-edit" aria-hidden="true"></i></button>
-								<button class="btn btn-sm btn-outline-danger" onclick="delRule('{{$rule->id}}','{{$rule->name}}')">
+								<button class="btn btn-sm btn-outline-primary" onclick="editRule('{{$rule->id}}', '{{route('rule.update',$rule->id)}}')">
+									<i class="icon wb-edit"></i></button>
+								<button class="btn btn-sm btn-outline-danger" onclick="delRule('{{route('rule.destroy',$rule->id)}}','{{$rule->name}}')">
 									<i class="icon wb-trash"></i></button>
 							</td>
 						</tr>
@@ -131,42 +131,52 @@
 	<script src="/assets/global/vendor/bootstrap-select/bootstrap-select.min.js" type="text/javascript"></script>
 	<script src="/assets/global/js/Plugin/bootstrap-select.js" type="text/javascript"></script>
 	<script type="text/javascript">
+		$(document).ready(function () {
+			$('#type').selectpicker('val', {{Request::get('type')}});
+		});
+
 		// 添加规则
 		function addRule() {
-			$.post("/rule/add", {
+			$.post("{{route('rule.store')}}", {
 				_token: '{{csrf_token()}}',
 				type: $("#add_type").val(),
 				name: $("#name").val(),
 				pattern: $("#pattern").val()
 			}, function (ret) {
+				$('#add').modal('hide');
 				if (ret.status === 'success') {
 					swal.fire({title: ret.message, type: 'success', timer: 1000, showConfirmButton: false})
-						.then(() => window.location.reload())
+						.then(() => window.location.reload());
 				} else {
-					swal.fire({title: ret.message, type: "error"});
+					swal.fire({title: ret.message, type: "error"}).then(() => window.location.reload());
 				}
 			});
 		}
 
 		// 编辑规则
-		function editRule(id) {
-			$.post("/rule/edit", {
-				_token: '{{csrf_token()}}',
-				id: id,
-				rule_name: $('#rule_name_' + id).val(),
-				rule_pattern: $('#rule_pattern_' + id).val()
-			}, function (ret) {
-				if (ret.status === 'success') {
-					swal.fire({title: ret.message, type: 'success', timer: 1000, showConfirmButton: false})
-						.then(() => window.location.reload())
-				} else {
-					swal.fire({title: ret.message, type: "error"});
+		function editRule(id, url) {
+			$.ajax({
+				type: 'PUT',
+				url: url,
+				data: {
+					_token: '{{csrf_token()}}',
+					rule_name: $('#rule_name_' + id).val(),
+					rule_pattern: $('#rule_pattern_' + id).val()
+				},
+				dataType: 'json',
+				success: function (ret) {
+					if (ret.status === 'success') {
+						swal.fire({title: ret.message, type: 'success', timer: 1000, showConfirmButton: false})
+							.then(() => window.location.reload());
+					} else {
+						swal.fire({title: ret.message, type: "error"}).then(() => window.location.reload());
+					}
 				}
 			});
 		}
 
 		// 删除规则
-		function delRule(id, name) {
+		function delRule(url, name) {
 			swal.fire({
 				title: '警告',
 				text: '确定删除规则 【' + name + '】 ?',
@@ -176,12 +186,18 @@
 				confirmButtonText: '{{trans('home.ticket_confirm')}}',
 			}).then((result) => {
 				if (result.value) {
-					$.post("/rule/delete", {_token: '{{csrf_token()}}', id: id}, function (ret) {
-						if (ret.status === 'success') {
-							swal.fire({title: ret.message, type: 'success', timer: 1000, showConfirmButton: false})
-								.then(() => window.location.reload())
-						} else {
-							swal.fire({title: ret.message, type: "error"});
+					$.ajax({
+						type: 'DELETE',
+						url: url,
+						data: {_token: '{{csrf_token()}}'},
+						dataType: 'json',
+						success: function (ret) {
+							if (ret.status === 'success') {
+								swal.fire({title: ret.message, type: 'success', timer: 1000, showConfirmButton: false})
+									.then(() => window.location.reload())
+							} else {
+								swal.fire({title: ret.message, type: "error"}).then(() => window.location.reload())
+							}
 						}
 					});
 				}

+ 0 - 0
resources/views/admin/rule/ruleLogList.blade.php → resources/views/admin/rule/log.blade.php


+ 7 - 7
resources/views/admin/group/groupList.blade.php → resources/views/admin/user/group/index.blade.php

@@ -8,7 +8,7 @@
 			<div class="panel-heading">
 				<h2 class="panel-title">用户分组控制<small>(同一节点可分配至多个分组,一个用户只能属于一个分组;对于用户可见/可用节点:先按分组后按等级)</small></h2>
 				<div class="panel-actions">
-					<a class="btn btn-primary" href="/group/add">
+					<a class="btn btn-primary" href="{{route('group.create')}}">
 						<i class="icon wb-plus" aria-hidden="true"></i>添加分组
 					</a>
 				</div>
@@ -29,10 +29,10 @@
 							<td> {{$vo->name}} </td>
 							<td>
 								<div class="btn-group">
-									<a href="/group/edit?id={{$vo->id}}" class="btn btn-primary">
+									<a href="{{route('group.edit',$vo->id)}}" class="btn btn-primary">
 										<i class="icon wb-edit" aria-hidden="true"></i>
 									</a>
-									<button onclick="deleteUserGroup('{{$vo->id}}')" class="btn btn-danger">
+									<button onclick="deleteUserGroup('{{route('group.destroy',$vo->id)}}')" class="btn btn-danger">
 										<i class="icon wb-trash" aria-hidden="true"></i>
 									</button>
 								</div>
@@ -63,7 +63,7 @@
 
 	<script type="text/javascript">
 		// 删除用户分组
-		function deleteUserGroup(id) {
+		function deleteUserGroup(url) {
 			swal.fire({
 				title: '提示',
 				text: '确定删除该分组吗?',
@@ -75,14 +75,14 @@
 				if (result.value) {
 					$.ajax({
 						type: 'DELETE',
-						url: '/group/delete',
-						data: {_token: '{{csrf_token()}}', id: id},
+						url: url,
+						data: {_token: '{{csrf_token()}}'},
 						dataType: 'json',
 						success: function (ret) {
 							if (ret.status === 'success') {
 								swal.fire({title: ret.message, type: 'success', timer: 1000, showConfirmButton: false})
 									.then(() => window.location.reload())
-							} else{
+							} else {
 								swal.fire({title: ret.message, type: "error"}).then(() => window.location.reload())
 							}
 						}

+ 4 - 4
resources/views/admin/group/groupInfo.blade.php → resources/views/admin/user/group/info.blade.php

@@ -8,7 +8,7 @@
 			<div class="panel-heading">
 				<h2 class="panel-title">@isset($userGroup)编辑@else添加@endisset用戶分组</h2>
 				<div class="panel-actions">
-					<a href="/group" class="btn btn-danger">返 回</a>
+					<a href="{{route('group.index')}}" class="btn btn-danger">返 回</a>
 				</div>
 			</div>
 			@if (Session::has('successMsg'))
@@ -30,8 +30,8 @@
 				</div>
 			@endif
 			<div class="panel-body">
-				<form action=@isset($userGroup){{url('/group/edit')}}@else{{url('/group/add')}}@endisset method="POST" enctype="multipart/form-data" class="form-horizontal">
-					@isset($userGroup)<input name="id" value="{{$userGroup->id}}" hidden/>@endisset
+				<form action=@isset($userGroup){{route('group.update',$userGroup->id)}}@else{{route('group.store')}}@endisset method="POST" enctype="multipart/form-data" class="form-horizontal">
+					@isset($userGroup)@method('PUT')<input name="id" value="{{$userGroup->id}}" hidden/>@endisset
 					@csrf
 					<div class="form-group row">
 						<label class="col-md-2 col-sm-3 col-form-label" for="name">分组名称</label>
@@ -69,7 +69,7 @@
 		@isset($userGroup)
 		$(document).ready(function () {
 			$('#name').val('{{$userGroup->name}}');
-			$('#nodes').multiSelect('select',{!! json_encode(explode(',', $userGroup->nodes)) !!});
+			$('#nodes').multiSelect('select',@json($userGroup->nodes));
 		})
 		@endisset
 		// 权限列表

+ 11 - 17
routes/web.php

@@ -148,29 +148,23 @@ Route::group(['middleware' => ['isForbidden', 'isAdminLogin', 'isAdmin']], funct
 			Route::get('analysis', 'ToolsController@analysis'); // 日志分析
 		});
 
-		// 节点审计规则相关
+
+		Route::resource('rule', 'RuleController')->except(['create', 'edit', 'show']);// 节点审计规则管理
 		Route::group(['prefix' => 'rule'], function() {
-			Route::get('/', 'RuleController@ruleList'); // 审计规则列表
-			Route::post('add', 'RuleController@addRule'); // 添加审计规则
-			Route::post('edit', 'RuleController@editRule'); // 删除审计规则
-			Route::post('delete', 'RuleController@delRule'); // 删除审计规则
 			Route::group(['prefix' => 'group'], function() {
-				Route::get('/', 'RuleController@ruleGroupList'); // 审计规则分组列表
-				Route::any('add', 'RuleController@addRuleGroup'); // 添加审计规则分组
-				Route::any('edit', 'RuleController@editRuleGroup'); // 编辑审计规则分组
-				Route::post('delete', 'RuleController@delRuleGroup'); // 删除审计规则分组
-				Route::any('assign', 'RuleController@assignNode'); // 规则分组关联节点
+				Route::get('/', 'RuleGroupController@index')->name('rule.group.index'); // 审计规则分组列表
+				Route::get('/create', 'RuleGroupController@create')->name('rule.group.create'); // 添加审计规则分组页面
+				Route::post('/', 'RuleGroupController@store')->name('rule.group.store'); // 添加审计规则分组
+				Route::get('/{id}/edit', 'RuleGroupController@edit')->name('rule.group.edit'); // 编辑审计规则分组页面
+				Route::put('/{id}', 'RuleGroupController@update')->name('rule.group.update'); // 编辑审计规则分组
+				Route::delete('/{id}', 'RuleGroupController@destroy')->name('rule.group.destroy'); // 删除审计规则分组
+				Route::get('/{id}/assign', 'RuleGroupController@assignNode')->name('rule.group.editNode');
+				Route::put('/{id}/assign', 'RuleGroupController@assign')->name('rule.group.assign'); // 规则分组关联节点
 			});
 			Route::get('log', 'RuleController@ruleLogList'); // 用户触发审计规则日志
 			Route::post('clear', 'RuleController@clearLog'); // 清除所有审计触发日志
 		});
-
-		Route::group(['prefix' => 'group'], function() {
-			Route::get('/', 'UserGroupController@userGroupList'); // 用户分组列表(分组控制)
-			Route::match(['GET', 'POST'], 'add', 'UserGroupController@addUserGroup'); // 添加用户分组
-			Route::match(['GET', 'POST'], 'edit', 'UserGroupController@editUserGroup');// 编辑用户分组
-			Route::delete('delete', 'UserGroupController@delUserGroup'); // 删除用户分组
-		});
+		Route::resource('group', 'UserGroupController')->except('show');// 用户分组管理
 	});
 
 	Route::get("payment/callbackList", "PaymentController@callbackList"); // 支付回调日志

+ 6 - 12
sql/db.sql

@@ -197,7 +197,7 @@ CREATE TABLE `user_group`
 (
     `id`    INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
     `name`  VARCHAR(255)     NOT NULL COMMENT '分组名称',
-    `nodes` TEXT COMMENT '关联的节点ID,多个用,号分隔',
+    `nodes` JSON DEFAULT NULL COMMENT '关联的节点ID,多个用,号分隔',
     PRIMARY KEY (`id`)
 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT ='用户分组控制表';
 
@@ -771,7 +771,7 @@ CREATE TABLE `referral_apply`
     `before`     INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '操作前可提现金额,单位分',
     `after`      INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '操作后可提现金额,单位分',
     `amount`     INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '本次提现金额,单位分',
-    `link_logs`  TEXT             NOT NULL COMMENT '关联返利日志ID,例如:1,3,4',
+    `link_logs`  JSON             NOT NULL COMMENT '关联返利日志ID,例如:1,3,4',
     `status`     TINYINT(1)       NOT NULL DEFAULT '0' COMMENT '状态:-1-驳回、0-待审核、1-审核通过待打款、2-已打款',
     `created_at` DATETIME         NOT NULL COMMENT '创建时间',
     `updated_at` DATETIME         NOT NULL COMMENT '最后更新时间',
@@ -991,7 +991,8 @@ CREATE TABLE `user_subscribe`
 -- ----------------------------
 -- Records of user_subscribe
 -- ----------------------------
-INSERT INTO `user_subscribe`(`id`, `user_id`, `code`,`created_at`,`updated_at`) VALUES ('1', '1', 'SsXa1', Now(), Now());
+INSERT INTO `user_subscribe`(`id`, `user_id`, `code`, `created_at`, `updated_at`)
+VALUES ('1', '1', 'SsXa1', Now(), Now());
 
 
 -- ----------------------------
@@ -1318,21 +1319,14 @@ CREATE TABLE `rule_group`
     `id`         INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
     `type`       BIT              NOT NULL DEFAULT 1 COMMENT '模式:1-阻断、0-放行',
     `name`       VARCHAR(255)     NOT NULL COMMENT '分组名称',
-    `rules`      TEXT                      DEFAULT NULL COMMENT '关联的规则ID,多个用,号分隔',
-    `nodes`      TEXT                      DEFAULT NULL COMMENT '关联的节点ID,多个用,号分隔',
+    `rules`      JSON                      DEFAULT NULL COMMENT '关联的规则ID,多个用,号分隔',
+    `nodes`      JSON                      DEFAULT NULL COMMENT '关联的节点ID,多个用,号分隔',
     `created_at` DATETIME         NOT NULL COMMENT '创建时间',
     `updated_at` DATETIME         NOT NULL COMMENT '最后更新时间',
     PRIMARY KEY (`id`)
 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT ='审计规则分组';
 
 
--- ----------------------------
--- Records of rule_group
--- ----------------------------
-INSERT INTO `rule_group`(`id`, `type`, `name`, `rules`, `nodes`, `created_at`, `updated_at`)
-VALUES (1, 1, '默认', '1,2,3,4,5,6,7,8,9,10,11,12,13,14', NULL, Now(), Now());
-
-
 -- ----------------------------
 -- Table structure for rule_group_node
 -- ----------------------------

+ 15 - 0
sql/mod/20200805.sql

@@ -0,0 +1,15 @@
+-- 必须先运行php artisan updateTextToJson 来转换数据库数据
+-- run php artisan updateTextToJson to reformat database data
+
+-- 可选性更新,推荐数据库版本5.7及以上 更新
+-- Optional Update, recommend for Mysql >=5.7
+
+ALTER TABLE `referral_apply`
+    CHANGE `link_logs` `link_logs` JSON NOT NULL COMMENT '关联返利日志ID,例如:1,3,4';
+
+ALTER TABLE `user_group`
+    CHANGE `nodes` `nodes` JSON DEFAULT NULL COMMENT '关联的节点ID,多个用,号分隔';
+
+ALTER TABLE `rule_group`
+    CHANGE `rules` `rules` JSON DEFAULT NULL COMMENT '关联的规则ID,多个用,号分隔',
+    CHANGE `nodes` `nodes` JSON DEFAULT NULL COMMENT '关联的节点ID,多个用,号分隔';