// +---------------------------------------------------------------------- declare (strict_types = 1); namespace app\store\controller; use app\common\enum\order\PayStatus as PayStatusEnum; use app\common\library\helper; use app\common\model\user\CommissionsDetail; use app\store\model\Order; use app\store\model\OrderGoods; use app\store\model\User as UserModel; use app\api\model\User as UserApiModel; use app\store\model\user\BonusHistory; /** * 用户管理 * Class User * @package app\store\controller */ class User extends Controller { /** * 用户列表 * @return array * @throws \think\db\exception\DbException */ public function list() { // 用户列表 $model = new UserModel; $list = $model->getList($this->request->param()); return $this->renderSuccess(compact('list')); } /** * 详情记录 * @param int $userId * @return array */ public function detail(int $userId) { $model = new UserModel; $detail = $model::detail($userId, ['avatar']); $detail->order_paid_count = Order::where('user_id',$userId)->where('pay_status',PayStatusEnum::SUCCESS)->count();// 消费订单数 $detail->order_paid_amount = Order::where('user_id',$userId)->where('pay_status',PayStatusEnum::SUCCESS)->sum('pay_price'); // 消费金额 $detail->promote_user_count = UserApiModel::countSubordinates($userId, $detail['shop_id'], $detail['role']); // 直推人数 $detail->promoter_order_count = Order::where('staff_user_id',$userId)->count(); // 推广订单 // $detail->fc_yj_amount = $detail->can_withdraw_money; // 历史总佣金 $djs_amount = CommissionsDetail::where('user_id', $userId)->where('clearing_status', 0)->sum('clearing_money') ?? 0.00; $detail->djs_amount = helper::bcsub($djs_amount, 0, 2); // 待结算佣金 $detail->history_base_amount = helper::bcadd(CommissionsDetail::where('user_id', $userId)->where('clearing_status', 1)->sum('clearing_money') ,0);// 总基本佣金 $detail->history_bonus = helper::bcadd(BonusHistory::where('user_id', $userId)->where('clearing_status', 1)->sum('bonus_money'),0); // 总达量奖励金 $detail->djs_bonus = helper::bcadd(BonusHistory::where('user_id', $userId)->where('clearing_status', 0)->sum('bonus_money'),0); // 待结算奖励金 $detail->fc_yj_amount = helper::bcadd($detail->history_base_amount+$detail->history_bonus+$detail->djs_amount+$detail->djs_bonus,0); // 总佣金(待结算+已结算)=已结算基本佣金+已结算奖励金+待结算基本佣金+待结算奖励金 return $this->renderSuccess(compact('detail')); } /** * 详情记录 * @param int $userId * @return array */ public function details(int $userId) { $model = new UserModel; $detail = $model::detail($userId); return $this->renderSuccess(compact('detail')); } /** * Notes:佣金明细 * Author: zhangs * DateTime: 2021/10/11 11:56 * @param int $userId * @return array */ public function commissionDetail(int $userId) { $model = new UserModel; $list = $model->userCommissionDetailList($userId); return $this->renderSuccess(compact('list')); } /** * Notes:奖励金明细 * Author: zhangq * DateTime: 2021/10/11 11:56 * @param int $userId * @return array */ public function bonusDetail(int $userId) { $list = BonusHistory::bonusList($userId); return $this->renderSuccess(compact('list')); } /** * 删除用户 * @param int $userId * @return array */ public function delete(int $userId) { // 用户详情 $model = UserModel::detail($userId); if ($model->setDelete()) { return $this->renderSuccess('删除成功'); } return $this->renderError($model->getError() ?: '删除失败'); } /** * 用户充值 * @param int $userId * @param string $target * @return array */ public function recharge(int $userId, string $target) { // 用户详情 $model = UserModel::detail($userId); if ($model->recharge($target, $this->postForm())) { return $this->renderSuccess('操作成功'); } return $this->renderError($model->getError() ?: '操作失败'); } /** * 修改会员等级 * @param int $userId * @return array */ public function grade(int $userId) { // 用户详情 $model = UserModel::detail($userId); if ($model->updateGrade($this->postForm())) { return $this->renderSuccess('操作成功'); } return $this->renderError($model->getError() ?: '操作失败'); } //下级推荐官 public function upperuser(){ $param = $this->request->param(); $from = strtotime(date('Y-m-01').'-1 month'); $to = time(); $filter = []; // 下单起止时间 if (!empty($param['betweenTime'])) { $times = between_time_format($param['betweenTime']); $from = $times['start_time']; $to = $times['end_time']; // $filter[] = ['commissions_detail_order.order_create_time', '>=', $from]; // $filter[] = ['commissions_detail_order.order_create_time', '<', $to]; } if(!empty($param['userId'])){ $filter[] = ['u.upper_user_id','=',$param['userId']]; }else{ $filter[] = ['u.upper_user_id','>',0]; } $filter[] = ['u.role','=',99]; $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){ // $query->whereBetweenTime("order_create_time",$from,$to); }) ->paginate(15)->each(function ($item) use ($from,$to) { $tFilter['user_id'] =$item['user_id']; $item['order_cnt'] = CommissionsDetail::where($tFilter)->where('clearing_status','<',2)->whereBetweenTime('order_create_time',$from,$to)->count(); $item['order_amount'] = CommissionsDetail::where($tFilter)->where('clearing_status','<',2)->whereBetweenTime('order_create_time',$from,$to)->sum('order_sale_volume'); // $item['order_cnt'] = count(array_unique(array_column($item['commissionTotal']->toArray(),'order_id'))); // $item['order_amount'] = array_sum(array_column($item['commissionTotal']->toArray(),'order_sale_volume')); $item['upper_user_mobile'] = UserModel::where("user_id",$item['upper_user_id'])->value("mobile")??''; } ); return $this->renderSuccess(compact('list')); } }