Browse Source

update: staff

Tokumeikoi 4 years ago
parent
commit
be18727de1

+ 59 - 0
app/Http/Controllers/Staff/NoticeController.php

@@ -0,0 +1,59 @@
+<?php
+
+namespace App\Http\Controllers\Staff;
+
+use App\Http\Requests\Admin\NoticeSave;
+use Illuminate\Http\Request;
+use App\Http\Controllers\Controller;
+use App\Models\Notice;
+use Illuminate\Support\Facades\Cache;
+
+class NoticeController extends Controller
+{
+    public function fetch(Request $request)
+    {
+        return response([
+            'data' => Notice::orderBy('id', 'DESC')->get()
+        ]);
+    }
+
+    public function save(NoticeSave $request)
+    {
+        $data = $request->only([
+            'title',
+            'content',
+            'img_url'
+        ]);
+        if (!$request->input('id')) {
+            if (!Notice::create($data)) {
+                abort(500, '保存失败');
+            }
+        } else {
+            try {
+                Notice::find($request->input('id'))->update($data);
+            } catch (\Exception $e) {
+                abort(500, '保存失败');
+            }
+        }
+        return response([
+            'data' => true
+        ]);
+    }
+
+    public function drop(Request $request)
+    {
+        if (empty($request->input('id'))) {
+            abort(500, '参数错误');
+        }
+        $notice = Notice::find($request->input('id'));
+        if (!$notice) {
+            abort(500, '公告不存在');
+        }
+        if (!$notice->delete()) {
+            abort(500, '删除失败');
+        }
+        return response([
+            'data' => true
+        ]);
+    }
+}

+ 41 - 0
app/Http/Controllers/Staff/PlanController.php

@@ -0,0 +1,41 @@
+<?php
+
+namespace App\Http\Controllers\Staff;
+
+use App\Http\Requests\Admin\PlanSave;
+use App\Http\Requests\Admin\PlanSort;
+use App\Http\Requests\Admin\PlanUpdate;
+use Illuminate\Http\Request;
+use App\Http\Controllers\Controller;
+use App\Models\Plan;
+use App\Models\Order;
+use App\Models\User;
+use Illuminate\Support\Facades\DB;
+
+class PlanController extends Controller
+{
+    public function fetch(Request $request)
+    {
+        $counts = User::select(
+            DB::raw("plan_id"),
+            DB::raw("count(*) as count")
+        )
+            ->where('plan_id', '!=', NULL)
+            ->where(function ($query) {
+                $query->where('expired_at', '>=', time())
+                    ->orWhere('expired_at', NULL);
+            })
+            ->groupBy("plan_id")
+            ->get();
+        $plans = Plan::orderBy('sort', 'ASC')->get();
+        foreach ($plans as $k => $v) {
+            $plans[$k]->count = 0;
+            foreach ($counts as $kk => $vv) {
+                if ($plans[$k]->id === $counts[$kk]->plan_id) $plans[$k]->count = $counts[$kk]->count;
+            }
+        }
+        return response([
+            'data' => $plans
+        ]);
+    }
+}

+ 102 - 0
app/Http/Controllers/Staff/UserController.php

