User.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2017~2021 https://www.yiovo.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
  8. // +----------------------------------------------------------------------
  9. // | Author: 萤火科技 <admin@yiovo.com>
  10. // +----------------------------------------------------------------------
  11. declare (strict_types = 1);
  12. namespace app\store\controller;
  13. use app\common\enum\order\PayStatus as PayStatusEnum;
  14. use app\common\library\helper;
  15. use app\common\model\user\CommissionsDetail;
  16. use app\store\model\Order;
  17. use app\store\model\OrderGoods;
  18. use app\store\model\User as UserModel;
  19. use app\api\model\User as UserApiModel;
  20. use app\store\model\user\BonusHistory;
  21. /**
  22. * 用户管理
  23. * Class User
  24. * @package app\store\controller
  25. */
  26. class User extends Controller
  27. {
  28. /**
  29. * 用户列表
  30. * @return array
  31. * @throws \think\db\exception\DbException
  32. */
  33. public function list()
  34. {
  35. // 用户列表
  36. $model = new UserModel;
  37. $list = $model->getList($this->request->param());
  38. return $this->renderSuccess(compact('list'));
  39. }
  40. /**
  41. * 详情记录
  42. * @param int $userId
  43. * @return array
  44. */
  45. public function detail(int $userId)
  46. {
  47. $model = new UserModel;
  48. $detail = $model::detail($userId, ['avatar']);
  49. $detail->order_paid_count = Order::where('user_id',$userId)->where('pay_status',PayStatusEnum::SUCCESS)->count();// 消费订单数
  50. $detail->order_paid_amount = Order::where('user_id',$userId)->where('pay_status',PayStatusEnum::SUCCESS)->sum('pay_price'); // 消费金额
  51. $detail->promote_user_count = UserApiModel::countSubordinates($userId, $detail['shop_id'], $detail['role']); // 直推人数
  52. $detail->promoter_order_count = Order::where('staff_user_id',$userId)->count(); // 推广订单
  53. // $detail->fc_yj_amount = $detail->can_withdraw_money; // 历史总佣金
  54. $djs_amount = CommissionsDetail::where('user_id', $userId)->where('clearing_status', 0)->sum('clearing_money') ?? 0.00;
  55. $detail->djs_amount = helper::bcsub($djs_amount, 0, 2); // 待结算佣金
  56. $detail->history_base_amount = helper::bcadd(CommissionsDetail::where('user_id', $userId)->where('clearing_status', 1)->sum('clearing_money') ,0);// 总基本佣金
  57. $detail->history_bonus = helper::bcadd(BonusHistory::where('user_id', $userId)->where('clearing_status', 1)->sum('bonus_money'),0); // 总达量奖励金
  58. $detail->djs_bonus = helper::bcadd(BonusHistory::where('user_id', $userId)->where('clearing_status', 0)->sum('bonus_money'),0); // 待结算奖励金
  59. $detail->fc_yj_amount = helper::bcadd($detail->history_base_amount+$detail->history_bonus+$detail->djs_amount+$detail->djs_bonus,0); // 总佣金(待结算+已结算)=已结算基本佣金+已结算奖励金+待结算基本佣金+待结算奖励金
  60. return $this->renderSuccess(compact('detail'));
  61. }
  62. /**
  63. * 详情记录
  64. * @param int $userId
  65. * @return array
  66. */
  67. public function details(int $userId)
  68. {
  69. $model = new UserModel;
  70. $detail = $model::detail($userId);
  71. return $this->renderSuccess(compact('detail'));
  72. }
  73. /**
  74. * Notes:佣金明细
  75. * Author: zhangs
  76. * DateTime: 2021/10/11 11:56
  77. * @param int $userId
  78. * @return array
  79. */
  80. public function commissionDetail(int $userId)
  81. {
  82. $model = new UserModel;
  83. $list = $model->userCommissionDetailList($userId);
  84. return $this->renderSuccess(compact('list'));
  85. }
  86. /**
  87. * Notes:奖励金明细
  88. * Author: zhangq
  89. * DateTime: 2021/10/11 11:56
  90. * @param int $userId
  91. * @return array
  92. */
  93. public function bonusDetail(int $userId)
  94. {
  95. $list = BonusHistory::bonusList($userId);
  96. return $this->renderSuccess(compact('list'));
  97. }
  98. /**
  99. * 删除用户
  100. * @param int $userId
  101. * @return array
  102. */
  103. public function delete(int $userId)
  104. {
  105. // 用户详情
  106. $model = UserModel::detail($userId);
  107. if ($model->setDelete()) {
  108. return $this->renderSuccess('删除成功');
  109. }
  110. return $this->renderError($model->getError() ?: '删除失败');
  111. }
  112. /**
  113. * 用户充值
  114. * @param int $userId
  115. * @param string $target
  116. * @return array
  117. */
  118. public function recharge(int $userId, string $target)
  119. {
  120. // 用户详情
  121. $model = UserModel::detail($userId);
  122. if ($model->recharge($target, $this->postForm())) {
  123. return $this->renderSuccess('操作成功');
  124. }
  125. return $this->renderError($model->getError() ?: '操作失败');
  126. }
  127. /**
  128. * 修改会员等级
  129. * @param int $userId
  130. * @return array
  131. */
  132. public function grade(int $userId)
  133. {
  134. // 用户详情
  135. $model = UserModel::detail($userId);
  136. if ($model->updateGrade($this->postForm())) {
  137. return $this->renderSuccess('操作成功');
  138. }
  139. return $this->renderError($model->getError() ?: '操作失败');
  140. }
  141. //下级推荐官
  142. public function upperuser(){
  143. $param = $this->request->param();
  144. $from = strtotime(date('Y-m-01').'-1 month');
  145. $to = time();
  146. $filter = [];
  147. // 下单起止时间
  148. if (!empty($param['betweenTime'])) {
  149. $times = between_time_format($param['betweenTime']);
  150. $from = $times['start_time'];
  151. $to = $times['end_time'];
  152. // $filter[] = ['commissions_detail_order.order_create_time', '>=', $from];
  153. // $filter[] = ['commissions_detail_order.order_create_time', '<', $to];
  154. }
  155. if(!empty($param['userId'])){
  156. $filter[] = ['u.upper_user_id','=',$param['userId']];
  157. }else{
  158. $filter[] = ['u.upper_user_id','>',0];
  159. }
  160. $filter[] = ['u.role','=',99];
  161. $list = UserModel::alias('u')->with(['commissionTotal'])->field("mobile,nick_name,u.user_id,u.upper_user_id,avatar_id,u.create_time,u.role,u.upper_user_id")->with(['avatar'])->where($filter)->where(function($query) use ($from ,$to){
  162. // $query->whereBetweenTime("order_create_time",$from,$to);
  163. })
  164. ->paginate(15)->each(function ($item) use ($from,$to) {
  165. $tFilter['user_id'] =$item['user_id'];
  166. $item['order_cnt'] = CommissionsDetail::where($tFilter)->where('clearing_status','<',2)->whereBetweenTime('order_create_time',$from,$to)->count();
  167. $item['order_amount'] = CommissionsDetail::where($tFilter)->where('clearing_status','<',2)->whereBetweenTime('order_create_time',$from,$to)->sum('order_sale_volume');
  168. // $item['order_cnt'] = count(array_unique(array_column($item['commissionTotal']->toArray(),'order_id')));
  169. // $item['order_amount'] = array_sum(array_column($item['commissionTotal']->toArray(),'order_sale_volume'));
  170. $item['upper_user_mobile'] = UserModel::where("user_id",$item['upper_user_id'])->value("mobile")??'';
  171. }
  172. );
  173. return $this->renderSuccess(compact('list'));
  174. }
  175. }