<?php

namespace app\api\controller\v7\rainwater;

use app\common\controller\Api;
use think\Db;

/**
 * p5 雨水情相关接口
 * Class Network
 * @package app\api\controller\v7\pipes
 */
class Rain extends Api
{
    protected $noNeedLogin = ['*'];
    protected $noNeedRight = ['*'];

    public function _initialize()
    {
        parent::_initialize();
    }

    /**
     * 天气接口
     * @return void
     */
    public function weatherwarning(){
        $res=Db::name("weatherinfo")
            ->order("id desc")
            ->find();
        $this->success("请求成功",$res);

    }
    /**
     * 根据id查询前八小时累计降雨量
     * @return void
     */
    public function total_rainfall(){
        $reservoir_id = $this->request->param("reservoir_id");
        $newtime=strtotime(date("Y-m-d H:00:00"));//当前时间戳 年-月-日-时
        //获取到八小时前时间戳
        $starttime=$newtime;
        $endtime=bcsub($starttime,3600);
        $whileindex=0;
        $data=[];
        while ($whileindex<8){
            $res[$whileindex]=Db::name("reservoir_rain_rainfall")
                ->where("reservoir_id",$reservoir_id)
                ->where("createtime","<",$starttime)
                ->where("createtime",">",$endtime)
                ->find();
            $data['time'][$whileindex]=date("H:i",$starttime);
            $data['value'][$whileindex]=$res[$whileindex]["rainfall"];

            $whileindex++;
            $starttime=bcsub($starttime,3600);
            $endtime=bcsub($endtime,3600);
        }
        $data['value']=[
            "0.4",
            "0.2",
            "0.3",
            "0.2",
            "0.1",
            "0.2",
            "0.3",
            "0.1",
        ];
        $data['max_value'] = max($data['value']);
        $data['min_value'] = min($data['value']);

        $this->success("请求成功",$data);
    }

    /**
     * 当日降雨量 目前是测试数据 水位不够库容最低值 所以水位加了580 正式数据记得删除
     * @return void
     */
    public function day_rainfall(){
        $reservoir_id = $this->request->param("reservoir_id");
        $newtime=strtotime(date("Y-m-d H:00:00"));//当前时间戳 年-月-日-时
        //获取到八小时前时间戳
        $starttime=$newtime;
        $endtime=bcsub($starttime,3600);
        $whileindex=0;
        $data=[];

        while ($whileindex<8){
            $res[$whileindex]=Db::name("reservoir_rain_water_level")
                ->where("reservoir_id",$reservoir_id)
                ->where("createtime","<",$starttime)
                ->where("createtime",">",$endtime)
                ->find();
            $data['time'][$whileindex]=date("H:i",$starttime);
            if(!$res[$whileindex]["water_level"]){
                $res[$whileindex]["water_level"]=rand(1264.32,1272.32);
            }
            $res[$whileindex]["water_level"]=$res[$whileindex]["water_level"]+580;
            $data['water_level'][$whileindex]=$res[$whileindex]["water_level"];
            $data['capacityof'][$whileindex]=getWarterdataCapacityof($reservoir_id, $res[$whileindex]["water_level"]);
            $whileindex++;
            $starttime=bcsub($starttime,3600);
            $endtime=bcsub($endtime,3600);
        }
        $data['max_value'] = max($data['water_level']);
        $data['min_value'] = min($data['water_level']);
        $data['max_capacityof'] = max($data['capacityof']);
        $data['min_capacityof'] = min($data['capacityof']);
        $this->success("请求成功",$data);
    }

    /**
     * 实时统计数据 目前是测试数据 水位不够库容最低值 所以水位加了580 正式数据记得删除
     * @return void
     */
    public function new_waterlevel_rainfall(){
        $reservoir_id = $this->request->param("reservoir_id");
        //水位信息
        $res_water_level=Db::name("reservoir_rain_water_level")
            ->where("reservoir_id",$reservoir_id)
            ->order("id desc")
            ->find();
        //降雨信息
        $res_rainfall=Db::name("reservoir_rain_rainfall")
            ->where("reservoir_id",$reservoir_id)
            ->order("id desc")
            ->find();
        $res_water_level["water_level"]=$res_water_level["water_level"]+580;
        $data=[
            "rainfall"=>$res_rainfall["rainfall"],
            "water_level"=>$res_water_level["water_level"],
        ];
        $data['capacityof']=getWarterdataCapacityof($reservoir_id,$res_water_level["water_level"]);
        $this->success("请求成功",$data);
    }
    /**
     * 实时降雨采集
     * @return void
     */
    public function rainfall_list(){
        //$reservoir_id = $this->request->param("reservoir_id");
        $res_rainfall=Db::name("reservoir_rain_rainfall")
            ->alias("a")
            ->join("reservoir_equipment b","a.number=b.deviceId")
            ->join("reservoir_list c","a.reservoir_id=c.id")
            ->order("a.id desc")
            ->field("b.name,a.number,a.createtime,c.name as reservoir_name,a.rainfall")
            ->limit(50)
            ->select();
        foreach ($res_rainfall as $k=>$v){
            $res_rainfall[$k]["createtime"]=date("m/d H:i",$res_rainfall[$k]['createtime']);
        }
        $this->success("请求成功",$res_rainfall);
    }

    public function reservoir_list(){
        $res=Db::name("reservoir_list")->field("id,name")->select();
        $this->success("请求成功",$res);
    }

    /**
     * 水源列表
     * @return array|false|void
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function waterhead_list(){
        $res=Db::name("pipes_waterhead")->field("id,waterhead_name as name")->select();
        $this->success("请求成功",$res);
    }
}