Dp.php
21.3 KB
<?php
namespace app\api\controller\v3;
use app\common\controller\Api;
use think\Db;
use think\exception\PDOException;
/**
*
*/class Dp 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()
{
//获取蒙自水库预警
$data = [
"invade" => $this->invade->where('reservoir_id', "in", [4, 6, 9])->count(),
"isotonic" => Db::name('reservoir_warning_isotonic')->where('reservoir_id', "in", [4, 6, 9])->count(),
"waterlevel" => Db::name('reservoir_warning_waterlevel')->where('reservoir_id', "in", [4, 6, 9])->count(),
"rainfall" => $this->rainfall->where('reservoir_id', "in", [4, 6, 9])->count(),
];
return $this->success('', $data);
}
//坝体位移预警
public function leftlistbt()
{
$xylist = $this->Displacement->with('reservoirlist')->where('reservoir_id', "in", [4, 6, 9])->limit(20)->select();
$array = [];
foreach ($xylist as $key => $value) {
if ($value->warning == 0) {
$status = "正常";
} else {
$status = "异常";
};
$data = [
'name' => $value->reservoirlist->name,
'createtime' => date('Y-m-d H:i:s', $value->createtime),
'status' => $status,
'z' => $value->vertical,
'x' => $value->horizontal,
'y' => $value->horizontalY
// 'test' => $xylist
];
$array[] = $data;
}
return $this->success('', $array);
}
//水位监测
public function leftlistsw()
{
$xwlist = $this->waterlevel->with('reservoirlist')->where('reservoir_id', "in", [4, 6, 9])->limit(20)->select();
$array = [];
foreach ($xwlist as $key => $value) {
$data = [
'name' => $value->reservoirlist->name,
'createtime' => date('Y-m-d', $value->createtime),
'water_level' => $value->water_level
];
$array[] = $data;
}
return $this->success('', $array);
}
public function test(){
return $this->success('1232133');
}
//水库类型统计
public function reservoirTypes()
{
$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),
'new' => 0
];
return $this->success('', $data);
}
// 水库预警统计图
public function WarningStatistics()
{
$serviosid = [4, 6, 9];
$serviosdb = ['reservoir_warning_displacement', 'reservoir_warning_rainfall', 'reservoir_warning_waterlevel'];
$statistical = [];
$newwarning = [];
foreach ($serviosid as $key => $id) {
$count = count($this->Displacementw->whereTime('createtime', 'today')->where('reservoir_id', $id)->select()) + count($this->rainfall->whereTime('createtime', 'today')->where('reservoir_id', $id)->select()) + count($this->waterlevel->whereTime('createtime', 'today')->where('reservoir_id', $id)->select()) + count($this->waterseepage->whereTime('createtime', 'today')->where('reservoir_id', $id)->select()) + count($this->invade->whereTime('createtime', 'month')->where('reservoir_id', $id)->select());
$serviosname = Db::name('reservoir_list')->where('id', $id)->field('name')->find();
foreach ($serviosdb as $db) {
$neww = Db::name($db)
->alias('d')
->join('reservoir_list r', 'r.id=d.reservoir_id')
->join('reservoir_equipment e', 'e.deviceId=d.equipment_id')
->where('d.reservoir_id', $id)
->order('createtime desc')
->field('r.name as skname,e.name as sbname,value,from_unixtime(d.createtime,"%Y-%m-%d") as createtime,warning')
->find();
if ($neww) {
$newwarning[] = $neww;
}
}
$stadata = [
'name' => $serviosname['name'],
'count' => $count,
];
$statistical[] = $stadata;
}
return $this->success('', ['stdata' => $statistical, 'newwarning' => $newwarning]);
}
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)
{
$id = input('get.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()
{
$sy = Db::name('reservoir_dam_isotonic')
->alias('isotonic')
->join('reservoir_list r', 'r.id = isotonic.reservoir_id')
->join("reservoir_equipment e","e.deviceId=isotonic.equipment_id")
->field('r.id,e.name,concat(dx_value,"m") as value,from_unixtime(isotonic.createtime,"%m-%d %h:%i") as createtime')
->order('isotonic.id desc')
->limit(30)
->select();
$data['data1'] = [];
$data['data2'] = [];
for ($i = 0; $i < count($sy); $i++) {
$data1 = [];
$data2 = "";
for ($k = 0; $k < 3; $k++) {
if ($k == 0) {
$data1[] = $sy[$i]['name'];
} elseif ($k == 1) {
$data1[] = $sy[$i]['value'];
} else {
$data1[] = $sy[$i]['createtime'];
}
}
$data2 = $sy[$i]['id'];
array_push($data['data1'], $data1);
array_push($data['data2'], $data2);
}
$this->success('', $data);
}
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);//// }
}