Browse Source

1.修正用户中心BUG
2.修正节点订阅功能BUG
3.商品改造
4.定时任务优化

bingo 8 năm trước cách đây
mục cha
commit
13c23a7443

+ 15 - 8
app/Console/Commands/AutoDecGoodsTrafficJob.php

@@ -11,7 +11,7 @@ use Log;
 class AutoDecGoodsTrafficJob extends Command
 {
     protected $signature = 'command:autoDecGoodsTrafficJob';
-    protected $description = '商品到期自动扣购买该商品的账号流量';
+    protected $description = '自动扣除到期流量包的流量';
 
     public function __construct()
     {
@@ -20,21 +20,28 @@ class AutoDecGoodsTrafficJob extends Command
 
     public function handle()
     {
-        $goodsList = Goods::where('end_time', '<', date('Y-m-d H:i:s'))->get();
-        foreach ($goodsList as $goods) {
-            // 所有购买过该商品的用户
-            $orderGoods = OrderGoods::where('goods_id', $goods->id)->get();
-            foreach ($orderGoods as $og) {
+        $orderGoods = OrderGoods::where('is_expire', 0)->get();
+        foreach ($orderGoods as $og) {
+            $goods = Goods::where('id', $og->goods_id)->first();
+            if (empty($goods)) {
+                continue;
+            }
+
+            // 如果商品已过期,则需要扣流量
+            if (date("Y-m-d H:i:s", strtotime("-" . $goods->days . " days")) >= $og->created_at) {
                 $u = User::where('id', $og->user_id)->first();
                 if (empty($u)) {
                     continue;
                 }
 
-                if ($u->transfer_enable - $goods->traffic * 1024 * 1024 < 0) {
+                // 商品到期自动扣总流量
+                if ($u->transfer_enable - $goods->traffic * 1048576 <= 0) {
                     User::where('id', $og->user_id)->update(['transfer_enable' => 0]);
                 } else {
-                    User::where('id', $og->user_id)->decrement('transfer_enable', $goods->traffic * 1024 * 1024);
+                    User::where('id', $og->user_id)->decrement('transfer_enable', $goods->traffic * 1048576);
                 }
+
+                OrderGoods::where('id', $og->id)->update(['is_expire' => 1]);
             }
         }
 

+ 4 - 4
app/Console/Commands/DisableExpireUserJob.php → app/Console/Commands/AutoDisableExpireUserJob.php

@@ -2,14 +2,14 @@
 
 namespace App\Console\Commands;
 
-use App\Http\Models\User;
 use Illuminate\Console\Command;
+use App\Http\Models\User;
 use Log;
 
-class DisableExpireUserJob extends Command
+class autoDisableExpireUserJob extends Command
 {
-    protected $signature = 'command:disableExpireUserJob';
-    protected $description = '禁用到期账号';
+    protected $signature = 'command:autoDisableExpireUserJob';
+    protected $description = '到期账号自动禁用';
 
     public function __construct()
     {

+ 30 - 0
app/Console/Commands/AutoExpireCouponJob.php

@@ -0,0 +1,30 @@
+<?php
+
+namespace App\Console\Commands;
+
+use Illuminate\Console\Command;
+use App\Http\Models\Coupon;
+use Log;
+
+class AutoExpireCouponJob extends Command
+{
+    protected $signature = 'command:autoExpireCouponJob';
+    protected $description = '优惠券到期自动置无效';
+
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    public function handle()
+    {
+        $couponList = Coupon::where('status', 0)->where('available_end', '<=', time())->get();
+        if (!$couponList->isEmpty()) {
+            foreach ($couponList as $coupon) {
+                Coupon::where('id', $coupon->id)->update(['status' => 2]);
+            }
+        }
+
+        Log::info('定时任务:' . $this->description);
+    }
+}

+ 5 - 5
app/Console/Commands/InviteExpire.php → app/Console/Commands/AutoExpireInviteJob.php

@@ -2,14 +2,14 @@
 
 namespace App\Console\Commands;
 
-use App\Http\Models\Invite;
 use Illuminate\Console\Command;
+use App\Http\Models\Invite;
 use Log;
 
-class InviteExpire extends Command
+class AutoExpireInviteJob extends Command
 {
-    protected $signature = 'command:inviteExpire';
-    protected $description = '邀请码过期废除';
+    protected $signature = 'command:autoExpireInviteJob';
+    protected $description = '邀请码过期自动置无效';
 
     public function __construct()
     {
@@ -19,7 +19,7 @@ class InviteExpire extends Command
     public function handle()
     {
         $inviteList = Invite::where('status', 0)->where('dateline', '<=', date('Y-m-d H:i:s'))->get();
-        if ($inviteList->isEmpty()) {
+        if (!$inviteList->isEmpty()) {
             foreach ($inviteList as $invite) {
                 Invite::where('id', $invite->id)->update(['status' => 2]);
             }

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

@@ -0,0 +1,39 @@
+<?php
+
+namespace App\Console\Commands;
+
+use Illuminate\Console\Command;
+use App\Http\Models\Config;
+use App\Http\Models\User;
+use Log;
+
+class AutoResetUserTrafficJob extends Command
+{
+    protected $signature = 'command:autoResetUserTrafficJob';
+    protected $description = '自动重置账号的流量';
+
+    protected static $config;
+
+    public function __construct()
+    {
+        parent::__construct();
+
+        $config = Config::get();
+        $data = [];
+        foreach ($config as $vo) {
+            $data[$vo->name] = $vo->value;
+        }
+
+        self::$config = $data;
+    }
+
+    public function handle()
+    {
+        if (self::$config['reset_traffic']) {
+            $user_ids = User::where('pay_way', '<>', 0)->select(['id'])->get();
+            User::whereIn('id', $user_ids)->update(['u' => 0, 'd' => 0]);
+        }
+
+        Log::info('定时任务:' . $this->description);
+    }
+}

+ 22 - 1
app/Console/Commands/UserExpireWarningJob.php

@@ -5,6 +5,7 @@ namespace App\Console\Commands;
 use Illuminate\Console\Command;
 use App\Http\Models\Config;
 use App\Http\Models\User;
+use App\Http\Models\EmailLog;
 use App\Mail\userExpireWarning;
 use Mail;
 use Log;
@@ -12,7 +13,7 @@ use Log;
 class UserExpireWarningJob extends Command
 {
     protected $signature = 'command:userExpireWarningJob';
-    protected $description = '用户到期提醒发邮件';
+    protected $description = '用户到期自动发邮件提醒';
 
     protected static $config;
 
@@ -56,4 +57,24 @@ class UserExpireWarningJob extends Command
 
         Log::info('定时任务:' . $this->description);
     }
+
+    /**
+     * 写入邮件发送日志
+     * @param int $user_id 用户ID
+     * @param string $title 投递类型(投递标题)
+     * @param string $content 投递内容(简要概述)
+     * @param int $status 投递状态
+     * @param string $error 投递失败时记录的异常信息
+     */
+    private function sendEmailLog($user_id, $title, $content, $status = 1, $error = '')
+    {
+        $emailLogObj = new EmailLog();
+        $emailLogObj->user_id = $user_id;
+        $emailLogObj->title = $title;
+        $emailLogObj->content = $content;
+        $emailLogObj->status = $status;
+        $emailLogObj->error = $error;
+        $emailLogObj->created_at = date('Y-m-d H:i:s');
+        $emailLogObj->save();
+    }
 }

+ 22 - 1
app/Console/Commands/UserTrafficWarningJob.php

@@ -5,6 +5,7 @@ namespace App\Console\Commands;
 use Illuminate\Console\Command;
 use App\Http\Models\Config;
 use App\Http\Models\User;
+use App\Http\Models\EmailLog;
 use App\Mail\userTrafficWarning;
 use Mail;
 use Log;
@@ -12,7 +13,7 @@ use Log;
 class UserTrafficWarningJob extends Command
 {
     protected $signature = 'command:userTrafficWarningJob';
-    protected $description = '用户流量警告提醒发邮件';
+    protected $description = '用户流量警告自动发邮件提醒';
 
     protected static $config;
 
@@ -56,4 +57,24 @@ class UserTrafficWarningJob extends Command
 
         Log::info('定时任务:' . $this->description);
     }
+
+    /**
+     * 写入邮件发送日志
+     * @param int $user_id 用户ID
+     * @param string $title 投递类型(投递标题)
+     * @param string $content 投递内容(简要概述)
+     * @param int $status 投递状态
+     * @param string $error 投递失败时记录的异常信息
+     */
+    private function sendEmailLog($user_id, $title, $content, $status = 1, $error = '')
+    {
+        $emailLogObj = new EmailLog();
+        $emailLogObj->user_id = $user_id;
+        $emailLogObj->title = $title;
+        $emailLogObj->content = $content;
+        $emailLogObj->status = $status;
+        $emailLogObj->error = $error;
+        $emailLogObj->created_at = date('Y-m-d H:i:s');
+        $emailLogObj->save();
+    }
 }

+ 10 - 6
app/Console/Kernel.php

@@ -13,11 +13,13 @@ class Kernel extends ConsoleKernel
      * @var array
      */
     protected $commands = [
-        \App\Console\Commands\DisableExpireUserJob::class,
         \App\Console\Commands\AutoDecGoodsTrafficJob::class,
-        \App\Console\Commands\UserTrafficWarningJob::class,
+        \App\Console\Commands\AutoDisableExpireUserJob::class,
+        \App\Console\Commands\AutoExpireInviteJob::class,
+        \App\Console\Commands\AutoExpireCouponJob::class,
+        \App\Console\Commands\autoResetUserTrafficJob::class,
         \App\Console\Commands\UserExpireWarningJob::class,
-        \App\Console\Commands\InviteExpire::class,
+        \App\Console\Commands\UserTrafficWarningJob::class,
     ];
 
     /**
@@ -28,11 +30,13 @@ class Kernel extends ConsoleKernel
      */
     protected function schedule(Schedule $schedule)
     {
-        $schedule->command('command:disableExpireUserJob')->everyMinute();
         $schedule->command('command:autoDecGoodsTrafficJob')->everyTenMinutes();
-        $schedule->command('command:userTrafficWarningJob')->daily();
+        $schedule->command('command:autoDisableExpireUserJob')->everyMinute();
+        $schedule->command('command:autoExpireCouponJob')->everyThirtyMinutes();
+        $schedule->command('command:autoExpireInviteJob')->everyThirtyMinutes();
+        $schedule->command('command:autoResetUserTrafficJob')->monthly();
         $schedule->command('command:userExpireWarningJob')->daily();
-        $schedule->command('command:inviteExpire')->everyThirtyMinutes();
+        $schedule->command('command:userTrafficWarningJob')->daily();
     }
 
     /**

+ 16 - 2
app/Http/Controllers/AdminController.php

@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
 use App\Http\Models\Article;
 use App\Http\Models\Config;
 use App\Http\Models\Invite;
+use App\Http\Models\OrderGoods;
 use App\Http\Models\ReferralApply;
 use App\Http\Models\ReferralLog;
 use App\Http\Models\SsConfig;
@@ -1314,14 +1315,17 @@ TXT;
     {
         $id = $request->get('id');
 
-
         $list = [];
         $apply = ReferralApply::where('id', $id)->with('user')->first();
-        if (!empty($apply) && !empty($apply->link_logs)) {
+        if ($apply && $apply->link_logs) {
             $link_logs = explode(',', $apply->link_logs);
             $list = ReferralLog::whereIn('id', $link_logs)->with('user')->paginate(10);
         }
 
+        foreach ($list as &$vo) {
+            $vo->goods = OrderGoods::where('oid', $vo->order_id)->with('goods')->first();
+        }
+
         $view['info'] = $apply;
         $view['list'] = $list;
 
@@ -1348,4 +1352,14 @@ TXT;
 
         return Response::json(['status' => 'success', 'data' => '', 'message' => '操作成功']);
     }
+
+    // 重置用户流量
+    public function resetUserTraffic(Request $request)
+    {
+        $id = $request->get('id');
+
+        User::where('id', $id)->update(['u' => 0, 'd' => 0]);
+
+        return Response::json(['status' => 'success', 'data' => '', 'message' => '操作成功']);
+    }
 }

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

@@ -111,7 +111,7 @@ class RegisterController extends BaseController
             $user->passwd = $this->makeRandStr();
             $user->transfer_enable = $transfer_enable;
             $user->enable_time = date('Y-m-d H:i:s');
-            $user->expire_time = date('Y-m-d H:i:s', strtotime("+30 days"));
+            $user->expire_time = date('Y-m-d H:i:s', strtotime("+1 days"));
             $user->reg_ip = $request->getClientIp();
             $user->referral_uid = $referral_uid;
             $user->save();

+ 10 - 10
app/Http/Controllers/ShopController.php

@@ -37,9 +37,9 @@ class ShopController extends BaseController
             $desc = $request->get('desc');
             $traffic = $request->get('traffic');
             $price = $request->get('price');
-            $score = $request->get('score');
-            $start_time = $request->get('start_time');
-            $end_time = $request->get('end_time');
+            $score = $request->get('score', 0);
+            $type = $request->get('type', 1);
+            $days = $request->get('days', 30);
             $status = $request->get('status');
 
             if (empty($name) || empty($traffic) || $price == '') {
@@ -65,8 +65,8 @@ class ShopController extends BaseController
             $obj->traffic = $traffic;
             $obj->price = $price;
             $obj->score = $score;
-            $obj->start_time = date('Y-m-d 00:00:00', strtotime($start_time));
-            $obj->end_time = date('Y-m-d 23:59:59', strtotime($end_time));
+            $obj->type = $type;
+            $obj->days = $days;
             $obj->status = $status;
             $obj->save();
 
@@ -92,9 +92,9 @@ class ShopController extends BaseController
             $desc = $request->get('desc');
             $traffic = $request->get('traffic');
             $price = $request->get('price');
-            $score = $request->get('score');
-            $start_time = $request->get('start_time');
-            $end_time = $request->get('end_time');
+            $score = $request->get('score', 0);
+            $type = $request->get('type', 1);
+            $days = $request->get('days', 30);
             $status = $request->get('status');
 
             if (empty($name) || empty($traffic) || $price == '') {
@@ -120,8 +120,8 @@ class ShopController extends BaseController
                 'traffic' => $traffic,
                 'price'   => $price,
                 'score'   => $score,
-                'start_time' => date('Y-m-d 00:00:00', strtotime($start_time)),
-                'end_time' => date('Y-m-d 23:59:59', strtotime($end_time)),
+                'type'    => $type,
+                'days'    => $days,
                 'status'  => $status
             ];
             $ret = Goods::where('id', $id)->update($data);

+ 8 - 2
app/Http/Controllers/SubscribeController.php

@@ -66,14 +66,20 @@ class SubscribeController extends BaseController
         $nodeList = SsNode::whereIn('id', $node_ids)->get();
         $scheme = [];
         foreach ($nodeList as $node) {
+            $obfs_param = $user->obfs_param ? base64_encode($user->obfs_param) : '';
+            $protocol_param = $user->protocol_param ? base64_encode($user->protocol_param) : '';
+
             // 生成ssr scheme
             $ssr_str = '';
             $ssr_str .= $node->server . ':' . $user->port;
             $ssr_str .= ':' . $user->protocol . ':' . $user->method;
             $ssr_str .= ':' . $user->obfs . ':' . base64_encode($user->passwd);
-            $ssr_str .= '/?obfsparam=' . $user->obfs_param;
-            $ssr_str .= '&=protoparam' . $user->protocol_param;
+            $ssr_str .= '/?obfsparam=' . $obfs_param;
+            $ssr_str .= '&protoparam=' . $protocol_param;
             $ssr_str .= '&remarks=' . base64_encode($node->name);
+            $ssr_str .= '&group=' . base64_encode('VPN');
+            //$ssr_str .= '&udpport=0';
+            //$ssr_str .= '&uot=0';
             $ssr_str = $this->base64url_encode($ssr_str);
             $scheme[] = 'ssr://' . $ssr_str;
         }

+ 40 - 23
app/Http/Controllers/UserController.php

@@ -45,16 +45,16 @@ class UserController extends BaseController
     public function index(Request $request)
     {
         $user = $request->session()->get('user');
+        $user = User::where('id', $user['id'])->first();
+        $user->totalTransfer = $this->flowAutoShow($user->transfer_enable - $user->u - $user->d);
+        $user->usedTransfer = $this->flowAutoShow($user->u + $user->d);
+        $user->usedPercent = $user->transfer_enable > 0 ? round(($user->u + $user->d) / $user->transfer_enable, 2) : 1;
 
+        $view['info'] = $user->toArray();
         $view['articleList'] = Article::where('is_del', 0)->orderBy('sort', 'desc')->orderBy('id', 'desc')->paginate(5);
         $view['wechat_qrcode'] = self::$config['wechat_qrcode'];
         $view['alipay_qrcode'] = self::$config['alipay_qrcode'];
 
-        $user['totalTransfer'] = $this->flowAutoShow($user['transfer_enable'] - $user['u'] - $user['d']);
-        $user['usedTransfer'] = $this->flowAutoShow($user['u'] + $user['d']);
-        $user['usedPercent'] = $user['transfer_enable'] > 0 ? round(($user['u'] + $user['d']) / $user['transfer_enable'], 2) : 1;
-        $view['info'] = $user;
-
         // 推广返利是否可见
         if (!$request->session()->has('referral_status')) {
             $request->session()->put('referral_status', self::$config['referral_status']);
@@ -169,11 +169,12 @@ class UserController extends BaseController
     public function nodeList(Request $request)
     {
         $user = $request->session()->get('user');
+        $user = User::where('id', $user['id'])->first();
 
         $nodeList = DB::table('ss_group_node')
             ->leftJoin('ss_group', 'ss_group.id', '=', 'ss_group_node.group_id')
             ->leftJoin('ss_node', 'ss_node.id', '=', 'ss_group_node.node_id')
-            ->where('ss_group.level', '<=', $user['level'])
+            ->where('ss_group.level', '<=', $user->level)
             ->paginate(10)
             ->appends($request->except('page'));
 
@@ -192,34 +193,40 @@ class UserController extends BaseController
             $node->load = empty($node_info->load) ? 0 : $node_info->load;
 
             // 生成ssr scheme
+            $obfs_param = $user->obfs_param ? base64_encode($user->obfs_param) : '';
+            $protocol_param = $user->protocol_param ? base64_encode($user->protocol_param) : '';
+
             $ssr_str = '';
-            $ssr_str .= $node->server . ':' . $user['port'];
-            $ssr_str .= ':' . $user['protocol'] . ':' . $user['method'];
-            $ssr_str .= ':' . $user['obfs'] . ':' . base64_encode($user['passwd']);
-            $ssr_str .= '/?obfsparam=' . $user['obfs_param'];
-            $ssr_str .= '&=protoparam' . $user['protocol_param'];
+            $ssr_str .= $node->server . ':' . $user->port;
+            $ssr_str .= ':' . $user->protocol . ':' . $user->method;
+            $ssr_str .= ':' . $user->obfs . ':' . base64_encode($user->passwd);
+            $ssr_str .= '/?obfsparam=' . $obfs_param;
+            $ssr_str .= '&protoparam=' . $protocol_param;
             $ssr_str .= '&remarks=' . base64_encode($node->name);
+            $ssr_str .= '&group=' . base64_encode('节点');
+            //$ssr_str .= '&udpport=0';
+            //$ssr_str .= '&uot=0';
             $ssr_str = $this->base64url_encode($ssr_str);
             $ssr_scheme = 'ssr://' . $ssr_str;
 
             // 生成ss scheme
             $ss_str = '';
-            $ss_str .= $user['method'] . ':' . $user['passwd'] . '@';
-            $ss_str .= $node->server . ':' . $user['port'];
+            $ss_str .= $user->method . ':' . $user->passwd . '@';
+            $ss_str .= $node->server . ':' . $user->port;
             $ss_str = $this->base64url_encode($ss_str) . '#' . 'VPN';
             $ss_scheme = 'ss://' . $ss_str;
 
             // 生成文本配置信息
             $txt = <<<TXT
 服务器:{$node->server}
-远程端口:{$user['port']}
+远程端口:{$user->port}
 本地端口:1080
-密码:{$user['passwd']}
-加密方法:{$user['method']}
-协议:{$user['protocol']}
-协议参数:{$user['protocol_param']}
-混淆方式:{$user['obfs']}
-混淆参数:{$user['obfs_param']}
+密码:{$user->passwd}
+加密方法:{$user->method}
+协议:{$user->protocol}
+协议参数:{$user->protocol_param}
+混淆方式:{$user->obfs}
+混淆参数:{$user->obfs_param}
 路由:绕过局域网及中国大陆地址
 TXT;
 
@@ -252,7 +259,7 @@ TXT;
     // 商品列表
     public function goodsList(Request $request)
     {
-        $view['goodsList'] = Goods::where('is_del', 0)->paginate(10)->appends($request->except('page'));
+        $view['goodsList'] = Goods::where('status', 1)->where('is_del', 0)->paginate(10)->appends($request->except('page'));
 
         return Response::view('user/goodsList', $view);
     }
@@ -697,7 +704,7 @@ TXT;
         $user = $request->session()->get('user');
 
         if ($request->method() == 'POST') {
-            $goods = Goods::where('id', $goods_id)->first();
+            $goods = Goods::where('id', $goods_id)->where('status', 1)->first();
             if (empty($goods)) {
                 return Response::json(['status' => 'fail', 'data' => '', 'message' => '支付失败:商品不存在']);
             }
@@ -749,6 +756,7 @@ TXT;
                 $orderGoods->num = 1;
                 $orderGoods->original_price = $goods->price;
                 $orderGoods->price = $totalPrice;
+                $orderGoods->is_expire = 0;
                 $orderGoods->save();
 
                 // 扣余额
@@ -783,6 +791,10 @@ TXT;
                 // 把流量包内的流量加到账号上
                 User::where('id', $user['id'])->increment('transfer_enable', $goods->traffic * 1048576);
 
+                // 将商品的有效期加到账号上,如果账号过期时间小于
+                //if (date('Y-m-d H:i:s', strtotime("+" . $goods->days . " days")) ) {}
+                User::where('id', $user['id'])->update(['expire_time' => date('Y-m-d H:i:s', strtotime("+" . $goods->days . " days"))]);
+
                 // 写入返利日志
                 if ($user->referral_uid) {
                     $referralLog = new ReferralLog();
@@ -806,7 +818,12 @@ TXT;
                 return Response::json(['status' => 'fail', 'data' => '', 'message' => '支付失败:' . $e->getMessage()]);
             }
         } else {
-            $view['goods'] = Goods::where('id', $goods_id)->first();
+            $goods = Goods::where('id', $goods_id)->where('status', 1)->first();
+            if (empty($goods)) {
+                return Redirect::to('user/goodsList');
+            }
+
+            $view['goods'] = $goods;
 
             return Response::view('user/addOrder', $view);
         }

+ 3 - 0
app/Http/Models/OrderGoods.php

@@ -23,4 +23,7 @@ class OrderGoods extends Model
         'price'
     ];
 
+    function goods() {
+        return $this->hasOne(Goods::class, 'id', 'goods_id');
+    }
 }

+ 2 - 2
resources/views/admin/applyDetail.blade.php

@@ -53,7 +53,7 @@
                     </div>
                     <div class="portlet-body">
                         <div class="table-scrollable">
-                            <table class="table table-striped table-bordered table-hover table-checkable order-column">
+                            <table class="table table-striped table-hover table-checkable">
                                 <thead>
                                     <tr class="uppercase">
                                         <th colspan="6">ID:{{$info->id}} | 申请人:{{$info->user->username}} | 提现金额:{{$info->amount}} | 申请时间:{{$info->created_at}}</th>
@@ -77,7 +77,7 @@
                                             <tr>
                                                 <td> {{$vo->id}} </td>
                                                 <td> {{$vo->user->username}} </td>
-                                                <td> {{$vo->order_id}} - </td>
+                                                <td> {{$vo->goods->goods->name}}</td>
                                                 <td> {{$vo->amount}} </td>
                                                 <td> {{$vo->ref_amount}} </td>
                                                 <td> {{$vo->created_at}} </td>

+ 18 - 0
resources/views/admin/system.blade.php

@@ -269,6 +269,13 @@
                                         <div class="tab-pane" id="tab_5">
                                             <form action="#" method="post" class="form-horizontal">
                                                 <div class="portlet-body">
+                                                    <div class="form-group">
+                                                        <label for="reset_traffic" class="col-md-2 control-label">流量自动重置</label>
+                                                        <div class="col-md-6">
+                                                            <input type="checkbox" class="make-switch" @if($reset_traffic) checked @endif id="reset_traffic" data-on-color="success" data-off-color="danger" data-on-text="启用" data-off-text="关闭">
+                                                            <span class="help-block"> 每月1日自动重置账号可用流量 </span>
+                                                        </div>
+                                                    </div>
                                                     <div class="form-group">
                                                         <label for="expire_warning" class="col-md-2 control-label">过期警告</label>
                                                         <div class="col-md-6">
@@ -519,6 +526,17 @@
             }
         });
 
+        // 启用、禁用流量自动重置
+        $('#reset_traffic').on({
+            'switchChange.bootstrapSwitch': function(event, state) {
+                var reset_traffic = state ? 1 : 0;
+
+                $.post("{{url('admin/setConfig')}}", {_token:'{{csrf_token()}}', name:'reset_traffic', value:reset_traffic}, function (ret) {
+                    console.log(ret);
+                });
+            }
+        });
+
         // 设置最小积分
         $("#min_rand_score").change(function () {
             var min_rand_score = $(this).val();

+ 10 - 0
resources/views/admin/userList.blade.php

@@ -136,6 +136,7 @@
                                                 <!--<button type="button" class="btn btn-sm red btn-outline" onclick="delUser('{{$user->id}}')">删除</button>-->
                                                 <button type="button" class="btn btn-sm green btn-outline" onclick="do_export('{{$user->id}}')">配置信息</button>
                                                 <button type="button" class="btn btn-sm purple btn-outline" onclick="do_monitor('{{$user->id}}')">流量监控</button>
+                                                <button type="button" class="btn btn-sm green-meadow btn-outline" onclick="resetTraffic('{{$user->id}}')">重置流量</button>
                                             </td>
                                         </tr>
                                         @endforeach
@@ -235,5 +236,14 @@
         function do_monitor(id) {
             window.location.href = '{{url('admin/monitor?id=')}}' + id;
         }
+
+        // 重置流量
+        function resetTraffic(id) {
+            $.post("{{url('admin/resetUserTraffic')}}", {_token:'{{csrf_token()}}', id:id}, function (ret) {
+                bootbox.alert(ret.message, function () {
+                    window.location.reload();
+                });
+            });
+        }
     </script>
 @endsection

+ 26 - 11
resources/views/shop/addGoods.blade.php

@@ -79,7 +79,7 @@
                                 </div>
                                 <div class="form-group">
                                     <label class="control-label col-md-3">内含流量</label>
-                                    <div class="col-md-6">
+                                    <div class="col-md-3">
                                         <div class="input-group">
                                             <input type="text" class="form-control" name="traffic" value="1024" id="traffic" placeholder="" required="">
                                             <span class="input-group-addon">MiB</span>
@@ -88,7 +88,7 @@
                                 </div>
                                 <div class="form-group">
                                     <label class="control-label col-md-3">售价</label>
-                                    <div class="col-md-6">
+                                    <div class="col-md-3">
                                         <div class="input-group">
                                             <input type="text" class="form-control" name="price" value="" id="price" placeholder="" required>
                                             <span class="input-group-addon">元</span>
@@ -97,20 +97,35 @@
                                 </div>
                                 <div class="form-group">
                                     <label class="control-label col-md-3">所需积分</label>
-                                    <div class="col-md-6">
+                                    <div class="col-md-3">
                                         <input type="text" class="form-control" name="score" value="0" id="score" placeholder="" required>
                                         <span class="help-block">换购该商品需要的积分值</span>
                                     </div>
                                 </div>
+                                <div class="form-group">
+                                    <label for="type" class="col-md-3 control-label">类型</label>
+                                    <div class="col-md-6">
+                                        <div class="mt-radio-inline">
+                                            <label class="mt-radio">
+                                                <input type="radio" name="type" value="1" checked> 流量包
+                                                <span></span>
+                                            </label>
+                                            <label class="mt-radio">
+                                                <input type="radio" name="type" value="2"> 套餐
+                                                <span></span>
+                                            </label>
+                                        </div>
+                                        <span class="help-block"> 套餐与账号有效期有关,流量包只扣可用流量,不影响有效期 </span>
+                                    </div>
+                                </div>
                                 <div class="form-group">
                                     <label class="col-md-3 control-label">有效期</label>
-                                    <div class="col-md-9">
-                                        <div class="input-group input-large input-daterange">
-                                            <input type="text" class="form-control" name="start_time" value="{{date('Y-m-d')}}" id="start_time">
-                                            <span class="input-group-addon"> 至 </span>
-                                            <input type="text" class="form-control" name="end_time" value="{{date('Y-m-d', strtotime("+1 year"))}}" id="end_time">
+                                    <div class="col-md-3">
+                                        <div class="input-group">
+                                            <input type="text" class="form-control" name="days" value="30" id="days" placeholder="" required="">
+                                            <span class="input-group-addon">天</span>
                                         </div>
-                                        <span class="help-block"> 有效期结束后,凡是购买该商品的账号都会被扣除该商品设置的流量值 </span>
+                                        <span class="help-block"> 到期后会自动扣除流量 </span>
                                     </div>
                                 </div>
                                 <div class="form-group last">
@@ -118,11 +133,11 @@
                                     <div class="col-md-6">
                                         <div class="mt-radio-inline">
                                             <label class="mt-radio">
-                                                <input type="radio" name="status" value="0" checked> 上架
+                                                <input type="radio" name="status" value="1" checked> 上架
                                                 <span></span>
                                             </label>
                                             <label class="mt-radio">
-                                                <input type="radio" name="status" value="1"> 下架
+                                                <input type="radio" name="status" value="0"> 下架
                                                 <span></span>
                                             </label>
                                         </div>

+ 31 - 13
resources/views/shop/editGoods.blade.php

@@ -84,35 +84,53 @@
                                 </div>
                                 <div class="form-group">
                                     <label class="control-label col-md-3">内含流量</label>
-                                    <div class="col-md-6">
+                                    <div class="col-md-3">
                                         <div class="input-group">
                                             <input type="text" class="form-control" name="traffic" value="{{$goods->traffic}}" id="traffic" placeholder="" required="">
-                                            <span class="input-group-addon">GiB</span>
+                                            <span class="input-group-addon">MiB</span>
                                         </div>
                                     </div>
                                 </div>
                                 <div class="form-group">
                                     <label class="control-label col-md-3">售价</label>
-                                    <div class="col-md-6">
-                                        <input type="text" class="form-control" name="price" value="{{$goods->price}}" id="price" placeholder="" required>
+                                    <div class="col-md-3">
+                                        <div class="input-group">
+                                            <input type="text" class="form-control" name="price" value="{{$goods->price}}" id="price" placeholder="" required>
+                                            <span class="input-group-addon">元</span>
+                                        </div>
                                     </div>
                                 </div>
                                 <div class="form-group">
                                     <label class="control-label col-md-3">所需积分</label>
-                                    <div class="col-md-6">
+                                    <div class="col-md-3">
                                         <input type="text" class="form-control" name="score" value="{{$goods->score}}" id="score" placeholder="" required>
                                         <span class="help-block">换购该商品需要的积分值</span>
                                     </div>
                                 </div>
+                                <div class="form-group">
+                                    <label for="type" class="col-md-3 control-label">类型</label>
+                                    <div class="col-md-6">
+                                        <div class="mt-radio-inline">
+                                            <label class="mt-radio">
+                                                <input type="radio" name="type" value="1" @if($goods->type == 1) checked @endif> 流量包
+                                                <span></span>
+                                            </label>
+                                            <label class="mt-radio">
+                                                <input type="radio" name="type" value="2" @if($goods->type == 2) checked @endif> 套餐
+                                                <span></span>
+                                            </label>
+                                        </div>
+                                        <span class="help-block"> 套餐与账号有效期有关,流量包只扣可用流量,不影响有效期 </span>
+                                    </div>
+                                </div>
                                 <div class="form-group">
                                     <label class="col-md-3 control-label">有效期</label>
-                                    <div class="col-md-8">
-                                        <div class="input-group input-large input-daterange">
-                                            <input type="text" class="form-control" name="start_time" value="{{date('Y-m-d', strtotime($goods->start_time))}}" id="start_time">
-                                            <span class="input-group-addon"> 至 </span>
-                                            <input type="text" class="form-control" name="end_time" value="{{date('Y-m-d', strtotime($goods->end_time))}}" id="end_time">
+                                    <div class="col-md-3">
+                                        <div class="input-group">
+                                            <input type="text" class="form-control" name="days" value="{{$goods->days}}" id="days" placeholder="" required="">
+                                            <span class="input-group-addon">天</span>
                                         </div>
-                                        <span class="help-block"> 有效期结束后,凡是购买该商品的账号都会被扣除该商品设置的流量值 </span>
+                                        <span class="help-block"> 到期后会自动扣除流量 </span>
                                     </div>
                                 </div>
                                 <div class="form-group last">
@@ -120,11 +138,11 @@
                                     <div class="col-md-6">
                                         <div class="mt-radio-inline">
                                             <label class="mt-radio">
-                                                <input type="radio" name="status" value="0" {{!$goods->status ? 'checked' : ''}} /> 上架
+                                                <input type="radio" name="status" value="1" {{$goods->status == 1 ? 'checked' : ''}} /> 上架
                                                 <span></span>
                                             </label>
                                             <label class="mt-radio">
-                                                <input type="radio" name="status" value="1" {{$goods->status ? 'checked' : ''}} /> 下架
+                                                <input type="radio" name="status" value="0" {{$goods->status == 0 ? 'checked' : ''}} /> 下架
                                                 <span></span>
                                             </label>
                                         </div>

+ 13 - 5
resources/views/shop/goodsList.blade.php

@@ -46,6 +46,7 @@
                                 <tr>
                                     <th> ID </th>
                                     <th> 名称 </th>
+                                    <th> 类型 </th>
                                     <th> 图片 </th>
                                     <th> 内含流量 </th>
                                     <th> 售价 </th>
@@ -57,18 +58,25 @@
                                 <tbody>
                                 @if($goodsList->isEmpty())
                                     <tr>
-                                        <td colspan="8">暂无数据</td>
+                                        <td colspan="9">暂无数据</td>
                                     </tr>
                                 @else
                                     @foreach($goodsList as $goods)
                                         <tr class="odd gradeX">
                                             <td> {{$goods->id}} </td>
                                             <td> {{$goods->name}} </td>
+                                            <td> {{$goods->type == 1 ? '流量包' : '套餐'}} </td>
                                             <td> @if($goods->logo) <a href="{{$goods->logo}}" class="fancybox"><img src="{{$goods->logo}}"/></a> @endif </td>
-                                            <td> {{$goods->traffic}} </td>
-                                            <td> <span class="label label-danger">{{$goods->price}}元</span> </td>
-                                            <td> <span class="label label-danger">{{$goods->score}}</span> </td>
-                                            <td> <span class="label label-danger">{{$goods->status ? '下架' : '上架'}}</span> </td>
+                                            <td> {{$goods->traffic}} MiB</td>
+                                            <td> ¥{{$goods->price}} </td>
+                                            <td> {{$goods->score}} </td>
+                                            <td>
+                                                @if($goods->status)
+                                                    <span class="label label-success">上架</span>
+                                                @else
+                                                    <span class="label label-default">下架</span>
+                                                @endif
+                                            </td>
                                             <td>
                                                 <button type="button" class="btn btn-sm blue btn-outline" onclick="editGoods('{{$goods->id}}')">编辑</button>
                                                 <button type="button" class="btn btn-sm red btn-outline" onclick="delGoods('{{$goods->id}}')">删除</button>

+ 5 - 1
resources/views/user/addOrder.blade.php

@@ -9,6 +9,10 @@
     <div class="page-content">
         <!-- BEGIN PAGE BREADCRUMB -->
         <ul class="page-breadcrumb breadcrumb">
+            <li>
+                <a href="{{url('user/goodsList')}}">流量包</a>
+                <i class="fa fa-circle"></i>
+            </li>
             <li>
                 <a href="{{url('user/addOrder')}}">购买</a>
                 <i class="fa fa-circle"></i>
@@ -32,7 +36,7 @@
                         <tr>
                             <td style="padding: 20px;">
                                 <h3>{{$goods->name}}</h3>
-                                <p> <img src="{{$goods->logo}}" style="width:100px; height:100px;"> 内含流量 {{$goods->traffic}} ,有效30天  </p>
+                                <p> <img src="{{$goods->logo}}" style="width:100px; height:100px;"> 内含流量 {{$goods->traffic}} MiB,有效期 {{date('Y-m-d', strtotime($goods->start_time))}} ~ {{date('Y-m-d', strtotime($goods->end_time))}} </p>
                             </td>
                             <td class="text-center sbold"> ¥{{$goods->price}} </td>
                             <td class="text-center sbold"> x 1 </td>

+ 217 - 6
resources/views/user/goodsList.blade.php

@@ -1,6 +1,7 @@
 @extends('user.layouts')
 
 @section('css')
+    <link href="/assets/pages/css/pricing.min.css" rel="stylesheet" type="text/css" />
     <link href="/assets/global/plugins/fancybox/source/jquery.fancybox.css" rel="stylesheet" type="text/css" />
     <style>
         .fancybox > img {
@@ -24,12 +25,219 @@
         <!-- BEGIN PAGE BASE CONTENT -->
         <div class="row">
             <div class="col-md-12">
+                <!-- BEGIN PAGE BASE CONTENT -->
+                <!--
+                <div class="portlet light portlet-fit bordered">
+                    <div class="portlet-title">
+                        <div class="caption">
+                            <i class="icon-share font-green"></i>
+                            <span class="caption-subject font-green bold uppercase"> 套餐 </span>
+                        </div>
+                        <div class="actions"></div>
+                    </div>
+                    <div class="portlet-body">
+                        <div class="pricing-content-1">
+                            <div class="row">
+                                <div class="col-md-3">
+                                    <div class="price-column-container border-active">
+                                        <div class="price-table-head bg-blue">
+                                            <h2 class="no-margin">月付套餐</h2>
+                                        </div>
+                                        <div class="arrow-down border-top-blue"></div>
+                                        <div class="price-table-pricing">
+                                            <h3><sup class="price-sign">¥</sup>30</h3>
+                                        </div>
+                                        <div class="price-table-content">
+                                            <div class="row mobile-padding">
+                                                <div class="col-xs-3 text-right mobile-padding">
+                                                    <i class="icon-user"></i>
+                                                </div>
+                                                <div class="col-xs-9 text-left mobile-padding">支持同时5个设备在线</div>
+                                            </div>
+                                            <div class="row mobile-padding">
+                                                <div class="col-xs-3 text-right mobile-padding">
+                                                    <i class="icon-drawer"></i>
+                                                </div>
+                                                <div class="col-xs-9 text-left mobile-padding">50G流量/月</div>
+                                            </div>
+                                            <div class="row mobile-padding">
+                                                <div class="col-xs-3 text-right mobile-padding">
+                                                    <i class="icon-screen-smartphone"></i>
+                                                </div>
+                                                <div class="col-xs-9 text-left mobile-padding">支持多设备</div>
+                                            </div>
+                                            <div class="row mobile-padding">
+                                                <div class="col-xs-3 text-right mobile-padding">
+                                                    <i class="icon-refresh"></i>
+                                                </div>
+                                                <div class="col-xs-9 text-left mobile-padding">会员专属高速节点</div>
+                                            </div>
+                                            <div class="row mobile-padding">
+                                                <div class="col-xs-3 text-right mobile-padding">
+                                                    <i class="icon-refresh"></i>
+                                                </div>
+                                                <div class="col-xs-9 text-left mobile-padding">每月1日流量重置</div>
+                                            </div>
+                                        </div>
+                                        <div class="arrow-down arrow-grey"></div>
+                                        <div class="price-table-footer">
+                                            <button type="button" class="btn grey-salsa btn-outline sbold uppercase price-button"> 购 买 </button>
+                                        </div>
+                                    </div>
+                                </div>
+                                <div class="col-md-3">
+                                    <div class="price-column-container border-active">
+                                        <div class="price-table-head bg-red">
+                                            <h2 class="no-margin">季付套餐</h2>
+                                        </div>
+                                        <div class="arrow-down border-top-red"></div>
+                                        <div class="price-table-pricing">
+                                            <h3><sup class="price-sign">¥</sup>80</h3>
+                                        </div>
+                                        <div class="price-table-content">
+                                            <div class="row mobile-padding">
+                                                <div class="col-xs-3 text-right mobile-padding">
+                                                    <i class="icon-user"></i>
+                                                </div>
+                                                <div class="col-xs-9 text-left mobile-padding">支持同时5个设备在线</div>
+                                            </div>
+                                            <div class="row mobile-padding">
+                                                <div class="col-xs-3 text-right mobile-padding">
+                                                    <i class="icon-drawer"></i>
+                                                </div>
+                                                <div class="col-xs-9 text-left mobile-padding">80G流量/月</div>
+                                            </div>
+                                            <div class="row mobile-padding">
+                                                <div class="col-xs-3 text-right mobile-padding">
+                                                    <i class="icon-screen-smartphone"></i>
+                                                </div>
+                                                <div class="col-xs-9 text-left mobile-padding">支持多设备</div>
+                                            </div>
+                                            <div class="row mobile-padding">
+                                                <div class="col-xs-3 text-right mobile-padding">
+                                                    <i class="icon-refresh"></i>
+                                                </div>
+                                                <div class="col-xs-9 text-left mobile-padding">会员专属高速节点</div>
+                                            </div>
+                                            <div class="row mobile-padding">
+                                                <div class="col-xs-3 text-right mobile-padding">
+                                                    <i class="icon-refresh"></i>
+                                                </div>
+                                                <div class="col-xs-9 text-left mobile-padding">每月1日流量重置</div>
+                                            </div>
+                                        </div>
+                                        <div class="arrow-down arrow-grey"></div>
+                                        <div class="price-table-footer">
+                                            <button type="button" class="btn grey-salsa btn-outline price-button sbold uppercase"> 购 买 </button>
+                                        </div>
+                                    </div>
+                                </div>
+                                <div class="col-md-3">
+                                    <div class="price-column-container border-active">
+                                        <div class="price-table-head bg-green">
+                                            <h2 class="no-margin">半年付套餐</h2>
+                                        </div>
+                                        <div class="arrow-down border-top-green"></div>
+                                        <div class="price-table-pricing">
+                                            <h3><sup class="price-sign">¥</sup>150</h3>
+                                            <div class="price-ribbon">热门</div>
+                                        </div>
+                                        <div class="price-table-content">
+                                            <div class="row mobile-padding">
+                                                <div class="col-xs-3 text-right mobile-padding">
+                                                    <i class="icon-user"></i>
+                                                </div>
+                                                <div class="col-xs-9 text-left mobile-padding">支持同时5个设备在线</div>
+                                            </div>
+                                            <div class="row mobile-padding">
+                                                <div class="col-xs-3 text-right mobile-padding">
+                                                    <i class="icon-drawer"></i>
+                                                </div>
+                                                <div class="col-xs-9 text-left mobile-padding">100G流量/月</div>
+                                            </div>
+                                            <div class="row mobile-padding">
+                                                <div class="col-xs-3 text-right mobile-padding">
+                                                    <i class="icon-screen-smartphone"></i>
+                                                </div>
+                                                <div class="col-xs-9 text-left mobile-padding">支持多设备</div>
+                                            </div>
+                                            <div class="row mobile-padding">
+                                                <div class="col-xs-3 text-right mobile-padding">
+                                                    <i class="icon-refresh"></i>
+                                                </div>
+                                                <div class="col-xs-9 text-left mobile-padding">会员专属高速节点</div>
+                                            </div>
+                                            <div class="row mobile-padding">
+                                                <div class="col-xs-3 text-right mobile-padding">
+                                                    <i class="icon-refresh"></i>
+                                                </div>
+                                                <div class="col-xs-9 text-left mobile-padding">每月1日流量重置</div>
+                                            </div>
+                                        </div>
+                                        <div class="arrow-down arrow-grey"></div>
+                                        <div class="price-table-footer">
+                                            <button type="button" class="btn green price-button sbold uppercase"> 购 买 </button>
+                                        </div>
+                                    </div>
+                                </div>
+                                <div class="col-md-3">
+                                    <div class="price-column-container border-active">
+                                        <div class="price-table-head bg-purple">
+                                            <h2 class="no-margin">年付套餐</h2>
+                                        </div>
+                                        <div class="arrow-down border-top-purple"></div>
+                                        <div class="price-table-pricing">
+                                            <h3><sup class="price-sign">¥</sup>300</h3>
+                                        </div>
+                                        <div class="price-table-content">
+                                            <div class="row mobile-padding">
+                                                <div class="col-xs-3 text-right mobile-padding">
+                                                    <i class="icon-user"></i>
+                                                </div>
+                                                <div class="col-xs-9 text-left mobile-padding">支持同时5个设备在线</div>
+                                            </div>
+                                            <div class="row mobile-padding">
+                                                <div class="col-xs-3 text-right mobile-padding">
+                                                    <i class="icon-drawer"></i>
+                                                </div>
+                                                <div class="col-xs-9 text-left mobile-padding">200G流量/月</div>
+                                            </div>
+                                            <div class="row mobile-padding">
+                                                <div class="col-xs-3 text-right mobile-padding">
+                                                    <i class="icon-screen-smartphone"></i>
+                                                </div>
+                                                <div class="col-xs-9 text-left mobile-padding">支持多设备</div>
+                                            </div>
+                                            <div class="row mobile-padding">
+                                                <div class="col-xs-3 text-right mobile-padding">
+                                                    <i class="icon-refresh"></i>
+                                                </div>
+                                                <div class="col-xs-9 text-left mobile-padding">会员专属高速节点</div>
+                                            </div>
+                                            <div class="row mobile-padding">
+                                                <div class="col-xs-3 text-right mobile-padding">
+                                                    <i class="icon-refresh"></i>
+                                                </div>
+                                                <div class="col-xs-9 text-left mobile-padding">每月1日流量重置</div>
+                                            </div>
+                                        </div>
+                                        <div class="arrow-down arrow-grey"></div>
+                                        <div class="price-table-footer">
+                                            <button type="button" class="btn grey-salsa btn-outline price-button sbold uppercase"> 购 买 </button>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                -->
                 <!-- BEGIN EXAMPLE TABLE PORTLET-->
                 <div class="portlet light bordered">
                     <div class="portlet-title">
                         <div class="caption font-dark">
                             <i class="icon-basket font-dark"></i>
-                            <span class="caption-subject bold uppercase"> 流量包列表 </span>
+                            <span class="caption-subject bold uppercase"> 流量加油包 <small>到期后自动扣除</small> </span>
                         </div>
                     </div>
                     <div class="portlet-body">
@@ -39,7 +247,7 @@
                                 <tr>
                                     <th> ID </th>
                                     <th> 名称 </th>
-                                    <th> 图片 </th>
+                                    <th> 类型 </th>
                                     <th> 内含流量 </th>
                                     <th> 售价 </th>
                                     <!--<th> 所需积分 </th>-->
@@ -55,10 +263,13 @@
                                     @foreach($goodsList as $key => $goods)
                                         <tr class="odd gradeX">
                                             <td> {{$key + 1}} </td>
-                                            <td> {{$goods->name}} </td>
-                                            <td> @if($goods->logo) <a href="{{$goods->logo}}" class="fancybox"><img src="{{$goods->logo}}"/></a> @endif </td>
-                                            <td> {{$goods->traffic}} </td>
-                                            <td> {{$goods->price}} </td>
+                                            <td>
+                                                @if($goods->logo) <a href="{{$goods->logo}}" class="fancybox"><img src="{{$goods->logo}}"/></a> @endif
+                                                {{$goods->name}}
+                                            </td>
+                                            <td> {{$goods->type == 1 ? '流量包' : '套餐'}} </td>
+                                            <td> {{$goods->traffic}} MiB </td>
+                                            <td> ¥{{$goods->price}} </td>
                                             <!--<td> {{$goods->score}} </td>-->
                                             <td>
                                                 <button type="button" class="btn btn-sm red btn-outline" onclick="buy('{{$goods->id}}')">购买</button>

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

@@ -135,7 +135,7 @@
                 <li class="nav-item {{in_array(Request::getRequestUri(), ['/user/goodsList', '/user/addOrder']) ? 'active open' : ''}}">
                     <a href="{{url('user/goodsList')}}" class="nav-link nav-toggle">
                         <i class="icon-basket"></i>
-                        <span class="title">流量</span>
+                        <span class="title">流量套餐</span>
                     </a>
                 </li>
                 <li class="nav-item {{in_array(Request::getRequestUri(), ['/user/orderList']) ? 'active open' : ''}}">

+ 1 - 7
resources/views/user/nodeList.blade.php

@@ -42,29 +42,23 @@
                                 <tr>
                                     <th> ID </th>
                                     <th> 节点名称 </th>
-                                    <th> 出口带宽 </th>
                                     <th> 在线人数 </th>
                                     <th> 流量比例 </th>
-                                    <th> 协议 </th>
-                                    <th> 混淆 </th>
                                     <th> 操作 </th>
                                 </tr>
                                 </thead>
                                 <tbody>
                                 @if($nodeList->isEmpty())
                                     <tr>
-                                        <td colspan="8">暂无数据</td>
+                                        <td colspan="5">暂无数据</td>
                                     </tr>
                                 @else
                                     @foreach($nodeList as $node)
                                         <tr class="odd gradeX">
                                             <td> {{$node->id}} </td>
                                             <td> {{$node->name}} @if ($node->compatible) <span class="label label-warning"> 兼容SS </span> @endif </td>
-                                            <td> {{$node->bandwidth}}M </td>
                                             <td> <span class="label label-danger"> {{$node->online_users}} </span> </td>
                                             <td> {{$node->traffic_rate}} </td>
-                                            <td> <span class="label label-info"> {{$node->protocol}} </span> </td>
-                                            <td> <span class="label label-info"> {{$node->obfs}} </span> </td>
                                             <td>
                                                 <a class="btn btn-sm green btn-outline" data-toggle="modal" href="#txt_{{$node->id}}"> 查看配置 </a>
                                                 <a class="btn btn-sm green btn-outline" data-toggle="modal" href="#scheme_{{$node->id}}"> SCHEME </a>

+ 1 - 0
routes/web.php

@@ -61,6 +61,7 @@ Route::group(['middleware' => ['user', 'admin']], function() {
     Route::post('admin/setReferralPercent', 'AdminController@setReferralPercent'); // 设置返利比例
     Route::post('admin/setReferralMoney', 'AdminController@setReferralMoney'); // 设置返利满多少可提现
     Route::post('admin/setQrcode', 'AdminController@setQrcode'); // 设置充值二维码
+    Route::post('admin/resetUserTraffic', 'AdminController@resetUserTraffic'); // 重置用户流量
     Route::get('admin/makePasswd', 'AdminController@makePasswd'); // 获取随机密码
     Route::get('admin/download', 'AdminController@download'); // 下载转换过的JSON配置
     Route::any('shop/goodsList', 'ShopController@goodsList'); // 商品列表

+ 2 - 0
sql/db.sql

@@ -324,6 +324,7 @@ CREATE TABLE `goods` (
   `logo` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '商品图片地址',
   `traffic` bigint(20) NOT NULL DEFAULT '0' COMMENT '商品内含多少流量,单位MiB',
   `score` int(11) NOT NULL DEFAULT '0' COMMENT '商品价值多少积分',
+  `type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '商品类型:1-流量包、2-套餐',
   `price` int(11) NOT NULL DEFAULT '0' COMMENT '商品售价,单位分',
   `desc` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '商品描述',
   `start_time` datetime DEFAULT NULL COMMENT '有效期开始',
@@ -401,6 +402,7 @@ CREATE TABLE `order_goods` (
   `num` int(11) NOT NULL DEFAULT '0' COMMENT '商品数量',
   `original_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '商品原价',
   `price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '商品实际价格',
+  `is_expire` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否已过期:0-未过期、1-已过期',
   `created_at` datetime DEFAULT NULL COMMENT '创建时间',
   `updated_at` datetime DEFAULT NULL COMMENT '最后一次更新时间',
   PRIMARY KEY (`id`)

+ 2 - 0
sql/update/20171008.sql

@@ -0,0 +1,2 @@
+ALTER TABLE `goods` ADD COLUMN `type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '商品类型:1-流量包、2-套餐' AFTER `score`;
+ALTER TABLE `order_goods` ADD COLUMN `is_expire` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否已过期:0-未过期、1-已过期' AFTER `days`;