Isotonic.php 5.6 KB
<?php
/**
 * Created by PhpStorm.
 * User: yrf
 * Date: 2022/4/3
 * Time: 9:24
 * ResvRaninDate
 * 水库安全运行监测大屏接口
 *
 */

namespace app\api\controller\safeoperation;

use app\common\controller\Api;
use fast\Tree;
use think\Db;
use think\Request;

/**
 * 渗压
 */
class Isotonic extends Api
{
    protected $id;
    protected $noNeedLogin = ['*'];
    protected $noNeedRight = ['*'];
    protected $model = null;

    public function _initialize()
    {
        $this->id = $this->request->param('id');
        if (!$this->id) {
            $this->error("id不能为空");
        }
        parent::_initialize();
    }

    /**
     * 1. 渗压分析
     */
    public function analyse()
    {
        $isotonic_max = Db::name("reservoir_dam_isotonic")->where("reservoir_id", $this->id)->whereTime("createtime", "today")->max("value");
        $isotonic_min = Db::name("reservoir_dam_isotonic")->where("reservoir_id", $this->id)->whereTime("createtime", "today")->min("value");

        $data = [
            "max" => ["name" => "渗压最大值", "value" => $isotonic_max],
            "min" => ["name" => "渗压最小值", "value" => $isotonic_min]
        ];
        $this->success('请求成功', $data);
    }

    /**
     * 2. 渗压报告
     */
    public function report()
    {
        $return_data = [
            "head" => ["水库名称", "设备名称", "渗压(k/pa)", "采集时间"],
            "list" => []
        ];
        $where = [];
        $where = [
            "i.reservoir_id" => $this->id,
        ];
        $data = Db::name("reservoir_dam_isotonic")->alias("i")
            ->join("reservoir_list l", "l.id=i.reservoir_id", "LEFT")
            ->join("reservoir_equipment e", "e.deviceId=i.equipment_id", "LEFT")
            ->where($where)
            ->field('l.name as reservoir_name,e.name as equipment_name,i.value,from_unixtime(i.createtime,"%m-%d %h:%i") as createtime')
            ->order("i.id desc")
            ->limit(30)
            ->select();
        if (!empty($data)) {
            foreach ($data as $k => $v) {
                $eptname = explode($v['reservoir_name'], $v['equipment_name']);
                $v['equipment_name'] = $eptname[1];
                $return_data["list"][$k] = array_values($v);
            }
        }
        $this->success("", $return_data);

    }

    /**
     * 3. 当前渗压监测
     * reservoir_list 水库表
     * reservoir_equipment 硬件表
     * reservoir_dam_isotonic 渗压表
     */
    public function current_data()
    {
        $where = [];
        $where = [
            "r.id" => $this->id,//水库id
            "e.type" => 3 //硬件类型:1=水位计,2=渗流计,3=渗压计,4=GNSS,5=雨量计,6=位移检测,7=其他
        ];
        //水库硬件设备
        $data = Db::name("reservoir_list")->alias("r")
            ->join("reservoir_equipment e", "e.reservoir_id = r.id", "LEFT")
            ->where($where)
            ->field("e.status,e.deviceId,e.name as equip_name")
            ->order("e.id desc")
            ->select();
        if (!empty($data)) {
            foreach ($data as $k => $v) {
                //在线不在线
                $data[$k]["status_text"] = $v['status'] == 1 ? "在线" : "离线";
                unset($data[$k]['status']);

                //最新一条渗压数据
                $data[$k]["current_value"] = Db::name("reservoir_dam_isotonic")->where(["equipment_id" => $v['deviceId'], "reservoir_id" => $this->id])->order("createtime desc")->value("value");

                //最近七天最后一条数据
                $date = [];
                $date_value = [];
                for ($i = 0; $i < 7; $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["reservoir_id"] = ["eq", $this->id];
                    $wh["equipment_id"] = ["eq", $v['deviceId']];
                    $wh["createtime"] = ["between", [$beginTime, $endTime]];
                    $rr = Db::name("reservoir_dam_isotonic")->where($wh)->order("createtime desc")->value("value");
                    array_push($date_value, $rr);
                }
                $data[$k]['date'] = $date;
                $data[$k]['date_value'] = $date_value;
            }
        }

        $this->success("数据获取成功", $data);
    }

    /**
     * 4. 渗流报告
     */
    public function shenliu_report()
    {
        $return_data = [
            "head" => ["设备名称", "渗流(L/s)", "采集时间"],
            "list" => []
        ];
        $where = [];
        $where = [
            "i.reservoir_id" => $this->id,
        ];
        $data = Db::name("reservoir_dam_seepage")->alias("i")
            ->join("reservoir_list l", "l.id=i.reservoir_id", "LEFT")
            ->join("reservoir_equipment e", "e.deviceId=i.equipment_id", "LEFT")
            ->where($where)
            ->field('l.name as reservoir_name,e.name as equipment_name,i.value,from_unixtime(i.createtime,"%m-%d %h:%i") as createtime')
            ->order("i.id desc, i.createtime desc")
            ->limit(30)
            ->select();
        if (!empty($data)) {
            foreach ($data as $k => $v) {
                $eptname = explode($v['reservoir_name'], $v['equipment_name']);
                $v['equipment_name'] = $eptname[1];
                unset($v["reservoir_name"]);
                $return_data["list"][$k] = array_values($v);
            }
        }
        $this->success("", $return_data);
    }
}