Hardwareapi.php 13.0 KB
<?php
/***
 * 千寻数据采集
 */

namespace app\api\controller\reservoir;

use app\common\controller\Api;
use app\common\helper\HttpHelper;
use think\Request;
use think\Db;
use qx\Qx;
use addons\alisms\controller\Index;

/**
 * Class Equipment
 * @package app\api\controller\reservoir
 */
class Hardwareapi extends Api
{
    protected $model = '';
    protected $noNeedLogin = ['*'];
    protected $noNeedRight = '*';


    /**
     * 获取某个时间段内的水质信息
     * @return void
     */
    public function getwaterquality()
    {
        $beginTime = $this->request->param('beginTime', "1697013684");
        $endTime = $this->request->param('endTime', "1697445684");
        $res = Db::name("querywaterquality")
            ->field('DATE_FORMAT(FROM_UNIXTIME(create_time), "%Y-%m-%d %H:%i:%s") AS create_time,ammoniaNitrogen,blueGreenAlgae,chlorophyllA,conductivity,dissolvedOxygen,nitrogen,permanganate')
            ->select();
        $data = [];
        foreach ($res as $k => $v) {
            $data['time'][$k] = $res[$k]['create_time'];
            $data['ammoniaNitrogen'][$k] = $res[$k]['ammoniaNitrogen'];
            $data['blueGreenAlgae'][$k] = $res[$k]['blueGreenAlgae'];
            $data['chlorophyllA'][$k] = $res[$k]['chlorophyllA'];
            $data['conductivity'][$k] = $res[$k]['conductivity'];
            $data['dissolvedOxygen'][$k] = $res[$k]['dissolvedOxygen'];
            $data['nitrogen'][$k] = $res[$k]['nitrogen'];
            $data['permanganate'][$k] = $res[$k]['permanganate'];
        }
        $this->success("获取水质图成功", $data);

    }

