User.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <?php
  2. namespace app\shop\model\plus\agent;
  3. use app\shop\model\plus\agent\Referee as RefereeModel;
  4. use app\common\model\plus\agent\User as UserModel;
  5. /**
  6. * 分销商用户模型
  7. * Class User
  8. * @package app\shop\model\plus\agent
  9. */
  10. class User extends UserModel
  11. {
  12. /**
  13. * 获取分销商用户列表
  14. */
  15. public function getList($search, $limit = 15)
  16. {
  17. // 构建查询规则
  18. $model = $this->alias('agent')
  19. ->field('agent.*, user.nickName, user.avatarUrl')
  20. ->with(['referee'])
  21. ->join('user', 'user.user_id = agent.user_id')
  22. ->where('agent.is_delete', '=', 0)
  23. ->order(['agent.create_time' => 'desc']);
  24. // 查询条件
  25. if (!empty($search)) {
  26. $model = $model->where('user.nickName|agent.real_name|agent.mobile', 'like', '%' . $search . '%');
  27. }
  28. // 获取列表数据
  29. $list = $model->paginate($limit);
  30. foreach ($list as $user){
  31. $user['total_money'] = sprintf('%.2f', $user['money'] + $user['freeze_money'] + $user['total_money']);
  32. }
  33. return $list;
  34. }
  35. /**
  36. * 编辑分销商用户
  37. * @param $data
  38. * @return bool
  39. */
  40. public function edit($data)
  41. {
  42. return $this->save($data) !== false;
  43. }
  44. /**
  45. * 删除分销商用户
  46. * @return mixed
  47. */
  48. public function setDelete()
  49. {
  50. return $this->transaction(function () {
  51. // 获取一级团队成员ID集
  52. $RefereeModel = new RefereeModel;
  53. $team1Ids = $RefereeModel->getTeamUserIds($this['user_id'], 1);
  54. if (!empty($team1Ids)) {
  55. // 一级团队成员归属到平台
  56. $this->setFromplatform($team1Ids);
  57. // 一级推荐人ID
  58. $referee1Id = RefereeModel::getRefereeUserId($this['user_id'], 1, true);
  59. if ($referee1Id > 0) {
  60. // 一级推荐人的成员数量(二级)
  61. $this->setDecTeamNum($referee1Id, 2, count($team1Ids));
  62. // 一级推荐人的成员数量(三级)
  63. $team2Ids = $RefereeModel->getTeamUserIds($this['user_id'], 2);
  64. !empty($team2Ids) && $this->setDecTeamNum($referee1Id, 3, count($team2Ids));
  65. // 二级推荐人的成员数量(三级)
  66. $referee2Id = RefereeModel::getRefereeUserId($this['user_id'], 2, true);
  67. $referee2Id > 0 && $this->setDecTeamNum($referee2Id, 3, count($team1Ids));
  68. // 清空分销商下级成员与上级推荐人的关系记录
  69. $RefereeModel->onClearTop(array_merge($team1Ids, $team2Ids));
  70. }
  71. }
  72. // 清空下级推荐记录
  73. $RefereeModel->onClearTeam($this['user_id']);
  74. // 标记当前分销商记录为已删除
  75. return $this->save([
  76. 'is_delete' => 1
  77. ]);
  78. });
  79. }
  80. /**
  81. * 一级团队成员归属到平台
  82. * @param $userIds
  83. * @return false|int
  84. */
  85. private function setFromplatform($userIds)
  86. {
  87. return $this->where('user_id', 'in', $userIds)
  88. ->where('is_delete', '=', 0)
  89. ->save(['referee_id' => 0]);
  90. }
  91. /**
  92. * 递减分销商成员数量
  93. */
  94. private function setDecTeamNum($agent_id, $level, $number)
  95. {
  96. $field = [1 => 'first_num', 2 => 'second_num', 3 => 'third_num'];
  97. return $this->where('user_id', '=', $agent_id)
  98. ->where('is_delete', '=', 0)
  99. ->dec($field[$level], $number);
  100. }
  101. /**
  102. * 提现打款成功:累积提现佣金
  103. */
  104. public static function totalMoney($user_id, $money)
  105. {
  106. $model = self::detail($user_id);
  107. return $model->save([
  108. 'freeze_money' => $model['freeze_money'] - $money,
  109. 'total_money' => $model['total_money'] + $money,
  110. ]);
  111. }
  112. /**
  113. * 提现驳回:解冻分销商资金
  114. */
  115. public static function backFreezeMoney($user_id, $money)
  116. {
  117. $model = self::detail($user_id);
  118. return $model->save([
  119. 'money' => $model['money'] + $money,
  120. 'freeze_money' => $model['freeze_money'] - $money,
  121. ]);
  122. }
  123. /**
  124. * 删除用户的上级推荐关系
  125. * @param $userId
  126. * @return bool
  127. * @throws \think\Exception
  128. */
  129. public function onDeleteReferee($userId)
  130. {
  131. // 获取推荐人列表
  132. $list = RefereeModel::getRefereeList($userId);
  133. if (!$list->isEmpty()) {
  134. // 递减推荐人的下级成员数量
  135. foreach ($list as $item) {
  136. $item['agent1'] && $this->setDecTeamNum($item['agent_id'], $item['level'], 1);
  137. }
  138. // 清空上级推荐关系
  139. (new RefereeModel)->onClearReferee($userId);
  140. }
  141. return true;
  142. }
  143. /**
  144. * 获取平台的总销售额
  145. */
  146. public function getTotalMoney($type = 'all_money')
  147. {
  148. $model = $this;
  149. if($type == 'money'){
  150. return $model->sum('money');
  151. } else if($type == 'freeze_money'){
  152. return $model->sum('freeze_money');
  153. } else if($type == 'total_money'){
  154. return $model->sum('total_money');
  155. } else if($type == 'all_money'){
  156. return $model->sum('total_money') + $model->sum('freeze_money') + $model->sum('money');
  157. }
  158. return 0;
  159. }
  160. }