Browse Source

用户分群

liuzejian 1 year ago
parent
commit
4b1f053848

+ 85 - 0
modules/Audience/Http/Controllers/UserGroupController.php

@@ -0,0 +1,85 @@
+<?php
+
+namespace Modules\Audience\Http\Controllers;
+
+use Catch\Base\CatchController;
+use Illuminate\Foundation\Validation\ValidatesRequests;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\DB;
+use Modules\Audience\Models\GzhUgMapModel;
+use Modules\Audience\Models\UserGroupModel;
+
+class UserGroupController extends CatchController
+{
+    use ValidatesRequests;
+    /**
+     * 用户分群列表
+     * @param Request $request
+     */
+    public function list(Request $request) {
+        $name = $request->input('name');
+        DB::table('user_groups')
+            ->when($name, function ($query, $name){
+                return $query->where('name', 'like', '%'.$name.'%');
+            })->where([
+                'uid' => $this->getLoginUserId(),
+                'is_enabled' => 1
+            ])->orderBy('id', 'desc')
+            ->paginate($request->input('limit', 20));
+    }
+
+    /**
+     * 添加用户分群
+     * @param Request $request
+     * @return string
+     * @throws \Illuminate\Validation\ValidationException
+     */
+    public function add(Request $request){
+        $this->validate($request, [
+            'name' => 'required|string|max:64',
+            'gzh_ids' => 'required|array',
+            'tags' => 'required|array',
+            'remark' => 'nullable|string|max:140'
+        ]);
+
+        $model = UserGroupModel::create([
+            'name' => $request->input('name'), 'uid' => $this->getLoginUserId(),
+            'tags' => \json_encode($request->input('tags', []), JSON_UNESCAPED_UNICODE),
+            'remark' => $request->input('remark', '')
+        ]);
+        foreach ($request->input('gzh_ids') as $gzh_id) {
+            GzhUgMapModel::create([
+                'ug_id' => $model->id, 'gzh_id' => $gzh_id
+            ]);
+        }
+
+        return 'ok';
+    }
+
+    /**
+     * 删除
+     * @param Request $request
+     * @return string
+     * @throws \Illuminate\Validation\ValidationException
+     */
+    public function delete(Request $request) {
+        $this->validate($request, ['id' => 'required']);
+
+        $model = UserGroupModel::where([
+            'uid' => $this->getLoginUserId(), 'id' => $request->input('id'),
+            'is_enabled' => 1,
+        ])->first();
+        if($model) {
+            $model->is_enabled = 0;
+            $model->save();
+            GzhUgMapModel::where([
+                'ug_id' => $model->id,
+                'is_enabled' => 1
+            ])->update([
+                'is_enabled' => 0
+            ]);
+        }
+
+        return 'ok';
+    }
+}

+ 9 - 0
modules/Audience/Models/GzhUgMapModel.php

@@ -0,0 +1,9 @@
+<?php
+
+namespace Modules\Audience\Models;
+
+class GzhUgMapModel extends \Illuminate\Database\Eloquent\Model
+{
+    protected $table = 'gzh_ug_maps';
+    protected $guarded = [];
+}

+ 9 - 0
modules/Audience/Models/UserGroupModel.php

@@ -0,0 +1,9 @@
+<?php
+
+namespace Modules\Audience\Models;
+
+class UserGroupModel extends \Illuminate\Database\Eloquent\Model
+{
+    protected $table = 'user_groups';
+    protected $guarded = [];
+}