alias('bonus') ->field('bonus.*, user.nickName, user.avatarUrl') ->with(['referee','grade','parent','agentuser']) ->join('user', 'user.user_id = bonus.user_id') ->where('bonus.is_delete', '=', 0) ->order(['bonus.tree_level' => 'asc', 'level_num' => 'asc', 'agent_time' => '']); // 查询条件 if (!empty($keyword)) { if ($search_type == 'user_id') { $model = $model->where('bonus.user_id', '=', $keyword); } else { if ($search_type == 'nickName') { $search_field = 'user.' . $search_type; } else { $search_field = 'bonus.' . $search_type; } $model = $model->where($search_field, 'like', '%' . $keyword . '%'); } } // 获取列表数据 $list = $model->paginate($params); $setting = Setting::getItem('basic'); $userData = []; foreach ($list as &$user){ $user['total_money'] = sprintf('%.2f', $user['money'] + $user['freeze_money'] + $user['total_money']); // 排位有效期 $user['remain_time'] = UserModel::getExpireTime($user['user_id']); // $user['is_expire'] = UserModel::isExpire($user['user_id']); // 初始化最新推荐人推荐时间 // $agentuser = $user['agentuser']->toArray(); // if($agentuser) { // $agent_time = strtotime($agentuser[0]['create_time']); // } else { // $agent_time = strtotime($user['create_time']); // } // $userData[] = [ // 'user_id' => $user['user_id'], // 'agent_time' => $agent_time // ]; } unset($user); // $this->saveAll($userData); return $list; } /** * 编辑队长用户 * @param $data * @return bool */ public function edit($data) { //如果更换用户 $new_user_id = $data['new_user_id']; unset($data['new_user_id']); if($new_user_id) { $new_data = $data; $new_user = UserModel1::detail($new_user_id); $new_data['user_id'] = $new_user_id; $new_data['referee_id'] = $new_user['referee_id']; $setting = Setting::getItem('basic', $new_user['app_id']); // 如果不保留资产 by lyzflash if ($setting['keep_assets'] == 0) { $new_data['money'] = 0; $new_data['freeze_money'] = 0; $new_data['freeze_money_second'] = 0; $new_data['total_money'] = 0; } if ($this->where(['user_id' => $data['user_id']])->save($new_data)) { //将原用户下级改为新用户下级 $this->updateParentId($data['user_id'], $new_user_id); //更新关系表 RefereeModel::updateReferee($data['user_id'], $new_user_id); //同时成为分销商 $config = Setting::getItem('basic', $new_user['app_id']); if ($config['become_agent']) { agentUser::add($new_user_id, [ 'referee_id' => agentReferee::getRefereeUserId($new_user_id, 1), 'app_id' => $new_user['app_id'], ]); } return true; } return false; } return $this->save($data) !== false; } /** * 删除队长用户 * @return mixed */ public function setDelete() { return $this->transaction(function () { // 获取一级团队成员ID集 $RefereeModel = new RefereeModel; $bonus1Ids = $RefereeModel->getBonusUserIds($this['user_id'], 1); if (!empty($bonus1Ids)) { // 一级团队成员归属到平台 $this->setFromplatform($bonus1Ids); // 一级推荐人ID $referee1Id = RefereeModel::getRefereeUserId($this['user_id'], 1, true); if ($referee1Id > 0) { // 一级推荐人的成员数量(二级) $this->setDecBonusNum($referee1Id, 2, count($bonus1Ids)); // 一级推荐人的成员数量(三级) $bonus2Ids = $RefereeModel->getBonusUserIds($this['user_id'], 2); !empty($bonus2Ids) && $this->setDecBonusNum($referee1Id, 3, count($bonus2Ids)); // 二级推荐人的成员数量(三级) $referee2Id = RefereeModel::getRefereeUserId($this['user_id'], 2, true); $referee2Id > 0 && $this->setDecBonusNum($referee2Id, 3, count($bonus1Ids)); // 清空队长下级成员与上级推荐人的关系记录 $RefereeModel->onClearTop(array_merge($bonus1Ids, $bonus2Ids)); } } // 清空下级推荐记录 $RefereeModel->onClearBonus($this['user_id']); // 标记当前队长记录为已删除 return $this->save([ 'is_delete' => 1 ]); }); } /** * 更改用户的parent_id * @param $user_id * @param $new_user_id * @return false|int */ private function updateParentId($user_id, $new_user_id) { return $this->where('parent_id', '=', $user_id) ->save(['parent_id' => $new_user_id]); } /** * 一级团队成员归属到平台 * @param $userIds * @return false|int */ private function setFromplatform($userIds) { return $this->where('user_id', 'in', $userIds) ->where('is_delete', '=', 0) ->save(['referee_id' => 0]); } /** * 递减队长成员数量 */ private function setDecBonusNum($bonus_id, $level, $number) { $field = [1 => 'first_num', 2 => 'second_num', 3 => 'third_num']; return $this->where('user_id', '=', $bonus_id) ->where('is_delete', '=', 0) ->dec($field[$level], $number); } /** * 删除用户的上级推荐关系 * @param $userId * @return bool * @throws \think\Exception */ public function onDeleteReferee($userId) { // 获取推荐人列表 $list = RefereeModel::getRefereeList($userId); if (!$list->isEmpty()) { // 递减推荐人的下级成员数量 foreach ($list as $item) { $item['bonus1'] && $this->setDecBonusNum($item['bonus_id'], $item['level'], 1); } // 清空上级推荐关系 (new RefereeModel)->onClearReferee($userId); } return true; } /** * 获取平台的总销售额 */ public function getTotalMoney($type = 'all_money') { $model = $this; if($type == 'money'){ return $model->sum('money'); } else if($type == 'freeze_money'){ return $model->sum('freeze_money'); } else if($type == 'freeze_money_second'){ return $model->sum('freeze_money_second'); } else if($type == 'total_money'){ return $model->sum('total_money'); } else if($type == 'all_money'){ return $model->sum('total_money') + $model->sum('freeze_money') + $model->sum('money'); } return 0; } public function getArchitecture($search = '', $type = 0) { $model = new UserModel(); $model = $model->alias('bonus') ->field('bonus.*, user.nickName, user.avatarUrl') ->with(['referee','grade','parent']) ->join('user', 'user.user_id = bonus.user_id') ->where('bonus.is_delete', '=', 0); if (!empty($search)) { if ($type) { if (intval($search)) { $model = $model->where('bonus.user_id', '=', $search); } else { $model = $model->where('user.nickName|bonus.real_name|bonus.mobile', 'like', '%' . $search . '%'); } } else { $model = $model->where('bonus.user_id', '=', $search); } } else { $model = $model->where('bonus.tree_level', '=', 1); } $firstUser = $model->find(); if (!$firstUser) { return false; } $secondUser = $this->getArchitectureSubUser($firstUser); $thirdUser = []; foreach ($secondUser as &$user) { $thirdUser = array_merge($thirdUser, $this->getArchitectureSubUser($user)); } unset($user); return ['firstUser' => $firstUser, 'secondUser' => $secondUser, 'thirdUser' => $thirdUser]; } private function getArchitectureSubUser($user) { if ($user) { $model = new UserModel(); $subUser = $model->alias('bonus') ->field('bonus.*, user.nickName, user.avatarUrl') ->with(['referee','grade','parent']) ->join('user', 'user.user_id = bonus.user_id') ->where('parent_id', '=', $user['user_id']) ->where('bonus.is_delete', '=', 0) ->order(['level_num' => 'asc']) ->select()->toArray(); } else { $subUser = []; } // 补全3个位置 if (count($subUser) < 3) { $emptyArr = []; for ($i = 0; $i < 3 - count($subUser); $i++) { $emptyArr[] = []; } $subUser = array_merge($subUser, $emptyArr); } return $subUser; } /** * 获取队长用户列表 */ public function exportList($keyword, $search_type = 'user_id', $params = []) { // 构建查询规则 $model = $this->alias('bonus') ->field('bonus.*, user.nickName, user.avatarUrl') ->with(['referee','grade','parent','agentuser']) ->join('user', 'user.user_id = bonus.user_id') ->where('bonus.is_delete', '=', 0) ->order(['bonus.tree_level' => 'asc', 'level_num' => 'asc', 'agent_time' => '']); // 查询条件 if (!empty($keyword)) { if ($search_type == 'user_id') { $model = $model->where('bonus.user_id', '=', $keyword); } else { if ($search_type == 'nickName') { $search_field = 'user.' . $search_type; } else { $search_field = 'bonus.' . $search_type; } $model = $model->where($search_field, 'like', '%' . $keyword . '%'); } } // 获取列表数据 $list = $model->select(); foreach ($list as &$user){ $user['total_money'] = sprintf('%.2f', $user['money'] + $user['freeze_money'] + $user['total_money']); // 排位有效期 $user['remain_time'] = UserModel::getExpireTime($user['user_id']); } unset($user); // 导出excel文件 (new Exportservice)->bonusUserList($list); } }