User.php 5.1 KB

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