field('id,title')->select(); //列表 $list = db('novel')->where($where)->order('allvisit desc')->paginate(10,false,['query' => request()->param(),]); $page = $list->render(); $arrlist = $list->toArray(); $arrlist = $arrlist['data']; foreach($arrlist as $k=>$v){ //分类 $arrlist[$k]['category'] = db('category')->where('id',$v['category_id'])->value('title'); //今日充值次数 $arrlist[$k]['day_count'] = db('order')->where(array( 'articleid'=>$v['id'], 'status'=>1 ))->where('iscontrol',0)->whereTime('create_time', 'today')->count('id'); //今日充值 $arrlist[$k]['day'] = db('order')->where(array( 'articleid'=>$v['id'], 'status'=>1 ))->where('iscontrol',0)->whereTime('create_time', 'today')->sum('money'); $arrlist[$k]['day'] = $arrlist[$k]['day']?$arrlist[$k]['day']:0; //昨日充值次数 $arrlist[$k]['zday_count'] = db('order')->where(array( 'articleid'=>$v['id'], 'status'=>1 ))->where('iscontrol',0)->whereTime('create_time', 'yesterday')->count('id'); //昨日充值 $arrlist[$k]['zday'] = db('order')->where(array( 'articleid'=>$v['id'], 'status'=>1 ))->where('iscontrol',0)->whereTime('create_time', 'yesterday')->sum('money'); $arrlist[$k]['zday'] = $arrlist[$k]['zday']?$arrlist[$k]['zday']:0; //总充值次数 $arrlist[$k]['money_count'] = db('order')->where(array( 'articleid'=>$v['id'], 'status'=>1 ))->where('iscontrol',0)->count('id'); //总充值 $arrlist[$k]['money'] = db('order')->where(array( 'articleid'=>$v['id'], 'status'=>1 ))->where('iscontrol',0)->where($timewh)->sum('money'); $arrlist[$k]['money'] = $arrlist[$k]['money']?$arrlist[$k]['money']:0; } $list = $arrlist; $list = $this->array_sort($list,'day', 'desc'); $data = array( 'list'=>$list, 'page'=>$page, 'printime'=>empty($get['printime'])?'':date('Y-m-d H:i:s',$get['printime']), 'oftime'=>empty($get['oftime'])?'':date('Y-m-d H:i:s',$get['oftime']), 'category_list'=>$category_list, 'wid'=>empty($wid)?'':$wid, 'wbkname'=>empty($wbkname)?'':$wbkname, 'booknumber'=>empty($booknumber)?'':$booknumber, 'sex'=>$channel ); $this->assign($data); $this->setMeta('作品管理'); return $this->fetch('index'); } //充值留存分析 public function analyze(){ $id = input('id'); $date = input('date'); $data = db('history_read')->where('articleid',$id)->find(); if($data){ $starttime = strtotime( date("Y-m-d") ); //今日凌晨 $endtime = time(); //当前时间 if(empty($date)){ $date = 1; } if($date == 2){ $starttime = strtotime( date("Y-m-d",strtotime("-1 day")) ); //昨日凌晨 $endtime = strtotime( date("Y-m-d") ); //今日凌晨 } if($date == 3){ $starttime = 946656000; } $data['seenum'] = db('history_read') ->where('articleid',$id) ->whereTime('create_time', 'between', [$starttime,$endtime]) ->count('distinct(uid)'); $data['subscribe'] = db('subscription') ->where('articleid',$id) ->whereTime('create_time', 'between', [$starttime,$endtime]) ->sum('price'); $data['onenum'] = db('order') ->where('articleid',$id) ->where('status',1) ->where('is_complex',1) ->where('iscontrol',0) ->whereTime('create_time', 'between', [$starttime,$endtime]) ->count('distinct(uid)'); $data['onemoney'] = db('order') ->where('articleid',$id) ->where('status',1) ->where('is_complex',1) ->where('iscontrol',0) ->whereTime('create_time', 'between', [$starttime,$endtime]) ->sum('money'); $data['twonum'] = db('order') ->where('articleid',$id) ->where('status',1) ->where('is_complex',2) ->where('iscontrol',0) ->whereTime('create_time', 'between', [$starttime,$endtime]) ->count('distinct(uid)'); $data['twomoney'] = db('order') ->where('articleid',$id) ->where('status',1) ->where('is_complex',2) ->where('iscontrol',0) ->whereTime('create_time', 'between', [$starttime,$endtime]) ->sum('money'); $data['threenum'] = db('order') ->where('articleid',$id) ->where('status',1) ->where(['is_complex'=>array('egt',3)]) ->where('iscontrol',0) ->whereTime('create_time', 'between', [$starttime,$endtime]) ->count('distinct(uid)'); $data['threemoney'] = db('order') ->where('articleid',$id) ->where('status',1) ->where(['is_complex'=>array('egt',3)]) ->where('iscontrol',0) ->whereTime('create_time', 'between', [$starttime,$endtime]) ->sum('money'); if($data['seenum']=='0'){ $data['onerate'] = $data['onenum']=='0'?'0':100; }else{ $data['onerate'] = $data['onenum']=='0'?'0':round(($data['onenum'] / $data['seenum'])*100,2); } if($data['onenum']=='0'){ $data['tworate'] = $data['twonum']=='0'?'0':100; }else{ $data['tworate'] = $data['twonum']=='0'?'0':round(($data['twonum'] / $data['onenum'])*100,2); } if($data['onenum']=='0'){ $data['threerate'] = $data['threenum']=='0'?'0':100; }else{ $data['threerate'] = $data['threenum']=='0'?'0':round(($data['threenum'] / $data['onenum'])*100,2); } if($data['onemoney']==null){ $data['onemoney']=0; } if($data['twomoney']==null){ $data['twomoney']=0; } if($data['threemoney']==null){ $data['threemoney']=0; } $data['one'] = db('history_read')->where('articleid',$id)->whereTime('create_time', 'between', [$starttime,$endtime])->where('order','between',[1,10])->count('distinct(uid)'); $data['two'] = db('history_read')->where('articleid',$id)->whereTime('create_time', 'between', [$starttime,$endtime])->where('order','between',[11,20])->count('distinct(uid)'); $data['three'] = db('history_read')->where('articleid',$id)->whereTime('create_time', 'between', [$starttime,$endtime])->where('order','between',[21,100])->count('distinct(uid)'); $data['four'] = db('history_read')->where('articleid',$id)->whereTime('create_time', 'between', [$starttime,$endtime])->where('order','between',[101,200])->count('distinct(uid)'); $data['five'] = db('history_read')->where('articleid',$id)->whereTime('create_time', 'between', [$starttime,$endtime])->where('order','between',[201,300])->count('distinct(uid)'); $data['six'] = db('history_read')->where('articleid',$id)->whereTime('create_time', 'between', [$starttime,$endtime])->where('order','between',[301,400])->count('distinct(uid)'); $data['seven'] = db('history_read')->where('articleid',$id)->whereTime('create_time', 'between', [$starttime,$endtime])->where('order','between',[401,500])->count('distinct(uid)'); $data['eight'] = db('history_read')->where('articleid',$id)->whereTime('create_time', 'between', [$starttime,$endtime])->where('order','gt',500)->count('distinct(uid)'); $data['rate1'] = $data['one']=='0'?'0':round(($data['one'] / $data['seenum'])*100,2); $data['rate2'] = $data['two']=='0'?'0':round(($data['two'] / $data['seenum'])*100,2); $data['rate3'] = $data['three']=='0'?'0':round(($data['three'] / $data['seenum'])*100,2); $data['rate4'] = $data['four']=='0'?'0':round(($data['four'] / $data['seenum'])*100,2); $data['rate5'] = $data['five']=='0'?'0':round(($data['five'] / $data['seenum'])*100,2); $data['rate6'] = $data['six']=='0'?'0':round(($data['six'] / $data['seenum'])*100,2); $data['rate7'] = $data['seven']=='0'?'0':round(($data['seven'] / $data['seenum'])*100,2); $data['rate8'] = $data['eight']=='0'?'0':round(($data['eight'] / $data['seenum'])*100,2); $one_sub = db('subscription')->where('articleid',$id)->whereTime('create_time', 'between', [$starttime,$endtime])->where('order','between',[1,10])->sum('price'); $data['one_sub'] = empty($one_sub)?0:$one_sub; $one_sub = db('subscription')->where('articleid',$id)->whereTime('create_time', 'between', [$starttime,$endtime])->where('order','between',[11,20])->sum('price'); $data['two_sub'] = empty($one_sub)?0:$one_sub; $one_sub = db('subscription')->where('articleid',$id)->whereTime('create_time', 'between', [$starttime,$endtime])->where('order','between',[21,100])->sum('price'); $data['three_sub'] = empty($one_sub)?0:$one_sub; $one_sub = db('subscription')->where('articleid',$id)->whereTime('create_time', 'between', [$starttime,$endtime])->where('order','between',[101,200])->sum('price'); $data['four_sub'] = empty($one_sub)?0:$one_sub; $one_sub = db('subscription')->where('articleid',$id)->whereTime('create_time', 'between', [$starttime,$endtime])->where('order','between',[201,300])->sum('price'); $data['five_sub'] = empty($one_sub)?0:$one_sub; $one_sub = db('subscription')->where('articleid',$id)->whereTime('create_time', 'between', [$starttime,$endtime])->where('order','between',[301,400])->sum('price'); $data['six_sub'] = empty($one_sub)?0:$one_sub; $one_sub = db('subscription')->where('articleid',$id)->whereTime('create_time', 'between', [$starttime,$endtime])->where('order','between',[401,500])->sum('price'); $data['seven_sub'] = empty($one_sub)?0:$one_sub; $one_sub = db('subscription')->where('articleid',$id)->whereTime('create_time', 'between', [$starttime,$endtime])->where('order','gt',500)->sum('price'); $data['eight_sub'] = empty($one_sub)?0:$one_sub; $data['rate9'] = $data['one_sub']=='0'?'0':round(($data['one_sub'] / $data['subscribe'])*100,2); $data['rate10'] = $data['two_sub']=='0'?'0':round(($data['two_sub'] / $data['subscribe'])*100,2); $data['rate11'] = $data['three_sub']=='0'?'0':round(($data['three_sub'] / $data['subscribe'])*100,2); $data['rate12'] = $data['four_sub']=='0'?'0':round(($data['four_sub'] / $data['subscribe'])*100,2); $data['rate13'] = $data['five_sub']=='0'?'0':round(($data['five_sub'] / $data['subscribe'])*100,2); $data['rate14'] = $data['six_sub']=='0'?'0':round(($data['six_sub'] / $data['subscribe'])*100,2); $data['rate15'] = $data['seven_sub']=='0'?'0':round(($data['seven_sub'] / $data['subscribe'])*100,2); $data['rate16'] = $data['eight_sub']=='0'?'0':round(($data['eight_sub'] / $data['subscribe'])*100,2); // $data['id'] = $id; exit(json_encode(array('status'=>1,'reg'=>'成功','data'=>$data,'date'=>$date))); }else{ exit(json_encode(array('status'=>2,'reg'=>'无数据'))); } } //章节订阅详情 public function subscribeinfo(){ $data = input(''); if($data){ $id = $data['id']; $t = $data['t']; $date = $data['date']; $starttime = strtotime( date("Y-m-d") ); //今日凌晨 $endtime = time(); //当前时间 if($date == 2){ $starttime = strtotime( date("Y-m-d",strtotime("-1 day")) ); //昨日凌晨 $endtime = strtotime( date("Y-m-d") ); //今日凌晨 } if($date == 3){ $starttime = 946656000; } $map = array(); $map['articleid'] = $id; if($t=='1'){ $map['chapterorder'] = array('between',array(1,10)); }elseif($t==2){ $map['chapterorder'] = array('between',array(10,20)); }elseif($t==3){ $map['chapterorder'] = array('between',array(21,100)); }elseif($t==4){ $map['chapterorder'] = array('between',array(101,200)); }elseif($t==5){ $map['chapterorder'] = array('between',array(201,300)); }elseif($t==6){ $map['chapterorder'] = array('between',array(301,400)); }elseif($t==7){ $map['chapterorder'] = array('between',array(401,500)); }elseif($t==8){ $map['chapterorder'] = array('gt',500); } $list = db('chapter')->field('id,chapterorder,chaptername,isvip')->where($map)->order('chapterorder asc')->select(); if($list){ foreach($list as $k=>$v){ $num = $v['chapterorder'] + 1; $list[$k]['seenum'] = db('history_read')->where('articleid',$id)->where('order',$v['chapterorder'])->whereTime('create_time', 'between', [$starttime,$endtime])->count('distinct(uid)'); if($num > 0){ $list[$k]['survivenum'] = db('history_read')->where('articleid',$id)->where('order',$num)->whereTime('create_time', 'between', [$starttime,$endtime])->count('distinct(uid)'); if(empty($list[$k]['survivenum'])){ $list[$k]['survivenum'] = $list[$k]['seenum']; } }else{ $list[$k]['survivenum'] = $list[$k]['seenum']; } if($list[$k]['survivenum'] > $list[$k]['seenum']){ $list[$k]['survivenum'] = $list[$k]['seenum']; $list[$k]['nums'] = 0; }else{ $list[$k]['nums'] = $list[$k]['seenum'] - $list[$k]['survivenum']; } // $list[$k]['subscription'] = db('subscription')->where('articleid',$id)->where('order',$num)->whereTime('create_time', 'between', [$starttime,$endtime])->sum('price'); if(empty($list[$k]['subscription'])){ $list[$k]['subscription'] = 0; } if($v['isvip']==1){ $list[$k]['seenum'] = '-'; $list[$k]['nums'] = '-'; $list[$k]['chaptername'] = $v['chaptername'].' vip'; } } exit(json_encode(array('status'=>1,'reg'=>'成功','data'=>$list))); }else{ exit(json_encode(array('status'=>2,'reg'=>'无数据'))); } } } public function bookExcelList($id, $date){ $booknumber = db('novel')->where('id',$id)->value('booknumber'); $list = db('chapter')->field('chapterorder,chaptername,isvip')->where('articleid',$id)->order('chapterorder asc')->select(); $starttime = strtotime( date("Y-m-d") ); //今日凌晨 $endtime = time(); //当前时间 $title = date("Y-m-d") .'-当天书编号-'.$booknumber; if($date == 2){ $starttime = strtotime( date("Y-m-d",strtotime("-1 day")) ); //昨日凌晨 $endtime = strtotime( date("Y-m-d") ); //今日凌晨 $title = date("Y-m-d",strtotime("-1 day")) .'-当天书编号-'.$booknumber; } if($date == 3){ $starttime = 946656000; $title = '-全部书编号-'.$booknumber; } if($list){ foreach($list as $k=>$v){ $num = $v['chapterorder'] + 1; $list[$k]['seenum'] = db('history_read')->where('articleid',$id)->where('order',$v['chapterorder'])->whereTime('create_time', 'between', [$starttime,$endtime])->count('distinct(uid)'); if($num > 0){ $list[$k]['survivenum'] = db('history_read')->where('articleid',$id)->where('order',$num)->whereTime('create_time', 'between', [$starttime,$endtime])->count('distinct(uid)'); if(empty($list[$k]['survivenum'])){ $list[$k]['survivenum'] = $list[$k]['seenum']; } }else{ $list[$k]['survivenum'] = $list[$k]['seenum']; } if($list[$k]['survivenum'] > $list[$k]['seenum']){ $list[$k]['survivenum'] = $list[$k]['seenum']; $list[$k]['nums'] = 0; }else{ $list[$k]['nums'] = $list[$k]['seenum'] - $list[$k]['survivenum']; } if($v['isvip']==1){ $list[$k]['seenum'] = '-'; $list[$k]['nums'] = '-'; $list[$k]['chaptername'] = $v['chaptername'].' vip'; } unset($list[$k]['isvip']); } } $field = array( 'A' => array('chapterorder', '章节序号'), 'B' => array('chaptername', '章节名称'), 'C' => array('seenum', '新增人数'), 'D' => array('nums', '离开人数'), 'E' => array('survivenum', '留存人数'), ); import("PHPExcel.PHPExcel", EXTEND_PATH,'.php'); $objPHPExcel = new \PHPExcel(); $objWriter = new \PHPExcel_Writer_Excel5($objPHPExcel); //设置保存版本格式 foreach ($list as $key => $value) { foreach ($field as $k => $v) { if ($key == 0) { $objPHPExcel->getActiveSheet()->setCellValue($k . '1', $v[1]); } $i = $key + 2; //表格是从2开始的 $objPHPExcel->getActiveSheet()->setCellValue($k . $i, $value[$v[0]]); } } header("Pragma: public"); header("Expires: 0"); header("Cache-Control:must-revalidate, post-check=0, pre-check=0"); header("Content-Type:application/force-download"); header("Content-Type:application/vnd.ms-execl"); header("Content-Type:application/octet-stream"); header("Content-Type:application/download");; header('Content-Disposition:attachment;filename='.$title.'.xls'); header("Content-Transfer-Encoding:binary"); $objWriter->save('php://output'); } /** * 排序 */ public function array_sort($arr, $keys, $type='asc'){ $keysvalue = $new_array = array(); foreach ($arr as $k=>$v){ $keysvalue[$k] = $v[$keys]; } if($type == 'asc'){ asort($keysvalue); }else{ arsort($keysvalue); } reset($keysvalue); foreach ($keysvalue as $k=>$v){ $new_array[] = $arr[$k]; } return $new_array; } //设置兴趣推荐书籍 public function setsavor(){ $data = input(''); if($data){ if($data['t']=='1'){ $text = '取消设置'; }else{ $text = '设置'; } $r = db('novel')->where('id',$data['id'])->update(['savor'=>$data['t']]); if($r){ exit(json_encode(array('status'=>1,'reg'=>'成功','text'=>$text,'class'=>$data['t']))); }else{ exit(json_encode(array('status'=>2,'reg'=>'失败'))); } } } }