Ver código fonte

feat(admin): 添加共富会员管理功能

- 新增共富会员路由配置
- 创建SharedProsperityGroup模型和数据访问层
- 创建SharedProsperityGroupUser模型和数据访问层
- 扩展SharedProsperityUser模型关联用户和父级关系
- 实现后台共富用户列表查询接口
- 添加按团队分组的用户数据获取功能
- 实现多条件筛选查询包括手机号、昵称、合伙人等级等
- 集成用户昵称查询功能
shichen 5 meses atrás
pai
commit
acde7a2bf4

+ 33 - 0
app/common/dao/shared/SharedProsperityGroupDao.php

@@ -0,0 +1,33 @@
1
+<?php
2
+
3
+namespace app\common\dao\shared;
4
+
5
+use app\common\dao\BaseDao;
6
+use app\common\model\BaseModel;
7
+use app\common\model\shared\SharedProsperityGroup;
8
+
9
+class SharedProsperityGroupDao extends BaseDao
10
+{
11
+
12
+    /**
13
+     * @return BaseModel
14
+     */
15
+    protected function getModel(): string
16
+    {
17
+        return SharedProsperityGroup::class;
18
+    }
19
+
20
+    /**
21
+     * 获取所有团队配置
22
+     * @return array
23
+     */
24
+    public function getAllGroups(): array
25
+    {
26
+        try {
27
+            return $this->getModel()::select()->toArray();
28
+        } catch (\Exception $e) {
29
+            return [];
30
+        }
31
+    }
32
+
33
+}

+ 60 - 0
app/common/dao/shared/SharedProsperityGroupUserDao.php

@@ -0,0 +1,60 @@
1
+<?php
2
+
3
+namespace app\common\dao\shared;
4
+
5
+use app\common\dao\BaseDao;
6
+use app\common\model\BaseModel;
7
+use app\common\model\shared\SharedProsperityGroupUser;
8
+use think\db\exception\DbException;
9
+
10
+class SharedProsperityGroupUserDao extends BaseDao
11
+{
12
+
13
+    /**
14
+     * @return BaseModel
15
+     */
16
+    protected function getModel(): string
17
+    {
18
+        return SharedProsperityGroupUser::class;
19
+    }
20
+
21
+    /**
22
+     * 获取按团队分组的有效用户ID列表
23
+     * @return array [group_id => [user_id1, user_id2, ...]]
24
+     */
25
+    public function getValidUsersGroupByGroup(): array
26
+    {
27
+        try {
28
+            $rows = $this->getModel()::where('status', 1)
29
+                ->field('group_id, user_id')
30
+                ->select()
31
+                ->toArray();
32
+            $grouped = [];
33
+            foreach ($rows as $row) {
34
+                $grouped[$row['group_id']][] = $row['user_id'];
35
+            }
36
+            return $grouped;
37
+        } catch (\Exception $e) {
38
+            return [];
39
+        }
40
+    }
41
+
42
+    /**
43
+     * @param $groupId
44
+     * @return array
45
+     * @author 史晨
46
+     * @date 2026/2/27 11:31
47
+     * 获取团队用户(分页)
48
+     */
49
+    public function getUserByLevel($groupId)
50
+    {
51
+        try {
52
+            return $this->getModel()::where('status', 1)
53
+                ->where(['group_id' => $groupId])
54
+                ->paginate(20)
55
+                ->toArray();
56
+        } catch (DbException $e) {
57
+            return [];
58
+        }
59
+    }
60
+}

+ 30 - 0
app/common/dao/shared/SharedProsperityUserDao.php

@@ -7,6 +7,7 @@ use app\common\enum\CommonEnum;
7 7
 use app\common\model\BaseModel;
8 8
 use app\common\model\shared\SharedProsperityUser;
9 9
 use app\entity\data\shared\SharedProsperityUserEntity;
10
+use think\db\exception\DbException;
10 11
 
11 12
 class SharedProsperityUserDao extends BaseDao
