Waterlevel.php 7.6 KB
<?php

namespace app\api\controller\reservoir\rain;
use app\common\controller\Api;
use think\Request;
use think\Db;
/**
 * Class Waterlevel
 * @package app\api\controller
 */
class Waterlevel extends Api{
    protected $noNeedLogin = '*';
    protected $noNeedRight = '*';
    public function _initialize()
    {
        parent::_initialize();
        $this->model = new \app\admin\model\reservoir\rain\Waterlevel;
    }

    /**
     * 根据id获取水库最新一条水库信息
     */
    public function getLast($id=null){
         //水库id
         $res = $this->model
            ->alias('l')
            ->join('reservoir_list r','r.id=l.reservoir_id')
            ->where('l.reservoir_id','=',$id)
            ->order('l.createtime desc')
            ->field('FROM_UNIXTIME(l.createtime) as createtime,l.water_level,l.storage_level,r.name as reservoir_name')
            ->find();
         $this->success('获取成功',$res);
    }

    public function getList(){
        $id = input('get.id');
        $page = input('get.page')?:1;
        $limit = input('get.limit')?:8;
        $starttime = strtotime(input('get.starttime'));
        $endtime = strtotime(input('get.endtime'));
        if($starttime && $endtime){
            $res = $this->model->where('reservoir_id','=',$id)->where('createtime','>=',$starttime)->where('createtime','<=',$endtime)->order('createtime desc')->page($page,$limit)->select();
        }
        else {
            $res = $this->model->where('reservoir_id', '=', $id)->order('createtime desc')->page($page, $limit)->select();
        }
        $this->success('成功',$res);
    }
    //水位趋势图数据 
    public function getTrend($id){
        for($i=6;$i>=1;$i--){
            $k = $i-1;
            ${'predaystart'.$i} = strtotime(date('Y-m-d',strtotime("-$i day")));
            ${'predayend'.$i} = strtotime(date('Y-m-d',strtotime("-$k day")));
            ${'predaycount'.$i} = Db::name('reservoir_rain_water_level')->where('createtime','>=',${'predaystart'.$i})->where('createtime','<',${'predayend'.$i})->where('reservoir_id',$id)->field('AVG(water_level) as water_level')->find();
            $res['date'][] = date('Y-m-d',strtotime("-$i day"));
            $res['count'][] = ${'predaycount'.$i};
        }
        $today = strtotime(date("Y-m-d",time()));
        $todaylist = Db::name('reservoir_rain_water_level')->where('createtime','>=',$today)->where('reservoir_id',$id)->field('AVG(water_level) as water_level')->find();
        $res['date'][] = date("Y-m-d",time());
        $res['count'][] = $todaylist;
        $this->success('',$res);
    }

    /**
     * 10. 监管APP水位趋势
     * kevin 2022.04.07 修改
     */
    public function getWaterLevelList(){
        $ids = input('post.ids');
        $day = input('post.day',4)-1;

        $categories = [];
        $series = [];

        //最近五天最后一条数据
        $date = [];
        $date_value = [];
        $kurong_value = [];
        for ($i = $day; $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("m/d", $beginTime));
            $rr = "";
            $wh = [];
            $wh["reservoir_id"] = ["eq", $ids];
            $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", $ids];
            $wher["warterdata"] = ["eq", $rr];
            $kr = Db::name("warterdata_capacityof")->where($wher)->order("id desc")->value("CapacityOf");
            array_push($kurong_value, $kr);
        }
        $categories = $date;
        $series[0]['data'] = $date_value;
        $series[0]['name'] = "水位(m)";
        $series[0]['type'] = "line";
        $series[0]['textOffset'] = "10";
        $series[0]['textColor'] = "#1890ff";
        $series[1]['data'] = $kurong_value;
        $series[1]['index'] = 1;
        $series[1]['name'] = "库容量(万方)";
        $series[1]['type'] = "column";
        $series[1]['textOffset'] = "0";
        $series[1]['textColor'] = "#91cb74";


        $this->success("数据获取成功",["CapacityOf"=>$series[1],"categories"=>$categories,"series"=>$series]);

    }
    
//    public function getWaterLevelList(){
//        $ids = input('post.ids');
//        $day = input('post.day',4)-1;
//        $chartData = [];
//        $series = [];
//
//        for($i=$day;$i>=0;$i--){
//            $k = $i-1;
//            ${'predaystart'.$i} = strtotime(date('Y-m-d',strtotime("-$i day")));
//            ${'predayend'.$i} = strtotime(date('Y-m-d',strtotime("-$k day")));
//            ${'predaycount'.$i} = Db::name('reservoir_rain_water_level')->alias('w')->join('reservoir_list l','w.reservoir_id = l.id')
//            ->where('w.createtime','>=',${'predaystart'.$i})->where('w.createtime','<',${'predayend'.$i})->group('reservoir_id')
//            ->where('reservoir_id','in',$ids)
//            ->field('AVG(water_level) as water_level,l.name,l.id')->select();
//            $chartData['categories'][] = date('m/d',${'predaystart'.$i});
//            foreach (${'predaycount'.$i} as $key => $val){
//                $series[$val['id']]['name'] = "水位(m)";
//                $series[$val['id']]['type'] = "line";
//                $series[$val['id']]['data'][] = round($val['water_level'],2);
//                $CapacityOf = Db::name('warterdata_capacityof')->where('warterdata',round($val['water_level'],2))->find();
//                $CapacityOflist[] = $CapacityOf['CapacityOf'];
//            }
//        }
//
//
//        $today = strtotime(date("Y-m-d",time()));
//        $todaylist = Db::name('reservoir_rain_water_level')->alias('w')->join('reservoir_list l','w.reservoir_id = l.id')
//        ->where('createtime','>=',$today)->group('reservoir_id')
//        ->where('reservoir_id','in',$ids)->field('AVG(water_level) as water_level,l.name,l.id')->select();
//
//        foreach ($todaylist as $key => $val){
//                $series[$val['id']]['name'] = "水位(m)";
//                $series[$val['id']]['type'] = "line";
//                $series[$val['id']]['data'][] = round($val['water_level'],2);
//                $CapacityOf = Db::name('warterdata_capacityof')->where('warterdata',round($val['water_level'],2))->find();
//                $CapacityOflist[] = $CapacityOf['CapacityOf'];
//
//        }
//        $CapacityOflist = array_merge($CapacityOflist);
//        $chartData['categories'][] = date('m/d',$today);
//        $krl = [
//                "name"=>"库容量(万方)",
//                "type"=> "column",
//                'index'=>1,
//                'data' => $CapacityOflist
//            ];
//        $series = array_merge($series);
//        $series[] = $krl;
//        $chartData['series'] = $series;
//
//        $chartData['CapacityOf'] = $krl;
//        $this->success('',$chartData);
//    }
    
    //监管app水情 $id 水库id
    public function getAppWaterLevelByCounty($id){
        $data['list'] = Db::name('reservoir_rain_water_level')->where('reservoir_id',$id)->order('reporttime','desc')->limit(5)->field('water_level,status,FROM_UNIXTIME(reporttime/1000) as time,reporttime')->select();
        $type = Db::name('reservoir_warning_waterlevel')->where('reporttime','>=',$data['list'][count($data['list'])-1]['reporttime'])->find();
        if($type){
            $data['warning'] = '1';
        }
        else{
            $data['warning'] = '0';
        }
        $this->success('',$data);
    }
}