search_arr = input('param.'); //处理搜索时间 if (in_array(request()->action(),array('hotrank','storesales'))){ $this->search_arr = $stat_model->dealwithSearchTime($this->search_arr); //获得系统年份 $year_arr = getSystemYearArr(); //获得系统月份 $month_arr = getSystemMonthArr(); //获得本月的周时间段 $week_arr = getMonthWeekArr($this->search_arr['week']['current_year'], $this->search_arr['week']['current_month']); View::assign('year_arr', $year_arr); View::assign('month_arr', $month_arr); View::assign('week_arr', $week_arr); } View::assign('search_arr', $this->search_arr); //店铺分类 $this->store_class = rkcache('storeclass', true); View::assign('store_class', $this->store_class); } /** * 新增店铺 */ public function newstore(){ //导出excel连接地址 $actionurl = (string)url('Statstore/newstore'); $where = array(); //所属店铺分类 $search_sclass = intval(input('param.search_sclass')); if ($search_sclass > 0){ $where[] = array('storeclass_id','=',$search_sclass);; $actionurl .= "&search_sclass=$search_sclass"; } $field = ' count(*) as allnum '; if(!input('param.search_type')){ $search_type = 'day'; } else{ $search_type = input('param.search_type'); } //初始化时间 //天 if(!input('param.search_time')) { $search_times = date('Y-m-d', TIMESTAMP - 86400); }else { $search_times = input('param.search_time'); } $search_time = strtotime($search_times);//搜索的时间 View::assign('search_time',$search_times); //周 if(!input('param.search_time_year')) { $search_time_year = date('Y', TIMESTAMP); }else { $search_time_year = input('param.search_time_year'); } if(!input('param.search_time_month')) { $search_time_month = date('m', TIMESTAMP); }else { $search_time_month = input('param.search_time_month'); } if(!input('param.search_time_week')) { $search_time_week = implode('|', getWeek_SdateAndEdate(TIMESTAMP)); }else { $search_time_week = input('param.search_time_week'); } $current_year =$search_time_year; $current_month =$search_time_month; $current_week = $search_time_week; $year_arr = getSystemYearArr(); $month_arr = getSystemMonthArr(); $week_arr = getMonthWeekArr($current_year, $current_month); View::assign('current_year', $current_year); View::assign('current_month', $current_month); View::assign('current_week', $current_week); View::assign('year_arr', $year_arr); View::assign('month_arr', $month_arr); View::assign('week_arr', $week_arr); $stat_model = model('stat'); $statlist = array();//统计数据列表 if($search_type == 'day'){ //构造横轴数据 for($i=0; $i<24; $i++){ //统计图数据 $curr_arr[$i] = 0;//今天 $up_arr[$i] = 0;//昨天 //统计表数据 $uplist_arr[$i]['timetext'] = $i; $currlist_arr[$i]['timetext'] = $i; //方便搜索会员列表,计算开始时间和结束时间 $currlist_arr[$i]['stime'] = $search_time+$i*3600; $currlist_arr[$i]['etime'] = $currlist_arr[$i]['stime']+3600; $uplist_arr[$i]['val'] = 0; $currlist_arr[$i]['val'] = 0; //横轴 $stat_arr['xAxis']['categories'][] = "$i"; } $stime = $search_time - 86400;//昨天0点 $etime = $search_time + 86400 - 1;//今天24点 $today_day = @date('d', $search_time);//今天日期 $yesterday_day = @date('d', $stime);//昨天日期 $where[] = array('store_addtime','between',array($stime,$etime)); $field .= ' ,DAY(FROM_UNIXTIME(store_addtime)) as dayval,HOUR(FROM_UNIXTIME(store_addtime)) as hourval '; $memberlist = $stat_model->getNewStoreStatList($where, $field, 0, '', 0, 'dayval,dayval'); if($memberlist){ foreach($memberlist as $k => $v){ if($today_day == $v['dayval']){ $curr_arr[$v['hourval']] = intval($v['allnum']); $currlist_arr[$v['hourval']]['val'] = intval($v['allnum']); } if($yesterday_day == $v['dayval']){ $up_arr[$v['hourval']] = intval($v['allnum']); $uplist_arr[$v['hourval']]['val'] = intval($v['allnum']); } } } $stat_arr['series'][0]['name'] = lang('yestoday'); $stat_arr['series'][0]['data'] = array_values($up_arr); $stat_arr['series'][1]['name'] = lang('today'); $stat_arr['series'][1]['data'] = array_values($curr_arr); //统计数据标题 $statlist['headertitle'] = array(lang('hour'),lang('yestoday'),lang('today'),lang('compare_to')); View::assign('actionurl',$actionurl.'&search_type=day&search_time='.date('Y-m-d',$search_time)); } if($search_type == 'week'){ $current_weekarr = explode('|', $current_week); $stime = strtotime($current_weekarr[0])-86400*7; $etime = strtotime($current_weekarr[1])+86400-1; $up_week = @date('W', $stime);//上周 $curr_week = @date('W', $etime);//本周 //构造横轴数据 for($i=1; $i<=7; $i++){ //统计图数据 $up_arr[$i] = 0; $curr_arr[$i] = 0; $tmp_weekarr = getSystemWeekArr(); //统计表数据 $uplist_arr[$i]['timetext'] = $tmp_weekarr[$i]; $currlist_arr[$i]['timetext'] = $tmp_weekarr[$i]; //方便搜索会员列表,计算开始时间和结束时间 $currlist_arr[$i]['stime'] = strtotime($current_weekarr[0])+($i-1)*86400; $currlist_arr[$i]['etime'] = $currlist_arr[$i]['stime']+86400 - 1; $uplist_arr[$i]['val'] = 0; $currlist_arr[$i]['val'] = 0; //横轴 $stat_arr['xAxis']['categories'][] = $tmp_weekarr[$i]; unset($tmp_weekarr); } $where[] = array('store_addtime','between',array($stime,$etime)); $field .= ',WEEKOFYEAR(FROM_UNIXTIME(store_addtime)) as weekval,WEEKDAY(FROM_UNIXTIME(store_addtime))+1 as dayofweekval '; $memberlist = $stat_model->getNewStoreStatList($where, $field, 0, '', 0, 'weekval,dayofweekval'); if($memberlist){ foreach($memberlist as $k=>$v){ if ($up_week == $v['weekval']){ $up_arr[$v['dayofweekval']] = intval($v['allnum']); $uplist_arr[$v['dayofweekval']]['val'] = intval($v['allnum']); } if ($curr_week == $v['weekval']){ $curr_arr[$v['dayofweekval']] = intval($v['allnum']); $currlist_arr[$v['dayofweekval']]['val'] = intval($v['allnum']); } } } $stat_arr['series'][0]['name'] = lang('last_week'); $stat_arr['series'][0]['data'] = array_values($up_arr); $stat_arr['series'][1]['name'] = lang('this_week'); $stat_arr['series'][1]['data'] = array_values($curr_arr); //统计数据标题 $statlist['headertitle'] = array(lang('week'),lang('last_week'),lang('this_week'),lang('compare_to')); View::assign('actionurl',$actionurl.'&search_type=week&search_time_year='.$current_year.'&search_time_month='.$current_month.'&search_time_week='.$current_week); } if($search_type == 'month'){ $stime = strtotime($current_year.'-'.$current_month."-01 -1 month"); $etime = getMonthLastDay($current_year,$current_month)+86400-1; $up_month = date('m',$stime); $curr_month = date('m',$etime); //计算横轴的最大量(由于每个月的天数不同) $up_dayofmonth = date('t',$stime); $curr_dayofmonth = date('t',$etime); $x_max = $up_dayofmonth > $curr_dayofmonth ? $up_dayofmonth : $curr_dayofmonth; //构造横轴数据 for($i=1; $i<=$x_max; $i++){ //统计图数据 $up_arr[$i] = 0; $curr_arr[$i] = 0; //统计表数据 $uplist_arr[$i]['timetext'] = $i; $currlist_arr[$i]['timetext'] = $i; //方便搜索会员列表,计算开始时间和结束时间 $currlist_arr[$i]['stime'] = strtotime($current_year.'-'.$current_month."-01")+($i-1)*86400; $currlist_arr[$i]['etime'] = $currlist_arr[$i]['stime']+86400 - 1; $uplist_arr[$i]['val'] = 0; $currlist_arr[$i]['val'] = 0; //横轴 $stat_arr['xAxis']['categories'][] = $i; } $where[] = array('store_addtime','between',array($stime,$etime)); $field .= ',MONTH(FROM_UNIXTIME(store_addtime)) as monthval,day(FROM_UNIXTIME(store_addtime)) as dayval '; $memberlist = $stat_model->getNewStoreStatList($where, $field, 0, '', 0,'monthval,dayval'); if($memberlist){ foreach($memberlist as $k=>$v){ if ($up_month == $v['monthval']){ $up_arr[$v['dayval']] = intval($v['allnum']); $uplist_arr[$v['dayval']]['val'] = intval($v['allnum']); } if ($curr_month == $v['monthval']){ $curr_arr[$v['dayval']] = intval($v['allnum']); $currlist_arr[$v['dayval']]['val'] = intval($v['allnum']); } } } $stat_arr['series'][0]['name'] = lang('last_month'); $stat_arr['series'][0]['data'] = array_values($up_arr); $stat_arr['series'][1]['name'] = lang('this_month'); $stat_arr['series'][1]['data'] = array_values($curr_arr); //统计数据标题 $statlist['headertitle'] = array(lang('date'),lang('last_month'),lang('this_month'),lang('compare_to')); View::assign('actionurl',$actionurl.'&search_type=month&search_time_year='.$current_year.'&search_time_month='.$current_month); } //计算同比 foreach ((array)$currlist_arr as $k=>$v){ $tmp = array(); $tmp['seartime'] = $v['stime'].'|'.$v['etime']; $tmp['timetext'] = $v['timetext']; $tmp['currentdata'] = $v['val']; $tmp['updata'] = $uplist_arr[$k]['val']; $tmp['tbrate'] = getTb($tmp['updata'], $tmp['currentdata']); $statlist['data'][] = $tmp; } //导出Excel if (input('param.exporttype') == 'excel'){ //导出Excel $excel_obj = new \excel\Excel(); $excel_data = array(); //设置样式 $excel_obj->setStyle(array('id'=>'s_title','Font'=>array('FontName'=>'宋体','Size'=>'12','Bold'=>'1'))); //header foreach ($statlist['headertitle'] as $v){ $excel_data[0][] = array('styleid'=>'s_title','data'=>$v); } //data foreach ($statlist['data'] as $k=>$v){ $excel_data[$k+1][] = array('data'=>$v['timetext']); $excel_data[$k+1][] = array('format'=>'Number','data'=>$v['updata']); $excel_data[$k+1][] = array('format'=>'Number','data'=>$v['currentdata']); $excel_data[$k+1][] = array('data'=>$v['tbrate']); } $excel_data = $excel_obj->charset($excel_data,CHARSET); $excel_obj->addArray($excel_data); $excel_obj->addWorksheet($excel_obj->charset(lang('add_store_statis'),CHARSET)); $excel_obj->generateXML($excel_obj->charset(lang('add_store_statis'),CHARSET).date('Y-m-d-H',TIMESTAMP)); exit(); } else { //得到统计图数据 $stat_arr['title'] = lang('add_store_statis'); $stat_arr['yAxis'] = lang('add_store_number'); $stat_json = getStatData_LineLabels($stat_arr); View::assign('stat_json',$stat_json); View::assign('statlist',$statlist); $this->setAdminCurItem('newstore'); return View::fetch('stat_newstore'); } } /** * 热卖排行 */ public function hotrank(){ if(!isset($this->search_arr['search_type'])){ $this->search_arr['search_type'] = 'day'; } $stat_model = model('stat'); //获得搜索的开始时间和结束时间 $searchtime_arr = $stat_model->getStarttimeAndEndtime($this->search_arr); View::assign('searchtime',implode('|',$searchtime_arr)); //周 if(!input('param.search_time_year')) { $search_time_year = date('Y', TIMESTAMP); }else { $search_time_year = input('param.search_time_year'); } if(!input('param.search_time_month')) { $search_time_month = date('m', TIMESTAMP); }else { $search_time_month = input('param.search_time_month'); } if(!input('param.search_time_week')) { $search_time_week = implode('|', getWeek_SdateAndEdate(TIMESTAMP)); }else { $search_time_week = input('param.search_time_week'); } $current_year =$search_time_year; $current_month =$search_time_month; $current_week = $search_time_week; View::assign('current_year', $current_year); View::assign('current_month', $current_month); View::assign('current_week', $current_week); $this->setAdminCurItem('hotrank'); return View::fetch('store_hotrank'); } /** * 热卖排行列表 */ public function hotrank_list(){ $datanum = 30; $stat_model = model('stat'); $type = input('param.type'); switch ($type){ case 'ordernum': $sort_text = lang('statstore_ordernum'); break; default: $type = 'orderamount'; $sort_text = lang('statstore_orderamount'); break; } $where = array(); $searchtime_arr_tmp = explode('|',$this->search_arr['t']); foreach ((array)$searchtime_arr_tmp as $k=>$v){ $searchtime_arr[] = intval($v); } //店铺分类 $search_sclass = intval(input('param.search_sclass')); if ($search_sclass){ $where[] = array('storeclass_id','=',$search_sclass); } $where[] = array('order_isvalid','=',1);//计入统计的有效订单 $where[] = array('order_add_time','between',$searchtime_arr); //查询统计数据 $field = ' store_id,store_name '; switch ($type){ case 'ordernum': $field .= ' ,COUNT(*) as ordernum '; $orderby = 'ordernum desc'; break; default: $type = 'orderamount'; $field .= ' ,SUM(order_amount) as orderamount '; $orderby = 'orderamount desc'; break; } $orderby .= ',store_id'; $statlist = $stat_model->statByStatorder($where, $field, 0, $datanum, $orderby, 'store_id'); foreach ((array)$statlist as $k=>$v){ $statlist[$k]['sort'] = $k+1; } /** * 飙升榜 */ $soaring_statlist = array();//飙升榜数组 //查询期间产生订单的店铺数 $where = array(); //店铺分类 $search_sclass = intval(input('param.search_sclass')); if ($search_sclass){ $where[] = array('storeclass_id','=',$search_sclass); } $where[] = array('order_isvalid','=',1);//计入统计的有效订单 $where[] = array('order_add_time','between',$searchtime_arr); $field = 'COUNT(*) as countnum'; $countnum = $stat_model->getoneByStatorder($where, $field); $countnum = $countnum['countnum']; if ($countnum > 0){ $store_arr = array(); $field = 'store_id,store_name,order_amount'; for ($i=0; $i<$countnum; $i+=1000){//由于数据库底层的限制,所以每次查询1000条 $order_list = array(); $order_list = Db::name('statorder')->field($field)->where($where)->page($i,1000)->order('order_id')->select()->toArray(); foreach ((array)$order_list as $k=>$v){ if(!isset($store_arr[$v['store_id']])){ $store_arr[$v['store_id']]=array(); $store_arr[$v['store_id']]['orderamount'] = 0; $store_arr[$v['store_id']]['ordernum'] = 0; } $store_arr[$v['store_id']]['orderamount'] = $store_arr[$v['store_id']]['orderamount'] + $v['order_amount']; $store_arr[$v['store_id']]['ordernum'] = intval($store_arr[$v['store_id']]['ordernum']) + 1; $store_arr[$v['store_id']]['store_name'] = $v['store_name']; $store_arr[$v['store_id']]['store_id'] = $v['store_id']; } } //查询同一时间周期相比的环比数值 $where = array(); $stime = $searchtime_arr[0] - ($searchtime_arr[1] - $searchtime_arr[0]) - 1; $etime = $searchtime_arr[0] - 1; //店铺分类 $search_sclass = intval($_REQUEST['search_sclass']); if ($search_sclass){ $where[] = array('storeclass_id','=',$search_sclass); } $where[] = array('order_isvalid','=',1);//计入统计的有效订单 $where[] = array('order_add_time','between',array($stime,$etime)); $field = 'COUNT(*) as up_countnum'; $up_countnum = $stat_model->getoneByStatorder($where, $field); $up_countnum = $up_countnum['up_countnum']; $up_store_arr = array(); if ($up_countnum > 0){ $field = 'store_id,store_name,order_amount'; for ($i=0; $i<$up_countnum; $i+=1000){//由于数据库底层的限制,所以每次查询1000条 $order_list = array(); $order_list = Db::name('statorder')->field($field)->where($where)->page($i,1000)->order('store_id')->select()->toArray(); foreach ((array)$order_list as $k=>$v){ if(!isset($up_store_arr[$v['store_id']])){ $up_store_arr[$v['store_id']]=array('orderamount'=>0,'ordernum'=>0); } $up_store_arr[$v['store_id']]['orderamount'] = $up_store_arr[$v['store_id']]['orderamount'] + $v['order_amount']; $up_store_arr[$v['store_id']]['ordernum'] = intval($up_store_arr[$v['store_id']]['ordernum']) + 1; } } } //计算环比飙升数值 $soaring_arr = array(); foreach ((array)$store_arr as $k=>$v){ if (isset($up_store_arr[$k][$type]) && $up_store_arr[$k][$type] > 0){//上期数值大于0,则计算飙升值,否则不计入统计 $soaring_arr[$k] = round((($v[$type]-$up_store_arr[$k][$type])/$up_store_arr[$k][$type]*100),2); } } arsort($soaring_arr);//降序排列数组 $i = 1; //取出前10名飙升店铺 foreach ((array)$soaring_arr as $k=>$v){ if ($i <= $datanum){ $tmp = array(); $tmp['sort'] = $i; $tmp['store_name'] = $store_arr[$k]['store_name']; $tmp['store_id'] = $store_arr[$k]['store_id']; $tmp['hb'] = $v; switch ($type){ case 'ordernum': $tmp['ordernum'] = $store_arr[$k]['ordernum']; break; case 'orderamount': $tmp['orderamount'] = ds_price_format($store_arr[$k]['orderamount']); break; } $soaring_statlist[] = $tmp; $i++; } else { break; } } } View::assign('soaring_statlist',$soaring_statlist); View::assign('statlist',$statlist); View::assign('sort_text',$sort_text); View::assign('stat_field',$type); echo View::fetch('store_hotrank_list'); } /** * 店铺等级 */ public function degree(){ $where = array(); $field = ' count(*) as allnum,grade_id '; $stat_model = model('stat'); //查询店铺分类下的店铺 $search_sclass = input('param.search_sclass'); if ($search_sclass > 0){ $where[] = array('storeclass_id','=',$search_sclass); } $storelist = $stat_model->getNewStoreStatList($where, $field, 0, '', 0, 'grade_id'); $sd_list = $stat_model->getStoreDegree(); $statlist['headertitle'] = array(); $statlist['data'] = array(); //处理数组数据 if(!empty($storelist)){ foreach ($storelist as $k=>$v){ $storelist[$k]['p_name'] = isset($sd_list[$v['grade_id']]) > 0 ? $sd_list[$v['grade_id']]:lang('ds_ownshop'); $storelist[$k]['allnum'] = intval($v['allnum']); $statlist['headertitle'][] = isset($sd_list[$v['grade_id']]) > 0?$sd_list[$v['grade_id']]:lang('ds_ownshop'); $statlist['data'][] = $v['allnum']; } $data = array( 'title'=>lang('store_grade_statis'), 'name'=>lang('store_number'), 'label_show'=>true, 'series'=>$storelist ); View::assign('stat_json',getStatData_Pie($data)); } $this->setAdminCurItem('degree'); return View::fetch('stat_storedegree'); } /** * 查看店铺列表 */ public function showstore(){ $stat_model = model('stat'); $where = array(); if (in_array(input('type'),array('newbyday','newbyweek','newbymonth','storearea'))){ $actionurl = (string)url('Statstore/showstore',['type'=>input('type'),'t'=>$this->search_arr['t']]); $searchtime_arr_tmp = explode('|',$this->search_arr['t']); foreach ((array)$searchtime_arr_tmp as $k=>$v){ $searchtime_arr[] = intval($v); } $where[] = array('store_addtime','between',$searchtime_arr); } //商品分类 $storeclass_id = intval(input('scid')); if ($storeclass_id > 0){ $where[] = array('storeclass_id','=',$storeclass_id); $actionurl .="&scid=$storeclass_id"; } //省份 if (input('provid')){ $province_id = intval(input('param.provid')); $where[] = array('province_id','=',$province_id); $actionurl .="&provid=$province_id"; } if (input('exporttype') == 'excel'){ $store_list = $stat_model->getNewStoreStatList($where); } else { $store_list = $stat_model->getNewStoreStatList($where, '', 10); } //店铺等级 $storegrade_model = model('storegrade'); $grade_list = $storegrade_model->getStoregradeList(); if (!empty($grade_list)){ $search_grade_list = array(); foreach ($grade_list as $k => $v){ $search_grade_list[$v['storegrade_id']] = $v['storegrade_name']; } } //导出Excel if (input('exporttype') == 'excel'){ //导出Excel $excel_obj = new \excel\Excel(); $excel_data = array(); //设置样式 $excel_obj->setStyle(array('id'=>'s_title','Font'=>array('FontName'=>'宋体','Size'=>'12','Bold'=>'1'))); //header $excel_data[0][] = array('styleid'=>'s_title','data'=>lang('ds_store_name')); $excel_data[0][] = array('styleid'=>'s_title','data'=>lang('ds_member_name')); $excel_data[0][] = array('styleid'=>'s_title','data'=>lang('ds_seller_name')); $excel_data[0][] = array('styleid'=>'s_title','data'=>lang('stat_storedegree')); $excel_data[0][] = array('styleid'=>'s_title','data'=>lang('statstore_expire')); $excel_data[0][] = array('styleid'=>'s_title','data'=>lang('statstore_addtime')); //data foreach ($store_list as $k=>$v){ $excel_data[$k+1][] = array('data'=>$v['store_name']); $excel_data[$k+1][] = array('data'=>$v['member_name']); $excel_data[$k+1][] = array('data'=>$v['seller_name']); $excel_data[$k+1][] = array('data'=>$search_grade_list[$v['grade_id']]); $excel_data[$k+1][] = array('data'=>$v['store_endtime']?date('Y-m-d', $v['store_endtime']):lang('state_no_tile_limit')); $excel_data[$k+1][] = array('data'=>date('Y-m-d', $v['store_addtime'])); } $excel_data = $excel_obj->charset($excel_data,CHARSET); $excel_obj->addArray($excel_data); $excel_obj->addWorksheet($excel_obj->charset(lang('ds_new').lang('ds_store'),CHARSET)); $excel_obj->generateXML($excel_obj->charset(lang('ds_new').lang('ds_store'),CHARSET).date('Y-m-d-H',TIMESTAMP)); exit(); } View::assign('search_grade_list', $search_grade_list); View::assign('actionurl',$actionurl); View::assign('store_list',$store_list); View::assign('show_page',$stat_model->page_info->render()); $this->setAdminCurItem('showstore'); return View::fetch('storelist'); } /** * 销售统计 */ public function storesales(){ if(!isset($this->search_arr['search_type'])){ $this->search_arr['search_type'] = 'day'; } $stat_model = model('stat'); //获得搜索的开始时间和结束时间 $searchtime_arr = $stat_model->getStarttimeAndEndtime($this->search_arr); View::assign('searchtime',implode('|',$searchtime_arr)); //周 if(!input('param.search_time_year')) { $search_time_year = date('Y', TIMESTAMP); }else { $search_time_year = input('param.search_time_year'); } if(!input('param.search_time_month')) { $search_time_month = date('m', TIMESTAMP); }else { $search_time_month = input('param.search_time_month'); } if(!input('param.search_time_week')) { $search_time_week = implode('|', getWeek_SdateAndEdate(TIMESTAMP)); }else { $search_time_week = input('param.search_time_week'); } $current_year =$search_time_year; $current_month =$search_time_month; $current_week = $search_time_week; View::assign('current_year', $current_year); View::assign('current_month', $current_month); View::assign('current_week', $current_week); $this->setAdminCurItem('storesales'); return View::fetch('stat_store_sales'); } /** * 店铺销售统计列表 */ public function storesales_list(){ $stat_model = model('stat'); $searchtime_arr_tmp = explode('|',$this->search_arr['t']); foreach ((array)$searchtime_arr_tmp as $k=>$v){ $searchtime_arr[] = intval($v); } $where = array(); $where[] = array('order_isvalid','=',1);//计入统计的有效订单 $where[] = array('order_add_time','between',$searchtime_arr); //店铺分类 $search_sclass = intval(input('param.search_sclass')); if ($search_sclass){ $where[]=array('storeclass_id','=',$search_sclass); } //店铺名称 $where[]=array('store_name','like',"%".input('param.search_sname')."%"); //查询总条数 $count_arr = $stat_model->getoneByStatorder($where, 'COUNT(DISTINCT store_id) as countnum'); $countnum = intval($count_arr['countnum']); //列表字段 $field = " store_id,store_name,SUM(order_amount) as orderamount, COUNT(*) as ordernum, COUNT(DISTINCT buyer_id) as membernum"; //排序 $orderby_arr = array('membernum asc','membernum desc','ordernum asc','ordernum desc','orderamount asc','orderamount desc'); if (!isset($this->search_arr['orderby'])||!in_array(trim($this->search_arr['orderby']),$orderby_arr)){ $this->search_arr['orderby'] = 'membernum desc'; } $orderby = trim($this->search_arr['orderby']).',store_id asc'; if (isset($this->search_arr['exporttype'])&&$this->search_arr['exporttype'] == 'excel'){ $statlist = $stat_model->statByStatorder($where, $field, 0, 0, $orderby, 'store_id'); } else { $statlist = $stat_model->statByStatorder($where, $field, 20, 0, $orderby, 'store_id'); foreach ((array)$statlist as $k=>$v){ $v['view'] = "走势图"; $statlist[$k] = $v; } } //列表header $statheader = array(); $statheader[] = array('text'=>lang('ds_store_name'),'key'=>'store_name'); $statheader[] = array('text'=>lang('membernum'),'key'=>'membernum','isorder'=>1); $statheader[] = array('text'=>lang('statstore_ordernum'),'key'=>'ordernum','isorder'=>1); $statheader[] = array('text'=>lang('statstore_orderamount'),'key'=>'orderamount','isorder'=>1); //导出Excel if (isset($this->search_arr['exporttype'])&&$this->search_arr['exporttype'] == 'excel'){ //导出Excel $excel_obj = new \excel\Excel(); $excel_data = array(); //设置样式 $excel_obj->setStyle(array('id'=>'s_title','Font'=>array('FontName'=>'宋体','Size'=>'12','Bold'=>'1'))); //header foreach ($statheader as $k=>$v){ $excel_data[0][] = array('styleid'=>'s_title','data'=>$v['text']); } //data foreach ($statlist as $k=>$v){ foreach ($statheader as $h_k=>$h_v){ $excel_data[$k+1][] = array('data'=>$v[$h_v['key']]); } } $excel_data = $excel_obj->charset($excel_data,CHARSET); $excel_obj->addArray($excel_data); $excel_obj->addWorksheet($excel_obj->charset(lang('store_sale_statis'),CHARSET)); $excel_obj->generateXML($excel_obj->charset(lang('store_sale_statis'),CHARSET).date('Y-m-d-H',TIMESTAMP)); exit(); } View::assign('statlist',$statlist); View::assign('statheader',$statheader); View::assign('orderby',$this->search_arr['orderby']); View::assign('actionurl',(string)url('Statstore/storesales_list',['t'=>$this->search_arr['t'],'search_sclass'=>$search_sclass,'search_sname'=>input('param.search_sname')])); View::assign('show_page',$stat_model->page_info->render()); echo View::fetch('stat_listandorder'); } /** * 销售走势 */ public function storesales_trends(){ $storeid = intval(input('param.storeid')); if ($storeid <= 0){ View::assign('stat_error',lang('stat_error')); return View::fetch('salestrends'); exit(); } $search_type=input('param.search_type'); if (!$search_type){ $search_type= 'day'; } $stat_model = model('stat'); $where = array(); $where[] = array('store_id','=',$storeid); $searchtime_arr_tmp = explode('|',$this->search_arr['t']); foreach ((array)$searchtime_arr_tmp as $k=>$v){ $searchtime_arr[] = intval($v); } $where[] = array('order_isvalid','=',1);//计入统计的有效订单 $where[] = array('order_add_time','between',$searchtime_arr); $field = " store_id,store_name,SUM(order_amount) as orderamount, COUNT(*) as ordernum, COUNT(DISTINCT buyer_id) as membernum"; $stat_arr = array('orderamount'=>array(),'ordernum'=>array(),'membernum'=>array()); $statlist = array(); if($search_type == 'day'){ //构造横轴数据 for($i=0; $i<24; $i++){ //横轴 foreach ($stat_arr as $k=>$v){ $stat_arr[$k]['xAxis']['categories'][] = "$i"; $statlist[$k][$i] = 0; } } $field .= ' ,HOUR(FROM_UNIXTIME(order_add_time)) as timeval '; } if($search_type == 'week'){ //构造横轴数据 for($i=1; $i<=7; $i++){ $tmp_weekarr = getSystemWeekArr(); //横轴 foreach ($stat_arr as $k=>$v){ $stat_arr[$k]['xAxis']['categories'][] = $tmp_weekarr[$i]; $statlist[$k][$i] = 0; } unset($tmp_weekarr); } $field .= ' ,WEEKDAY(FROM_UNIXTIME(order_add_time))+1 as timeval '; } if($search_type == 'month'){ //计算横轴的最大量(由于每个月的天数不同) $dayofmonth = date('t',$searchtime_arr[0]); //构造横轴数据 for($i=1; $i<=$dayofmonth; $i++){ //横轴 foreach ($stat_arr as $k=>$v){ $stat_arr[$k]['xAxis']['categories'][] = $i; $statlist[$k][$i] = 0; } } $field .= ' ,day(FROM_UNIXTIME(order_add_time)) as timeval '; } //查询数据 $statlist_tmp = $stat_model->statByStatorder($where, $field, 0, ''); //整理统计数组 $storename = ''; if($statlist_tmp){ foreach($statlist_tmp as $k => $v){ $storename = $v['store_name']; foreach ($stat_arr as $t_k=>$t_v){ if ($k == 'orderamount'){ $statlist[$t_k][$v['timeval']] = round($v[$t_k],2); } else { $statlist[$t_k][$v['timeval']] = intval($v[$t_k]); } } } } foreach ($stat_arr as $k=>$v){ $stat_arr[$k]['legend']['enabled'] = false; switch ($k){ case 'orderamount': $caption = lang('statstore_orderamount'); break; case 'ordernum': $caption = lang('statstore_ordernum'); break; default: $caption = lang('membernum'); break; } $stat_arr[$k]['series'][0]['name'] = $caption; $stat_arr[$k]['series'][0]['data'] = array_values($statlist[$k]); $stat_arr[$k]['title'] = $caption.lang('sale_trend'); $stat_arr[$k]['yAxis'] = $caption; //得到统计图数据 $stat_json[$k] = getStatData_LineLabels($stat_arr[$k]); } View::assign('storename',$storename); View::assign('stat_json',$stat_json); echo View::fetch('store_salestrends'); } /** * 地区分布 */ public function storearea(){ $stat_model = model('stat'); //获得搜索的开始时间和结束时间 $searchtime_arr = $stat_model->getStarttimeAndEndtime($this->search_arr); $where = array(); if (trim(input('param.search_time'))){ $where[]=array('store_addtime','<=',strtotime(input('param.search_time'))); } $search_sclass = intval(input('param.search_sclass')); if ($search_sclass > 0){ $where[]=array('storeclass_id','=',$search_sclass); } $field = ' region_id, COUNT(*) as storenum '; $statlist_tmp = $stat_model->statByStore($where, $field, 'region_id', 'region_id'); // 地区 $province_array = model('area')->getTopLevelAreas(); //地图显示等级数组 $level_arr = array(array(1,2,3),array(4,5,6),array(7,8,9),array(10,11,12)); $statlist = array(); $temp_list=array(); foreach ((array)$statlist_tmp as $k=>$v){ $v['level'] = 4;//排名 foreach ($level_arr as $lk=>$lv){ if (in_array($k+1,$lv)){ $v['level'] = $lk;//排名 } } //获取该地区的省 if($v['region_id']){ if(!isset($temp_list[$v['region_id']])){ $temp=Db::name('area')->where('area_id='.$v['region_id'])->value('area_parent_id'); if($temp){ $temp_list[$v['region_id']]=$temp; }else{ $temp_list[$v['region_id']]=$v['region_id']; } $index=0; while($temp && $index<4){ $temp_list[$v['region_id']]=$temp; $temp_0=$temp; $temp=Db::name('area')->where('area_id='.$temp)->value('area_parent_id'); if($temp){ $temp_list[$temp_0]=$temp; }else{ $temp_list[$temp_0]=$temp_0; } $index++; } } $province_id = $temp_list[$v['region_id']]; }else{ $province_id=0; } $v['sort'] = $k+1; $v['provincename'] = isset($province_array[$province_id]) ? $province_array[$province_id] : lang('other'); if(!isset($statlist[$province_id])){ $statlist[$province_id] = $v; }else{ $statlist[$province_id]['storenum'] += $v['storenum']; } } $stat_arr = array(); foreach ((array)$province_array as $k=>$v){ if (isset($statlist[$k])){ $stat_arr[] = array('cha'=>$k,'name'=>$v,'des'=>",店铺量:{$statlist[$k]['storenum']}",'level'=>$statlist[$k]['level']); } else { $stat_arr[] = array('cha'=>$k,'name'=>$v,'des'=>',无订单数据','level'=>4); } } $stat_json = getStatData_Map($stat_arr); View::assign('stat_json',$stat_json); View::assign('statlist',$statlist); $actionurl = (string)url('Statstore/storearea'); if (trim(input('param.search_time'))){ $actionurl = $actionurl.'&t=0|'.strtotime(input('param.search_time')); } if ($search_sclass > 0){ $actionurl .= "&scid=$search_sclass"; } View::assign('actionurl',$actionurl); $this->setAdminCurItem('storearea'); return View::fetch('stat_storearea'); } protected function getAdminItemList() { $menu_array = array( array('name'=>'newstore','text'=>lang('stat_newstore'),'url'=>(string)url('Statstore/newstore')), array('name'=>'hotrank','text'=>lang('stat_storehotrank'),'url'=>(string)url('Statstore/hotrank')), array('name'=>'storesales','text'=>lang('stat_storesales'),'url'=>(string)url('Statstore/storesales')), array('name'=>'degree','text'=>lang('stat_storedegree'),'url'=>(string)url('Statstore/degree')), array('name'=>'storearea','text'=>lang('stat_storearea'),'url'=>(string)url('Statstore/storearea')), ); return $menu_array; } }