<?php
|
|
namespace app\operations\model\plus\bonus;
|
|
use app\operations\model\plus\bonus\Referee as RefereeModel;
|
use app\common\model\plus\bonus\User as UserModel;
|
use app\common\model\user\User as UserModel1;
|
use app\common\model\plus\agent\User as agentUser;
|
use app\common\model\plus\agent\Referee as agentReferee;
|
use app\common\library\helper;
|
use app\operations\service\order\ExportService;
|
|
/**
|
* 队长用户模型
|
* Class User
|
* @package app\operations\model\plus\bonus
|
*/
|
class User extends UserModel
|
{
|
/**
|
* 获取队长用户列表
|
*/
|
public function getList($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->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);
|
}
|
}
|