make(UserRechargeServices::class); // /** @var OtherOrderServices $otherOrder */ // $otherOrder = app()->make(OtherOrderServices::class); $now['now_money'] = $user->where($where)->sum('now_money'); //余额 $now['purchase_funds'] = $user->where($where)->sum('purchase_funds'); //采购款 $now['newUser'] = $user->where($where)->where('create_time', 'between', $time)->count(); //新增用户数 $now['payPeople'] = $order->where($where)->where('create_time', 'between', $time)->group('uid')->count(); //成交用户数 // $now['payPercent'] = bcmul((string)($now['people'] > 0 ? bcdiv($now['payPeople'], $now['people'], 4) : 0), '100', 2); //访问-付款转化率 // $now['payUser'] = $user->where('create_time', 'between', $time)->where('user_ship', 1)->count(); //激活付费会员数 $now['rechargePeople'] = $user_recharge->where($where)->where('create_time', 'between', $time)->where('paid', 1)->group('uid')->count(); //充值用户数 // $totalPayPrice = $order->where('create_time', 'between', $time)->where('paid', 1)->sum('pay_price'); // $now['payPrice'] = floatval($now['payPeople'] > 0 ? bcdiv($totalPayPrice, $now['payPeople'], 2) : 0); //客单价 $now['cumulativeUser'] = $user->where($where)->count(); //累计用户数 // $now['cumulativePayUser'] = 0; //count($otherOrder->getPayUserCount(strtotime($time[1]), $where['channel_type']));//到截至日期有付费会员状态的会员数 $now['cumulativeRechargePeople'] = $user_recharge->where($where)->where('paid', 1)->group('uid')->count(); //累计充值用户数 $now['cumulativePayPeople'] = $order->where($where)->where('paid', 1)->group('uid')->count(); //累计成交用户数 $dayNum = ($time[1] - $time[0]) / 86400 + 1; $time = [ strtotime("-$dayNum days", $time[0]), strtotime("-1 days", $time[0]) ]; // $where['time'] = implode('-', $lastTime); // $toEndtime = implode('-', [0, $lastTime[1]]); $last['now_money'] =$now['now_money']; $last['purchase_funds'] = $now['purchase_funds']; $last['newUser'] = $user->where($where)->where('create_time', 'between', $time)->count(); //新增用户数 $last['payPeople'] = $order->where($where)->where('create_time', 'between', $time)->group('uid')->count(); //成交用户数 // $last['payPercent'] = bcmul((string)($last['people'] > 0 ? bcdiv($last['payPeople'], $last['people'], 4) : 0), '100', 2); //访问-付款转化率 // $last['payUser'] = $user->where('create_time', 'between', $time)->where('user_ship', 1)->count(); //激活付费会员数 $last['rechargePeople'] = $user_recharge->where($where)->where('create_time', 'between', $time)->where('paid', 1)->group('uid')->count(); //充值用户数 // $totalPayPrice = $order->where('create_time', 'between', $time)->where('paid', 1)->sum('pay_price'); // $last['payPrice'] = floatval($last['payPeople'] > 0 ? bcdiv($totalPayPrice, $last['payPeople'], 2) : 0); //客单价 $last['cumulativeUser'] = $user->where($where)->count(); //累计用户数 // $last['cumulativePayUser'] = 0; //count($otherOrder->getPayUserCount(strtotime($lastTime[1]) + 86400, $where['channel_type']));//到截至日期有付费会员状态的会员数 $last['cumulativeRechargePeople'] = $user_recharge->where($where)->where('paid', 1)->group('uid')->count(); //累计充值用户数 $last['cumulativePayPeople'] = $order->where($where)->where('paid', 1)->group('uid')->count(); //累计成交用户数 //组合数据,计算环比 $data = []; foreach ($now as $key => $item) { $data[$key]['num'] = $item; $data[$key]['last_num'] = $last[$key]; $num = $last[$key] > 0 ? $last[$key] : 1; $data[$key]['percent'] = bcmul((string)bcdiv((string)($item - $last[$key]), (string)$num, 4), 100, 2); } return $data; } /** * 用户趋势 * @param $where * @param $excel * @return mixed */ public function getTrend($where, $excel = false) { $time = explode('-', $where['create_time']); $time = [strtotime($time[0]), strtotime($time[1])]; unset($where['create_time']); if (count($time) != 2) throw new Exception('参数错误'); $dayCount = ($time[1] - $time[0]) / 86400 + 1; $data = []; if ($dayCount == 1) { $data = $this->trend($time, $where, 0, $excel); } elseif ($dayCount > 1 && $dayCount <= 31) { $data = $this->trend($time, $where, 1, $excel); } elseif ($dayCount > 31 && $dayCount <= 92) { $data = $this->trend($time, $where, 3, $excel); } elseif ($dayCount > 92) { $data = $this->trend($time, $where, 30, $excel); } return $data; } /** * 用户趋势 * @param $time * @param $channelType * @param $num * @param $excel * @return array */ public function trend($time, $where, $num, $excel) { $user = new User(); // $userVisit = new UserVisit(); $order = new StoreOrder(); $recharge = new UserRecharge(); $newPeople = $paidPeople = $rechargePeople = $vipPeople = []; $newPeople['name'] = '新增用户'; // $visitPeople['name'] = '访客数'; $paidPeople['name'] = '成交用户'; $vipPeople['name'] = '新增会员用户'; if ($num == 0) { $xAxis = ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23']; $timeType = '%H'; } elseif ($num != 0) { $dt_start = $time[0]; $dt_end = $time[1]; while ($dt_start <= $dt_end) { if ($num == 30) { $xAxis[] = date('Y-m', $dt_start); $dt_start = strtotime("+1 month", $dt_start); $timeType = '%Y-%m'; } else { $xAxis[] = date('Y-m-d', $dt_start); $dt_start = strtotime("+$num day", $dt_start); $timeType = '%Y-%m-%d'; } } } // $visitPeople = array_column($userVisit->getTrendData($time, $channelType, $timeType, 'count(distinct(uid))'), 'num', 'days'); $newPeople = array_column($user->getTrendData($time, [], $timeType), 'num', 'days'); $paidPeople = array_column($order->getTrendData($time, $where, $timeType, 'count(distinct(uid))'), 'num', 'days'); $vipPeople = array_column($user->getTrendData($time, [], $timeType, 'vip_time'), 'days'); $data = $series = []; foreach ($xAxis as $item) { $data['新增用户'][] = isset($newPeople[$item]) ? intval($newPeople[$item]) : 0; // $data['访客数'][] = isset($visitPeople[$item]) ? intval($visitPeople[$item]) : 0; $data['成交用户'][] = isset($paidPeople[$item]) ? intval($paidPeople[$item]) : 0; $data['新增会员用户'][] = isset($vipPeople[$item]) ? intval($vipPeople[$item]) : 0; } foreach ($data as $key => $item) { $series[] = ['name' => $key, 'value' => $item]; } return compact('xAxis', 'series'); } }