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);}
}