<?php

namespace app\api\controller\safeoperation;

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", $this->reservoir_ids)->count(),

            "isotonic" => Db::name('reservoir_warning_isotonic')->where('reservoir_id', "in", $this->reservoir_ids)->count(),

            "waterlevel" => Db::name('reservoir_warning_waterlevel')->where('reservoir_id', "in", $this->reservoir_ids)->count(),

            "rainfall" => $this->rainfall->where('reservoir_id', "in", $this->reservoir_ids)->count(),

        ];

        return $this->success('', $data);

    }


    //坝体位移预警

    public function leftlistbt()

    {

        $xylist = $this->Displacement->with('reservoirlist')->where('reservoir_id', "in", $this->reservoir_ids)->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", $this->reservoir_ids)->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 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)型水库'],
            ],

            'total' => count($all),

            'new' => 0

        ];

        return $this->success('', $data);

    }


    // 水库预警统计图

    public function WarningStatistics()

    {

        $serviosid = $this->reservoir_ids;

        $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", $this->reservoir_ids)->count();

        $waterseepage = $this->waterseepage->where('reservoir_id', "in", $this->reservoir_ids)->count();

        $rainfall = $this->rainfall->where('reservoir_id', "in", $this->reservoir_ids)->count();

        $hkwswarning = Db::name('reservoir_hkws_warning')->where('reservoir_id', "in", $this->reservoir_ids)->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 = $this->reservoir_ids;

        foreach ($arr as $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();


            $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');

        $blz = Db::name('reservoir_hkws_warning')->where('reservoir_id', 23)->where('createtime', 'between time', [$time, date('Y-m-d', strtotime("$time - 1 day"))])->count();

        $ljz = Db::name('reservoir_hkws_warning')->where('reservoir_id', 24)->where('createtime', 'between time', [$time, date('Y-m-d', strtotime("$time - 1 day"))])->count();
        $xsh = Db::name('reservoir_hkws_warning')->where('reservoir_id', 25)->where('createtime', 'between time', [$time, date('Y-m-d', strtotime("$time - 1 day"))])->count();


        $data = [

            'blz' => $blz,
            'ljz' => $ljz,
            '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', 23)
            ->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', 24)
            ->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', 25)
            ->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')
            ->field('r.id,name,concat(value,"k/Pa") as value,from_unixtime(createtime,"%Y-%m-%d") as createtime')
            ->order('createtime desc')
            ->limit(20)
            ->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', 23)
            ->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', 24)
            ->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', 25)
            ->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);////    }

}