214 lines
8.1 KiB
PHP
214 lines
8.1 KiB
PHP
<?php
|
|
/**
|
|
* Created by PhpStorm.
|
|
* User: Administrator
|
|
* Date: 2018/10/31
|
|
* Time: 14:55
|
|
*/
|
|
|
|
namespace app\Jobs;
|
|
|
|
use app\backend\modules\charts\modules\member\models\MemberLowerGroupOrder;
|
|
use app\common\models\MemberShopInfo;
|
|
use Illuminate\Bus\Queueable;
|
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
|
use Illuminate\Queue\InteractsWithQueue;
|
|
use Illuminate\Queue\SerializesModels;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Yunshop\ShareChain\common\model\ShopMemberLevel;
|
|
|
|
class MemberLowerGroupOrderJob implements ShouldQueue
|
|
{
|
|
use InteractsWithQueue, Queueable, SerializesModels;
|
|
|
|
public $uniacid;
|
|
public $insert_data;
|
|
public function __construct()
|
|
{
|
|
}
|
|
|
|
public function handle()
|
|
{
|
|
$this->memberOrder();
|
|
}
|
|
|
|
public function memberOrder()
|
|
{
|
|
$orders = [];
|
|
$order_data = DB::select('select uid, SUM(price) as amount, SUM(goods_total) as goods_count from '. DB::getTablePrefix() . 'yz_order where status > 0 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,$orders);
|
|
unset($tree[0]);
|
|
|
|
$insert_data = array_chunk($this->insert_data,2000);
|
|
foreach ($insert_data as $k=>$v){
|
|
MemberLowerGroupOrder::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 isset($items[0]['son']) ? $items[0]['son'] : [];
|
|
}
|
|
|
|
function getTreeData($tree, $orders)
|
|
{
|
|
$data = [];
|
|
foreach($tree as $kk => $t){
|
|
$this_insert_data = [
|
|
'uid'=>$t['member_id'],
|
|
'uniacid'=>\YunShop::app()->uniacid,
|
|
'amount'=>0,
|
|
'goods_count'=>0,
|
|
'pay_count'=>0,
|
|
'team_count'=>0,
|
|
'created_at'=>time()
|
|
];
|
|
$this_order_data = [];
|
|
if(isset($t['son'])){
|
|
$this_order_data = $this->getTreeData($t['son'], $orders);
|
|
$this_insert_data['amount'] = $this_order_data['amount'];
|
|
$this_insert_data['goods_count'] = $this_order_data['goods_count'];
|
|
$this_insert_data['pay_count'] = $this_order_data['pay_count'];
|
|
$this_insert_data['team_count'] = $this_order_data['team_count'];
|
|
}
|
|
$data['amount'] += $orders[$t['member_id']]['amount'] + $this_order_data['amount'];
|
|
$data['goods_count'] += $orders[$t['member_id']]['goods_count'] + $this_order_data['goods_count'];
|
|
$pay_count = isset($orders[$t['member_id']]) ? 1 : 0;
|
|
$data['pay_count'] += $this_order_data['pay_count'] + $pay_count;
|
|
$data['team_count'] += $this_order_data['team_count'] + 1;
|
|
|
|
|
|
$this->insert_data[$kk] = $this_insert_data;
|
|
}
|
|
return $data;
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
* Execute the job.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function memberOrder2(){
|
|
|
|
$time = time();
|
|
\Log::debug('团队支付订单排行定时任务开始执行,公众号id为', \YunShop::app()->uniacid);
|
|
$t1 = microtime(true);
|
|
$insert_data = [];
|
|
//查询归类所有订单开始
|
|
$order_data = DB::table('yz_order')
|
|
->selectRaw('uid, SUM(price) as amount, COUNT(id) as count, SUM(goods_total) as goods_count')
|
|
->where('status','>',0)
|
|
->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'])
|
|
->where('uniacid', \YunShop::app()->uniacid)
|
|
->get();
|
|
|
|
foreach ($members as $member){
|
|
$memberID = $member['member_id'];
|
|
$this_insert_data = [
|
|
'uid' => $member['member_id'],
|
|
'uniacid'=>\YunShop::app()->uniacid,
|
|
'amount'=>0,
|
|
'goods_count'=>0,
|
|
'pay_count'=>0,
|
|
'team_count'=>$child->where('member_id', $member['member_id'])->count(),
|
|
// 'team_count'=>$child->filter(function($user) use ($memberID) {
|
|
// return $user['member_id'] === $memberID;
|
|
// })->count(),
|
|
'created_at'=>$time
|
|
];
|
|
|
|
// $total_member = DB::table('yz_member_children')->where('member_id', $member['member_id'])->pluck('child_id');
|
|
$total_member = $child->where('member_id', $member['member_id'])->pluck('child_id');
|
|
// $total_member = $child->filter(function($user) use ($memberID) {
|
|
// return $user['member_id'] === $memberID;
|
|
// })->pluck('child_id');
|
|
// dd($total_member, $total_member2);
|
|
if (!$total_member->isEmpty()) {
|
|
$child_member = $order_data->whereIn('uid', $total_member);
|
|
// $child_member = $order_data->filter(function($user) use ($total_member) {
|
|
// return in_array($user['uid'],$total_member->toArray());
|
|
// });
|
|
$this_insert_data['pay_count'] = $child_member->sum('count');
|
|
$this_insert_data['amount'] = $child_member->sum('amount');
|
|
$this_insert_data['goods_count'] = $child_member->sum('goods_count');
|
|
}
|
|
|
|
$insert_data[] = $this_insert_data;
|
|
unset($total_member);
|
|
unset($child_member);
|
|
unset($this_insert_data);
|
|
}
|
|
|
|
$insert_data = array_chunk($insert_data,2000);
|
|
foreach ($insert_data as $k=>$v){
|
|
MemberLowerGroupOrder::insert($v);
|
|
}
|
|
|
|
\Log::debug('团队支付订单排行定时任务执行结束,公众号id为', \YunShop::app()->uniacid);
|
|
|
|
}
|
|
|
|
public function memberOrder1(){
|
|
$time = time();
|
|
$insert_data = [];
|
|
$order_data = DB::select('select uid, SUM(price) as amount, COUNT(id) as count ,SUM(goods_total) as goods_count from '. DB::getTablePrefix() . 'yz_order where status > 0 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){
|
|
$child = DB::select('select child_id, level from '. DB::getTablePrefix() . 'yz_member_children where member_id = '.$v['member_id'].' and uniacid =' . \YunShop::app()->uniacid );
|
|
$this_insert_data = [
|
|
'uid'=>$v['member_id'],
|
|
'uniacid'=>\YunShop::app()->uniacid,
|
|
'amount'=>0,
|
|
'goods_count'=>0,
|
|
'pay_count'=>0,
|
|
'team_count'=>count($child),
|
|
'created_at'=>$time
|
|
];
|
|
|
|
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['goods_count'] += $this_order_data['goods_count'];
|
|
$this_insert_data['amount'] += $this_order_data['amount'];
|
|
}
|
|
}
|
|
|
|
$insert_data[] = $this_insert_data;
|
|
}
|
|
|
|
$insert_data = array_chunk($insert_data,2000);
|
|
foreach ($insert_data as $k=>$v){
|
|
MemberLowerGroupOrder::insert($v);
|
|
}
|
|
}
|
|
} |