<?php
|
|
namespace app\operations\model\plus\agent;
|
|
use app\api\model\plus\team\Referee as TeamRefereeModel;
|
use app\operations\model\plus\agent\Referee as RefereeModel;
|
use app\common\model\plus\agent\User as UserModel;
|
use app\common\model\user\User as RealUserModel;
|
use app\operations\model\plus\agent\Relation as RelationModel;
|
use app\common\model\plus\team\User as TeamUserModel;
|
|
/**
|
* 分销商用户模型
|
* Class User
|
* @package app\operations\model\plus\agent
|
*/
|
class User extends UserModel
|
{
|
/**
|
* 获取分销商用户列表
|
*/
|
public function getList($data)
|
{
|
// 构建查询规则
|
$model = $this->alias('agent')
|
->field('agent.*, user.nickName, user.avatarUrl')
|
->with(['referee', 'grade'])
|
->join('user', 'user.user_id = agent.user_id')
|
->where('agent.is_delete', '=', 0)
|
->order(['agent.create_time' => 'desc']);
|
// 查询条件
|
if (!empty($data['nick_name'])) {
|
$model = $model->where('user.nickName|agent.real_name|agent.mobile', 'like', '%' . $data['nick_name'] . '%');
|
}
|
// 获取列表数据
|
$list = $model->paginate($data);
|
foreach ($list as $user){
|
$user['total_money'] = sprintf('%.2f', $user['money'] + $user['freeze_money'] + $user['total_money']);
|
}
|
return $list;
|
}
|
/**
|
* 编辑分销商用户
|
* @param $data
|
* @return bool
|
*/
|
public function edit($data)
|
{
|
// 开启事务
|
$this->startTrans();
|
try {
|
if(isset($data['referee_id']) && $data['referee_id'] != $this['referee_id']){
|
// 删除原推荐人关系
|
$this->onDeleteReferee($this['user_id']);
|
//更新推荐人的数量 by yj
|
(new RealUserModel())->setOnInvite($this['user_id'],$data['referee_id']);
|
// 修改用户推荐人
|
(new RealUserModel())->where('user_id', '=', $this['user_id'])->update([
|
'referee_id' => $data['referee_id']
|
]);
|
// 修改团队的推荐人 by yj
|
(new TeamUserModel())->where('user_id', '=', $this['user_id'])->update([
|
'referee_id' => $data['referee_id']
|
]);
|
|
// 记录推荐人关系,
|
$data['referee_id'] > 0 && RefereeModel::updateRelation($this['user_id'], $data['referee_id']);
|
|
//处理变动用户底下的团队推荐人信息 by yj
|
$this->onTeamReferee($this['user_id']);
|
|
// 重建团队分红关系 by yj
|
$data['referee_id'] > 0 && TeamRefereeModel::createTeam($data['referee_id']);
|
}
|
$this->save($data);
|
$this->commit();
|
return true;
|
} catch (\Exception $e) {
|
$this->error = $e->getMessage();
|
$this->rollback();
|
return false;
|
}
|
}
|
/**
|
* 处理变动用户底下的团队推荐人信息上级推荐关系
|
*/
|
public function onTeamReferee($userId)
|
{
|
// 获取变动用户所有推荐和间推用户列表
|
$list = RelationModel::getTeamList($userId);
|
if (!$list->isEmpty()) {
|
foreach ($list as $item) {
|
if($item['user_id']){
|
$user_data=RealUserModel::detail($item['user_id']);//获取推荐人
|
$referee_id=$user_data["referee_id"];
|
$user_id =$item['user_id'];
|
// 删除原推荐人关系
|
$this->onDeleteReferee($user_id);
|
// 重新记录推荐人关系,
|
$referee_id > 0 && RefereeModel::updateRelation($user_id, $referee_id);
|
// 重新记录关系表所有层级的推荐人关系,
|
$referee_id> 0 && RelationModel::updateRelation($user_id, $referee_id);
|
// 重建团队分红关系
|
$referee_id > 0 && TeamRefereeModel::createTeam($referee_id);
|
}
|
}
|
|
}
|
return true;
|
}
|
|
/**
|
* 删除分销商用户
|
* @return mixed
|
*/
|
public function setDelete()
|
{
|
return $this->transaction(function () {
|
// 获取一级团队成员ID集
|
$RefereeModel = new RefereeModel;
|
$team1Ids = $RefereeModel->getTeamUserIds($this['user_id'], 1);
|
if (!empty($team1Ids)) {
|
// 一级团队成员归属到平台
|
$this->setFromplatform($team1Ids);
|
// 一级推荐人ID
|
$referee1Id = RefereeModel::getRefereeUserId($this['user_id'], 1, true);
|
if ($referee1Id > 0) {
|
// 一级推荐人的成员数量(二级)
|
$this->setDecTeamNum($referee1Id, 2, count($team1Ids));
|
// 一级推荐人的成员数量(三级)
|
$team2Ids = $RefereeModel->getTeamUserIds($this['user_id'], 2);
|
!empty($team2Ids) && $this->setDecTeamNum($referee1Id, 3, count($team2Ids));
|
// 二级推荐人的成员数量(三级)
|
$referee2Id = RefereeModel::getRefereeUserId($this['user_id'], 2, true);
|
$referee2Id > 0 && $this->setDecTeamNum($referee2Id, 3, count($team1Ids));
|
// 清空分销商下级成员与上级推荐人的关系记录
|
$RefereeModel->onClearTop(array_merge($team1Ids, $team2Ids));
|
}
|
}
|
// 清空下级推荐记录
|
$RefereeModel->onClearTeam($this['user_id']);
|
// 标记当前分销商记录为已删除
|
return $this->save([
|
'is_delete' => 1
|
]);
|
});
|
}
|
|
/**
|
* 一级团队成员归属到平台
|
* @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 setDecTeamNum($agent_id, $level, $number)
|
{
|
$field = [1 => 'first_num', 2 => 'second_num', 3 => 'third_num'];
|
return $this->where('user_id', '=', $agent_id)
|
->where('is_delete', '=', 0)
|
->dec($field[$level], $number)
|
->update();
|
}
|
/**
|
* 提现打款成功:累积提现佣金
|
*/
|
public static function totalMoney($user_id, $money)
|
{
|
$model = self::detail($user_id);
|
return $model->save([
|
'freeze_money' => $model['freeze_money'] - $money,
|
'total_money' => $model['total_money'] + $money,
|
]);
|
}
|
|
/**
|
* 提现驳回:解冻分销商资金
|
*/
|
public static function backFreezeMoney($user_id, $money)
|
{
|
$model = self::detail($user_id);
|
return $model->save([
|
'money' => $model['money'] + $money,
|
'freeze_money' => $model['freeze_money'] - $money,
|
]);
|
}
|
|
/**
|
* 删除用户的上级推荐关系
|
*/
|
public function onDeleteReferee($userId)
|
{
|
// 获取推荐人列表
|
$list = RefereeModel::getRefereeList($userId);
|
$agent_user = self::detail($userId);
|
if (!$list->isEmpty()) {
|
// 递减推荐人的下级成员数量(如果该会员不是分销员则不减少分销数量)
|
if($agent_user){
|
foreach ($list as $item) {
|
$item['agent1'] && $this->setDecTeamNum($item['agent_id'], $item['level'], 1);
|
}
|
}
|
|
// 清空上级推荐关系
|
(new RefereeModel)->onClearReferee($userId);
|
}
|
return true;
|
}
|
/**
|
* 添加分销的推荐人的数量
|
*/
|
public function addAgentRefereeNum($userId)
|
{
|
// 获取推荐人列表
|
$list = RefereeModel::getRefereeList($userId);
|
if (!$list->isEmpty()) {
|
// 递增推荐人的下级成员数量
|
foreach ($list as $item) {
|
$item['agent1'] && $this->setIncTeamNum($item['agent_id'], $item['level'], 1);
|
}
|
}
|
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 == '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 static function checkExistByGradeId($gradeId)
|
{
|
$model = new static;
|
return !!$model->where('grade_id', '=', (int)$gradeId)
|
->where('is_delete', '=', 0)
|
->value('user_id');
|
}
|
}
|