@@ -0,0 +1,102 @@
+<?php
+
+namespace App\Http\Controllers\Staff;
+
+use App\Http\Requests\Admin\UserSendMail;
+use App\Http\Requests\Staff\UserUpdate;
+use App\Jobs\SendEmailJob;
+use Illuminate\Http\Request;
+use App\Http\Controllers\Controller;
+use App\Models\User;
+use App\Models\Plan;
+
+class UserController extends Controller
+{
+    public function getUserInfoById(Request $request)
+    {
+        if (empty($request->input('id'))) {
+            abort(500, '参数错误');
+        }
+        return response([
+            'data' => User::find($request->input('id'))
+        ]);
+    }
+
+    public function update(UserUpdate $request)
+    {
+        $params = $request->validated();
+        $user = User::find($request->input('id'));
+        if (!$user) {
+            abort(500, '用户不存在');
+        }
+        if (User::where('email', $params['email'])->first() && $user->email !== $params['email']) {
+            abort(500, '邮箱已被使用');
+        }
+        if (isset($params['password'])) {
+            $params['password'] = password_hash($params['password'], PASSWORD_DEFAULT);
+            $params['password_algo'] = NULL;
+        } else {
+            unset($params['password']);
+        }
+        if (isset($params['plan_id'])) {
+            $plan = Plan::find($params['plan_id']);
+            if (!$plan) {
+                abort(500, '订阅计划不存在');
+            }
+            $params['group_id'] = $plan->group_id;
+        }
+
+        try {
+            $user->update($params);
+        } catch (\Exception $e) {
+            abort(500, '保存失败');
+        }
+        return response([
+            'data' => true
+        ]);
+    }
+
+    public function sendMail(UserSendMail $request)
+    {
+        $sortType = in_array($request->input('sort_type'), ['ASC', 'DESC']) ? $request->input('sort_type') : 'DESC';
+        $sort = $request->input('sort') ? $request->input('sort') : 'created_at';
+        $builder = User::orderBy($sort, $sortType);
+        $this->filter($request, $builder);
+        $users = $builder->get();
+        foreach ($users as $user) {
+            SendEmailJob::dispatch([
+                'email' => $user->email,
+                'subject' => $request->input('subject'),
+                'template_name' => 'notify',
+                'template_value' => [
+                    'name' => config('v2board.app_name', 'V2Board'),
+                    'url' => config('v2board.app_url'),
+                    'content' => $request->input('content')
+                ]
+            ]);
+        }
+
+        return response([
+            'data' => true
+        ]);
+    }
+
+    public function ban(Request $request)
+    {
+        $sortType = in_array($request->input('sort_type'), ['ASC', 'DESC']) ? $request->input('sort_type') : 'DESC';
+        $sort = $request->input('sort') ? $request->input('sort') : 'created_at';
+        $builder = User::orderBy($sort, $sortType);
+        $this->filter($request, $builder);
+        try {
+            $builder->update([
+                'banned' => 1
+            ]);
+        } catch (\Exception $e) {
+            abort(500, '处理失败');
+        }
+
+        return response([
+            'data' => true
+        ]);
+    }
+}

+ 56 - 0
app/Http/Requests/Staff/UserUpdate.php

@@ -0,0 +1,56 @@
+<?php
+
+namespace App\Http\Requests\Staff;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class UserUpdate extends FormRequest
+{
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+            'email' => 'required|email',
+            'password' => 'nullable',
+            'transfer_enable' => 'numeric',
+            'expired_at' => 'nullable|integer',
+            'banned' => 'required|in:0,1',
+            'plan_id' => 'nullable|integer',
+            'commission_rate' => 'nullable|integer|min:0|max:100',
+            'discount' => 'nullable|integer|min:0|max:100',
+            'u' => 'integer',
+            'd' => 'integer',
+            'balance' => 'integer',
+            'commission_balance' => 'integer'
+        ];
+    }
+
+    public function messages()
+    {
+        return [
+            'email.required' => '邮箱不能为空',
+            'email.email' => '邮箱格式不正确',
+            'transfer_enable.numeric' => '流量格式不正确',
+            'expired_at.integer' => '到期时间格式不正确',
+            'banned.required' => '是否封禁不能为空',
+            'banned.in' => '是否封禁格式不正确',
+            'plan_id.integer' => '订阅计划格式不正确',
+            'commission_rate.integer' => '推荐返利比例格式不正确',
+            'commission_rate.nullable' => '推荐返利比例格式不正确',
+            'commission_rate.min' => '推荐返利比例最小为0',
+            'commission_rate.max' => '推荐返利比例最大为100',
+            'discount.integer' => '专属折扣比例格式不正确',
+            'discount.nullable' => '专属折扣比例格式不正确',
+            'discount.min' => '专属折扣比例最小为0',
+            'discount.max' => '专属折扣比例最大为100',
+            'u.integer' => '上行流量格式不正确',
+            'd.integer' => '下行流量格式不正确',
+            'balance.integer' => '余额格式不正确',
+            'commission_balance.integer' => '佣金格式不正确'
+        ];
+    }
+}

+ 12 - 0
app/Http/Routes/StaffRoute.php

@@ -15,6 +15,18 @@ class StaffRoute
             $router->get ('/ticket/fetch', 'Staff\\TicketController@fetch');
             $router->post('/ticket/reply', 'Staff\\TicketController@reply');
             $router->post('/ticket/close', 'Staff\\TicketController@close');
+            // User
+            $router->post('/user/update', 'Staff\\UserController@update');
+            $router->get ('/user/getUserInfoById', 'Staff\\UserController@getUserInfoById');
+            $router->post('/user/sendMail', 'Staff\\UserController@sendMail');
+            $router->post('/user/ban', 'Staff\\UserController@ban');
+            // Plan
+            $router->get ('/plan/fetch', 'Staff\\PlanController@fetch');
+            // Notice
+            $router->get ('/notice/fetch', 'Admin\\NoticeController@fetch');
+            $router->post('/notice/save', 'Admin\\NoticeController@save');
+            $router->post('/notice/update', 'Admin\\NoticeController@update');
+            $router->post('/notice/drop', 'Admin\\NoticeController@drop');
         });
     }
 }