438 lines
13 KiB
PHP
438 lines
13 KiB
PHP
<?php
|
||
class Admin_StatController extends Zend_Controller_Action
|
||
{
|
||
function preDispatch()
|
||
{
|
||
$this->db=Zend_Registry::get('db');
|
||
$this->view->config = Zend_Registry::get('config');
|
||
$this->messenger=$this->_helper->getHelper('FlashMessenger');
|
||
$this->view->messages = $this->messenger->getMessages();
|
||
$this->view->theme = new Theme();
|
||
$this->_helper->layout->setLayout('administry');
|
||
}
|
||
function postDispatch()
|
||
{
|
||
$this->view->messages = $this->messenger->getMessages();
|
||
}
|
||
function indexAction()
|
||
{
|
||
$sql="select (select count(id) from users) as alluser,
|
||
(select count(id) from normalmetadata) as alldata,
|
||
(select count(id) as num from dataorder where status=0) as onlinedown,
|
||
(select count(id) as num from dataorder where status=5) as offlinedown,
|
||
(select count(id) as num from offlineapp where ts_approved is not null) as offlinepass,
|
||
(select count(id) as num from offlineapp where ts_approved is null) as offlineunfinished,
|
||
(select count(id) as num from dataorder where offlineappid>0 and status=-1) as offlinedenied,
|
||
(select count(id) as num from onlineapp) as onlineapp";
|
||
$this->view->stat=$this->db->fetchRow($sql);
|
||
|
||
//下载量统计
|
||
$sql = "select sum(num) as num from (select m.filesize/1024 as num,m.title,d.userid from dataorder d left join metadata m on d.uuid=m.uuid where (d.status=0 or d.status=5) and m.filesize>0 group by m.title,d.userid,m.filesize) as t";
|
||
$res = $this->db->query($sql);
|
||
$allsize = $res->fetch();
|
||
$this->view->allsize = $allsize;
|
||
|
||
$sql = "select sum(num) as num from (select m.filesize/1024 as num,m.title,d.userid from dataorder d left join metadata m on d.uuid=m.uuid where d.status=5 and m.filesize>0 group by m.title,d.userid,m.filesize) as t";
|
||
$res = $this->db->query($sql);
|
||
$offlinesize = $res->fetch();
|
||
$this->view->offlinesize = $offlinesize;
|
||
|
||
$sql = "select sum(num) as num from (select m.filesize/1024 as num,m.title,d.userid from dataorder d left join metadata m on d.uuid=m.uuid where d.status=0 and m.filesize>0 group by m.title,d.userid,m.filesize) as t";
|
||
$res = $this->db->query($sql);
|
||
$onlinesize = $res->fetch();
|
||
$this->view->onlinesize = $onlinesize;
|
||
|
||
$sql="select sum(configvalue::real)/1024/1024/1024 as num from g6ftpusersettings where userid in (select id from g6ftpusers where name like 'westdc%' or name='newwestdc') and configname='StatsDownloaded'";
|
||
$res = $this->db->query($sql);
|
||
$onlinesize = $res->fetch();
|
||
$this->view->onlineg6size = $onlinesize;
|
||
|
||
|
||
}//indexAction 首页
|
||
|
||
function unitAction()
|
||
{
|
||
$ac = $this->_getParam('ac');
|
||
$y = (int)$this->_request->getParam('y');
|
||
|
||
if(!empty($y))
|
||
{
|
||
$n = date("Y",time());
|
||
if($y<2004 || $y>$n)
|
||
{
|
||
$y=$n;
|
||
}
|
||
}
|
||
$this->view->y = $y;
|
||
|
||
//各单位下载情况,统计的离线申请数据条数,需要有对应的dataorder记录
|
||
/*$sql = "select count(d.id) as num,o.unit from dataorder d
|
||
left join offlineapp o on o.id=d.offlineappid
|
||
where d.offlineappid>0 and o.unit is not null and d.status>4";*/
|
||
//各单位下载情况,统计的离线申请数据次数
|
||
$sql = "select count(o.id) as num,o.unit from offlineapp o
|
||
where o.unit is not null ";
|
||
if ($y)
|
||
$sql.=" and extract(year from o.ts_created)='$y'";
|
||
$sql.=" group by o.unit";
|
||
$fe = $this->db->query($sql);
|
||
$unitoffline = $fe->fetchAll();
|
||
|
||
//各单位在线下载情况
|
||
$sql = "select count(d.id) as num,o.unit from dataorder d
|
||
left join onlineapp o on o.id=d.onlineappid
|
||
where d.onlineappid>0 and o.unit is not null";
|
||
if ($y)
|
||
$sql.=" and extract(year from o.ts_created)='$y'";
|
||
$sql.=" group by o.unit";
|
||
$fe = $this->db->query($sql);
|
||
$unitonline = $fe->fetchAll();
|
||
|
||
$units = array();
|
||
|
||
foreach($unitonline as $k=>$v)
|
||
{
|
||
if(isset($v['num']))
|
||
{
|
||
$units[$v['unit']]['online'] = $v['num'];
|
||
}
|
||
}
|
||
|
||
foreach($unitoffline as $k=>$v)
|
||
{
|
||
if(isset($v['num']))
|
||
{
|
||
$units[$v['unit']]['offline'] = $v['num'];
|
||
}
|
||
}
|
||
|
||
$index = 1;
|
||
|
||
foreach($units as $k=>$v)
|
||
{
|
||
if(!isset($v['online']))
|
||
{
|
||
$units[$k]['online'] = 0;
|
||
}
|
||
|
||
if(!isset($v['offline']))
|
||
{
|
||
$units[$k]['offline'] = 0;
|
||
}
|
||
|
||
$units[$k]['total'] = $units[$k]['online'] + $units[$k]['offline'];
|
||
|
||
$units[$k]['index'] = $index++;
|
||
}
|
||
|
||
if($ac == "out")
|
||
{
|
||
$type = $this->_getParam('type');
|
||
|
||
if(empty($type) || $type == "csv")
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
include_once("Stat.php");
|
||
$stat = new Stat($this->db);
|
||
|
||
$head = array("id","单位名称","离线申请次数","在线申请次数","总申请次数");
|
||
|
||
$content = array();
|
||
|
||
foreach($units as $k=>$v)
|
||
{
|
||
$content[] = array(
|
||
$v['index'],
|
||
$k,
|
||
$v['offline'],
|
||
$v['online'],
|
||
$v['total']
|
||
);
|
||
unset($units[$k]);
|
||
}
|
||
|
||
array_unshift($content,$head);
|
||
|
||
$stat->Download("westdc-download-status.csv",$content,"csv");
|
||
exit();
|
||
}
|
||
|
||
if($type == "json")
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
include_once("Stat.php");
|
||
$stat = new Stat($this->db);
|
||
|
||
$content = array();
|
||
|
||
foreach($units as $k=>$v)
|
||
{
|
||
$content[] = array(
|
||
'index'=>$v['index'],
|
||
'unit'=>$k,
|
||
'offline'=>$v['offline'],
|
||
'online'=>$v['online'],
|
||
'total'=>$v['total']
|
||
);
|
||
unset($units[$k]);
|
||
}
|
||
|
||
$stat->Download("westdc-download-status.json",$content,"json");
|
||
exit();
|
||
}
|
||
|
||
}
|
||
|
||
$this->view->units = $units;
|
||
|
||
|
||
}//分单位统计
|
||
|
||
//按用户统计
|
||
function userAction(){
|
||
|
||
$ac = $this->_getParam('ac');
|
||
|
||
if($ac == "get")
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
include_once("Stat.php");
|
||
$stat = new Stat($this->db);
|
||
|
||
$rows = $stat->UserDataorder();
|
||
|
||
$down = $this->_getParam('down');
|
||
if(empty($down))
|
||
{
|
||
$this->jsonexit(array("aaData"=>$rows));
|
||
return true;
|
||
}
|
||
|
||
if($down == "csv")
|
||
{
|
||
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
$head = array("id","姓名","离线申请次数","在线申请次数","总申请次数");
|
||
|
||
array_unshift($rows,$head);
|
||
|
||
$stat->Download("westdc-download-status.csv",$rows,"csv");
|
||
exit();
|
||
|
||
}
|
||
|
||
if($down == "json")
|
||
{
|
||
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
/*
|
||
$head = array("id","姓名","离线申请次数","在线申请次数","总申请次数");
|
||
|
||
array_unshift($rows,$head);
|
||
*/
|
||
|
||
$stat->Download("westdc-download-status.json",$rows,"json");
|
||
exit();
|
||
}
|
||
|
||
}
|
||
|
||
}//userAction()
|
||
|
||
function monthAction(){
|
||
|
||
$y = (int)$this->_request->getParam('y');
|
||
|
||
if(!empty($y))
|
||
{
|
||
$n = date("Y",time());
|
||
if($y<2004 || $y>$n)
|
||
{
|
||
$y=$n;
|
||
}
|
||
}
|
||
$this->view->y = $y;
|
||
$sql = "select count(extract(month from ts_created)) as c,extract(month from ts_created) as m,extract(year from ts_created) as y from onlineapp
|
||
where id in (select distinct(onlineappid) from dataorder)";
|
||
if ($y)
|
||
$sql.=" and extract(year from ts_created)='$y' ";
|
||
$sql.=" group by extract(month from ts_created),extract(year from ts_created)
|
||
order by extract(year from ts_created),extract(month from ts_created)";
|
||
$rs = $this->db->query($sql);
|
||
$rows = $rs->fetchAll();
|
||
|
||
$this->view->data = $rows;
|
||
|
||
$sql = "select count(extract(month from ts_created)) as c,extract(month from ts_created) as m,extract(year from ts_created) as y from dataorder
|
||
where status=0";
|
||
if ($y)
|
||
$sql.=" and extract(year from ts_created)='$y' ";
|
||
$sql.=" group by extract(month from ts_created),extract(year from ts_created)
|
||
order by extract(year from ts_created),extract(month from ts_created)";
|
||
$rs = $this->db->query($sql);
|
||
$rows = $rs->fetchAll();
|
||
$this->view->online = $rows;
|
||
|
||
$sql = "select count(extract(month from ts_created)) as c,extract(month from ts_created) as m,extract(year from ts_created) as y from offlineapp
|
||
where ts_approved is not null";
|
||
if ($y)
|
||
$sql.=" and extract(year from ts_created)='$y' ";
|
||
$sql.=" group by extract(month from ts_created),extract(year from ts_created)
|
||
order by extract(year from ts_created),extract(month from ts_created)";
|
||
$rs = $this->db->query($sql);
|
||
$rows = $rs->fetchAll();
|
||
|
||
if(count($rows)<=0)
|
||
{
|
||
$this->view->offline="";
|
||
}
|
||
|
||
$this->view->offline = $rows;
|
||
|
||
$sql = "select count(extract(month from ts_created)) as c,extract(month from ts_created) as m,extract(year from ts_created) as y from users";
|
||
if ($y)
|
||
$sql.=" where extract(year from ts_created)='$y' ";
|
||
$sql.=" group by extract(month from ts_created),extract(year from ts_created)
|
||
order by extract(year from ts_created),extract(month from ts_created)";
|
||
$rs = $this->db->query($sql);
|
||
$rows = $rs->fetchAll();
|
||
if(count($rows)<=0)
|
||
{
|
||
$this->view->newuser="";
|
||
}
|
||
|
||
$this->view->newuser = $rows;
|
||
|
||
|
||
|
||
}//按月份统计
|
||
|
||
function awstatswebAction()
|
||
{
|
||
|
||
}//awstats web 统计
|
||
|
||
function awstatsweb2Action()
|
||
{
|
||
|
||
}//awstats web 统计
|
||
|
||
function awstatsftpAction()
|
||
{
|
||
|
||
}//awstats ftp 统计
|
||
|
||
function awstatsftp2Action()
|
||
{
|
||
|
||
}//awstats ftp 统计
|
||
|
||
function webalizerAction()
|
||
{
|
||
|
||
}//webalizer 统计
|
||
|
||
function waterAction()
|
||
{
|
||
|
||
$sql="select count(k.keyword) as num,d.status,k.keyword from dataorder d left join metadata m on d.uuid=m.uuid
|
||
left join keyword k on m.id=k.id
|
||
where (d.status=5 or d.status=-1) and m.source='0595169a-279e-4b95-819f-129d0ba4280d'
|
||
and (k.keyword='航空遥感' or k.keyword='卫星遥感' or k.keyword='气象水文' or k.keyword='上游寒区水文试验区' or k.keyword='森林水文试验区' or k.keyword='中游干旱区水文试验区')
|
||
group by k.keyword,d.status order by k.keyword desc,d.status desc";
|
||
|
||
$re =$this->db->query($sql);
|
||
$type =$re->fetchAll();//按分类
|
||
|
||
$this->view->type = $type;
|
||
|
||
$sql="select count(extract(month from o.ts_created)) as c,extract(month from o.ts_created) as m,extract(year from o.ts_created) as y
|
||
from offlineapp o left join dataorder d on d.offlineappid=o.id left join metadata m on m.uuid=d.uuid
|
||
where m.source='0595169a-279e-4b95-819f-129d0ba4280d' and (d.status=3 or d.status=5 or d.status=-1)
|
||
group by extract(month from o.ts_created),extract(year from o.ts_created)
|
||
order by extract(year from o.ts_created),extract(month from o.ts_created)";
|
||
|
||
$re=$this->db->query($sql);
|
||
$month=$re->fetchAll();
|
||
|
||
$this->view->month = $month;
|
||
|
||
$sql = "select
|
||
extract(year from o.ts_created) as y,extract(month from o.ts_created) as m,
|
||
count(extract(month from o.ts_created)) as c
|
||
from
|
||
(select distinct(o.id),o.ts_created
|
||
from offlineapp o where o.datalist like '%黑河综合遥感联合试验%') as o
|
||
group by extract(month from o.ts_created),extract(year from o.ts_created)
|
||
order by extract(year from o.ts_created),extract(month from o.ts_created)";
|
||
|
||
$re=$this->db->query($sql);
|
||
$order=$re->fetchAll();
|
||
|
||
$this->view->order = $order;
|
||
|
||
$sql = "select (sum(m.filesize)/1024) as n from dataorder d left join metadata m on d.uuid=m.uuid
|
||
where d.status=5 and m.source='0595169a-279e-4b95-819f-129d0ba4280d'";
|
||
|
||
$re=$this->db->query($sql);
|
||
$num=$re->fetchAll();
|
||
|
||
$this->view->num=$num;
|
||
|
||
|
||
$sql = "select count(lower(o.unit)) as c,lower(o.unit) as u
|
||
from offlineapp o left join dataorder d on d.offlineappid=o.id left join metadata m on m.uuid=d.uuid
|
||
where m.source='0595169a-279e-4b95-819f-129d0ba4280d' and (d.status=5)
|
||
group by lower(o.unit)
|
||
order by lower(o.unit)";
|
||
|
||
$re=$this->db->query($sql);
|
||
$units=$re->fetchAll();
|
||
|
||
$this->view->units=$units;
|
||
|
||
|
||
$sql = "select count(t.unit) as c,t.unit from
|
||
(select distinct(o.id),o.unit
|
||
from offlineapp o left join dataorder d on d.offlineappid=o.id left join metadata m on m.uuid=d.uuid
|
||
where m.source='0595169a-279e-4b95-819f-129d0ba4280d' and (d.status=5)
|
||
) as t
|
||
group by t.unit";
|
||
|
||
$re = $this->db->query($sql);
|
||
$ounit= $re->fetchAll();
|
||
|
||
$this->view->ounit = $ounit;
|
||
|
||
//water 项目按月统计下载量
|
||
$sql = "select (sum(m.filesize)/1024) as n,extract(month from d.ts_created) as m,extract(year from d.ts_created) as y from dataorder d left join metadata m on d.uuid=m.uuid
|
||
where d.status=5 and m.source='0595169a-279e-4b95-819f-129d0ba4280d'
|
||
group by extract(month from d.ts_created),extract(year from d.ts_created)
|
||
order by extract(year from d.ts_created),extract(month from d.ts_created)";
|
||
|
||
$re = $this->db->query($sql);
|
||
$dm = $re->fetchAll();
|
||
|
||
$this->view->dm = $dm;
|
||
|
||
|
||
}//WATER项目
|
||
|
||
public function jsonexit($data){
|
||
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(json_encode($data,JSON_NUMERIC_CHECK));
|
||
return true;
|
||
}//jsonexit() 退出并返回json数据
|
||
|
||
}
|
||
|