12 13
 {
@@ -259,4 +260,33 @@ class SharedProsperityUserDao extends BaseDao
259 260
             return [];
260 261
         }
261 262
     }
263
+
264
+    /**
265
+     * @return array|void
266
+     * @author 史晨
267
+     * @date 2026/2/27 09:32
268
+     * 后台用户列表
269
+     */
270
+    public function adminList($where,$page)
271
+    {
272
+        /** @var SharedProsperityUser $model */
273
+        $model = $this->getModel();
274
+        try {
275
+            $list = $model::getDB()
276
+                ->where($where)
277
+                ->with([
278
+                    'user' => function ($query) {
279
+                        $query->field('uid,avatar,nickname,account');
280
+                    },
281
+                    'parent' => function ($query) {
282
+                        $query->field('uid,avatar,nickname,account');
283
+                    }
284
+                ])
285
+                ->paginate(['page' => $page, 'list_rows' => 20])
286
+                ->toArray();
287
+            return $list;
288
+        } catch (DbException $e) {
289
+            return [];
290
+        }
291
+    }
262 292
 }

+ 5 - 0
app/common/dao/user/UserDao.php

@@ -272,6 +272,11 @@ class UserDao extends BaseDao
272 272
         return User::getDB()->where('account', $account)->where('is_del', 0)->find();
273 273
     }
274 274
 
275
+    public function nicknameByUser($nickname)
276
+    {
277
+        return User::getDB()->where('nickname', $nickname)->where('is_del', 0)->find();
278
+    }
279
+
275 280
     /**
276 281
      * @param $uid
277 282
      * @return array

+ 18 - 0
app/common/model/shared/SharedProsperityGroup.php

@@ -0,0 +1,18 @@
1
+<?php
2
+
3
+namespace app\common\model\shared;
4
+
5
+use app\common\model\BaseModel;
6
+
7
+class SharedProsperityGroup extends BaseModel
8
+{
9
+    public static function tablePk(): ?string
10
+    {
11
+        return 'id';
12
+    }
13
+
14
+    public static function tableName(): string
15
+    {
16
+        return 'shared_prosperity_group';
17
+    }
18
+}

+ 18 - 0
app/common/model/shared/SharedProsperityGroupUser.php

@@ -0,0 +1,18 @@
1
+<?php
2
+
3
+namespace app\common\model\shared;
4
+
5
+use app\common\model\BaseModel;
6
+
7
+class SharedProsperityGroupUser extends BaseModel
8
+{
9
+    public static function tablePk(): ?string
10
+    {
11
+        return 'id';
12
+    }
13
+
14
+    public static function tableName(): string
15
+    {
16
+        return 'shared_prosperity_group_user';
17
+    }
18
+}

+ 11 - 0
app/common/model/shared/SharedProsperityUser.php

@@ -3,6 +3,7 @@
3 3
 namespace app\common\model\shared;
4 4
 
5 5
 use app\common\model\BaseModel;
6
+use app\common\model\user\User;
6 7
 
7 8
 class SharedProsperityUser extends BaseModel
8 9
 {
@@ -15,4 +16,14 @@ class SharedProsperityUser extends BaseModel
15 16
     {
16 17
         return 'shared_prosperity_user';
17 18
     }
19
+
20
+    public function user()
21
+    {
22
+        return $this->hasOne(User::class, 'uid', 'user_id');
23
+    }
24
+
25
+    public function parent()
26
+    {
27
+        return $this->hasOne(User::class, 'uid', 'parent_id');
28
+    }
18 29
 }

+ 49 - 0
app/common/repositories/shared/SharedProsperityUserRepository.php

@@ -2,10 +2,12 @@
2 2
 
3 3
 namespace app\common\repositories\shared;
4 4
 
5
+use app\common\dao\shared\SharedProsperityGroupUserDao;
5 6
 use app\common\dao\shared\SharedProsperityUserDao;
6 7
 use app\common\dao\user\UserDao;
7 8
 use app\common\enum\CommonEnum;
8 9
 use app\common\enum\shared\SharedProsperityUserEnum;
10
+use app\common\model\user\User;
9 11
 use app\common\repositories\BaseRepository;
10 12
 use app\entity\data\shared\SharedProsperityRecommendConfigEntity;
11 13
 use app\entity\data\shared\SharedProsperityUserEntity;
@@ -631,4 +633,51 @@ class SharedProsperityUserRepository extends BaseRepository
631 633
         }
632 634
         return null;
633 635
     }
636
+
637
+    public function adminList($params)
638
+    {
639
+        $page = $params['page'] ?? 1;
640
+        $where = [];
641
+        /** @var UserDao $userDao */
642
+        $userDao = app()->make(UserDao::class);
643
+
644
+        // 手机号搜索
645
+        if (isset($params['account']) && $params['account']) {
646
+            $userData = $userDao->accountByUser($params['account']);
647
+            $uid = 0;
648
+            if ($userData) {
649
+                $uid = $userData->uid;
650
+            }
651
+
652
+            $where[] = ['user_id', '=', $uid];
653
+        }
654
+
655
+        // 昵称搜索
656
+        if (isset($params['nickname']) && $params['nickname']) {
657
+            $userData = $userDao->nicknameByUser($params['nickname']);
658
+            $uid = 0;
659
+            if ($userData) {
660
+                $uid = $userData->uid;
661
+            }
662
+            $where[] = ['user_id', '=', $uid];
663
+        }
664
+
665
+        // 合伙人等级搜索
666
+        if (isset($params['partner_level']) && $params['partner_level']) {
667
+            $where[] = ['partner_level', '=', $params['partner_level']];
668
+        }
669
+
670
+        // 共富团等级搜索
671
+        if (isset($params['user_group']) && $params['user_group']) {
672
+            /** @var SharedProsperityGroupUserDao $groupUserDao */
673
+            $groupUserDao = app()->make(SharedProsperityGroupUserDao::class);
674
+            $groupUserData = $groupUserDao->getUserByLevel($params['user_group']);
675
+            $uids = array_column($groupUserData['data'],'user_id');
676
+            $where[] = ['user_id', 'in', $uids];
677
+            $page = 1;
678
+        }
679
+
680
+        $list = $this->dao->adminList($where,$page);
681
+        return $list;
682
+    }
634 683
 }

