getCount($where, $userMap); $list = $userDao->getPageList($page, $limit, $where, $sort, $userMap); foreach ($list as &$item) { //团队会员(包括1、2级和自身)的积分账户合计、余额账户合计 // 计算团队成员(包括1、2级和自身)ID $teamIds = $this->getTeamMoneyAndScore($item['id']); // 积分账户合计 $item['score_total'] = $teamIds['score']; // 余额账户合计 $item['money_total'] = $teamIds['money']; } $data = [ 'code' => 0, 'msg' => Db::getLastSql(), 'count' => $count, 'data' => $list, ]; return json($data); } /** * 获取团队 * @param $uid */ private function getTeamMoneyAndScore($uid) { $cacheKey = 'userLogicTeamIds_' . $uid; if (!Cache::has($cacheKey)) { // 自身 $user = Db::table(User::$table) ->where('id', $uid) ->field(['id', 'score', 'money']) ->find(); $totalScore = $user['score']; $totalMoney = $user['money']; // 一级子用户 Db::table(User::$table) ->where('pid', $uid) ->field(['id', 'score', 'money']) ->chunk(100, function ($users) use (&$totalScore, &$totalMoney) { foreach ($users as $user) { $uids[] = $user['id']; $totalScore += $user['score']; $totalMoney += $user['money']; } // 二级子用户 Db::table(User::$table) ->whereIn('pid', $uids) ->field(['id', 'score', 'money']) ->chunk(100, function ($users) use (&$totalScore, &$totalMoney) { foreach ($users as $user) { $totalScore += $user['score']; $totalMoney += $user['money']; } }); }, ['score', 'money']); Cache::set($cacheKey, ['score' => $totalScore, 'money' => sprintf("%.2f", $totalMoney)], 5 * 60); } return Cache::get($cacheKey); } }