User.php 5.2 KB

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