+ 22 - 0
app/controller/admin/system/sharedProsperity/SharedProsperityUser.php

@@ -0,0 +1,22 @@
1
+<?php
2
+
3
+namespace app\controller\admin\system\sharedProsperity;
4
+use app\common\repositories\shared\SharedProsperityUserRepository;
5
+
6
+class SharedProsperityUser
7
+{
8
+    /**
9
+     * @return mixed
10
+     * @author 史晨
11
+     * @date 2026/2/27 09:33
12
+     * 共富用户列表
13
+     */
14
+    public function list()
15
+    {
16
+        /** @var SharedProsperityUserRepository $repository */
17
+        $repository = app()->make(SharedProsperityUserRepository::class);
18
+        $params = app('request')->params(['account', 'nickname', 'partner_level', 'user_group', 'page']);
19
+        $list = $repository->adminList($params);
20
+        return app('json')->success($list);
21
+    }
22
+}

+ 3 - 0
route/admin.php

@@ -118,6 +118,9 @@ Route::group(config('admin.api_admin_prefix') . '/', function () {
118 118
         Route::get('sharedProsperity/detail', 'admin.system.sharedProsperity.SharedProsperityRecommend/detail');
119 119
         Route::post('sharedProsperity/update', 'admin.system.sharedProsperity.SharedProsperityRecommend/update');
120 120
 
121
+        // 共富会员
122
+        Route::get('sharedProsperity/user/list', 'admin.system.sharedProsperity.SharedProsperityUser/list');
123
+
121 124
         //组合数据
122 125
         Route::group('group', function () {
123 126
             Route::get('lst', '/lst')->name('groupLst');