params['date_type']) ? $this->params['date_type'] : 0; if ($date_type == 0) { $start_time = strtotime("today"); $time_range = date('Y-m-d', $start_time); } else if ($date_type == 1) { $start_time = strtotime(date('Y-m-d', strtotime("-6 day"))); $time_range = date('Y-m-d', $start_time) . ' 至 ' . date('Y-m-d', strtotime("today")); } else if ($date_type == 2) { $start_time = strtotime(date('Y-m-d', strtotime("-29 day"))); $time_range = date('Y-m-d', $start_time) . ' 至 ' . date('Y-m-d', strtotime("today")); } $stat_model = new SiteStatModel($this->site_id); $shop_stat_sum = $stat_model->getShopStatSum($this->site_id, $start_time); $shop_stat_sum['data']['time_range'] = $time_range; return $this->response($shop_stat_sum); } /** * 店铺统计报表 * */ public function getShopStatList() { $date_type = isset($this->params['date_type']) ? $this->params['date_type'] : 1; if ($date_type == 1) { $start_time = strtotime(date('Y-m-d', strtotime("-6 day"))); $time_range = date('Y-m-d', $start_time) . ' 至 ' . date('Y-m-d', strtotime("today")); $day = 6; } else if ($date_type == 2) { $start_time = strtotime(date('Y-m-d', strtotime("-29 day"))); $time_range = date('Y-m-d', $start_time) . ' 至 ' . date('Y-m-d', strtotime("today")); $day = 29; } $stat_model = new SiteStatModel($this->site_id); $stat_list = $stat_model->getShopStatList($this->site_id, $start_time); //将时间戳作为列表的主键 $shop_stat_list = array_column($stat_list['data'], null, 'day_time'); $data = array(); for ($i = 0; $i <= $day; $i++) { $time = strtotime(date('Y-m-d', strtotime("-" . ($day - $i) . " day"))); $data['time'][$i] = date('Y-m-d', $time); if (array_key_exists($time, $shop_stat_list)) { $data['order_total'][$i] = $shop_stat_list[$time]['order_total']; $data['shipping_total'][$i] = $shop_stat_list[$time]['shipping_total']; $data['refund_total'][$i] = $shop_stat_list[$time]['refund_total']; $data['order_pay_count'][$i] = $shop_stat_list[$time]['order_pay_count']; $data['goods_pay_count'][$i] = $shop_stat_list[$time]['goods_pay_count']; $data['shop_money'][$i] = $shop_stat_list[$time]['shop_money']; $data['platform_money'][$i] = $shop_stat_list[$time]['platform_money']; $data['collect_shop'][$i] = $shop_stat_list[$time]['collect_shop']; $data['collect_goods'][$i] = $shop_stat_list[$time]['collect_goods']; $data['visit_count'][$i] = $shop_stat_list[$time]['visit_count']; $data['order_count'][$i] = $shop_stat_list[$time]['order_count']; $data['goods_count'][$i] = $shop_stat_list[$time]['goods_count']; $data['add_goods_count'][$i] = $shop_stat_list[$time]['add_goods_count']; $data['member_count'][$i] = $shop_stat_list[$time]['member_count']; } else { $data['order_total'][$i] = 0.00; $data['shipping_total'][$i] = 0.00; $data['refund_total'][$i] = 0.00; $data['order_pay_count'][$i] = 0; $data['goods_pay_count'][$i] = 0; $data['shop_money'][$i] = 0.00; $data['platform_money'][$i] = 0.00; $data['collect_shop'][$i] = 0; $data['collect_goods'][$i] = 0; $data['visit_count'][$i] = 0; $data['order_count'][$i] = 0; $data['goods_count'][$i] = 0; $data['add_goods_count'][$i] = 0; $data['member_count'][$i] = 0; } } $data['time_range'] = $time_range; return $this->response($this->success($data)); } /** * 商品统计 * @return mixed */ public function goods() { $date_type = isset($this->params['date_type']) ? $this->params['date_type'] : 0; if ($date_type == 0) { $start_time = strtotime("today"); $time_range = date('Y-m-d', $start_time); } else if ($date_type == 1) { $start_time = strtotime("-6 day"); $time_range = date('Y-m-d', $start_time) . ' 至 ' . date('Y-m-d', strtotime("today")); } else if ($date_type == 2) { $start_time = strtotime("-29 day"); $time_range = date('Y-m-d', $start_time) . ' 至 ' . date('Y-m-d', strtotime("today")); } $stat_model = new SiteStatModel($this->site_id); $shop_stat_sum = $stat_model->getShopStatSum($this->site_id, $start_time); $shop_stat_sum['data']['time_range'] = $time_range; return $this->response($shop_stat_sum); } /** * 商品统计报表 * */ public function getGoodsStatList() { $date_type = isset($this->params['date_type']) ? $this->params['date_type'] : 1; if ($date_type == 1) { $start_time = strtotime("-6 day"); $time_range = date('Y-m-d', $start_time) . ' 至 ' . date('Y-m-d', strtotime("today")); $day = 6; } else if ($date_type == 2) { $start_time = strtotime("-29 day"); $time_range = date('Y-m-d', $start_time) . ' 至 ' . date('Y-m-d', strtotime("today")); $day = 29; } $stat_model = new SiteStatModel($this->site_id); $stat_list = $stat_model->getShopStatList($this->site_id, $start_time); //将时间戳作为列表的主键 $shop_stat_list = array_column($stat_list['data'], null, 'day_time'); $data = array(); for ($i = 0; $i <= $day; $i++) { $time = strtotime(date('Y-m-d', strtotime("-" . ($day - $i) . " day"))); $data['time'][$i] = date('Y-m-d', $time); if (array_key_exists($time, $shop_stat_list)) { $data['order_total'][$i] = $shop_stat_list[$time]['order_total']; $data['shipping_total'][$i] = $shop_stat_list[$time]['shipping_total']; $data['refund_total'][$i] = $shop_stat_list[$time]['refund_total']; $data['order_pay_count'][$i] = $shop_stat_list[$time]['order_pay_count']; $data['goods_pay_count'][$i] = $shop_stat_list[$time]['goods_pay_count']; $data['shop_money'][$i] = $shop_stat_list[$time]['shop_money']; $data['platform_money'][$i] = $shop_stat_list[$time]['platform_money']; $data['collect_shop'][$i] = $shop_stat_list[$time]['collect_shop']; $data['collect_goods'][$i] = $shop_stat_list[$time]['collect_goods']; $data['visit_count'][$i] = $shop_stat_list[$time]['visit_count']; $data['order_count'][$i] = $shop_stat_list[$time]['order_count']; $data['goods_count'][$i] = $shop_stat_list[$time]['goods_count']; $data['add_goods_count'][$i] = $shop_stat_list[$time]['add_goods_count']; $data['member_count'][$i] = $shop_stat_list[$time]['member_count']; } else { $data['order_total'][$i] = 0.00; $data['shipping_total'][$i] = 0.00; $data['refund_total'][$i] = 0.00; $data['order_pay_count'][$i] = 0; $data['goods_pay_count'][$i] = 0; $data['shop_money'][$i] = 0.00; $data['platform_money'][$i] = 0.00; $data['collect_shop'][$i] = 0; $data['collect_goods'][$i] = 0; $data['visit_count'][$i] = 0; $data['order_count'][$i] = 0; $data['goods_count'][$i] = 0; $data['add_goods_count'][$i] = 0; $data['member_count'][$i] = 0; } } $data['time_range'] = $time_range; return $this->response($this->success($data)); } /** * 交易统计 * @return mixed */ public function order() { $date_type = isset($this->params['date_type']) ? $this->params['date_type'] : 0; if ($date_type == 0) { $start_time = strtotime("today"); $time_range = date('Y-m-d', $start_time); } else if ($date_type == 1) { $start_time = strtotime(date('Y-m-d', strtotime("-6 day"))); $time_range = date('Y-m-d', $start_time) . ' 至 ' . date('Y-m-d', strtotime("today")); } else if ($date_type == 2) { $start_time = strtotime(date('Y-m-d', strtotime("-29 day"))); $time_range = date('Y-m-d', $start_time) . ' 至 ' . date('Y-m-d', strtotime("today")); } $stat_model = new SiteStatModel($this->site_id); $shop_stat_sum = $stat_model->getShopStatSum($this->site_id, $start_time); $shop_stat_sum['data']['time_range'] = $time_range; return $this->response($shop_stat_sum); } /** * 交易统计报表 * */ public function getOrderStatList() { $date_type = isset($this->params['date_type']) ? $this->params['date_type'] : 1; if ($date_type == 1) { $start_time = strtotime(date('Y-m-d', strtotime("-6 day"))); $time_range = date('Y-m-d', $start_time) . ' 至 ' . date('Y-m-d', strtotime("today")); $day = 6; } else if ($date_type == 2) { $start_time = strtotime(date('Y-m-d', strtotime("-29 day"))); $time_range = date('Y-m-d', $start_time) . ' 至 ' . date('Y-m-d', strtotime("today")); $day = 29; } $stat_model = new SiteStatModel($this->site_id); $stat_list = $stat_model->getShopStatList($this->site_id, $start_time); //将时间戳作为列表的主键 $shop_stat_list = array_column($stat_list['data'], null, 'day_time'); $data = array(); for ($i = 0; $i <= $day; $i++) { $time = strtotime(date('Y-m-d', strtotime("-" . ($day - $i) . " day"))); $data['time'][$i] = date('Y-m-d', $time); if (array_key_exists($time, $shop_stat_list)) { $data['order_total'][$i] = $shop_stat_list[$time]['order_total']; $data['shipping_total'][$i] = $shop_stat_list[$time]['shipping_total']; $data['refund_total'][$i] = $shop_stat_list[$time]['refund_total']; $data['order_pay_count'][$i] = $shop_stat_list[$time]['order_pay_count']; $data['goods_pay_count'][$i] = $shop_stat_list[$time]['goods_pay_count']; $data['shop_money'][$i] = $shop_stat_list[$time]['shop_money']; $data['platform_money'][$i] = $shop_stat_list[$time]['platform_money']; $data['collect_shop'][$i] = $shop_stat_list[$time]['collect_shop']; $data['collect_goods'][$i] = $shop_stat_list[$time]['collect_goods']; $data['visit_count'][$i] = $shop_stat_list[$time]['visit_count']; $data['order_count'][$i] = $shop_stat_list[$time]['order_count']; $data['goods_count'][$i] = $shop_stat_list[$time]['goods_count']; $data['add_goods_count'][$i] = $shop_stat_list[$time]['add_goods_count']; } else { $data['order_total'][$i] = 0.00; $data['shipping_total'][$i] = 0.00; $data['refund_total'][$i] = 0.00; $data['order_pay_count'][$i] = 0; $data['goods_pay_count'][$i] = 0; $data['shop_money'][$i] = 0.00; $data['platform_money'][$i] = 0.00; $data['collect_shop'][$i] = 0; $data['collect_goods'][$i] = 0; $data['visit_count'][$i] = 0; $data['order_count'][$i] = 0; $data['goods_count'][$i] = 0; $data['add_goods_count'][$i] = 0; } } $data['time_range'] = $time_range; return $this->response($this->success($data)); } /** * 访问统计 * @return mixed */ public function visit() { $date_type = isset($this->params['date_type']) ? $this->params['date_type'] : 0; if ($date_type == 0) { $start_time = strtotime("today"); $time_range = date('Y-m-d', $start_time); } else if ($date_type == 1) { $start_time = strtotime(date('Y-m-d', strtotime("-6 day"))); $time_range = date('Y-m-d', $start_time) . ' 至 ' . date('Y-m-d', strtotime("today")); } else if ($date_type == 2) { $start_time = strtotime(date('Y-m-d', strtotime("-29 day"))); $time_range = date('Y-m-d', $start_time) . ' 至 ' . date('Y-m-d', strtotime("today")); } $stat_model = new SiteStatModel($this->site_id); $shop_stat_sum = $stat_model->getShopStatSum($this->site_id, $start_time); $shop_stat_sum['data']['time_range'] = $time_range; return $this->response($shop_stat_sum); } /** * 访问统计报表 * */ public function getVisitStatList() { $date_type = isset($this->params['date_type']) ? $this->params['date_type'] : 1; if ($date_type == 1) { $start_time = strtotime(date('Y-m-d', strtotime("-6 day"))); $time_range = date('Y-m-d', $start_time) . ' 至 ' . date('Y-m-d', strtotime("today")); $day = 6; } else if ($date_type == 2) { $start_time = strtotime(date('Y-m-d', strtotime("-29 day"))); $time_range = date('Y-m-d', $start_time) . ' 至 ' . date('Y-m-d', strtotime("today")); $day = 29; } $stat_model = new SiteStatModel($this->site_id); $stat_list = $stat_model->getShopStatList($this->site_id, $start_time); //将时间戳作为列表的主键 $shop_stat_list = array_column($stat_list['data'], null, 'day_time'); $data = array(); for ($i = 0; $i <= $day; $i++) { $time = strtotime(date('Y-m-d', strtotime("-" . ($day - $i) . " day"))); $data['time'][$i] = date('Y-m-d', $time); if (array_key_exists($time, $shop_stat_list)) { $data['order_total'][$i] = $shop_stat_list[$time]['order_total']; $data['shipping_total'][$i] = $shop_stat_list[$time]['shipping_total']; $data['refund_total'][$i] = $shop_stat_list[$time]['refund_total']; $data['order_pay_count'][$i] = $shop_stat_list[$time]['order_pay_count']; $data['goods_pay_count'][$i] = $shop_stat_list[$time]['goods_pay_count']; $data['shop_money'][$i] = $shop_stat_list[$time]['shop_money']; $data['platform_money'][$i] = $shop_stat_list[$time]['platform_money']; $data['collect_shop'][$i] = $shop_stat_list[$time]['collect_shop']; $data['collect_goods'][$i] = $shop_stat_list[$time]['collect_goods']; $data['visit_count'][$i] = $shop_stat_list[$time]['visit_count']; $data['order_count'][$i] = $shop_stat_list[$time]['order_count']; $data['goods_count'][$i] = $shop_stat_list[$time]['goods_count']; $data['add_goods_count'][$i] = $shop_stat_list[$time]['add_goods_count']; } else { $data['order_total'][$i] = 0.00; $data['shipping_total'][$i] = 0.00; $data['refund_total'][$i] = 0.00; $data['order_pay_count'][$i] = 0; $data['goods_pay_count'][$i] = 0; $data['shop_money'][$i] = 0.00; $data['platform_money'][$i] = 0.00; $data['collect_shop'][$i] = 0; $data['collect_goods'][$i] = 0; $data['visit_count'][$i] = 0; $data['order_count'][$i] = 0; $data['goods_count'][$i] = 0; $data['add_goods_count'][$i] = 0; } } $data['time_range'] = $time_range; return $this->response($this->success($data)); } /** * 财务报表 * @return array */ public function financeStat() { $token = $this->checkToken(); if ($token[ 'code' ] < 0) return $this->response($token); $store_id = $this->store_id; $start_time = isset($this->params['start_time']) ? strtotime($this->params['start_time']) : strtotime(date('Y-m-d')); $end_time = isset($this->params['end_time']) ? strtotime($this->params['end_time']) : strtotime(date('Y-m-d')) + 86400; $stat_config = event('SiteStatType', [ 'site_type' => $this->app_module ], true); $income = array_filter(array_column($stat_config, 'stat_type', 'key')); $income_arr = []; foreach ($income as $k => $v) { $income_arr[ $v ][] = [ 'value' => '0.00', 'type' => $k, 'pc_url' => $stat_config[ $k ][ 'pc_url' ] ?? '', 'desc' => $stat_config[ $k ][ 'desc' ] ?? '', 'title' => $stat_config[ $k ][ 'title' ] ?? '', 'is_calc' => $stat_config[ $k ][ 'is_calc' ] ?? '0', ]; } $total_income = 0;//总收入 $total_expenditure = 0;//总支出 $stat_shop_model = new SiteStatModel($this->site_id); $field = ''; foreach ($income as $k => $v) { $day_field = $stat_config[ $k ][ 'day_data' ]; $field .= 'sum(' . $day_field . ') as ' . $k . ','; } $field = trim($field, ','); $stat_info = $stat_shop_model->getStatSiteByCondition($this->site_id, $field, $start_time, $end_time, $store_id)[ 'data' ] ?? []; foreach ($income_arr as $key => $item) { foreach ($item as $k => $v) { $income_arr[ $key ][ $k ][ 'value' ] = number_format($stat_info[ $v[ 'type' ] ], 2, '.', ''); if ($key == 'income' && $v[ 'is_calc' ]) $total_income += $stat_info[ $v[ 'type' ] ]; if ($key == 'expenditure' && $v[ 'is_calc' ]) $total_expenditure += $stat_info[ $v[ 'type' ] ]; } } $return_data = [ 'account' => number_format($total_income - $total_expenditure, 2, '.', ''), 'total_income' => number_format($total_income, 2, '.', ''), 'total_expenditure' => number_format($total_expenditure, 2, '.', ''), 'income' => $income_arr[ 'income' ], 'expenditure' => $income_arr[ 'expenditure' ], 'time' => date('Y-m-d H:i:s') ]; return $this->response($this->success($return_data)); } /** * 经营概况 */ public function indexStat() { $store_id = $this->store_id; //基础统计信息 $today = Carbon::now(); $stat_shop_model = new SiteStatModel($this->site_id); $yesterday = Carbon::yesterday(); $field_arr = [ 'service_order_money',//服务订单金额 'order_money',//零售订单金额 'timecard_order_money',//卡项订单金额 'recharge_order_money',//充值订单金额 'member_count',//客户总数 'use_balance_money',//储值消费 'recharge_member',//储值会员数 'level_member_num',//会员数量(拥有等级) 'refund_money',//退款 ]; $stat_config = event('SiteStatType', [ 'site_type' => $this->app_module ], true); $field = ''; foreach ($field_arr as $k => $v) { $day_field = $stat_config[$v]['day_data']; $field .= 'sum(' . $day_field . ') as ' . $stat_config[$v]['day_data'] . ','; $field .= 'sum(' . $stat_config[$v]['total_data'] . ') as ' . $stat_config[$v]['total_data'] . ','; } $field = trim($field, ','); //昨日 $yesterday_info = $stat_shop_model->getStatSite($this->site_id, $yesterday->year, $yesterday->month, $yesterday->day, $field, $store_id)[ 'data' ] ?? []; //今日 $today_info = $stat_shop_model->getStatSite($this->site_id, $today->year, $today->month, $today->day, $field, $store_id)[ 'data' ] ?? []; //本月 $begin_month = mktime(0,0,0,date('m'),1,date('Y')); $end_month = mktime(23,59,59,date('m'),date('t'),date('Y')); $month_info = $stat_shop_model->getStatSiteByCondition($this->site_id, $field, $begin_month, $end_month, $store_id)[ 'data' ] ?? []; foreach ($field_arr as $k => $v){ $yesterday_data[$stat_config[$v]['day_data']] = $yesterday_info[$stat_config[$v]['day_data']] ?? 0; //昨日收入总额 if($stat_config[$v]['stat_type'] == 'income'){ $yesterday_data['total_money'] = $yesterday_data['total_money'] ?? 0; $yesterday_data['total_money'] += $yesterday_info[$stat_config[$v]['day_data']]; $yesterday_data['total_money'] = number_format($yesterday_data['total_money'], 2, '.', ''); } $today_data[$stat_config[$v]['day_data']] = $today_info[$stat_config[$v]['day_data']] ?? 0; if($stat_config[$v]['stat_type'] == 'income'){ $today_data['total_money'] = $today_data['total_money'] ?? 0; $today_data['total_money'] += $today_info[$stat_config[$v]['day_data']]; $today_data['total_money'] = number_format($today_data['total_money'], 2, '.', ''); } $total_data[$stat_config[$v]['day_data']] = $today_info[$stat_config[$v]['total_data']] ?? 0; if($stat_config[$v]['stat_type'] == 'income'){ $total_data['total_money'] = $total_data['total_money'] ?? 0; $total_data['total_money'] += $today_info[$stat_config[$v]['total_data']]; $total_data['total_money'] = number_format($total_data['total_money'], 2, '.', ''); } $desc_data[$stat_config[$v]['day_data']] = $stat_config[$v]['desc']; if($stat_config[$v]['stat_type'] == 'income'){ $desc_data['total_money'] = isset($desc_data['total_money']) ? $desc_data['total_money'].' + ' : '店铺收入 = '; $desc_data['total_money'] .= $stat_config[$v]['title']; } $month_data[$stat_config[$v]['day_data']] = $month_info[$stat_config[$v]['day_data']] ?? 0; if($stat_config[$v]['stat_type'] == 'income'){ $month_data['total_money'] = $month_data['total_money'] ?? '0.00'; $month_data['total_money'] += $month_info[$stat_config[$v]['day_data']]; $month_data['total_money'] = number_format($month_data['total_money'], 2, '.', ''); } } $data = [ 'yesterday_data' => $yesterday_data, 'today_data' => $today_data, 'total_data' => $total_data, 'month_data' => $month_data, 'desc' => $desc_data, 'time' => date('Y-m-d H:i:s') ]; return $this->response($this->success($data)); } /********************************************************* 营业数据 ***************************************************************/ public function businessDataStat() { $type = isset($this->params['type']) ? $this->params['type'] : 'today'; $store_id = $this->store_id; $stat_shop_model = new SiteStatModel($this->site_id); $present = Carbon::now(); switch ( $type ) { case 'today': $yesterday = Carbon::yesterday(); $begain_start_time = $yesterday->startOfDay()->timestamp; $begain_end_time = $yesterday->endOfDay()->timestamp; $last_start_time = $present->startOfDay()->timestamp; $last_end_time = $present->endOfDay()->timestamp; break; case 'yesterday': $yesterday = Carbon::yesterday(); $begain_start_time = $yesterday->startOfDay()->timestamp; $begain_end_time = $yesterday->endOfDay()->timestamp; $last_start_time = $present->subDays(1)->startOfDay()->timestamp; $last_end_time = $present->subDays(0)->endOfDay()->timestamp; break; case 'sevenday': $begain_start_time = $present->subDays(13)->startOfDay()->timestamp; $begain_end_time = $present->addDays(6)->endOfDay()->timestamp; $last_start_time = $present->addDays()->startOfDay()->timestamp; $last_end_time = $present->addDays(6)->endOfDay()->timestamp; break; case 'week': $begain_start_time = $present->subWeek()->startOfWeek()->timestamp; $begain_end_time = $present->endOfWeek()->timestamp; $last_start_time = $present->addWeek()->startOfWeek()->timestamp; $last_end_time = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1; break; case 'thirtyday': $begain_start_time = $present->subDays(59)->startOfDay()->timestamp; $begain_end_time = $present->addDays(29)->endOfDay()->timestamp; $last_start_time = $present->addDays()->startOfDay()->timestamp; $last_end_time = $present->addDays(29)->endOfDay()->timestamp; break; case 'month': $last_start_time = $present->subMonth()->startOfMonth()->timestamp; $last_end_time = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1; break; default: $last_start_time = isset($this->params['start_time']) ? strtotime($this->params['start_time']) : strtotime(date('Y-m-d')); $last_end_time = isset($this->params['end_time']) ? strtotime($this->params['end_time']) : strtotime(date('Y-m-d')) + 86400; $begain_start_time = $last_start_time - ( $last_end_time - $last_start_time ); $begain_end_time = $last_end_time - ( $last_end_time - $last_start_time ); } $stat_config = event('SiteStatType', [ 'site_type' => $this->app_module ], true); $income = array_filter(array_column($stat_config, 'stat_type', 'key')); $income_arr = []; foreach ($income as $k => $v) { $income_arr[ $v ][] = [ 'value' => '0.00', 'type' => $k, 'is_calc' => $stat_config[ $k ][ 'is_calc' ] ?? '0', ]; } $stat = new \app\model\site\SiteStat($this->app_module); $stat_type = $stat->getStatType(); foreach ($stat_type as $k => $v) { foreach ($v as $key => $item) { if (empty($item[ 'is_stat' ])) unset($stat_type[ $k ][ $key ]); } } $today_total_income = 0;//今日总收入 $today_total_expenditure = 0;//今日总支出 $field = ''; foreach ($income as $k => $v) { $day_field = $stat_config[ $k ][ 'day_data' ]; $field .= 'sum(' . $day_field . ') as ' . $k . ','; } $field = trim($field, ','); $today_stat_info = $stat_shop_model->getStatSiteByCondition($this->site_id, $field, $last_start_time, $last_end_time, $store_id)[ 'data' ] ?? []; foreach ($income_arr as $key => $item) { foreach ($item as $k => $v) { $income_arr[ $key ][ $k ][ 'value' ] = number_format($today_stat_info[ $v[ 'type' ] ], 2, '.', ''); if ($key == 'income' && $v[ 'is_calc' ]) $today_total_income += $today_stat_info[ $v[ 'type' ] ]; if ($key == 'expenditure' && $v[ 'is_calc' ]) $today_total_expenditure += $today_stat_info[ $v[ 'type' ] ]; } } $field = 'sum(member_recharge_money_day) as member_recharge_money_day, sum(service_order_money_day) as service_order_money_day, sum(order_money_day) as order_money_day, sum(member_card_money_day) as member_card_money_day, sum(recharge_order_money_day) as recharge_order_money_day, sum(timecard_order_money_day) as timecard_order_money_day '; //本日/周/月... $last_info = $stat_shop_model->getStatSiteByCondition($this->site_id, $field, $last_start_time, $last_end_time, $store_id)[ 'data' ] ?? []; $last_data = [ 'income' => number_format($today_total_income - $today_total_expenditure, 2, '.', ''), 'turnover' => number_format($today_total_income, 2, '.', ''), 'member_recharge_money_day' => $last_info[ 'member_recharge_money_day' ] ?? 0.00,//会员充值金额 'service_order_money_day' => $last_info[ 'service_order_money_day' ] ?? 0.00,//项目订单 'order_money_day' => $last_info[ 'order_money_day' ] ?? 0.00,//产品订单 'member_card_money_day' => $last_info[ 'member_card_money_day' ] ?? 0.00,//会员卡订单 'timecard_order_money_day' => $last_info[ 'timecard_order_money_day' ] ?? 0.00,//卡项订单 'recharge_order_money_day' => $last_info[ 'recharge_order_money_day' ] ?? 0.00,//充值订单 ]; $desc_data = [ 'income' => '统计时间内预估的净收入总额,预计收入 = 消费 + 办卡 + 充值 - 订单退款 - 分销佣金 - 会员提现', 'turnover' => '统计时间内,营业收入总额 = 消费 + 办卡 + 充值', 'member_recharge_money_day' => $stat_config[ 'member_recharge_money' ][ 'desc' ] ?? '', 'service_order_money_day' => $stat_config[ 'service_order_money' ][ 'desc' ] ?? '', 'order_money_day' => $stat_config[ 'order_money' ][ 'desc' ] ?? '', 'member_card_money_day' => $stat_config[ 'member_card_money' ][ 'desc' ] ?? '', 'timecard_order_money_day' => $stat_config[ 'timecard_order_money' ][ 'desc' ] ?? '', 'recharge_order_money_day' => $stat_config[ 'recharge_order_money' ][ 'desc' ] ?? '', ]; $data = [ 'desc' => $desc_data, 'last_data' => $last_data, ]; return $this->response($this->success($data)); } /** * 营业额数据时间统计 */ public function businessDataTimeStat() { $type = isset($this->params['type']) ? $this->params['type'] : 'today'; $field = isset($this->params['field']) ? $this->params['field'] : 'income'; $store_id = $this->store_id; //时间统计信息 $present = Carbon::now(); $yesterday = Carbon::yesterday(); switch ( $type ) { case 'today': $last_start_time = $present->startOfDay()->timestamp; $last_end_time = $present->endOfDay()->timestamp; break; case 'yesterday': $last_start_time = $yesterday->startOfDay()->timestamp; $last_end_time = $yesterday->endOfDay()->timestamp; break; case 'sevenday': $last_start_time = $present->addDays()->startOfDay()->timestamp; $last_end_time = $present->addDays(6)->endOfDay()->timestamp; break; case 'week': $begain_start_time = $present->subWeek()->startOfWeek()->timestamp; $begain_end_time = $present->endOfWeek()->timestamp; $last_start_time = $present->addWeek()->startOfWeek()->timestamp; $last_end_time = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1; break; case 'thirtyday': $last_start_time = $present->addDays()->startOfDay()->timestamp; $last_end_time = $present->addDays(29)->endOfDay()->timestamp; break; case 'month': $last_start_time = $present->subMonth()->startOfMonth()->timestamp; $last_end_time = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1; break; default: $last_start_time = isset($this->params['start_time']) ? strtotime($this->params['start_time']) : strtotime(date('Y-m-d')); $last_end_time = isset($this->params['end_time']) ? strtotime($this->params['end_time']) : strtotime(date('Y-m-d')) + 86400; } $arr = []; $last_info_data = []; $stat_shop_model = new SiteStatModel($this->site_id); $order_common_model = new OrderCommonModel(); $stat_config = event('SiteStatType', [ 'site_type' => $this->app_module ], true); $income = array_filter(array_column($stat_config, 'stat_type', 'key')); $income_arr = []; foreach ($income as $k => $v) { $income_arr[ $v ][] = [ 'value' => '0.00', 'type' => $k, 'is_calc' => $stat_config[ $k ][ 'is_calc' ] ?? '0', 'day_data' => $stat_config[ $k ][ 'day_data' ] ?? '', ]; } $today_total_income = 0;//总收入 $today_total_expenditure = 0;//总支出 $field_refer = ''; foreach ($income as $k => $v) { $day_field = $stat_config[ $k ][ 'day_data' ]; $field_refer .= 'sum(' . $day_field . ') as ' . $day_field . ','; } $field_refer = trim($field_refer, ','); if ($type != 'today' && $type != 'yesterday') { $last_period = CarbonPeriod::create(date('Y-m-d', $last_start_time), date('Y-m-d', $last_end_time)); $last_date_temp = []; foreach ($last_period as $k => $date) { $last_date_temp[ $k ][ 'year' ] = $date->format('Y'); $last_date_temp[ $k ][ 'month' ] = $date->format('m'); $last_date_temp[ $k ][ 'day' ] = $date->format('d'); $last_date_temp[ $k ][ 'date' ] = $date->format('Y-m-d'); } foreach ($last_date_temp as $k => $v) { $start_time = Carbon::create($v[ 'year' ], $v[ 'month' ], $v[ 'day' ], 0, 0, 0)->timestamp; $end_time = Carbon::create($v[ 'year' ], $v[ 'month' ], $v[ 'day' ], 23, 59, 59)->timestamp; // $last_total_commission = $order_common_model->orderStatistics([ [ 'order_status', '=', 'complete' ], [ 'site_id', '=', $this->site_id ], [ 'complete_time', 'between', [ $start_time, $end_time ] ] ], 'sum', 'total_commission'); $last_info = $stat_shop_model->getStatSite($this->site_id, $v[ 'year' ], $v[ 'month' ], $v[ 'day' ], $field_refer, $store_id)[ 'data' ] ?? []; $today_stat_info = $stat_shop_model->getStatSiteByCondition($this->site_id, $field_refer, strtotime($v[ 'date' ]), strtotime($v[ 'date' ]) + 86399, $store_id)[ 'data' ] ?? []; foreach ($income_arr as $key => $item) { foreach ($item as $bond => $value) { $income_arr[ $key ][ $bond ][ 'value' ] = number_format($today_stat_info[ $value[ 'day_data' ] ], 2, '.', ''); if ($key == 'income' && $value[ 'is_calc' ]) $today_total_income += $today_stat_info[ $value[ 'day_data' ] ]; if ($key == 'expenditure' && $value[ 'is_calc' ]) $today_total_expenditure += $today_stat_info[ $value[ 'day_data' ] ]; } } $last_data = [ 'income' => number_format($today_total_income - $today_total_expenditure, 2, '.', ''), 'turnover' => number_format($today_total_income, 2, '.', ''), 'member_card_money_day' => $last_info[ 'member_card_money_day' ] ?? 0.00, 'member_recharge_money_day' => $last_info[ 'member_recharge_money_day' ] ?? 0.00, 'order_money_day' => $last_info[ 'order_money_day' ] ?? 0.00, 'service_order_money_day' => $last_info[ 'service_order_money_day' ] ?? 0.00, 'timecard_order_money_day' => $last_info[ 'timecard_order_money_day' ] ?? 0.00, ]; $last_info_data[ $k ] = $last_data; } $last_arr = array_column($last_info_data, $field); $arr[ 'last_date_temp' ] = implode(',', array_column($last_date_temp, 'date')); } else if ($type == 'today') { switch ( $field ) { case 'income': $last_order_money_day = $stat_shop_model->getStatSiteDay($this->site_id, 'order_money_day', $present->year, $present->month, $present->day, $store_id)[ 'data' ]; $last_info_data = []; foreach ($income_arr[ 'income' ] as $key => $value) { $last_data = $stat_shop_model->getStatSiteDay($this->site_id, $value[ 'day_data' ], $present->year, $present->month, $present->day, $store_id)[ 'data' ]; foreach ($last_order_money_day as $k => $v) { if (strstr($k, 'hour_')) { if (!isset($last_info_data[ $k ])) $last_info_data[ $k ] = 0; $last_info_data[ $k ] += $last_data[ $k ]; } } } foreach ($income_arr[ 'expenditure' ] as $key => $value) { $last_data = $stat_shop_model->getStatSiteDay($this->site_id, $value[ 'day_data' ], $present->year, $present->month, $present->day, $store_id)[ 'data' ]; foreach ($last_order_money_day as $k => $v) { if (strstr($k, 'hour_')) { if (!isset($last_info_data[ $k ])) $last_info_data[ $k ] = 0; $last_info_data[ $k ] -= $last_data[ $k ]; } } } break; case 'turnover': $last_order_money_day = $stat_shop_model->getStatSiteDay($this->site_id, 'order_money_day', $present->year, $present->month, $present->day, $store_id)[ 'data' ]; $last_info_data = []; foreach ($income_arr[ 'income' ] as $key => $value) { $last_data = $stat_shop_model->getStatSiteDay($this->site_id, $value[ 'day_data' ], $present->year, $present->month, $present->day, $store_id)[ 'data' ]; foreach ($last_order_money_day as $k => $v) { if (strstr($k, 'hour_')) { if (!isset($last_info_data[ $k ])) $last_info_data[ $k ] = 0; $last_info_data[ $k ] += $last_data[ $k ]; } } } break; default : $last_info_data = $stat_shop_model->getStatSiteDay($this->site_id, $field, $present->year, $present->month, $present->day, $store_id)[ 'data' ]; break; } foreach ($last_info_data as $k => $v) { if (strstr($k, 'hour_') == false) { unset($last_info_data[ $k ]); } } $last_arr = $last_info_data; } else if ($type == 'yesterday') { switch ( $field ) { case 'income': $last_order_money_day = $stat_shop_model->getStatSiteDay($this->site_id, 'order_money_day', $yesterday->year, $yesterday->month, $yesterday->day, $store_id)[ 'data' ]; $last_info_data = []; foreach ($income_arr[ 'income' ] as $key => $value) { $last_data = $stat_shop_model->getStatSiteDay($this->site_id, $value[ 'day_data' ], $yesterday->year, $yesterday->month, $yesterday->day, $store_id)[ 'data' ]; foreach ($last_order_money_day as $k => $v) { if (strstr($k, 'hour_')) { if (!isset($last_info_data[ $k ])) $last_info_data[ $k ] = 0; $last_info_data[ $k ] += $last_data[ $k ]; } } } foreach ($income_arr[ 'expenditure' ] as $key => $value) { $last_data = $stat_shop_model->getStatSiteDay($this->site_id, $value[ 'day_data' ], $yesterday->year, $yesterday->month, $yesterday->day, $store_id)[ 'data' ]; foreach ($last_order_money_day as $k => $v) { if (strstr($k, 'hour_')) { if (!isset($last_info_data[ $k ])) $last_info_data[ $k ] = 0; $last_info_data[ $k ] -= $last_data[ $k ]; } } } break; case 'turnover': $last_order_money_day = $stat_shop_model->getStatSiteDay($this->site_id, 'order_money_day', $yesterday->year, $yesterday->month, $yesterday->day, $store_id)[ 'data' ]; $last_info_data = []; foreach ($income_arr[ 'income' ] as $key => $value) { $last_data = $stat_shop_model->getStatSiteDay($this->site_id, $value[ 'day_data' ], $yesterday->year, $yesterday->month, $yesterday->day, $store_id)[ 'data' ]; foreach ($last_order_money_day as $k => $v) { if (strstr($k, 'hour_')) { if (!isset($last_info_data[ $k ])) $last_info_data[ $k ] = 0; $last_info_data[ $k ] += $last_data[ $k ]; } } } break; default : $last_info_data = $stat_shop_model->getStatSiteDay($this->site_id, $field, $yesterday->year, $yesterday->month, $yesterday->day)[ 'data' ]; break; } foreach ($last_info_data as $k => $v) { if (strstr($k, 'hour_') == false) { unset($last_info_data[ $k ]); } } $last_arr = $last_info_data; } $arr[ 'last_arr' ] = implode(',', $last_arr); return $this->response($this->success($arr)); } /** * 今日营业额数据 */ public function businessTodayInfo() { $type = isset($this->params['type']) ? $this->params['type'] : 'today'; $store_id = $this->store_id; $present = Carbon::now(); $stat_shop_model = new SiteStatModel($this->site_id); switch ( $type ) { case 'today': $start_time = $present->startOfDay()->timestamp; $end_time = $present->endOfDay()->timestamp; break; case 'yesterday': $yesterday = Carbon::yesterday(); $start_time = $yesterday->startOfDay()->timestamp; $end_time = $yesterday->endOfDay()->timestamp; break; case 'sevenday': $start_time = $present->subDays(6)->startOfDay()->timestamp; $end_time = $present->addDays(6)->endOfDay()->timestamp; break; case 'week': $start_time = $present->startOfWeek()->timestamp; $end_time = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1; break; case 'thirtyday': $start_time = $present->subDays(29)->startOfDay()->timestamp; $end_time = $present->addDays(29)->endOfDay()->timestamp; break; case 'month': $start_time = $present->startOfMonth()->timestamp; $end_time = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1; break; default: $start_time = isset($this->params['start_time']) ? strtotime($this->params['start_time']) : strtotime(date('Y-m-d')); $end_time = isset($this->params['end_time']) ? strtotime($this->params['end_time']) : strtotime(date('Y-m-d')) + 86400; } $stat_config = event('SiteStatType', [ 'site_type' => $this->app_module ], true); $income = array_filter(array_column($stat_config, 'stat_type', 'key')); $income_arr = []; foreach ($income as $k => $v) { $income_arr[ $v ][] = [ 'value' => '0.00', 'type' => $k, 'is_calc' => $stat_config[ $k ][ 'is_calc' ] ?? '0', ]; } $today_total_income = 0;//今日总收入 $today_total_expenditure = 0;//今日总支出 $field = ''; foreach ($income as $k => $v) { $day_field = $stat_config[ $k ][ 'day_data' ]; $field .= 'sum(' . $day_field . ') as ' . $k . ','; } $field = trim($field, ','); $today_stat_info = $stat_shop_model->getStatSiteByCondition($this->site_id, $field, $start_time, $end_time, $store_id)[ 'data' ] ?? []; foreach ($income_arr as $key => $item) { foreach ($item as $k => $v) { $income_arr[ $key ][ $k ][ 'value' ] = number_format($today_stat_info[ $v[ 'type' ] ], 2, '.', ''); if ($key == 'income' && $v[ 'is_calc' ]) $today_total_income += $today_stat_info[ $v[ 'type' ] ]; if ($key == 'expenditure' && $v[ 'is_calc' ]) $today_total_expenditure += $today_stat_info[ $v[ 'type' ] ]; } } $field = 'sum(refund_money_day) as refund_money_day, sum(member_withdraw_money_day) as member_withdraw_money_day, sum(fenxiao_commission_money_day) as fenxiao_commission_money_day'; $info = $stat_shop_model->getStatSiteByCondition($this->site_id, $field, $start_time, $end_time, $store_id)[ 'data' ] ?? []; $data = [ 'income' => number_format($today_total_income - $today_total_expenditure, 2, '.', ''),//营业额 'turnover' => number_format($today_total_income, 2, '.', ''),//收入 'refund_money_day' => $info[ 'refund_money_day' ] ?? 0.00, 'member_withdraw_money_day' => $info[ 'member_withdraw_money_day' ] ?? 0.00, 'fenxiao_commission_money_day' => $info[ 'fenxiao_commission_money_day' ] ?? 0.00, ]; return $this->response($this->success($data)); } /********************************************************* 营业数据 ***************************************************************/ /********************************************************* 客户数据 ***************************************************************/ /** * 客户数据统计 */ public function customerDataTimeStat() { $type = isset($this->params['type']) ? $this->params['type'] : 'today'; $field = isset($this->params['field']) ? $this->params['field'] : 'member_count_total'; $store_id = $this->store_id; //时间统计信息 $present = Carbon::now(); switch ( $type ) { case 'today': $yesterday = Carbon::yesterday(); $begain_start_time = $yesterday->startOfDay()->timestamp; $begain_end_time = $yesterday->endOfDay()->timestamp; $last_start_time = $present->startOfDay()->timestamp; $last_end_time = $present->endOfDay()->timestamp; break; case 'yesterday': $yesterday = Carbon::yesterday(); $begain_start_time = $yesterday->startOfDay()->timestamp - 86400; $begain_end_time = $yesterday->endOfDay()->timestamp - 86400; $last_start_time = $yesterday->startOfDay()->timestamp; $last_end_time = $yesterday->endOfDay()->timestamp; break; case 'sevenday': $begain_start_time = $present->subDays(13)->startOfDay()->timestamp; $begain_end_time = $present->addDays(6)->endOfDay()->timestamp; $last_start_time = $present->addDays()->startOfDay()->timestamp; $last_end_time = $present->addDays(6)->endOfDay()->timestamp; break; case 'week': $begain_start_time = $present->subWeek()->startOfWeek()->timestamp; $begain_end_time = $present->endOfWeek()->timestamp; $last_start_time = $present->addWeek()->startOfWeek()->timestamp; $last_end_time = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1; break; case 'thirtyday': $begain_start_time = $present->subDays(59)->startOfDay()->timestamp; $begain_end_time = $present->addDays(29)->endOfDay()->timestamp; $last_start_time = $present->addDays()->startOfDay()->timestamp; $last_end_time = $present->addDays(29)->endOfDay()->timestamp; break; case 'month': $begain_start_time = $present->subMonth()->startOfMonth()->timestamp; $begain_end_time = $present->endOfMonth()->timestamp; $last_start_time = $present->addMonth()->startOfMonth()->timestamp; $last_end_time = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1; break; default: $last_start_time = isset($this->params['start_time']) ? strtotime($this->params['start_time']) : strtotime(date('Y-m-d')); $last_end_time = isset($this->params['end_time']) ? strtotime($this->params['end_time']) : strtotime(date('Y-m-d')) + 86400; $begain_start_time = $last_start_time - ( $last_end_time - $last_start_time ); $begain_end_time = $last_end_time - ( $last_end_time - $last_start_time ); } $arr = []; $last_info_data = []; $stat_shop_model = new SiteStatModel($this->site_id); $field_refer = 'max(member_count_total) as member_count_total, sum(member_count_day) as member_count_day, sum(order_count_day) as order_count_day, sum(pay_member_day) as pay_member_day, sum(recharge_member_day) as recharge_member_day, sum(coupon_member_day) as coupon_member_day'; if ($type != 'today' && $type != 'yesterday') { $last_period = CarbonPeriod::create(date('Y-m-d', $last_start_time), date('Y-m-d', $last_end_time)); $last_date_temp = []; foreach ($last_period as $k => $date) { $last_date_temp[ $k ][ 'year' ] = $date->format('Y'); $last_date_temp[ $k ][ 'month' ] = $date->format('m'); $last_date_temp[ $k ][ 'day' ] = $date->format('d'); $last_date_temp[ $k ][ 'date' ] = $date->format('Y-m-d'); } foreach ($last_date_temp as $k => $v) { $last_info = $stat_shop_model->getStatSite($this->site_id, $v[ 'year' ], $v[ 'month' ], $v[ 'day' ], $field_refer, $store_id)[ 'data' ] ?? []; $last_data = [ 'member_count_total' => $last_info[ 'member_count_total' ] ?? 0, 'member_count_day' => $last_info[ 'member_count_day' ] ?? 0, 'order_count_day' => $last_info[ 'order_count_day' ] ?? 0, 'pay_member_day' => $last_info[ 'pay_member_day' ] ?? 0, 'recharge_member_day' => $last_info[ 'recharge_member_day' ] ?? 0, 'coupon_member_day' => $last_info[ 'coupon_member_day' ] ?? 0, ]; $last_info_data[ $k ] = $last_data; } $last_arr = array_column($last_info_data, $field); $arr[ 'last_date_temp' ] = implode(',', array_column($last_date_temp, 'date')); } else if ($type == 'today') { if ($field == 'member_count_total') { $last_date = [ 'year' => date('Y', $last_start_time-1), 'month' => date('m', $last_start_time-1), 'day' => date('d', $last_start_time-1), ]; $last_info_member_count_data = $stat_shop_model->getStatSiteDay($this->site_id, 'member_count_day', $present->year, $present->month, $present->day, $store_id)[ 'data' ]; $last_info = $stat_shop_model->getStatSite($this->site_id, $last_date[ 'year' ], $last_date[ 'month' ], $last_date[ 'day' ], $field_refer, $store_id)[ 'data' ] ?? []; foreach ($last_info_member_count_data as $k => $v) { if (strstr($k, 'hour_') != false) { $last_hour_num = 0; $k = ltrim($k, 'hour_'); for ($i = 0; $k >= $i; $i++) { $last_hour_num += $last_info_member_count_data[ 'hour_' . $i ]; } $last_info_data[ 'hour_' . $k ] = ( $last_info[ 'member_count_total' ] ?? 0 ) + (int) $last_hour_num; } } } else { $last_info_data = $stat_shop_model->getStatSiteDay($this->site_id, $field, $present->year, $present->month, $present->day, $store_id)[ 'data' ]; } foreach ($last_info_data as $k => $v) { if (strstr($k, 'hour_') == false) { unset($last_info_data[ $k ]); } } $last_arr = $last_info_data; } else if ($type == 'yesterday') { if ($field == 'member_count_total') { $last_date = [ 'year' => date('Y', $last_start_time-1), 'month' => date('m', $last_start_time-1), 'day' => date('d', $last_start_time-1), ]; $last_info_member_count_data = $stat_shop_model->getStatSiteDay($this->site_id, 'member_count_day', $yesterday->year, $yesterday->month, $yesterday->day, $store_id)[ 'data' ]; $last_info = $stat_shop_model->getStatSite($this->site_id, $last_date[ 'year' ], $last_date[ 'month' ], $last_date[ 'day' ], $field_refer, $store_id)[ 'data' ] ?? []; foreach ($last_info_member_count_data as $k => $v) { if (strstr($k, 'hour_') != false) { $last_hour_num = 0; $k = ltrim($k, 'hour_'); for ($i = 0; $k >= $i; $i++) { $last_hour_num += $last_info_member_count_data[ 'hour_' . $i ]; } $last_info_data[ 'hour_' . $k ] = ( $last_info[ 'member_count_total' ] ?? 0 ) + (int) $last_hour_num; } } } else { $last_info_data = $stat_shop_model->getStatSiteDay($this->site_id, $field, $yesterday->year, $yesterday->month, $yesterday->day, $store_id)[ 'data' ]; } foreach ($last_info_data as $k => $v) { if (strstr($k, 'hour_') == false) { unset($last_info_data[ $k ]); } } $last_arr = $last_info_data; } $arr[ 'last_arr' ] = implode(',', $last_arr); return $this->response($this->success($arr)); } /** * 客户数据信息 */ public function customerDataStat() { $type = isset($this->params['type']) ? $this->params['type'] : 'today'; $store_id = $this->store_id; $stat_shop_model = new SiteStatModel($this->site_id); $stat_config = event('SiteStatType', [ 'site_type' => $this->app_module ], true); $present = Carbon::now(); switch ( $type ) { case 'today': $last_start_time = $present->startOfDay()->timestamp; $last_end_time = $present->endOfDay()->timestamp; break; case 'yesterday': $yesterday = Carbon::yesterday(); $last_start_time = $yesterday->startOfDay()->timestamp; $last_end_time = $yesterday->endOfDay()->timestamp; break; case 'sevenday': $begain_start_time = $present->subDays(13)->startOfDay()->timestamp; $begain_end_time = $present->addDays(6)->endOfDay()->timestamp; $last_start_time = $present->addDays()->startOfDay()->timestamp; $last_end_time = $present->addDays(6)->endOfDay()->timestamp; break; case 'week': $begain_start_time = $present->subWeek()->startOfWeek()->timestamp; $begain_end_time = $present->endOfWeek()->timestamp; $last_start_time = $present->addWeek()->startOfWeek()->timestamp; $last_end_time = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1; break; case 'thirtyday': $begain_start_time = $present->subDays(59)->startOfDay()->timestamp; $begain_end_time = $present->addDays(29)->endOfDay()->timestamp; $last_start_time = $present->addDays()->startOfDay()->timestamp; $last_end_time = $present->addDays(29)->endOfDay()->timestamp; break; case 'month': $begain_start_time = $present->subMonth()->startOfMonth()->timestamp; $begain_end_time = $present->endOfMonth()->timestamp; $last_start_time = $present->addMonth()->startOfMonth()->timestamp; $last_end_time = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1; break; default : $last_start_time = isset($this->params['start_time']) ? strtotime($this->params['start_time']) : strtotime(date('Y-m-d')); $last_end_time = isset($this->params['end_time']) ? strtotime($this->params['end_time']) : strtotime(date('Y-m-d')) + 86400; $begain_start_time = $last_start_time - ( $last_end_time - $last_start_time ); $begain_end_time = $last_end_time - ( $last_end_time - $last_start_time ); } $field = 'max(member_count_total) as member_count_total, sum(member_count_day) as member_count_day, sum(order_count_day) as order_count_day, sum(pay_member_day) as pay_member_day, sum(recharge_member_day) as recharge_member_day, sum(coupon_member_day) as coupon_member_day'; //本日/周/月... $last_info = $stat_shop_model->getStatSiteByCondition($this->site_id, $field, $last_start_time, $last_end_time, $store_id)[ 'data' ] ?? []; $last_data = [ 'member_count_total' => $last_info[ 'member_count_total' ] ?? 0, 'member_count_day' => $last_info[ 'member_count_day' ] ?? 0, 'order_count_day' => $last_info[ 'order_count_day' ] ?? 0, 'pay_member_day' => $last_info[ 'pay_member_day' ] ?? 0, 'recharge_member_day' => $last_info[ 'recharge_member_day' ] ?? 0, 'coupon_member_day' => $last_info[ 'coupon_member_day' ] ?? 0, ]; $desc_data = [ 'member_count_total' => '截止到统计时间,店铺的客户总数', 'member_count_day' => $stat_config[ 'member_count' ][ 'desc' ] ?? '', 'order_count_day' => $stat_config[ 'order_count' ][ 'desc' ] ?? '', 'pay_member_day' => $stat_config[ 'pay_member' ][ 'desc' ] ?? '', 'recharge_member_day' => $stat_config[ 'recharge_member' ][ 'desc' ] ?? '', 'coupon_member_day' => $stat_config[ 'coupon_member' ][ 'desc' ] ?? '', ]; $data = [ 'desc' => $desc_data, 'last_data' => $last_data, ]; return $this->response($this->success($data)); } /********************************************************* 客户数据 ***************************************************************/ /********************************************************* 流量数据 ***************************************************************/ /** * 流量数据信息 * */ public function flowDataStat() { $type = isset($this->params['type']) ? $this->params['type'] : 'today'; $store_id = $this->store_id; $stat_shop_model = new SiteStatModel($this->site_id); $present = Carbon::now(); switch ( $type ) { case 'today': $yesterday = Carbon::yesterday(); $begain_start_time = $yesterday->startOfDay()->timestamp; $begain_end_time = $yesterday->endOfDay()->timestamp; $last_start_time = $present->startOfDay()->timestamp; $last_end_time = $present->endOfDay()->timestamp; $earlier_start_time = $yesterday->startOfDay()->subDay()->timestamp; $earlier_end_time = $yesterday->endOfDay()->timestamp; break; case 'yesterday': $yesterday = Carbon::yesterday(); $last_start_time = $yesterday->startOfDay()->timestamp; $last_end_time = $yesterday->endOfDay()->timestamp; $begain_start_time = $last_start_time - 86400; $begain_end_time = $last_end_time - 86400; $earlier_start_time = $last_start_time - 86400 * 2; $earlier_end_time = $last_end_time - 86400 * 2; break; case 'sevenday': $begain_start_time = $present->subDays(13)->startOfDay()->timestamp; $begain_end_time = $present->addDays(6)->endOfDay()->timestamp; $last_start_time = $present->addDays()->startOfDay()->timestamp; $last_end_time = $present->addDays(6)->endOfDay()->timestamp; $earlier_start_time = $present->subDays(20)->startOfDay()->timestamp; $earlier_end_time = $present->addDays(6)->endOfDay()->timestamp; break; case 'week': $begain_start_time = $present->subWeek()->startOfWeek()->timestamp; $begain_end_time = $present->endOfWeek()->timestamp; $last_start_time = $present->addWeek()->startOfWeek()->timestamp; $last_end_time = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1; $earlier_start_time = $present->subWeek(2)->startOfWeek()->timestamp; $earlier_end_time = $present->endOfWeek()->timestamp; break; case 'thirtyday': $begain_start_time = $present->subDays(59)->startOfDay()->timestamp; $begain_end_time = $present->addDays(29)->endOfDay()->timestamp; $last_start_time = $present->addDays()->startOfDay()->timestamp; $last_end_time = $present->addDays(29)->endOfDay()->timestamp; $earlier_start_time = $present->subDays(89)->startOfDay()->timestamp; $earlier_end_time = $present->addDays(29)->endOfDay()->timestamp; break; case 'month': $begain_start_time = $present->subMonth()->startOfMonth()->timestamp; $begain_end_time = $present->endOfMonth()->timestamp; $last_start_time = $present->addMonth()->startOfMonth()->timestamp; $last_end_time = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1; $earlier_start_time = $present->subMonth(2)->startOfWeek()->timestamp; $earlier_end_time = $present->endOfWeek()->timestamp; break; default: $last_start_time = isset($this->params['start_time']) ? strtotime($this->params['start_time']) : strtotime(date('Y-m-d')); $last_end_time = isset($this->params['end_time']) ? strtotime($this->params['end_time']) : strtotime(date('Y-m-d')) + 86400; $begain_start_time = $last_start_time - ( $last_end_time - $last_start_time ); $begain_end_time = $last_end_time - ( $last_end_time - $last_start_time ); $earlier_start_time = $last_start_time - ( $last_end_time - $last_start_time ) * 2; $earlier_end_time = $last_end_time - ( $last_end_time - $last_start_time ) * 2; } $field = 'sum(visitor_day) as visitor_day, sum(visit_count_day) as visit_count_day, sum(pay_member_day) as pay_member_day,sum(visitor_h5_day) as visitor_h5_day,sum(visitor_weapp_day) as visitor_weapp_day,sum(visitor_app_day) as visitor_app_day'; $earlier_info = $stat_shop_model->getStatSiteByCondition($this->site_id, $field, $earlier_start_time, $earlier_end_time, $store_id)[ 'data' ] ?? []; //上日/月、周.. $begain_info = $stat_shop_model->getStatSiteByCondition($this->site_id, $field, $begain_start_time, $begain_end_time, $store_id)[ 'data' ] ?? []; $begain_data = [ 'visitor_h5_day' => $begain_info[ 'visitor_h5_day' ] ?? 0, 'visitor_weapp_day' => $begain_info[ 'visitor_weapp_day' ] ?? 0, 'visitor_app_day' => $begain_info[ 'visitor_app_day' ] ?? 0, 'visitor_day' => $begain_info[ 'visitor_day' ] ?? 0, 'add_visitor_day' => ( ( $begain_info[ 'visitor_day' ] - $earlier_info[ 'visitor_day' ] ) >= 0 ) ? ( $begain_info[ 'visitor_day' ] - $earlier_info[ 'visitor_day' ] ) : 0, 'visit_count_day' => $begain_info[ 'visit_count_day' ] ?? 0, 'pay_member_day' => $begain_info[ 'pay_member_day' ] ?? 0, 'visitor_pay_percent' => $begain_info[ 'pay_member_day' ] > 0 ? $begain_info[ 'visitor_day' ] > 0 ? sprintf("%.2f", $begain_info[ 'pay_member_day' ] / $begain_info[ 'visitor_day' ] * 100) : $begain_info[ 'pay_member_day' ] : 0, ]; //本日/周/月... $last_info = $stat_shop_model->getStatSiteByCondition($this->site_id, $field, $last_start_time, $last_end_time,$store_id)[ 'data' ] ?? []; $last_data = [ 'visitor_h5_day' => $last_info[ 'visitor_h5_day' ] ?? 0, 'visitor_weapp_day' => $last_info[ 'visitor_weapp_day' ] ?? 0, 'visitor_app_day' => $last_info[ 'visitor_app_day' ] ?? 0, 'visitor_day' => $last_info[ 'visitor_day' ] ?? 0, 'add_visitor_day' => ( ( $last_info[ 'visitor_day' ] - $begain_info[ 'visitor_day' ] ) >= 0 ) ? ( $last_info[ 'visitor_day' ] - $begain_info[ 'visitor_day' ] ) : 0, 'visit_count_day' => $last_info[ 'visit_count_day' ] ?? 0, 'pay_member_day' => $last_info[ 'pay_member_day' ] ?? 0, 'visitor_pay_percent' => $last_info[ 'pay_member_day' ] > 0 ? $last_info[ 'visitor_day' ] > 0 ? sprintf("%.2f", $last_info[ 'pay_member_day' ] / $last_info[ 'visitor_day' ] * 100) : $last_info[ 'pay_member_day' ] : 0, ]; //同比 $rate_data = [ 'visitor_day' => diff_rate($last_data[ 'visitor_day' ], $begain_data[ 'visitor_day' ]), 'add_visitor_day' => diff_rate($last_data[ 'add_visitor_day' ], $begain_data[ 'add_visitor_day' ]), 'visit_count_day' => diff_rate($last_data[ 'visit_count_day' ], $begain_data[ 'visit_count_day' ]), 'pay_member_day' => diff_rate($last_data[ 'pay_member_day' ], $begain_data[ 'pay_member_day' ]), 'visitor_pay_percent' => diff_rate($last_data[ 'visitor_pay_percent' ], $begain_data[ 'visitor_pay_percent' ]), ]; $data = [ 'begain_data' => $begain_data, 'last_data' => $last_data, 'rate_data' => $rate_data, ]; return $this->response($this->success($data)); } /** * 流量数据信息时间统计 */ public function flowDataTimeStat() { $type = isset($this->params['type']) ? $this->params['type'] : 'today'; $field = isset($this->params['field']) ? $this->params['field'] : 'visitor_day'; $store_id = $this->store_id; //时间统计信息 $present = Carbon::now(); $yesterday = Carbon::yesterday(); switch ( $type ) { case 'today': $yesterday = Carbon::yesterday(); $begain_start_time = $yesterday->startOfDay()->timestamp; $begain_end_time = $yesterday->endOfDay()->timestamp; $last_start_time = $present->startOfDay()->timestamp; $last_end_time = $present->endOfDay()->timestamp; break; case 'yesterday': $yesterday = Carbon::yesterday(); $begain_start_time = $yesterday->startOfDay()->timestamp - 84600; $begain_end_time = $yesterday->endOfDay()->timestamp - 86400; $last_start_time = $yesterday->startOfDay()->timestamp; $last_end_time = $yesterday->endOfDay()->timestamp; break; case 'sevenday': $begain_start_time = $present->subDays(13)->startOfDay()->timestamp; $begain_end_time = $present->addDays(6)->endOfDay()->timestamp; $last_start_time = $present->addDays()->startOfDay()->timestamp; $last_end_time = $present->addDays(6)->endOfDay()->timestamp; break; case 'week': $begain_start_time = $present->subWeek()->startOfWeek()->timestamp; $begain_end_time = $present->endOfWeek()->timestamp; $last_start_time = $present->addWeek()->startOfWeek()->timestamp; $last_end_time = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1; break; case 'thirtyday': $begain_start_time = $present->subDays(59)->startOfDay()->timestamp; $begain_end_time = $present->addDays(29)->endOfDay()->timestamp; $last_start_time = $present->addDays()->startOfDay()->timestamp; $last_end_time = $present->addDays(29)->endOfDay()->timestamp; break; case 'month': $begain_start_time = $present->subMonth()->startOfMonth()->timestamp; $begain_end_time = $present->endOfMonth()->timestamp; $last_start_time = $present->addMonth()->startOfMonth()->timestamp; $last_end_time = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1; break; default : $last_start_time = isset($this->params['start_time']) ? strtotime($this->params['start_time']) : strtotime(date('Y-m-d')); $last_end_time = isset($this->params['end_time']) ? strtotime($this->params['end_time']) : strtotime(date('Y-m-d')) + 86400; $begain_start_time = $last_start_time - ( $last_end_time - $last_start_time ); $begain_end_time = $last_end_time - ( $last_end_time - $last_start_time ); } $current_arr = []; $stat_shop_model = new SiteStatModel($this->site_id); $field_refer = 'sum(visitor_day) as visitor_day, sum(visitor_h5_day) as visitor_h5_day, sum(visitor_weapp_day) as visitor_weapp_day, sum(visitor_app_day) as visitor_app_day'; if ($type != 'today' && $type != 'yesterday') { $last_period = CarbonPeriod::create(date('Y-m-d', $last_start_time), date('Y-m-d', $last_end_time)); $last_date_temp = []; foreach ($last_period as $k => $date) { $last_date_temp[ $k ][ 'year' ] = $date->format('Y'); $last_date_temp[ $k ][ 'month' ] = $date->format('m'); $last_date_temp[ $k ][ 'day' ] = $date->format('d'); $last_date_temp[ $k ][ 'date' ] = $date->format('Y-m-d'); } $begain_period = CarbonPeriod::create(date('Y-m-d', $begain_start_time), date('Y-m-d', $begain_end_time)); $begain_date_temp = []; foreach ($begain_period as $k => $date) { $begain_date_temp[ $k ][ 'year' ] = $date->format('Y'); $begain_date_temp[ $k ][ 'month' ] = $date->format('m'); $begain_date_temp[ $k ][ 'day' ] = $date->format('d'); } $visitor_h5_day = []; $visitor_weapp_day = []; $visitor_app_day = []; $last_visitor_day = []; $begain_visitor_day = []; foreach ($last_date_temp as $k => $v) { $last_info = $stat_shop_model->getStatSite($this->site_id, $v[ 'year' ], $v[ 'month' ], $v[ 'day' ], $field_refer, $store_id)[ 'data' ] ?? []; $last_data = [ 'visitor_day' => $last_info[ 'visitor_day' ] ?? 0, 'visitor_h5_day' => $last_info[ 'visitor_h5_day' ] ?? 0, 'visitor_weapp_day' => $last_info[ 'visitor_weapp_day' ] ?? 0, 'visitor_app_day' => $last_info[ 'visitor_app_day' ] ?? 0, ]; $last_visitor_day[ $k ] = $last_data[ 'visitor_day' ]; $visitor_h5_day[ $k ] = $last_data[ 'visitor_h5_day' ]; $visitor_weapp_day[ $k ] = $last_data[ 'visitor_weapp_day' ]; $visitor_app_day[ $k ] = $last_data[ 'visitor_app_day' ]; } foreach ($begain_date_temp as $k => $v) { $begain_info = $stat_shop_model->getStatSite($this->site_id, $v[ 'year' ], $v[ 'month' ], $v[ 'day' ], $field_refer, $store_id)[ 'data' ] ?? []; $last_data = [ 'visitor_day' => $begain_info[ 'visitor_day' ] ?? 0, ]; $begain_visitor_day[ $k ] = $last_data[ 'visitor_day' ]; } $current_arr[ 'laster_visitor_day' ] = implode(',', $last_visitor_day); $current_arr[ 'begain_visitor_day' ] = implode(',', $begain_visitor_day); $current_arr[ 'visitor_h5_day' ] = implode(',', $visitor_h5_day); $current_arr[ 'visitor_weapp_day' ] = implode(',', $visitor_weapp_day); $current_arr[ 'visitor_app_day' ] = implode(',', $visitor_app_day); $current_arr[ 'last_date_temp' ] = implode(',', array_column($last_date_temp, 'date')); } else if ($type == 'today') { switch ( $field ) { case 'visitor_day': $current_arr[ 'laster_visitor_day' ] = $stat_shop_model->getStatSiteDay($this->site_id, 'visitor_day', $present->year, $present->month, $present->day, $store_id)[ 'data' ]; break; default : break; } $current_arr[ $field ] = $stat_shop_model->getStatSiteDay($this->site_id, $field, $present->year, $present->month, $present->day, $store_id)[ 'data' ]; foreach ($current_arr as $k => $v) { foreach ($v as $key => $val) { if (strstr($key, 'hour_') == false) { unset($current_arr[ $k ][ $key ]); } } $current_arr[ $k ] = implode(',', $current_arr[ $k ]); } } else if ($type == 'yesterday') { switch ( $field ) { case 'visitor_day': $current_arr[ 'laster_visitor_day' ] = $stat_shop_model->getStatSiteDay($this->site_id, 'visitor_day', $yesterday->year, $yesterday->month, $yesterday->day, $store_id)[ 'data' ]; break; default : break; } $current_arr[ $field ] = $stat_shop_model->getStatSiteDay($this->site_id, $field, $yesterday->year, $yesterday->month, $yesterday->day, $store_id)[ 'data' ]; foreach ($current_arr as $k => $v) { foreach ($v as $key => $val) { if (strstr($key, 'hour_') == false) { unset($current_arr[ $k ][ $key ]); } } $current_arr[ $k ] = implode(',', $current_arr[ $k ]); } } return $this->response($this->success($current_arr)); } /********************************************************* 流量数据 ***************************************************************/ }