memberOrder(); } public function memberOrder() { $orders = []; $order_data = DB::select('select uid, SUM(price) as amount, COUNT(id) as count from '. DB::getTablePrefix() . 'yz_order where status = 3 and uniacid =' . \YunShop::app()->uniacid .' group by uid'); foreach ($order_data as $order) { $orders[$order['uid']] = $order; } unset($order_data); $members = DB::select('select member_id, parent_id from '. DB::getTablePrefix() . 'yz_member where uniacid =' . \YunShop::app()->uniacid ); $tree = $this->tree($members); unset($members); $this->getTreeData($tree[0]['son'],$orders); unset($tree[0]); $this->getFirst($tree,$orders); $insert_data = array_chunk($this->insert_data,2000); foreach ($insert_data as $k=>$v){ MemberLowerOrder::insert($v); } } public function tree($members) { $items = []; foreach ($members as $member) { $items[$member['member_id']] = $member; } foreach ($items as $item) { $items[$item['parent_id']]['son'][$item['member_id']] = &$items[$item['member_id']]; } return $items; } function getTreeData($tree, $orders) { $data = []; foreach($tree as $kk => $t){ $this_insert_data = [ 'uid'=> $t['member_id'], 'uniacid'=>\YunShop::app()->uniacid, 'first_order_quantity'=>0, 'first_order_amount'=>0, 'second_order_quantity'=>0, 'second_order_amount'=>0, 'third_order_quantity'=>0, 'third_order_amount'=>0, 'team_order_quantity'=>0, 'team_order_amount'=>0, 'pay_count'=>0, 'created_at'=>time() ]; $this_order_data = []; if(isset($t['son'])){ $this_order_data = $this->getTreeData($t['son'], $orders); $this_insert_data['team_order_quantity'] = $this_order_data['count']; $this_insert_data['team_order_amount'] = $this_order_data['amount']; } $data['count'] += $orders[$t['member_id']]['count'] + $this_order_data['count']; $data['amount'] += $orders[$t['member_id']]['amount'] + $this_order_data['amount']; $this->insert_data[$kk] = $this_insert_data; } return $data; } function getFirst($tree, $orders) { foreach($tree as $kk => $t){ if(empty($t['son'])) { continue; } if (empty($this->insert_data[$kk])) { if (empty($t['member_id'])) { //todo 有出现某会员在yz_member找不到(被删了),但有其他会员的parent_id还是该会员的id,导致下面uid为null,插入数据失败 continue; } $this->insert_data[$kk] = [ 'uid'=> $t['member_id'], 'uniacid'=>\YunShop::app()->uniacid, 'first_order_quantity'=>0, 'first_order_amount'=>0, 'second_order_quantity'=>0, 'second_order_amount'=>0, 'third_order_quantity'=>0, 'third_order_amount'=>0, 'team_order_quantity'=>0, 'team_order_amount'=>0, 'pay_count'=>0, 'created_at'=>time() ]; } foreach ($t['son'] as $first) { $this->insert_data[$kk]['first_order_quantity'] += $orders[$first['member_id']]['count']; $this->insert_data[$kk]['first_order_amount'] += $orders[$first['member_id']]['amount']; if(!isset($first['son'])) { continue; } foreach ($first['son'] as $second) { $this->insert_data[$kk]['second_order_quantity'] += $orders[$second['member_id']]['count']; $this->insert_data[$kk]['second_order_amount'] += $orders[$second['member_id']]['amount']; if(!isset($second['son'])) { continue; } foreach ($second['son'] as $third) { $this->insert_data[$kk]['third_order_quantity'] += $orders[$third['member_id']]['count']; $this->insert_data[$kk]['third_order_amount'] += $orders[$third['member_id']]['amount']; } } } } } public function memberOrder1(){ $time = time(); \Log::debug('下线订单排行定时任务开始执行,公众号id为', \YunShop::app()->uniacid); $insert_data = []; $order_data = DB::table('yz_order') ->selectRaw('uid, SUM(price) as amount, COUNT(id) as count') ->where('status', 3) ->where('uniacid', \YunShop::app()->uniacid) ->groupBy('uid') ->get(); $members = DB::select('select member_id from '. DB::getTablePrefix() . 'yz_member where uniacid =' . \YunShop::app()->uniacid ); $child = DB::table('yz_member_children') ->select(['child_id','member_id', 'level']) ->where('uniacid', \YunShop::app()->uniacid) ->get(); foreach ($members as $key => $member) { $this_insert_data = [ 'uid'=>$member['member_id'], 'uniacid'=>\YunShop::app()->uniacid, 'created_at'=>$time, 'first_order_quantity'=>0, 'first_order_amount'=>0, 'second_order_quantity'=>0, 'second_order_amount'=>0, 'third_order_quantity'=>0, 'third_order_amount'=>0, 'team_order_quantity'=>0, 'team_order_amount'=>0, 'pay_count'=>0, ]; $total_member = $child->where('member_id', $member['member_id'])->pluck('child_id'); if (!$total_member->isEmpty()) { $this_insert_data['team_order_quantity'] = $order_data->whereIn('uid', $total_member)->sum('count'); $this_insert_data['team_order_amount'] = $order_data->whereIn('uid', $total_member)->sum('amount'); $first_member = $child->where('level',1)->where('member_id', $member['member_id'])->pluck('child_id'); if (!$first_member->isEmpty()) { $this_insert_data['first_order_quantity'] = $order_data->whereIn('uid', $first_member)->sum('count'); $this_insert_data['first_order_amount'] = $order_data->whereIn('uid', $first_member)->sum('amount'); } $second_member = $child->where('level',2)->where('member_id', $member['member_id'])->pluck('child_id'); if (!$second_member->isEmpty()) { $this_insert_data['second_order_quantity'] = $order_data->whereIn('uid', $second_member)->sum('count'); $this_insert_data['second_order_amount'] = $order_data->whereIn('uid', $second_member)->sum('amount'); } $third_member = $child->where('level',3)->where('member_id', $member['member_id'])->pluck('child_id'); if (!$third_member->isEmpty()) { $this_insert_data['third_order_quantity'] = $order_data->whereIn('uid', $third_member)->sum('count'); $this_insert_data['third_order_amount'] = $order_data->whereIn('uid', $third_member)->sum('amount'); } } $insert_data[$key] = $this_insert_data; unset($this_insert_data); } $insert_data = array_chunk($insert_data,2000); foreach ($insert_data as $k=>$v){ MemberLowerOrder::insert($v); } \Log::debug('下线订单排行定时任务执行结束,公众号id为', \YunShop::app()->uniacid); } public function memberOrder2(){ $time = time(); $insert_data = []; $order_data = DB::select('select uid, SUM(price) as amount, COUNT(id) as count from '. DB::getTablePrefix() . 'yz_order where status = 3 and uniacid =' . \YunShop::app()->uniacid .' group by uid'); $order_data = array_column($order_data, null, 'uid'); $members = DB::select('select member_id from '. DB::getTablePrefix() . 'yz_member where uniacid =' . \YunShop::app()->uniacid ); foreach ($members as $v){ $this_insert_data = [ 'uid'=>$v['member_id'], 'uniacid'=>\YunShop::app()->uniacid, 'first_order_quantity'=>0, 'first_order_amount'=>0, 'second_order_quantity'=>0, 'second_order_amount'=>0, 'third_order_quantity'=>0, 'third_order_amount'=>0, 'team_order_quantity'=>0, 'team_order_amount'=>0, 'pay_count'=>0, 'created_at'=>$time ]; $child = DB::table('yz_member_children') ->select(['child_id','level']) ->where('member_id',$v['member_id']) ->where('uniacid', \YunShop::app()->uniacid) ->get() ->toArray(); if (!empty($child)) { $this_child = array_column($child, 'level', 'child_id'); foreach ($this_child as $kk => $vv){ if (!isset($order_data[$kk])) continue; $this_order_data = $order_data[$kk]; $this_insert_data['pay_count']++; $this_insert_data['team_order_quantity'] += $this_order_data['count']; $this_insert_data['team_order_amount'] += $this_order_data['amount']; if ($vv > 3 ) continue; switch ($vv){ case 1: $this_insert_data['first_order_quantity'] += $this_order_data['count']; $this_insert_data['first_order_amount'] += $this_order_data['amount']; break; case 2: $this_insert_data['second_order_quantity'] += $this_order_data['count']; $this_insert_data['second_order_amount'] += $this_order_data['amount']; break; case 3: $this_insert_data['third_order_quantity'] += $this_order_data['count']; $this_insert_data['third_order_amount'] += $this_order_data['amount']; } } } $insert_data[] = $this_insert_data; } $insert_data = array_chunk($insert_data,2000); foreach ($insert_data as $k=>$v){ MemberLowerOrder::insert($v); } } }