xialei 1 год назад
Родитель
Сommit
9311946bfb
1 измененных файлов с 147 добавлено и 89 удалено
  1. 147 89
      app/controller/api/user/User.php

+ 147 - 89
app/controller/api/user/User.php

@@ -41,6 +41,7 @@ use think\facade\Log;
41 41
 use think\facade\Request as r;
42 42
 
43 43
 use app\common\common;
44
+use phpseclib3\Math\BigInteger\Engines\BCMath;
44 45
 
45 46
 class User extends BaseController
46 47
 {
@@ -240,6 +241,8 @@ class User extends BaseController
240 241
                 $children = $this->buildTreeContribute($users, $user['uid']); // 递归查找子节点
241 242
                 if ($children) {
242 243
                     $user['children'] = $children; // 如果有子节点,添加到当前节点
244
+                }else{
245
+                    $user['children'] = [];
243 246
                 }
244 247
                 $user['total_contribute'] = $user['contribute_sum']; // 初始化当前节点的总余额为自身余额
245 248
                 if ($children) { // 如果存在子节点,计算总余额
@@ -337,15 +340,19 @@ class User extends BaseController
337 340
             //如果用户等级为用户身份 只查一级直推
338 341
             //去除掉贡献值最大的下级
339 342
             $child_nums = $this->getRecursiveChildrenChengji($user_id, $number);
340
-            $child_nums_Tree = $this->buildTreeContribute($child_nums);
343
+            $child_nums_Tree = $this->buildTreeContribute($child_nums, $con['spread_uid']);
341 344
             if (empty($child_nums_Tree)){
342 345
                 $child_nums_Tree = $child_nums;
343 346
                 $total_contribute = $child_nums_Tree[0]['per_contribute'];
344 347
             }else{
345 348
                 // 找到贡献值最大的用户的索引
346
-                $maxBalanceIndex = array_search(max(array_column($child_nums_Tree[0]['children'], 'total_contribute')), array_column($child_nums_Tree, 'total_contribute'));
347
-                // 减去该用户的贡献值
348
-                $total_contribute = bcsub($child_nums_Tree[0]['total_contribute'], $child_nums_Tree[0]['children'][$maxBalanceIndex]['total_contribute'], 2);
349
+                if(count($child_nums_Tree[0]['children'])){
350
+                    $maxBalanceIndex = array_search(max(array_column($child_nums_Tree[0]['children'], 'total_contribute')), array_column($child_nums_Tree, 'total_contribute'));
351
+                    // 减去该用户的贡献值
352
+                    $total_contribute = bcsub($child_nums_Tree[0]['total_contribute'], $child_nums_Tree[0]['children'][$maxBalanceIndex]['total_contribute'], 2);
353
+                }else{
354
+                    $total_contribute = $child_nums_Tree[0]['per_contribute'];
355
+                }
349 356
             }
350 357
             $data['team_gongxian_num'] = $total_contribute;
351 358
 
@@ -1489,63 +1496,139 @@ class User extends BaseController
1489 1496
 
1490 1497
     }
1491 1498
 
1492
-    /**
1493
-     * 一壶茶-团队列表
1494
-     */
1495
-    public function team_list()
1496
-    {
1497
-        $teamid = $this->request->uid();
1498
-
1499
-        //return app("json")->fail("未做任何修改");
1500
-        //$teamid =  $this->request->param('teamid');//测试ID
1501
-        //$teamid = 17;
1502 1499
 
1500
+    public function buildTreePv($users, $parentId = 0) {
1501
+        $branch = array();
1502
+        foreach ($users as $user) {
1503
+            if ($user['spread_uid'] == $parentId) {
1504
+                $children = $this->buildTreePv($users, $user['uid']); // 递归查找子节点
1505
+                if ($children) {
1506
+                    $user['children'] = $children; // 如果有子节点,添加到当前节点
1507
+                }else{
1508
+                    $user['children'] = [];
1509
+                }
1510
+                $user['total_pv'] = $user['pv']; // 初始化当前节点的总余额为自身余额
1511
+                if ($children) { // 如果存在子节点,计算总余额
1512
+                    foreach ($children as $child) {
1513
+                        $user['total_pv'] += $child['total_pv']; // 累加子节点的总余额
1514
+                    }
1515
+                }
1516
+                $branch[] = $user; // 将当前节点添加到树中
1517
+            }
1518
+        }
1519
+        return $branch; // 返回当前分支的所有节点
1520
+    }
1503 1521
 
1504
-        if($teamid == 592){
1505
-             $teamid = 17;//593
1522
+    // 根据父级uid,递归获取所有子级UID数组 默认深度10级
1523
+    public function getdepartmentStatistics($parentUid) {
1524
+        $user = Db::name('user')->where('uid', $parentUid)->field('uid,nickname,avatar,spread_uid,pv,create_time')->find();
1525
+        $uids = [];// 用于存储符合条件的子级 uid
1526
+        $result = [$user]; // 用于存储符合条件的子级数据
1506 1527
 
1507
-//            // $ss=  $this->userupdates($teamid);
1508
-//            // var_dump($ss);
1528
+        // 定义递归函数
1529
+        $recursion = function ($parentUid) use (&$uids, &$result, &$recursion) {
1530
+            // 查询当前父级的所有直接子级
1531
+            $children = Db::name('user')->field('uid,nickname,avatar,spread_uid,pv,create_time')->where("spread_uid", $parentUid)->select()->toArray();
1532
+            // 如果没有子级,直接返回
1533
+            if (!count($children) && count($children) < 1) {
1534
+                return;
1535
+            }
1509 1536
 
1510
- //$team_userinfo_old_jbp22 = $this->getPerformance22(17);
1511
-//var_dump($team_userinfo_old_jbp22);
1512
- $datas_jbp = Db::name('user')->where("status",1)->select();
1537
+            // 遍历每个子级
1538
+            foreach ($children as $childUid) {
1539
+                //如果有重复的就跳过 防止死循环
1540
+                if(in_array($childUid['uid'], $uids)){
1541
+                    continue;
1542
+                }
1543
+                // 将符合条件的子级 uid 添加到结果数组
1544
+                $uids[] = $childUid['uid'];
1545
+                $result[] = $childUid;
1546
+                // 递归查询子级的子级
1547
+                $recursion($childUid['uid']);
1548
+            }
1549
+        };
1513 1550
 
1514
- //var_dump( $team_userinfo_old_jbp22['person_nums_pv']);
1551
+        // 从初始父级开始递归查询
1552
+        $recursion($parentUid);
1515 1553
 
1516
-foreach($datas_jbp as $k=>$v){
1517
-    $team_userinfo_old_jbp22 = $this->getPerformance22($v['uid']);
1518
-    var_dump("id:" . $v['uid'] . "  用户:" . $v['nickname'] . "    小部门贡献值 :" .  $team_userinfo_old_jbp22['person_nums_pv'] . " 大部门: " . $team_userinfo_old_jbp22['common_nums_pv']);
1519
-}
1554
+        return $result; // 返回结果数组,并去重
1555
+    }
1520 1556
 
1521
- return;
1522
-//                 $team_userinfo_old_jbp1 = $this->getPerformance($teamid);
1557
+    /**
1558
+     * 一壶茶-团队列表
1559
+     */
1560
+    public function team_list()
1561
+    {
1562
+        $teamid = $this->request->uid();
1523 1563
 
1524
-//            //return;
1525
-//               var_dump($team_userinfo_old_jbp1);return;
1564
+        //小夏重写部分
1565
+        $user_id = $teamid;
1566
+        //如果下级团队只有一个人 那就不用再查了 为0
1567
+        //如果用户等级为用户身份 只查一级直推
1568
+        //去除掉贡献值最大的下级
1569
+        $user = Db::name('user')->where('uid', $user_id)->field('uid,nickname,avatar,spread_uid,pv,create_time')->find();
1570
+        $child_nums = $this->getdepartmentStatistics($user_id);
1571
+        $child_nums_Tree = $this->buildTreePv($child_nums, $user['spread_uid']);
1572
+        $person_nums_pv = 0;//大部门业绩
1573
+        $common_nums_pv = 0;//小部门业绩
1574
+        $aLL_list = [];//全部数据
1575
+        $person_list = [];//大部门数据
1576
+        $common_list = [];//小部门数据
1577
+        if(count($child_nums_Tree) && isset($child_nums_Tree[0]['children']) && count($child_nums_Tree[0]['children'])){
1578
+            //获取大部门的key
1579
+            $maxBalanceIndex = array_search(max(array_column($child_nums_Tree[0]['children'], 'total_pv')), array_column($child_nums_Tree, 'total_pv'));
1580
+            foreach($child_nums_Tree[0]['children'] as $k=>$v){
1581
+                if($k == $maxBalanceIndex){
1582
+                    $person_list[] = [
1583
+                        "uid" => $v["uid"],
1584
+                        "spread_uid" => $v['spread_uid'],
1585
+                        "nickname" => $v['nickname'],
1586
+                        "avatar" => $v['avatar'],
1587
+                        "pv" => $v['pv'],
1588
+                        "total_pv" => $v['total_pv'],
1589
+                        "create_time" => $v['create_time'],
1590
+                        'fans_num'=> isset($v['children']) ? count($v['children']) : 0
1591
+                    ];
1592
+                    $person_nums_pv = bcadd($person_nums_pv,$v['total_pv']);
1593
+                }else{
1594
+                    $common_list[] = [
1595
+                        "uid" => $v["uid"],
1596
+                        "spread_uid" => $v['spread_uid'],
1597
+                        "nickname" => $v['nickname'],
1598
+                        "avatar" => $v['avatar'],
1599
+                        "pv" => $v['pv'],
1600
+                        "total_pv" => $v['total_pv'],
1601
+                        "create_time" => $v['create_time'],
1602
+                        'fans_num'=> isset($v['children']) ? count($v['children']) : 0
1603
+                    ];
1604
+                    $common_nums_pv = bcadd($common_nums_pv,$v['total_pv']);
1605
+                }
1606
+                $aLL_list[] =  [
1607
+                    "uid" => $v["uid"],
1608
+                    "spread_uid" => $v['spread_uid'],
1609
+                    "nickname" => $v['nickname'],
1610
+                    "avatar" => $v['avatar'],
1611
+                    "pv" => $v['pv'],
1612
+                    "total_pv" => $v['total_pv'],
1613
+                    "create_time" => $v['create_time'],
1614
+                    'fans_num'=> isset($v['children']) ? count($v['children']) : 0
1615
+                ];
1616
+            }
1526 1617
         }
1527 1618
 
1528 1619
 
1529
-        //根据用户找jbp1.0的节点人数组 end
1530
-
1531
-        $datas_jbp = Db::name('old_user_jbp')->where("id",$teamid)->find();//查询旧系统是否有当前会员
1532
-        $type = $this->request->param('type',0);//1:大部门,0:小部门,2:直推
1533
-        // 初始化最终返回的数据
1534
-        $data = [
1535
-            'team_list' => [],
1536
-            'fans_num' => 0, // 粉丝数
1537
-            'new_performance' => 0, // 新增业绩
1538
-            'total_performance' => 0, // 总业绩
1539
-            'person_nums' => 0, // 个人联盟人数
1540
-            'common_nums' => 0, // 公共联盟人数
1541
-            'common_nums_pv' => 0, // 公共联盟PV
1542
-            'person_nums_pv' => 0, // 个人联盟PV
1543
-        ];
1544
-
1545
-        // 如果在旧系统中有数据
1546
-     
1547
-            $team_userinfo_old_jbp1 = $this->getPerformance($teamid);
1548
-            $tes = $this->teamPeople($teamid, $type); // 1:团队, 2:个人
1620
+            $type = $this->request->param('type',0);//1:大部门,0:小部门,2:直推
1621
+            // 初始化最终返回的数据
1622
+            $data = [
1623
+                'team_list' => [],
1624
+                'fans_num' => 0, // 粉丝数
1625
+                'new_performance' => 0, // 新增业绩
1626
+                'total_performance' => 0, // 总业绩
1627
+                'person_nums' => 0, // 个人联盟人数
1628
+                'common_nums' => 0, // 公共联盟人数
1629
+                'common_nums_pv' => 0, // 公共联盟PV
1630
+                'person_nums_pv' => 0, // 个人联盟PV
1631
+            ];
1549 1632
 
1550 1633
             $data1 = [
1551 1634
                 "total" => 100,
@@ -1556,52 +1639,27 @@ foreach($datas_jbp as $k=>$v){
1556 1639
             ];
1557 1640
 
1558 1641
             if ($type != 2) {
1559
-                foreach ($tes as $k => $v) {
1560
-                    $curr_pv = '';
1561
-                    if ($v['curr_type'] == 0) {
1562
-                        $curr_pv = $team_userinfo_old_jbp1['person_nums_pv'];
1563
-                    } elseif ($v['curr_type'] == 1) {
1564
-                        $curr_pv = $team_userinfo_old_jbp1['common_nums_pv'];
1565
-                    } else {
1566
-                        $curr_pv = 0;
1567
-                    }
1568
-
1569
-                    $data1['data'][$k] = [
1570
-                        "uid" => $v["id"],
1571
-                        "nickname" => $v['user_name'] . $curr_pv,
1572
-                        "phone" => "137****3315",
1573
-                        "avatar" => "https://cdn.bjtdba.com/vod/image/2025-01-20/20250120125206881.png",
1574
-                        "create_time" => "2025-01-25 11:00:18",
1575
-                        "identity" => "11",
1576
-                        "level" => "40002",
1577
-                        "partnership" => "22",
1578
-                        "total_performance" => $curr_pv,
1579
-                        "new_performance" => 0,
1580
-                        "team_count" => $v["performance"]['common_nums'] + $v["performance"]['person_nums'] + 1,
1581
-                    ];
1642
+                if($type == 1){
1643
+                    $data1['data'] = $person_list;
1644
+                }else{
1645
+                    $data1['data'] = $common_list;
1582 1646
                 }
1583 1647
             } else {
1584
-                foreach ($tes as $k => $v) {
1585
-                    $data1['data'][$k] = [
1586
-                        "uid" => $v["uid"],
1587
-                        "nickname" => $v['nickname'],
1588
-                        "avatar" => $v['avatar'],
1589
-                        "create_time" => "2025-01-25 11:00:18",
1590
-                    ];
1591
-                }
1648
+                $data1['data'] = $aLL_list;
1592 1649
             }
1593 1650
 
1594 1651
             // 旧系统中的公共部分数据
1652
+            $data['teamid'] = $teamid;
1595 1653
             $data['team_list'] = $data1;
1596
-            $data['fans_num'] = $team_userinfo_old_jbp1['person_nums'] + $team_userinfo_old_jbp1['common_nums'];
1597
-            $data['new_performance'] = 0;
1598
-            $data['total_performance'] = $team_userinfo_old_jbp1['sum_nums_pv'];
1599
-            $data['person_nums'] = $team_userinfo_old_jbp1['common_nums'];
1600
-            $data['common_nums'] = $team_userinfo_old_jbp1['person_nums'];
1601
-            $data['common_nums_pv'] = max($team_userinfo_old_jbp1['common_nums_pv'], $team_userinfo_old_jbp1['person_nums_pv']);
1602
-            $data['person_nums_pv'] = min($team_userinfo_old_jbp1['common_nums_pv'], $team_userinfo_old_jbp1['person_nums_pv']);
1654
+            $data['fans_num'] = count($child_nums_Tree[0]['children']);//总人数
1655
+            $data['new_performance'] = 0;//新增业绩
1656
+            $data['total_performance'] = bcadd($child_nums_Tree[0]['total_pv'] ?? 0, 0, 2);//总业绩
1657
+            $data['person_nums'] = count($person_list);//大部门人数
1658
+            $data['common_nums'] = count($common_list);//小部门人数
1659
+            $data['common_nums_pv'] = $person_nums_pv;//大部门业绩
1660
+            $data['person_nums_pv'] = $common_nums_pv;//小部门业绩
1603 1661
       
1604
-return app("json")->success($data);
1662
+            return app("json")->success($data);
1605 1663
 // // 查询当前会员旗下的会员数据(分页)
1606 1664
 //         [$page, $limit] = $this->getPage();
1607 1665
 //         $subordinate_members = Db::name('user')