    /**
     * 获取最新一条的水质信息
     * @return void
     */
    public function getonewaterquality()
    {
        $beginTime = $this->request->param('beginTime', "1697013684");
        $endTime = $this->request->param('endTime', "1697445684");
        $res = Db::name("querywaterquality")
            ->field(
                'DATE_FORMAT(FROM_UNIXTIME(create_time), "%Y-%m-%d %H:%i:%s") AS create_time,
                ammoniaNitrogen,
                ammoniaNitrogenExc,
                blueGreenAlgae,
                blueGreenAlgaeExc,
                chlorophyllA,
                chlorophyllAExc,
                conductivity,
                conductivityExc,
                dissolvedOxygen,
                dissolvedOxygenExc,
                nitrogen,
                nitrogenExc,
                permanganate,
                phosphorus,
                phosphorusExc,
                permanganateExc,
                turbidity,
                turbidityExc,
                waterTemperature,
                waterTemperatureExc,
                name')
            ->order("id desc")
            ->find();
        //判断是否超标  氨氮
        if ($res['ammoniaNitrogenExc'] == 1) {
            $res['ammoniaNitrogenExc'] = "超标";
        } else {
            $res['ammoniaNitrogenExc'] = "未超标";
        }
        //判断是否超标  蓝绿藻
        if ($res['blueGreenAlgaeExc'] == 1) {
            $res['blueGreenAlgaeExc'] = "超标";
        } else {
            $res['blueGreenAlgaeExc'] = "未超标";
        }
        //判断是否超标  叶绿素 a
        if ($res['chlorophyllAExc'] == 1) {
            $res['chlorophyllAExc'] = "超标";
        } else {
            $res['chlorophyllAExc'] = "未超标";
        }
        //判断是否超标  电导率(μS/cm)
        if ($res['conductivityExc'] == 1) {
            $res['conductivityExc'] = "超标";
        } else {
            $res['conductivityExc'] = "未超标";
        }
        //判断是否超标  溶解氧(mg/L)
        if ($res['dissolvedOxygenExc'] == 1) {
            $res['dissolvedOxygenExc'] = "超标";
        } else {
            $res['dissolvedOxygenExc'] = "未超标";
        }
        //判断是否超标 总磷(mg/L)
        if ($res['phosphorusExc'] == 1) {
            $res['phosphorusExc'] = "超标";
        } else {
            $res['phosphorusExc'] = "未超标";
        }
        //判断是否超标 浊度(NTU)
        if ($res['turbidityExc'] == 1) {
            $res['turbidityExc'] = "超标";
        } else {
            $res['turbidityExc'] = "未超标";
        }
        //判断是否超标 水温
        if ($res['waterTemperatureExc'] == 1) {
            $res['waterTemperatureExc'] = "超标";
        } else {
            $res['waterTemperatureExc'] = "未超标";
        }
        $data = [
            '0' => [//氨氮
                'time' => $res['create_time'],
                'name' => "氨氮",
                'value' => $res['ammoniaNitrogen'] . "(mg/L)",
                'status' => $res['ammoniaNitrogenExc'],
                'reservoir_name' => $res['name']
            ],
            '1' => [//蓝绿藻
                'time' => $res['create_time'],
                'name' => "蓝绿藻",
                'value' => $res['blueGreenAlgae'] . "(cells/ml)",
                'status' => $res['blueGreenAlgaeExc'],
                'reservoir_name' => $res['name']

            ],
            '2' => [//叶绿素 a
                'time' => $res['create_time'],
                'name' => "叶绿素 a",
                'value' => $res['chlorophyllA'] . "(ug/L)",
                'status' => $res['chlorophyllAExc'],
                'reservoir_name' => $res['name']
            ],
            '3' => [//电导率(μS/cm)
                'time' => $res['create_time'],
                'name' => "电导率",
                'value' => $res['conductivity'] . "(μS/cm)",
                'status' => $res['conductivityExc'],
                'reservoir_name' => $res['name']
            ],
            '4' => [//溶解氧(mg/L)
                'time' => $res['create_time'],
                'name' => "溶解氧",
                'value' => $res['dissolvedOxygen'] . "(mg/L)",
                'status' => $res['dissolvedOxygenExc'],
                'reservoir_name' => $res['name']
            ],
            '5' => [//总磷(mg/L)
                'time' => $res['create_time'],
                'name' => "总磷",
                'value' => $res['phosphorus'] . "(mg/L)",
                'status' => $res['phosphorusExc'],
                'reservoir_name' => $res['name']
            ],
            '6' => [//浊度(NTU)
                'time' => $res['create_time'],
                'name' => "浊度",
                'value' => $res['turbidity'] . "(NTU)",
                'status' => $res['turbidityExc'],
                'reservoir_name' => $res['name']
            ],
            '7' => [//水温
                'time' => $res['create_time'],
                'name' => "水温",
                'value' => $res['waterTemperature'] . "(℃)",
                'status' => $res['waterTemperatureExc'],
                'reservoir_name' => $res['name']
            ],
        ];

        $this->success("获取水质成功", $data);

    }

    /**
     * 获取某个时间段内的水位信息
     * @return void
     */
    public function getwaterlevel()
    {
        $beginTime = $this->request->param('beginTime', "1697013684");
        $endTime = $this->request->param('endTime', "1697445684");
        $res = Db::name("querystage")
            ->field('rz,w,tm,DATE_FORMAT(FROM_UNIXTIME(create_time), "%Y/%m/%d") AS create_times')
            ->where("rz", ">", 0)
            ->group("create_times")
            ->select();
        $data = [];

        foreach ($res as $k => $v) {
            $data['time'][$k] = $res[$k]['create_times'];
            $data['water_level'][$k] = $res[$k]['rz'];
        }
        $this->success("获取水位图成功", $data);

    }

    /**
     * 获取某个时间段内的水位信息
     * @return void
     */
    public function getonewaterlevel()
    {
        $res = Db::name("querystage")
            ->field('rz,w,DATE_FORMAT(FROM_UNIXTIME(create_time), "%Y-%m-%d %H:%i:%s") AS create_time')
            ->order("id desc")
            ->where("rz", ">", 0)
            ->find();
        $this->success("获取水位成功", $res);
    }


    /**
     * 获取渗压信息
     * @return void
     */
    public function osmotic_pressure()
    {
        $equipment_id = $this->request->param('equipment_id');
        $isotonic = Db::name("reservoir_dam_isotonic")
            ->where('equipment_id', $equipment_id)
            ->order('id desc')
            ->find();
        $isotonic['createtime'] = date("Y-m-d H:i:s", $isotonic['createtime']);
        $this->success("获取渗压成功", $isotonic);
    }

    /**
     * 获取渗压列表信息
     * @return void
     */
    public function isotonic_pressure_list()
    {
        $isotonic = Db::name("reservoir_dam_isotonic")
            ->alias("a")
            ->join("reservoir_equipment b", 'a.equipment_id=b.deviceId')
            ->order('a.id desc')
            ->field("a.*,b.orifice_elevation")
            ->limit(50)
            ->select();
        foreach ($isotonic as $k => $v) {
            $isotonic[$k]['createtime'] = date("m-d H:i", $isotonic[$k]['createtime']);
        }
        $this->success("获取渗压列表成功", $isotonic);
    }


    /**
     * 获取渗流信息
     * @return void
     */
    public function transfusion()
    {
        $equipment_id = $this->request->param('equipment_id');
        $isotonic = Db::name("reservoir_dam_seepage")
            ->where('equipment_id', $equipment_id)
            ->order('id desc')
            ->find();
        $isotonic['createtime'] = date("m-d H:i", $isotonic['createtime']);
        $this->success("获取渗流成功", $isotonic);
    }

    /**
     * 获取gnss信息
     * @return void
     */
    public function displacement()
    {
        $equipment_id = $this->request->param('equipment_id');
        $isotonic = Db::name("reservoir_dam_displacement")
            ->where('number', $equipment_id . '0')
            ->order('id desc')
            ->find();
        $isotonic['createtime'] = date("Y-m-d H:i:s", $isotonic['createtime']);
        $this->success("获取gnss成功", $isotonic);
    }

    /**
     * 获取gnss信息
     * @return void
     */
    public function displacement_list()
    {
        $isotonic = Db::name("reservoir_dam_displacement")
            ->order('id desc')
            ->limit(50)
            ->field("id,number,horizontal,horizontalY,vertical,createtime")
            ->select();
        foreach ($isotonic as $k => $v) {
            $isotonic[$k]['createtime'] = date("Y-m-d H:i:s", $isotonic[$k]['createtime']);
            $isotonic[$k]['detection'] = "在线";
            $isotonic[$k]['warning_detection'] = "正常";
        }
        $this->success("获取gnss成功", $isotonic);
    }

    /**
     * 通过设备id查询水位
     * @return void
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function getonewaterlevelbyequipment_id()
    {
        $equipment_id = $this->request->param('equipment_id', "80235820");
        $res = Db::name("reservoir_rain_water_level")
            ->where("number", $equipment_id)
            ->order("id desc")
            ->find();
        $res['createtime'] = date("Y-m-d H:i:s", $res['createtime']);
        $this->success("获取水位成功", $res);
    }

    /**
     * 通过设备id查询降雨
     * @return void
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function getonerainfallbyequipment_id()
    {
        $equipment_id = $this->request->param('equipment_id', "80235820");
        $res = Db::name("reservoir_rain_rainfall")
            ->where("number", $equipment_id)
            ->order("id desc")
            ->find();
        $res['createtime'] = date("Y-m-d H:i:s", $res['createtime']);
        $this->success("获取水位成功", $res);
    }


    /**
     * 获取某个时间段内的库容信息
     * @return void
     */
    public function getstorage_capacity()
    {
        $beginTime = $this->request->param('beginTime', "1697013684");
        $endTime = $this->request->param('endTime', "1698545675");
        $res = Db::name("querystage")
            ->field('rz,w,DATE_FORMAT(FROM_UNIXTIME(create_time), "%m/%d") AS create_times')
            ->where(["create_time" => ["between", [$beginTime, $endTime]]])
            ->group("create_times")
            ->order("id desc")
            ->limit(7)
            ->select();
        $res = array_reverse($res);

        $data = [];
        //获得水库库容最大值
        $maxCapOf = Db::name('warterdata_capacityof')
            ->where(['reservoir_id' => 40])
            ->order('CapacityOf desc')
            ->value('CapacityOf');

        foreach ($res as $k => $v) {
            $data['time'][$k] = $res[$k]['create_times'];
            $data['capacity'][$k] = $res[$k]['w'];
            if ($maxCapOf <= 0 || $res[$k]['rz'] <= 0) {
                $data['capacity_pct'][$k] = 0;
            } else {
                $data['capacity_pct'][$k] = intval(round($res[$k]['w'] / $maxCapOf * 100, 2));
            }
        }
        $this->success("获取库容图成功", $data);

    }

}