Index.php 6.2 KB
<?php

namespace app\api\controller\security;

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

/**
 * Class Waterlevel
 * @package app\api\controller
 */

//警报等级列表 $warningStatusList
const WARNING_STR_LIST = [
    '1' => '低',
    '2' => '中',
    '3' => '高'
];
class Index extends Api
{
    protected $model = '';
    protected $noNeedLogin = ['safetyDataList','newSafetyData','safetyDataDetail','safetyDateList'];
    protected $noNeedRight = '*';
    /**
     *  安全数据列表
     * 1水锤数据 wrp_security_incident_data 2告警类型列表 wrp_pipes_device_alarm_data
     */
    public function safetyDataList()
    {
        $where['alarmCode'] = 1;
        $startTime = input('startTime');
        $endTime = input('endTime');

        if (isset($startTime) && isset($endTime)) {
            $where['alarmCode'] = ['>',0];
            $where['occurredTime'] = ['between', [$startTime, $endTime]];
        }
//        //水锤类型
//        $waterhammerType = Db::table('wrp_pipes_site_waterhammer_type')->column('name','code');
        //告警类型
        $waterhammerType = Db::table('wrp_pipes_site_alarm_type')->column('name','code');
//        //水锤列表
//        $securityList = Db::table('wrp_security_incident_data')->column('name','code');

//        //告警列表
        $alarmList = Db::table('wrp_pipes_device_alarm_data')
            ->where($where)
            ->order('occurredTime','DESC')
            ->select();
        foreach ($alarmList as &$item) {
            $item['alarmTypeStr'] = $waterhammerType[$item['alarmType']];
            $item['alarmDetails'] = json_decode($item['alarmDetails'],true);
            $item['levelStr'] = WARNING_STR_LIST[$item['level']];
            $item['safetyType'] = 'alarm';
        }
        $this->success("获取成功", $alarmList);

    }

    /**
     *  安全数据列表
     * 1水锤数据 wrp_security_incident_data 2告警类型列表 wrp_pipes_device_alarm_data
     */
    public function safetyDateList()
    {
        // 获取当前日期的时间戳
        $currentTimestamp = time();

// 循环计算过去7天的开始和结束时间戳
        for ($i = 6; $i >= 0; $i--) {
            // 计算第$i天的时间戳
            $dayTimestamp = strtotime("-$i days", $currentTimestamp);

            // 获取当天的开始时间戳
            $startOfDay = strtotime('midnight', $dayTimestamp);

            // 获取当天的结束时间戳
            $endOfDay = strtotime('tomorrow', $startOfDay) - 1;

            $alarmCount = Db::table('wrp_pipes_device_alarm_data')
                ->where('startTime','>',date('Y-m-d H:i:s',$startOfDay))
                ->where('startTime','<',date('Y-m-d H:i:s',$endOfDay))
                ->count('id');
//            $securityCount= Db::table('wrp_security_incident_data')
//                ->where('startTime','>',date('Y-m-d H:i:s',$startOfDay))
//                ->where('startTime','<',date('Y-m-d H:i:s',$endOfDay))
//                ->count('id');
            // 将结果存入数组
            $result['dateSc'][] = [
                'date'=> date('m/d',$dayTimestamp),
                'counts'=>$alarmCount,
            ];
        }

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

    }


    /**
     *  最新一条报警数据
     * 1水锤数据 wrp_security_incident_data 2告警类型列表 wrp_pipes_device_alarm_data
     */
    public function newSafetyData () {
        //告警类型
        $waterhammerType = Db::table('wrp_pipes_site_alarm_type')->column('name','code');
//        //水锤列表
//        $securityList = Db::table('wrp_security_incident_data')->column('name','code');
//        //告警列表
        $alarmList = Db::table('wrp_pipes_device_alarm_data')
            ->where('alarmCode','=',1)
            ->order('occurredTime','DESC')
            ->select();
        foreach ($alarmList as &$item) {
            $item['alarmTypeStr'] = $waterhammerType[$item['alarmType']];
            $item['alarmDetails'] = json_decode($item['alarmDetails'],true);
            $item['levelStr'] = WARNING_STR_LIST[$item['level']];
            $item['safetyType'] = 'alarm';
        }
        $this->success("获取成功", $alarmList[0]);
    }

    /**
     *  安全数据详情
     * 1水锤数据 wrp_security_incident_data 2告警类型列表 wrp_pipes_device_alarm_data
     */
    public function safetyDataDetail () {
        $safetyType = input('safetyType');
        $id = input('id');
        switch ($safetyType) {
            case "alarm":
                $data = $this->getSafetyDetailByAlarm($id);
                break;
            default:
                $this->error("类型错误获取失败");
        }
        $this->success('获取成功',$data);
    }
    function getSafetyDetailByAlarm ($id) {
        //告警类型
        $waterhammerType = Db::table('wrp_pipes_site_alarm_type')->column('name','code');
        $data = Db::table('wrp_pipes_device_alarm_data')
            ->where('id','=',$id)
            ->find();
        $device_data = Db::table('wrp_pipes_site_device')->where('deviceId',$data['deviceId'])->find();
        if (empty($data)) {
            $this->error("数据有误,获取失败");
        }
        $data['alarmTypeStr'] = $waterhammerType[$data['alarmType']];
        $data['alarmDetails'] = json_decode($data['alarmDetails'],true);
        $data['levelStr'] = WARNING_STR_LIST[$data['level']];
        $data['x'] = $device_data['x'];
        $data['y'] = $device_data['y'];
        $dataList = Db::table('wrp_pipes_device_alarm_data')
            ->where('deviceId', '=', $data['deviceId'])
            ->order('occurredTime', 'DESC')
            ->limit(7)
            ->select();

        $result = [];
        foreach ($dataList as &$item) {
            $item['alarmDetails'] = json_decode($item['alarmDetails'],true);
            $item['occurredTimestamp'] = strtotime($item['occurredTime']);
            $result[$item['occurredTimestamp']] = $item;
        }
        ksort($result);
        $dateSc = [];
        foreach ($result as $key => $v) {
            $dateSc[$key]['name'] = date('H:i',$v['occurredTimestamp']);
            $dateSc[$key]['num'] = $v['alarmDetails']['alarmValue'];
        }

        $reData = ['info'=>$data,'dateSc'=>array_values($dateSc)];
        return $reData;
    }

}