Index.php 6.2 KB
<?php
/**
 * Created by PhpStorm.
 * User: YRF
 * Date: 2023/11/14
 * Time: 16:42
 */

namespace app\api\controller\v6;
//允许所有的跨域请求
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: *");
header('Access-Control-Allow-Methods: POST,GET,OPTIONS');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400');
date_default_timezone_set('PRC');


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

//v6 巡检端功能
class Index extends Api
{
    // 无需登录的接口,*表示全部
    protected $noNeedLogin = ['*'];
    // 无需鉴权的接口,*表示全部
    protected $noNeedRight = ['*'];

    /**
     * 获得断面及断面列表
     */
    public function getDmList()
    {
        $list = Db::name('reservoir_equipment')
            ->where(['type' => '3'])
            ->group("dmname")
            ->order("dmname asc")
            ->field("id,dmname")
            ->select();

        $this->success('获取成功', $list);
    }

    /**
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     * 获得断面下设备当天的数据
     */
    public function getNowdayIsotonic()
    {
        $dmname = $this->request->param('dmname');
        $elist = Db::name('reservoir_equipment')
            ->where(['dmname' => $dmname])
            ->field("id,deviceId,name")
            ->order("dm_sort asc")
            ->select();

        $name = [];
        $data = [];
        foreach ($elist as $k => $v) {
            $daydate = Db::name('reservoir_dam_isotonic')
                ->where(['equipment_id' => $v['deviceId']])
                ->whereTime('createtime', 'today')
                ->order("id desc")
                ->find();
            array_push($name, $v['name']);
            array_push($data, $daydate['value']);
        }

        $result = [
            $name, $data
        ];

        $this->success('获取成功', $result);
    }

    //获得断面下的设备列表及数据
    public function getEqpList()
    {
        $dmname = $this->request->param('dmname');
        $dayarr = get_weeks();

        $elist = Db::name('reservoir_equipment')
            ->where(['dmname' => $dmname])
            ->field("id,deviceId,name")
            ->order("deviceId asc")
            ->select();
        $result = [];

        foreach ($elist as $m) {

            $deviceId = $m['deviceId'];

            $day = [];
            $data = [];

            for ($i = 1; $i <= count($dayarr); $i++) {

                $daytime = date('m/d', strtotime($dayarr[$i]));
                array_push($day, $daytime);

                $stime = strtotime(date('Y-m-d 00:00:00', strtotime($dayarr[$i])));
                $etime = strtotime(date('Y-m-d 23:59:59', strtotime($dayarr[$i])));

                $daydate = Db::name('reservoir_dam_isotonic')
                    ->where(['equipment_id' => $deviceId])
                    ->where(["createtime" => ["between", [$stime, $etime]]])
                    ->order("id desc")
                    ->find();

                array_push($data, $daydate['value']);

            }

            $item = [
                'deviceId' => $deviceId,
                'name' => $m['name'],
                'day' => $day,
                'data' => $data
            ];

            array_push($result, $item);

        }

        $this->success('获取成功', $result);
    }

    /***
     * 位移监测获得设备列表
     *
     */
    public function getDisplacement()
    {
        $list = Db::name('reservoir_equipment')
            ->where(['type' => '4'])
            ->field('id,deviceId,name')
            ->order("name asc")
            ->select();

        $this->success('获取成功', $list);
    }

    /**
     * 按设备获得最近5天的位移数据
     */
    public function getDisp5Days()
    {
        $deviceId = $this->request->param('deviceId');
        $dayarr = get_weeks();


        $day = [];
        $x = [];
        $y = [];
        $z = [];
        foreach ($dayarr as $k => $v) {
            $daytime = date('m/d', strtotime($v));

            array_push($day, $daytime);

            $stime = strtotime(date('Y-m-d 00:00:00', strtotime($v)));
            $etime = strtotime(date('Y-m-d 23:59:59', strtotime($v)));
            $data = Db::name('reservoir_dam_displacement')
                ->where(['number' => $deviceId])
                ->where(["createtime" => ["between", [$stime, $etime]]])
                ->order("id desc")
                ->find();
            array_push($x, $data['horizontal'] ? $data['horizontal'] : 0);
            array_push($y, $data['horizontalY'] ? $data['horizontalY'] : 0);
            array_push($z, $data['vertical'] ? $data['vertical'] : 0);
        }

        // 合并3个数组
        $allArr = array_merge($x, $y, $z);

        // 计算最大值
        $max = max($allArr);

        // 计算最小值
        $min = min($allArr);

        $res = [
            'day' => $day,
            'series' => [
                ['name' => 'X轴', 'data' => $x],
                ['name' => 'Y轴', 'data' => $y],
                ['name' => '沉降', 'data' => $z],
            ],
            'max' => $max,
            'min' => $min,
        ];

        $this->success('获取成功', $res);
    }

    /***
     * 监控入侵统计列表
     */
    public function hkalarmList()
    {
        $list = Db::name('reservoir_hkws_hardware')
            ->field("id,name,indexCode")
            ->order("id desc")
            ->select();

        $data = [];
        foreach ($list as $k => $v) {
            $all = Db::name('reservoir_hkws_alarm_monitoring')
                ->where(['cameraIndexCode' => $v['indexCode'], 'status' => '0'])
                ->count();
            $list[$k]['count'] = $all ? $all : 0;
            if ($all > 0) {
                array_push($data, $list[$k]);
            }
        }

        $this->success('获取成功', $data);
    }

}