diff --git a/tools/wsndata.php b/tools/wsndata.php index bf74c503..44e093b5 100644 --- a/tools/wsndata.php +++ b/tools/wsndata.php @@ -1,5 +1,8 @@ 0)) { die("Error in parameter."); } - $action=@$_GET['action']; - + $action=@$_GET['action']; + if(!empty($action) && $action=='prepare') { $content="php -f /var/www/ftp2.westgis.ac.cn/wsndata.php $uid"; - $filename='wsndata.sh'; - if (!file_put_contents($filename, $content, LOCK_EX)) - { - sleep(1); - if (!file_put_contents($filename, $content, LOCK_EX)) - { - sleep(1); - if (!file_put_contents($filename, $content, LOCK_EX)) - die("error in write wsndatar.sh"); - } - } - } else { - $sql_user = "SELECT * from users_pm_down where starttime is not null and result=-1 and type='down' and uid=$uid"; - $sth_user = $db->query($sql_user); - $rows_user = $sth_user->fetchAll(); - - //有需要生成的数据 - if(!empty($rows_user)) - { - foreach($rows_user as $k=>$v ) - { + $filename='wsndata.sh'; + if (!file_put_contents($filename, $content, LOCK_EX)) + { + sleep(1); + if (!file_put_contents($filename, $content, LOCK_EX)) + { + sleep(1); + if (!file_put_contents($filename, $content, LOCK_EX)) + die("error in write wsndatar.sh"); + } + } + } else { + $sql_user = "SELECT distinct uid,site,variable,starttime,endtime from users_pm_down where starttime is not null and result=-1 and type='down' and uid=$uid"; + $sth_user = $db->query($sql_user); + $rows_user = $sth_user->fetchAll(); + + //有需要生成的数据 + if($rows_user) + { + foreach($rows_user as $k=>$v ) + { //逐个生成 $site = $v['site']; - $variable = $v['variable']; - $start = $v['starttime']; - $end = $v['endtime']; - $uid = $v['uid']; - //计算有多少天 - $days=round((strtotime($end)-strtotime($start))/3600/24)+1; - //获取观测点的名称 - $sql_site= "SELECT fld_name from tbl_site_info where fld_site_id=$site"; - $sth_site = $db->query($sql_site); - $rows_site = $sth_site->fetch(); - $sitename= $rows_site['fld_name']; - //获取用户的邮箱 - $sql_mail= "SELECT email from users where id=$uid"; - $sth_mail = $db->query($sql_mail); - $rows_mail = $sth_mail->fetch(); - if(empty($rows_mail)) - {$rows_mail['email']=="wuadan@lzb.ac.cn";} - //先为该用户创建一个文件夹 - $aimDir_user=$basepath.'wsn_'.$uid; + $variable = $v['variable']; + $start = date('Y-m-d',strtotime($v['starttime'])); + $end = date('Y-m-d',strtotime($v['endtime'])); + $uid = $v['uid']; + + //计算有多少天 + $days=round((strtotime($end)-strtotime($start))/3600/24)+1; + + //获取观测点的名称 + $sql_site= "SELECT fld_name from tbl_site_info where fld_site_id=$site"; + $sth_site = $db->query($sql_site); + $rows_site = $sth_site->fetch(); + $sitename= $rows_site['fld_name']; + + //先为该用户创建一个文件夹 + $aimDir_user=$basepath.'wsn_'.$uid; if (!file_exists($aimDir_user)) { $result = mkdir($aimDir_user); - } - //在该用户文件夹下面再建立一个观测点文件夹 - $aimDir_site=$aimDir_user.DIRECTORY_SEPARATOR.$site; + } + + //在该用户文件夹下面再建立一个观测点文件夹 + $aimDir_site=$aimDir_user.DIRECTORY_SEPARATOR.$sitename; if (!file_exists($aimDir_site)) { $result = mkdir($aimDir_site); - } - - //选择全部变量 - if($variable==-1) - { + } + + //选择全部变量 + if($variable==-1) + { //获取数据 - for ($i = 1; $i <= $days; $i++) + $sql2= "SELECT v.fld_time as time,v.fld_value as value,va.fld_name as variablename FROM tbl_value v left join tbl_variable_info va on v.fld_variable_id=va.fld_variable_id WHERE v.fld_site_id=$site AND v.fld_time>='$start' AND v.fld_time<'$endtime' ORDER BY time "; + $sth2 = $db->query($sql2); + $rows2 = $sth2->fetchAll(); + $endtime=date("Y-m-d",strtotime($start)+24*3600); + $head = "Time,Variable,Value, \n"; + $html=""; + foreach ($rows2 as $k=>$v) { - $endtime=date("Y-m-d 00:00:00",strtotime($start)+24*3600); - $sql2= "SELECT v.fld_time as time,v.fld_value as value,va.fld_name as variablename FROM tbl_value v left join tbl_variable_info va on v.fld_variable_id=va.fld_variable_id WHERE v.fld_site_id=$site AND v.fld_time>='$start' AND v.fld_time<'$endtime' ORDER BY time "; - - $sth2 = $db->query($sql2); - $rows2 = $sth2->fetchAll(); - $datamount=count( $rows2); //组装数据 - $html=""; - foreach($rows2 as $k=>$v) + if ($v['time']>=$start && $v['time']<$endtime) { - $time[$k] = $v['time']; - $value[$k] = $v['value']; - $var[$k] = $v['variablename']; - $html .=$time[$k].",".$var[$k].",".$value[$k]."\n"; - } - - $head = "Time,Variable,Value, \n"; - - //将数据写入文件 - $resulttime=date("Ymd",strtotime($start)); - - $fp = fopen($aimDir_site.DIRECTORY_SEPARATOR.$sitename."_all_".$resulttime.".CSV","a"); //打开csv文件,如果不存在则创建 - fwrite($fp,$head.$html); //写入数据 - fclose($fp); //关闭文件句柄 - - $start = $endtime; - } + $html.=$v['time'].",".$v['variablename'].",".$v['value']."\n"; + } elseif ($v['time']>=$endtime) { + //写入文件 + $resulttime=date("Ymd",strtotime($start)); + $fp = fopen($aimDir_site.DIRECTORY_SEPARATOR.$sitename."_all_".$resulttime.".CSV","w+"); + fwrite($fp,$head.$html); //写入数据 + fclose($fp); //关闭文件句柄 + $start=$endtime; + $endtime=date("Y-m-d",strtotime($start)+24*3600); + $html=$v['time'].",".$v['variablename'].",".$v['value']."\n"; + } + if ($k==count($rows2)) //last record + { + //写入文件 + $resulttime=date("Ymd",strtotime($start)); + $fp = fopen($aimDir_site.DIRECTORY_SEPARATOR.$sitename."_all_".$resulttime.".CSV","w+"); + fwrite($fp,$head.$html); //写入数据 + fclose($fp); //关闭文件句柄 + } + } + print $sitename."\r\n"; $sql_up= "update users_pm_down set result=0 WHERE site=$site and variable=-1 and uid=$uid and result=-1 and type='down'"; - $sth_up = $db->query($sql_up); - } else { - //获取观测变量的名称 + $db->query($sql_up); + } else { + //获取观测变量的名称 $sql3= "SELECT fld_name from tbl_variable_info where fld_variable_id=$variable"; $sth3 = $db->query($sql3); $rows3 = $sth3->fetch(); $varname=$rows3['fld_name']; //获取数据 - $endtime=""; - for ($i = 1; $i <= $days; $i++) + $endtime=date("Y-m-d",strtotime($start)+24*3600); + $sql2= "SELECT v.fld_time as time,v.fld_value as value,va.fld_name as variablename FROM tbl_value v left join tbl_variable_info va on v.fld_variable_id=va.fld_variable_id WHERE v.fld_variable_id=$variable and v.fld_site_id=$site AND v.fld_time>='$start' AND v.fld_time<='$end' ORDER BY time "; + $sth2 = $db->query($sql2); + $rows2 = $sth2->fetchAll(); + $head = "Time,Variable,Value, \n"; + $html=""; + foreach ($rows2 as $k=>$v) { - $endtime=date("Y-m-d H:m:s",strtotime($start)+24*3600); - $sql2= "SELECT v.fld_time as time,v.fld_value as value,va.fld_name as variablename FROM tbl_value v left join tbl_variable_info va on v.fld_variable_id=va.fld_variable_id WHERE v.fld_variable_id =$variable and v.fld_site_id=$site AND v.fld_time>='$start' AND v.fld_time<='$endtime' ORDER BY time "; - - $sth2 = $db->query($sql2); - $rows2 = $sth2->fetchAll(); - $datamount=count( $rows2); //组装数据 - $html=""; - foreach($rows2 as $k=>$v) + if ($v['time']>=$start && $v['time']<$endtime) { - $time[$k] = $v['time']; - $value[$k] = $v['value']; - $var[$k] = $v['variablename']; - $html .=$time[$k].",".$var[$k].",".$value[$k]."\n"; - } - - $head = "Time,Variable,Value, \n"; - //写入文件 - $resulttime=date("Ymd",strtotime($start)); - $fp = fopen($aimDir_site.DIRECTORY_SEPARATOR.$sitename."_".$varname."_".$resulttime.".CSV","a+"); - fwrite($fp,$head.$html); //写入数据 - fclose($fp); //关闭文件句柄 - $start = $endtime; + $html.=$v['time'].",".$v['variablename'].",".$v['value']."\n"; + } elseif ($v['time']>=$endtime) { + //写入文件 + $resulttime=date("Ymd",strtotime($start)); + $fp = fopen($aimDir_site.DIRECTORY_SEPARATOR.$sitename."_".$varname."_".$resulttime.".CSV","w+"); + fwrite($fp,$head.$html); //写入数据 + fclose($fp); //关闭文件句柄 + $start=$endtime; + $endtime=date("Y-m-d",strtotime($start)+24*3600); + $html=$v['time'].",".$v['variablename'].",".$v['value']."\n"; + } + if ($k==count($rows2)) //last record + { + //写入文件 + $resulttime=date("Ymd",strtotime($start)); + $fp = fopen($aimDir_site.DIRECTORY_SEPARATOR.$sitename."_".$varname."_".$resulttime.".CSV","w+"); + fwrite($fp,$head.$html); //写入数据 + fclose($fp); //关闭文件句柄 + } } + print $sitename.'--'.$varname."\r\n"; //给处理的数据做个标记result=0 - $sql_up= "update users_pm_down set result=0 WHERE site=$site and variable=$variable and uid=$uid and result=-1 and type='down'"; - $sth_up = $db->query($sql_up); - } - } - } - } \ No newline at end of file + $sql_up= "update users_pm_down set result=0 WHERE site=$site and variable=$variable and uid=$uid and result=-1 and type='down'"; + $db->query($sql_up); + } + + } + + } + + }