diff --git a/app/frontend/modules/member/controllers/MemberController.php b/app/frontend/modules/member/controllers/MemberController.php index c374e06a..daba7e68 100644 --- a/app/frontend/modules/member/controllers/MemberController.php +++ b/app/frontend/modules/member/controllers/MemberController.php @@ -3318,4 +3318,23 @@ class MemberController extends ApiController return $this->successJson('小程序码', ['qr_code_url' => $qrCodeUrl]); } + // 会员概况及关系 + public function myRelationShip(){ + // 参数获取 + $uid = (int)request()->input('uid', 0); + if($uid <= 0) return $this->errorJson('无有效用户!'); + $memberReferral = new MemberReferralService(); + // 获取当前用户基本信息 + $self_info = $memberReferral->getAgentData($uid); + $children = $memberReferral->getAgentData($self_info['member_children_ids']); + + return $this->successJson('success', compact('self_info','children')); + } + + + + + + + } diff --git a/app/frontend/modules/member/services/MemberReferralService.php b/app/frontend/modules/member/services/MemberReferralService.php index ed2ce07a..72f22918 100644 --- a/app/frontend/modules/member/services/MemberReferralService.php +++ b/app/frontend/modules/member/services/MemberReferralService.php @@ -375,4 +375,97 @@ class MemberReferralService } } + // 获取指定的团队信息 + public function getAgentData($uid){ + $orderStatus = Setting::get('shop.relation_base.member_order_status') == 1 ? [1, 2, 3] : [3]; + $model = MemberModel::select(['mobile','createtime','avatar','nickname','uid','realname']) + ->when(is_array($uid),function($query) use ($uid){ + $query->whereIn('uid',$uid); + },function($query) use ($uid){ + $query->where('uid',$uid); + }) + ->with([ + 'yzMember' => function($builder){ + $builder->select(['member_id','is_agent','status','wechat','deleted_at','inviter','yz_openid']); + }, + 'orders' => function($order) use ($orderStatus){ + $order->select(['id','uid','price','status','order_sn']) + ->whereIn('status',$orderStatus) + ->with(['hasManyOrderGoods'=>function($orderGoods){ + $orderGoods->select(['id','goods_id','order_id','total','title','thumb','price']); + }]); + }, + 'memberChildren' => function($member) use ($orderStatus){ + $member->select(['id','child_id','level','member_id']) + ->where('level',1) + ->with([ + 'orders' => function($order) use ($orderStatus){ + $order->select(['id','uid','price','status']) + ->whereIn('status',$orderStatus); + } + ]); + } + ]) + ->orderBy('uid','desc'); + // 根据查询类型 进行对应的处理 + if(is_array($uid)){ + // 多个 + $list = $model->get()->toArray(); + foreach($list as &$itemInfo){ + // 当前用户信息 + $itemInfo['child_order_total'] = collect($itemInfo['orders'])->count();// 订单数 + $itemInfo['team_total'] = collect($itemInfo['member_children'])->count();// 直推下级总数 + $itemInfo['child_order_money'] = round(collect($itemInfo['orders'])->sum('price'),2);// 订单总额 + // 客户订单总额 + $itemInfo['team_order_money'] = round(collect($itemInfo['member_children'])->sum(function($memberChildren){ + return collect($memberChildren['orders'])->sum('price'); + }),2); + + $itemInfo['createtime'] = date('Y-m-d H:i:s', $itemInfo['createtime']); + unset($itemInfo['member_children']); + unset($itemInfo['yz_member']); + } + + return $list; + } + else{ + // 单个 + $info = $model->first(); + $info = $info ? $info->toArray() : []; + // 当前用户信息 + $info['child_order_total'] = collect($info['orders'])->count();// 订单数 + $info['team_total'] = collect($info['member_children'])->count();// 直推下级总数 + $info['child_order_money'] = round(collect($info['orders'])->sum('price'),2);// 订单总额 + // 客户订单总额 + $info['team_order_money'] = round(collect($info['member_children'])->sum(function($memberChildren){ + return collect($memberChildren['orders'])->sum('price'); + }),2); + $info['member_children_ids'] = $info['member_children'] ? array_column($info['member_children'], 'child_id') : [];// 直推下级ids + unset($info['member_children']); + unset($info['yz_member']); + // 订单处理 + $info['orders'] = array_map(function($orderItem){ + $orderItem['has_many_order_goods'] = array_map(function($orderGoods){ + unset($orderGoods['buttons']); + unset($orderGoods['after_sales']); + unset($orderGoods['order']); + + return $orderGoods; + }, $orderItem['has_many_order_goods']); + + return $orderItem; + },$info['orders']); + + + return $info; + } + } + + + + + + + + } \ No newline at end of file