member_id = \app\frontend\models\Member::current()->uid; $this->mc_member = MemberModel::getMyReferrerInfo($this->member_id)->first(); $this->yz_member = $this->mc_member->yzMember; // $this->member_child = MemberChildren::where('member_id', $this->member_id) // ->get(); if (!$this->mc_member) { throw new AppException('会员ID有误'); } } /** * 我推荐的人 一二级数据v2 * @return array * @throws AppException */ public function getMyAgentData_v2() { $relationLevel = request()->input('relationLevel', 1); $pageSize = 10; $keyword = request()->input('keyword'); $page = request()->page; //获取一级下级会员ID $teamMembersIds = MemberChildren::where('member_id', $this->member_id) ->when($relationLevel > 0,function($query) use ($relationLevel){ $query->where('level', $relationLevel); }) ->pluck('child_id') ->toArray(); //todo 原先是模糊搜索,后期优化 if (!empty($keyword)) { $key_uid = MemberModel::uniacid()->where('nickname', 'like', '%' . $keyword . '%') ->orWhere('mobile', 'like', '%' . $keyword . '%') ->orWhere('realname', 'like', '%' . $keyword . '%') ->pluck('uid') ->toArray(); //获取交集 $teamMembersIds = array_intersect($teamMembersIds, $key_uid); } //自定义分页 // $page_start = ($page-1) * $pageSize; // $teamMembersIds = array_slice($teamMembersIds,$page_start,$pageSize); // 总订单数,总订单金额 // todo yz_member 中的wechat 拿到外层 uid as id withSum if (app('plugins')->isEnabled('agent-list-set') && \Setting::get('plugin.agent-liset-set.pay_order')) { $teamMembers = SetController::getTeamMember($pageSize, $teamMembersIds); //统计已完成+已支付订单 } else { $orderStatus = Setting::get('shop.relation_base.member_order_status') == 1 ? [1, 2, 3] : [3]; $teamMembers = MemberModel::select(['mobile', 'createtime', 'avatar', 'nickname', 'uid', 'realname']) ->whereIn('uid', $teamMembersIds) ->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'])->whereIn('status', $orderStatus); }, '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') ->simplePaginate($pageSize) ->toArray(); } $teamMembers['total'] = count($teamMembersIds); $teamMembers['last_page'] = ceil($teamMembers['total'] / $pageSize); foreach ($teamMembers['data'] as &$v) { $v['team_order_money'] = round( collect($v['member_children'])->sum(function ($member_children) { return collect($member_children['orders'])->sum('price'); }), 2 ); $v['team_total'] = collect($v['member_children'])->count(); //会员自己 $v['child_order_money'] = round(collect($v['orders'])->sum('price'), 2); $v['child_order_total'] = collect($v['orders'])->count(); $v['avatar'] = $v['avatar_image']; unset($v['avatar_image']); $v['createtime'] = date('Y-m-d H:i:s', $v['createtime']); $v['id'] = $v['uid']; unset($v['uid']); $v['wechat'] = $v['yz_member']['wechat'] ?: 0; $v['mobile'] = $v['mobile'] ?: 0; $v['realname'] = $v['realname'] ?: 0; $v['inviter'] = empty($v['yz_member']['inviter']) ? 1 : 0; $v['avatar']=$v['avatar']?:yz_tomedia(Setting::get('shop.shop')['logo']); if (!is_null($v['yz_member'])) { if (1 == $v['yz_member']['is_agent'] && 2 == $v['yz_member']['status']) { $v['is_agent'] = 1; } $v['nickname']=$v['nickname']?:$v['yz_member']['yz_openid']; } unset($v['yz_member']); unset($v['member_children']); unset($v['orders']); } $data = $teamMembers; return show_json(1, $data); } /** * 我推荐的人 v2 基本信息 * * @return \Illuminate\Http\JsonResponse */ public function getMyAgent_v2() { set_time_limit(0); $total = 0; $relation_base = \Setting::get('relation_base'); //如果没有设置则显示 if (empty($relation_base)) { $relation_base['relation_level'][0] = true; $relation_base['relation_level'][1] = true; } for ($i = 1; $i <= 2; $i++) { $agent_count = MemberChildren::where('member_id', $this->member_id) ->where('level', $i) ->count(); $total += $agent_count; $data['level' . $i] = [ 'level' => $relation_base['relation_level']['name' . $i] ?: $i . '级', 'total' => $agent_count, 'is_show' => $relation_base['relation_level'][$i - 1] ? true : false, 'level_p' => 2, ]; } // todo:2024-4-22 蚂蟥项目修改 增加显示全部 $data['level0'] = [ 'level' => '全部客户', 'total' => MemberChildren::where('member_id', $this->member_id)->count(), 'is_show' => true, 'level_p' => 2, ]; $data['total'] = $total; return show_json(1, $data); } // 我的推荐人v2 public function getMyReferral_v2() { ini_set('memory_limit', -1); $member_id = \YunShop::app()->getMemberId(); $member_info = $this->mc_member->toArray(); $unicid = \YunShop::app()->uniacid; $set = \Setting::get('shop.member'); $member_set = \Setting::get('relation_base'); if (isset($set) && $set['headimg']) { $avatar = replace_yunshop(yz_tomedia($set['headimg'])); } else { $avatar = Url::shopUrl('static/images/photo-mr.jpg'); } //IOS时,把微信头像url改为https前缀 $avatar = ImageHelper::iosWechatAvatar(yz_tomedia($avatar));; $member_info['avatar'] = yz_tomedia($member_info['avatar']);; //查询上级 $referrer_info = MemberModel::getMyReferrerInfo($member_info['yz_member']['parent_id'])->first(); if ($member_info['yz_member']['inviter'] == 1) { if (!empty($referrer_info)) { $info = $referrer_info->toArray(); $data = [ 'uid' => $info['uid'], 'avatar' => $info['avatar'], 'nickname' => $info['nickname'], 'level' => $info['yz_member']['level']['level_name'], 'is_show' => $member_set['is_referrer'] ?: 0, 'referrer_phone' => $info['mobile'], 'referrer_wechat' => $info['yz_member']['wechat'], ]; } else { $data = [ 'uid' => '', 'avatar' => $avatar, 'nickname' => '总店', 'level' => '', 'is_show' => $member_set['is_referrer'] ?: 0, ]; } } else { $data = [ 'uid' => '', 'avatar' => $avatar, 'nickname' => '暂无', 'level' => '', 'is_show' => $member_set['is_referrer'] ?: 0, ]; } //---------------------new----------------------- //团队1级会员 防止会员删除 $data['child_total'] = DB::table('yz_member_children') ->join('yz_member', function ($join) { $join->on('yz_member.member_id', '=', 'yz_member_children.child_id') ->whereNull('deleted_at'); }) ->where('yz_member_children.uniacid', $unicid) ->where('yz_member_children.member_id', $member_id) ->where('level', 1) ->count(); $level_childs = MemberChildren::where('member_id', $this->member_id)->where("level", 1)->pluck("child_id"); $team_order_money = 0; if (!empty($level_childs)) { if (app('plugins')->isEnabled('agent-list-set') && \Setting::get('plugin.agent-liset-set.pay_order')) { $team_order_money = SetController::getChildOrderMoney($member_id, $unicid); //统计已完成+已支付订单+自己的订单 } else { $orderStatus = Setting::get('shop.relation_base.member_order_status') == 1 ? [1, 2, 3] : [3]; $team_order_money = MemberChildren::select( ['yz_member_children.child_id', 'yz_member_children.member_id'] ) ->join('yz_order', 'yz_member_children.child_id', '=', 'yz_order.uid') ->whereIn('yz_order.status', $orderStatus) ->where('yz_member_children.level', 1) ->where('yz_member_children.member_id', $member_id) ->sum('yz_order.price'); } } $data['child_order_money'] = round($team_order_money, 2); //团队会员 $data['team_total'] = DB::table('yz_member_children') ->join('yz_member', function ($join) { $join->on('yz_member.member_id', '=', 'yz_member_children.child_id') ->whereNull('deleted_at'); }) ->where('yz_member_children.uniacid', $unicid) ->where('yz_member_children.member_id', $member_id) ->count(); $childs = MemberChildren::where('member_id', $this->member_id)->pluck("child_id"); $team_all = 0; if (!empty($childs)) { if (app('plugins')->isEnabled('agent-list-set') && \Setting::get('plugin.agent-liset-set.pay_order')) { $team_all = SetController::getAllOrderMoney($member_id, $unicid); //统计已完成+已支付订单+自己的订单 } else { $orderStatus = Setting::get('shop.relation_base.member_order_status') == 1 ? [1, 2, 3] : [3]; $team_all = MemberChildren::select(['yz_member_children.child_id', 'yz_member_children.member_id']) ->join('yz_order', 'yz_member_children.child_id', '=', 'yz_order.uid') ->whereIn('yz_order.status', $orderStatus) ->where('yz_member_children.member_id', $member_id) ->sum('yz_order.price'); } } $data['team_order_money'] = round($team_all, 2); $team_goods_total = 0; if (!empty($childs)) { $team_goods_total = MemberChildren::select(['yz_member_children.child_id', 'yz_member_children.member_id']) ->join('yz_order', 'yz_member_children.child_id', '=', 'yz_order.uid') ->where('yz_order.status', '>=', 1) ->where('yz_member_children.member_id', $member_id) ->sum('yz_order.goods_total'); } $data['team_goods_total'] = intval($team_goods_total); // 间推下级总数 $data['indirect_total'] = DB::table('yz_member_children') ->join('yz_member', function ($join) { $join->on('yz_member.member_id', '=', 'yz_member_children.child_id') ->whereNull('deleted_at'); }) ->where('yz_member_children.uniacid', $unicid) ->where('yz_member_children.member_id', $member_id) ->where('level', 2) ->count(); // 间推下级订单总金额 $indirectChildIds = MemberChildren::where('member_id', $this->member_id)->where("level", 2)->pluck("child_id"); $indirectOrderMoney = 0; if (!empty($indirectChildIds)) { if (app('plugins')->isEnabled('agent-list-set') && \Setting::get('plugin.agent-liset-set.pay_order')) { $indirectOrderMoney = SetController::getChildOrderMoney($member_id, $unicid); //统计已完成+已支付订单+自己的订单 } else { $orderStatus = Setting::get('shop.relation_base.member_order_status') == 1 ? [1, 2, 3] : [3]; $indirectOrderMoney = MemberChildren::select(['yz_member_children.child_id', 'yz_member_children.member_id']) ->join('yz_order', 'yz_member_children.child_id', '=', 'yz_order.uid') ->whereIn('yz_order.status', $orderStatus) ->where('yz_member_children.level', 2) ->where('yz_member_children.member_id', $member_id) ->sum('yz_order.price'); } } $data['indirect_order_money'] = round($indirectOrderMoney, 2); //---------------------new----------------------- $data['self'] = $member_info; $data['is_recommend_wechat'] = $member_set['is_recommend_wechat'] ?: 0; $data['wechat'] = $member_set['relation_level']['wechat'] ?: 0; $data['phone'] = $member_set['relation_level']['phone'] ?: 0; $data['realname'] = $member_set['relation_level']['realname'] ?: 0; $data['name1'] = $member_set['relation_level']['name1'] ?: ''; $data['name2'] = $member_set['relation_level']['name2'] ?: ''; $data['name3'] = $member_set['relation_level']['name3'] ?: ''; //如果开启统计商品 $data['statistical_goods'] = []; if (Setting::get('shop.relation_base.is_statistical_goods')) { $statisticalGoods = Setting::get('shop.relation_base.statistical_goods'); foreach ($statisticalGoods as &$goods) { $goods['team_bought_total'] = $this->teamBuyGoodsTotal(\YunShop::app()->getMemberId(), $goods['id']); } $data['statistical_goods'] = $statisticalGoods ? : []; } if (!empty($data)) return show_json(1, $data); return show_json(0, '会员不存在'); } private function teamBuyGoodsTotal($uid, $goodsId) { $teamTotal = ChildrenOfMember::select(['yz_member_children.child_id', 'yz_member_children.member_id']) ->join('yz_order', 'yz_member_children.child_id', '=', 'yz_order.uid') ->join('yz_order_goods', function ($join) { $join->on('yz_order_goods.order_id', '=', 'yz_order.id'); }) ->where('yz_order.status', Order::COMPLETE) ->where('yz_member_children.member_id', $uid) ->where('yz_order_goods.goods_id', $goodsId) ->sum('yz_order_goods.total'); //自购数量 $selfTotal = Order::where('uid', $uid) ->where('status', Order::COMPLETE) ->whereHas('orderGoods', function ($query) use ($goodsId) { $query->where('goods_id', $goodsId); })->sum('goods_total'); return $teamTotal + $selfTotal; } /** * 会员推荐人上级 * @return array|\Illuminate\Http\JsonResponse */ public function getMyReferralParents() { if ($this->yz_member['inviter'] == 1 && !empty( MemberShopInfo::getMemberShopInfo( $this->yz_member['parent_id'] ) )) { $data = MemberParent::getAgentParentByMemberId($this->yz_member['parent_id']); return show_json(1, $data); } else { return show_json(1, ['is_show' => 0]); //没有推荐人上级 } } // 获取指定的团队信息 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; } } /** * Common: 获取指定订单列表 * Author: wu-hui * Time: 2024/04/22 17:28 * @param $orderType * @param $pageSize * @return array * @throws AppException */ public function getOrderList($orderType){ // 查出用户的某一级别下线的会员资料 $member = MemberModel::find(\app\frontend\models\Member::current()->uid); if (!$member) return []; // 获取下级订单列表 agent_order=直推客户;agent_order_count=全部客户 $teamMembersIds = $member->memberChildren() ->when($orderType == 'agent_order',function($query){ $query->where('level', 1); }) ->pluck('child_id') ->toArray(); // 订单列表 $orderStatus = Setting::get('shop.relation_base.member_order_status') == 1 ? [1, 2, 3] : [3]; return Order::select(['id','uid','price','status','order_sn']) ->whereIn('uid',$teamMembersIds) ->whereIn('status',$orderStatus) ->with(['hasManyOrderGoods'=>function($orderGoods){ $orderGoods->select(['id','goods_id','order_id','total','title','thumb','price']); }]) ->orderBy('id', 'desc') ->simplePaginate(10) ->toArray(); } }