|
|
@@ -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')
|