Dpv2.php
24.6 KB
<?php
namespace app\api\controller\safeoperation;
use app\common\controller\Api;
use think\Db;
use think\exception\PDOException;
/**
*
*/class Dpv2 extends Api
{
protected $noNeedLogin = ['*'];
protected $noNeedRight = ['*'];
public function _initialize()
{
parent::_initialize();
$this->invade = new \app\admin\model\reservoir\hkws\Warning;
$this->waterseepage = new \app\admin\model\reservoir\warning\Waterseepage;
$this->waterlevel = new \app\admin\model\reservoir\warning\Waterlevel;
$this->rainfall = new \app\admin\model\reservoir\warning\Rainfall;
$this->Displacementw = new \app\admin\model\reservoir\warning\Displacement;
$this->Displacement = new \app\admin\model\reservoir\dam\Displacement;
$this->waterlevel = new \app\admin\model\reservoir\rain\Waterlevel;
$this->reservoirlist = new \app\admin\model\reservoir\Reservoirlist;
}
public function displa()
{
// $reservoir_id = $this->request->param('reservoir_id');
//获取蒙自水库预警
$time = 1;
$lasttime = strtotime(date('Y-m-d 23:59:59')) - $time*60*60*24;
$cond['createtime'] = ['between',[$lasttime,strtotime(date('Y-m-d 23:59:59'))]];
$data = [
//"invade" => $this->invade->where($cond)->count(),
"isotonic" => Db::name('reservoir_warning_isotonic')-> where($cond)->count(),
"waterlevel" => Db::name('reservoir_warning_waterlevel')-> where($cond) ->count(),
"rainfall" => $this->rainfall->where($cond)-> count(),
];
return $this->success('', $data);
}
//坝体位移预警
public function leftlistbt()
{
//$reservoir_id = $this->request->param('reservoir_id');
$xylist = $this->Displacement->with('reservoirlist')->order('id desc')
// ->where('reservoir_id', "=", $reservoir_id)
->limit(30)->select();
$array = [];
foreach ($xylist as $key => $value) {
if ($value->warning == 0) {
$status = "正常";
} else {
$status = "异常";
};
$data = [
'name' => $value->reservoirlist->name,
'createtime' => date('m-d H:i', $value->createtime),
'status' => $status,
'z' => $value->vertical,
'x' => $value->horizontal,
'y' => $value->horizontalY
// 'test' => $xylist
];
$array[] = $data;
}
return $this->success('', $array);
}
//水位监测
public function leftlistsw()
{
//$reservoir_id = $this->request->param('reservoir_id');
$xwlist = $this->waterlevel->with('reservoirlist')->order('id desc')
// ->where('reservoir_id', "=", $reservoir_id)
->limit(30)->select();
$array = [];
foreach ($xwlist as $key => $value) {
$data = [
'name' => $value->reservoirlist->name,
'createtime' => date('m-d H:i', $value->createtime),
'water_level' => $value->water_level
];
$array[] = $data;
}
return $this->success('', $array);
}
//水库类型统计
public function reservoirTypes()
{
$time = 30;
$lasttime = strtotime(date('Y-m-d 23:59:59')) - $time*60*60*24;
$cond['createtime'] = ['between',[$lasttime,strtotime(date('Y-m-d 23:59:59'))]];
$month=$this->reservoirlist->where('design_unit', "蒙自水利局")->where($cond)->select();
$all = $this->reservoirlist->where('design_unit', "蒙自水利局")->select();
$x1 = $this->reservoirlist->where('reservoir_level', '小(1)型水库')->where('design_unit', "蒙自水利局")->select();
$x2 = $this->reservoirlist->where('reservoir_level', '小(2)型水库')->where('design_unit', "蒙自水利局")->select();
//$d = $this->reservoirlist->where('reservoir_level', '大型水库')->where('design_unit', "蒙自水利局")->select();
//$d1 = $this->reservoirlist->where('reservoir_level', '大(1)型水库')->where('design_unit', "蒙自水利局")->select();
$z = $this->reservoirlist->where('reservoir_level', '中型水库')->where('design_unit', "蒙自水利局")->select();
$data = [
'sktj' => [
//['value' => count($d), 'name' => '大型水库'],
//['value' => count($d1), 'name' => '大(1)型水库'],
['value' => count($z), 'name' => '中型水库'],
['value' => count($x1), 'name' => '小(1)型水库'],
['value' => count($x2), 'name' => '小(2)型水库'],
// '大型水库' => count($d),
// '大(1)型水库' => count($d1),
// '中型水库' => count($z),
// '小(1)型水库' => count($x1),
// '小(2)型水库' => count($x2),
],
'total' => count($all),
'month' => count($month),
'new' => 0
];
return $this->success('', $data);
}
// 水库预警统计图
public function WarningStatistics()
{
$count=[];
//当日
$time = 1;
$lasttime = strtotime(date('Y-m-d 23:59:59')) - $time*60*60*24;
$cond['reservoir_id'] = ['in','4,6,9'];
$cond['createtime'] = ['between',[$lasttime,strtotime(date('Y-m-d 23:59:59'))]];
$crack = Db::name('reservoir_warning_crack')->where($cond)->count();
$displacement = Db::name('reservoir_warning_displacement')->where($cond)->count();
$rainfall = Db::name('reservoir_warning_rainfall')->where($cond)->count();
$settlement = Db::name('reservoir_warning_settlement')->where($cond)->count();
$waterlevel = Db::name('reservoir_warning_waterlevel')->where($cond)->count();
$waterseepage = Db::name('reservoir_warning_waterseepage')->where($cond)->count();
$weather = Db::name('reservoir_warning_weather')->where($cond)->count();
$count['day'] = $crack+$displacement+$rainfall+$settlement+$waterlevel+$waterseepage+$weather;
//当日
$time = 30;
$lasttime = strtotime(date('Y-m-d 23:59:59')) - $time*60*60*24;
$cond['reservoir_id'] = ['in','4,6,9'];
$cond['createtime'] = ['between',[$lasttime,strtotime(date('Y-m-d 23:59:59'))]];
$crack = Db::name('reservoir_warning_crack')->where($cond)->count();
$displacement = Db::name('reservoir_warning_displacement')->where($cond)->count();
$rainfall = Db::name('reservoir_warning_rainfall')->where($cond)->count();
$settlement = Db::name('reservoir_warning_settlement')->where($cond)->count();
$waterlevel = Db::name('reservoir_warning_waterlevel')->where($cond)->count();
$waterseepage = Db::name('reservoir_warning_waterseepage')->where($cond)->count();
$weather = Db::name('reservoir_warning_weather')->where($cond)->count();
$count['month'] = $crack+$displacement+$rainfall+$settlement+$waterlevel+$waterseepage+$weather;
//所有
$cond['reservoir_id'] = ['in','4,6,9'];
$crack = Db::name('reservoir_warning_crack')->where($cond)->count();
$displacement = Db::name('reservoir_warning_displacement')->where($cond)->count();
$rainfall = Db::name('reservoir_warning_rainfall')->where($cond)->count();
$settlement = Db::name('reservoir_warning_settlement')->where($cond)->count();
$waterlevel = Db::name('reservoir_warning_waterlevel')->where($cond)->count();
$waterseepage = Db::name('reservoir_warning_waterseepage')->where($cond)->count();
$weather = Db::name('reservoir_warning_weather')->where($cond)->count();
$count['all'] = $crack+$displacement+$rainfall+$settlement+$waterlevel+$waterseepage+$weather;
return $this->success('请求成功', $count);
}
public function ymddata($date)
{
$date = input('get.date');
$daytime = date('Y-m-d');
$nexttime = date('Y-m-d', strtotime("$daytime - $date day"));
$Displacementw = count($this->Displacementw->where('createtime', 'between time', [$nexttime, $daytime])->select());
$rainfall = count($this->rainfall->where('createtime', 'between time', [$nexttime, $daytime])->select());
$waterlevel = count($this->waterlevel->where('createtime', 'between time', [$nexttime, $daytime])->select());
$waterseepage = count($this->waterseepage->where('createtime', 'between time', [$nexttime, $daytime])->select());
$invade = count($this->invade->where('createtime', 'between time', [$nexttime, $daytime])->select());
$all = $Displacementw + $rainfall + $waterlevel + $waterseepage + $invade;
$now = count($this->Displacementw->whereTime('createtime', 'today')->select()) + count($this->rainfall->whereTime('createtime', 'today')->select()) + count($this->waterlevel->whereTime('createtime', 'today')->select()) + count($this->waterseepage->whereTime('createtime', 'today')->select()) + count($this->invade->whereTime('createtime', 'today')->select());
$data = [
'dataall' => $all,
'now' => $now
];
return $this->success('成功', $data);
}
public function slsy()
{
$id = $this->request->param('reservoir_id');
$daytime = date('Y-m-d');
$daytime1 = date('Y-m-d', strtotime("$daytime + 1 day"));
$time = [];
$isotoniclist = [];
$equipment = Db::name('reservoir_equipment')->where('reservoir_id', $id)->where('type', 3)->select();
$sbname = [];
$series = [];
$nexttime = '';
for ($i = 0; $i < 6; $i++) {
$daytime1 = date('Y-m-d', strtotime("$daytime1 - 1 day"));
$time[] = $daytime1;
//数据组
}
foreach ($equipment as $k) {
//设备组
$nexttime = '';
$daytime = date('Y-m-d');
$daytime1 = date('Y-m-d', strtotime("$daytime + 1 day"));
$sbname[] = $k['name'];
$isotoniclist = [];
for ($i = 0; $i < 6; $i++) {
$nexttime = date('Y-m-d', strtotime("$daytime1 - 1 day"));
//数据组
$isotonic = Db::name('reservoir_dam_isotonic')->field('value')->where('reservoir_id', $id)->where('createtime', 'between time', [$nexttime, $daytime1])->where('equipment_id', $k['deviceId'])->order('id desc')->find();
$daytime1 = date('Y-m-d', strtotime("$daytime1 - 1 day"));
$isotoniclist[] = $isotonic['value'];
}
$isotoniclist1 = [
'name' => $k['name'],
'data' => $isotoniclist,
'type' => 'line',
'smooth' => 'true'
];
array_push($series, $isotoniclist1);
}
$data = [
'name' => $sbname,
'time' => $time,
'series' => $series
];
$this->success('成功', $data);
}
public function datatj()
{
$waterlevel = $this->waterlevel->where('reservoir_id', "in", [4, 6, 9])->count();
$waterseepage = $this->waterseepage->where('reservoir_id', "in", [4, 6, 9])->count();
$rainfall = $this->rainfall->where('reservoir_id', "in", [4, 6, 9])->count();
$hkwswarning = Db::name('reservoir_hkws_warning')->where('reservoir_id', "in", [4, 6, 9])->count();
$data = [
'waterlevel' => $waterlevel,
'waterseepage' => $waterseepage,
'rainfall' => $rainfall,
'hkwswarning' => $hkwswarning
];
$this->success('成功', $data);
}
public function statept($id, $data, $name)
{
$yj = Db::name('reservoir_warning_displacement')
->where('reservoir_id', $id)
->where('equipment_id', $data['number'])
->where('reporttime', $data['reporttime'])
->where('value', $data[$name])
->count();
if ($yj > 0) {
return "异常";
} else {
return "正常";
};
}
public function getgnss()
{
// $xxz = Db::name('reservoir_dam_displacement')->where('reservoir_id',4)->field('vertical,horizontal,horizontalY,number,reporttime')->order('createtime desc')->find();
// $xxz['xyj'] = $this->statept(4,$xxz,'horizontal');
// $xxz['yyj'] = $this->statept(4,$xxz,'horizontalY');
// $xxz['zyj'] = $this->statept(4,$xxz,'vertical');
// $mas = Db::name('reservoir_dam_displacement')->where('reservoir_id',6)->field('vertical,horizontal,horizontalY,number,reporttime')->order('createtime desc')->find();
// $mas['xyj'] = $this->statept(6,$mas,'horizontal');
// $mas['yyj'] = $this->statept(6,$mas,'horizontalY');
// $mas['zyj'] = $this->statept(6,$mas,'vertical');
// $xsh = Db::name('reservoir_dam_displacement')->where('reservoir_id',9)->field('vertical,horizontal,horizontalY,number,reporttime')->order('createtime desc')->find();
// $xsh['xyj'] = $this->statept(9,$xsh,'horizontal');
// $xsh['yyj'] = $this->statept(9,$xsh,'horizontalY');
// $xsh['zyj'] = $this->statept(9,$xsh,'vertical');
// $data = [
// 'xxz' => $xxz,
// 'mas' => $mas,
// 'xsh' => $xsh
// ];
$list2 = [];
$arr = [4, 6, 9];
foreach ($arr as $k=>$m) {
$where = " d.reservoir_id=" . $m;
$list = Db::name('reservoir_dam_displacement')->alias('d')
->join('reservoir_list rl', 'rl.id =d.reservoir_id', 'left')
->field('d.reservoir_id,rl.name,d.vertical,d.horizontal,d.horizontalY,d.number,d.reporttime')
->where($where)
->order('d.createtime desc')
->find();
if(empty($list)){
unset($arr[$k]);
continue;
}
$list['xyj'] = $this->statept($list['reservoir_id'], $list, 'horizontal');
$list['yyj'] = $this->statept($list['reservoir_id'], $list, 'horizontalY');
$list['zyj'] = $this->statept($list['reservoir_id'], $list, 'vertical');
array_push($list2, $list);
}
$this->success('', $list2);
}
public function getdayxc()
{
$all = Db::name('inspection_project')->count();
$no = Db::name('inspection_project')->where('state', 2)->count();
$yes = Db::name('inspection_project')->where('state', 1)->count();
$data = [
'all' => $all,
'no' => $no,
'yes' => $yes
];
$this->success('', $data);
}
public function Invasion()
{
$time = date('Y-m-d');
$xxz = Db::name('reservoir_hkws_warning')->where('reservoir_id', 4)->where('createtime', 'between time', [$time, date('Y-m-d', strtotime("$time - 1 day"))])->count();
$mas = Db::name('reservoir_hkws_warning')->where('reservoir_id', 6)->where('createtime', 'between time', [$time, date('Y-m-d', strtotime("$time - 1 day"))])->count();
$xsh = Db::name('reservoir_hkws_warning')->where('reservoir_id', 9)->where('createtime', 'between time', [$time, date('Y-m-d', strtotime("$time - 1 day"))])->count();
$data = [
'xxz' => $xxz,
'mas' => $mas,
'xsh' => $xsh
];
$this->success('', $data);
}
public function getrain()
{
$time = date('Y-m-d');
$xxz = Db::name('reservoir_rain_rainfall')
->alias("a")
->join('reservoir_list r', 'a.reservoir_id = r.id')
->where('a.reservoir_id', 4)
->field('a.total_rainfall,a.reservoir_id,r.name')
->order('a.createtime desc')
->find();
$mas = Db::name('reservoir_rain_rainfall')
->alias("a")
->join('reservoir_list r', 'a.reservoir_id = r.id')
->where('a.reservoir_id', 6)
->field('a.total_rainfall,a.reservoir_id,r.name')
->order('a.createtime desc')
->find();
$xsh = Db::name('reservoir_rain_rainfall')
->alias("a")
->join('reservoir_list r', 'a.reservoir_id = r.id')
->where('a.reservoir_id', 9)
->field('a.total_rainfall,a.reservoir_id,r.name')
->order('a.createtime desc')
->find();
$data = [$xxz, $mas, $xsh];
$this->success('', $data);
}
public function getsy()
{
$time = 1;
$lasttime = strtotime(date('Y-m-d 23:59:59')) - $time*60*60*24;
$where['createtime'] = ['between',[$lasttime,strtotime(date('Y-m-d 23:59:59'))]];
//渗压
$where = [];
$where["type"] = ["=", 3];
//水库硬件设备
$equipment = Db::name("reservoir_equipment")->where($where)->field("deviceId,name as equip_name,type,longitude,latitude,orifice_elevation")->order("id asc")->select();
$lasttime = strtotime(date('Y-m-d 23:59:59')) - $time*60*60*24;
$wheres['a.createtime'] = ['between',[$lasttime,strtotime(date('Y-m-d 23:59:59'))]];
$data["record"] = Db::name("reservoir_dam_isotonic")
->alias('a')
->where($wheres)
->join("reservoir_list b",'a.reservoir_id=b.id')
->join("reservoir_equipment c","a.equipment_id=c.deviceId")
->order("a.reporttime desc,a.id desc")
->field('a.value,from_unixtime(c.createtime,"%Y-%m-%d") as createtime,c.name,orifice_elevation')
->limit(50)
->select();
$timewhere['createtime'] = ['between',[$lasttime,strtotime(date('Y-m-d 23:59:59'))]];
$total_rainfall = Db::name("reservoir_dam_isotonic")->where($timewhere)->sum("value");
$res['data']=$data["record"];
$res['total_value']=round($total_rainfall,2);
$res['count']=count($equipment);
$this->success("设备获取成功", $res);
}
public function getwarter()
{
$xxz = Db::name('reservoir_rain_water_level')
->alias('l')
->join('reservoir_list r', 'r.id=l.reservoir_id')
->where('l.reservoir_id', 4)
->order('l.createtime desc')
->field('FROM_UNIXTIME(l.createtime) as createtime,l.water_level,l.storage_level,r.name as reservoir_name')
->find();
$mas = Db::name('reservoir_rain_water_level')
->alias('l')
->join('reservoir_list r', 'r.id=l.reservoir_id')
->where('l.reservoir_id', 6)
->order('l.createtime desc')
->field('FROM_UNIXTIME(l.createtime) as createtime,l.water_level,l.storage_level,r.name as reservoir_name')
->find();
$xsh = Db::name('reservoir_rain_water_level')
->alias('l')
->join('reservoir_list r', 'r.id=l.reservoir_id')
->where('l.reservoir_id', 9)
->order('l.createtime desc')
->field('FROM_UNIXTIME(l.createtime) as createtime,l.water_level,l.storage_level,r.name as reservoir_name')
->find();
$res = [
'xxz' => $xxz,
'mas' => $mas,
'xsh' => $xsh
];
$this->success('获取成功', $res);
}
// {
// name: 'Temperature',
// type: 'line',
// yAxisIndex: 2,
// data: [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2]
// }
public function Trendwaterlevel()
{
$where = [];
$where = [
"e.type" => 1 //硬件类型:1=水位计,2=渗流计,3=渗压计,4=GNSS,5=雨量计,6=位移检测,7=其他
];
//水库硬件设备
$data = Db::name("reservoir_list")->alias("r")
->join("reservoir_equipment e", "e.reservoir_id = r.id")
->where($where)
->field("r.id,e.status,e.deviceId,e.name")
->order("e.id desc")
->select();
if (!empty($data)) {
foreach ($data as $k => $v) {
//最近五天最后一条数据
$date = [];
$date_value = [];
$kurong_value = [];
for ($i = 4; $i >= 0; $i--) {
$beginTime = mktime(00, 00, 00, date('m'), date('d') - $i, date('Y'));
$endTime = mktime(23, 59, 59, date("m"), date("d") - $i, date("Y"));
array_push($date, date("Y-m-d", $beginTime));
$rr = "";
$wh = [];
$wh["reservoir_id"] = ["eq", $v['id']];
$wh["number"] = ["eq", $v['deviceId']];
$wh["createtime"] = ["between", [$beginTime, $endTime]];
$rr = Db::name("reservoir_rain_water_level")->where($wh)->order("createtime desc")->value("water_level");
array_push($date_value, $rr);
$kr = "";
$wher = [];
$wher["reservoir_id"] = ["eq", $v['id']];
$wher["warterdata"] = ["eq", $rr];
$kr = Db::name("warterdata_capacityof")->where($wher)->order("id desc")->value("CapacityOf");
array_push($kurong_value, $kr);
}
$data[$k]['time'] = $date;
$data[$k]['warter'][0] = $date_value;
$data[$k]['warter'][1] = $kurong_value;
}
}
$this->success('成功', $data);
}
// public function Trendwaterlevel()//// {//// $daytime = date('Y-m-d');//// $daytime1 = date('Y-m-d', strtotime("$daytime + 1 day"));//// $onetime = date('Y-m-d');//// $endtime = date('Y-m-d', strtotime("$onetime - 1 day"));//// $serviosid = [4, 6, 9];////// $data = [];//// foreach ($serviosid as $id) {//// $time = [];//// $warter = [];//// $kr = [];//// for ($i = 0; $i < 5; $i++) {//// $daytime1 = date('Y-m-d', strtotime("$daytime1 - 1 day"));//// $timeobj = [//// "time" => $daytime1//// ];//// $time[] = $daytime1;//// $daywarter = Db::name('reservoir_rain_water_level')// ->alias('l')// ->join('reservoir_list r', 'r.id=l.reservoir_id')// ->where('reservoir_id', $id)// ->where('createtime', 'between time', [$endtime, $onetime])// ->order('reporttime desc')// ->field('water_level,name')// ->find();//// $onetime = date('Y-m-d', strtotime("$onetime - 1 day"));//// $endtime = date('Y-m-d', strtotime("$endtime - 1 day"));//// $warter[] = $daywarter['water_level'];//// }////// $data1 = [//// 'name' => $daywarter['name'],//// 'time' => $time,//// 'warter' => $warter//// ];//// // $data2[] =$data1//// $data[] = $data1;//// }////// $this->success('成功', $data);//// }
/**
* 12、总览各水库 查询水库详情
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public function reservoirinfo(){
$reservoir_id = $this->request->param('reservoir_id');
$reservoir=Db::name("reservoir_list")->field("id,name,desc,lat,lng,user_name,under,reservoir_level,buildtime,thumbnail_images")->find($reservoir_id);
$reservoir['buildtime']=date("Y-m-d",$reservoir['buildtime']);
$reservoir['thumbnail_images'] = full_image_kevin($reservoir['thumbnail_images']);
if(!$reservoir['desc']){
$reservoir['desc']="该水库位于蒙自县城南部约3公里处,水库库容180万立方米,最深处达8米,平均水深4米,水库周围无污染源,水库水质清澈,水面面积53.3万平方米,土地面积13万平方米,距城市近,已成为城市旅游景点之一。开发小新寨旅游度假区,开展水上游乐、休闲、观光度假活动,将有较好的开发前景。";
}
$leval = Db::name('reservoir_rain_water_level')
->where(['reservoir_id' => $reservoir_id])
->order('id', 'desc')
->find();
$reservoir['now_capacityof'] = getWarterdataCapacityof($reservoir_id, $leval['water_level']);
$this->success('成功', $reservoir);}
}