where(array('ID'=>$device_id))->find(); if(!$device_info) return false; $data = array( "id" => $device_id, "title" => $device_info['WorkUnitName'], "addr" => $device_info['DeviceAddr'], "time" => $device_info['GatherTime'], "channels" => array(), "rollfilm" => array(), ); for($i=0;$i<3;$i++){ $channel_data = array(); //气温 $where = array( 'DeviceId'=>$device_id, 'ChType'=> \Zndp\Device\ChannelType::TEMPERATURE, 'ChGroup' => $i, ); $qw_info = MM('dpsb_channel')->where($where)->find(); if(!$qw_info){ continue; } //湿度 $where = array( 'DeviceId'=>$device_id, 'ChType'=> \Zndp\Device\ChannelType::HUMIDITY, 'ChGroup' => $i, ); $sd_info = MM('dpsb_channel')->where($where)->find(); if(!$sd_info){ continue; } //光照 $where = array( 'DeviceId'=>$device_id, 'ChType'=> \Zndp\Device\ChannelType::ILLINATIONUM, 'ChGroup' => $i, ); $gz_info = MM('dpsb_channel')->where($where)->find(); if(!$gz_info){ continue; } //卷膜1 $where = array( 'DeviceId'=>$device_id, 'ChType'=> \Zndp\Device\ChannelType::FILM_CONTROL, 'ChGroup' => $i, ); $jm_left_info = MM('dpsb_channel')->where($where)->order('ChNumber asc')->find(); if(!$jm_left_info){ continue; } //卷膜5 $where = array( 'DeviceId'=>$device_id, 'ChType'=> \Zndp\Device\ChannelType::FILM_CONTROL, 'ChGroup' => $i, ); $jm_right_info = MM('dpsb_channel')->where($where)->order('ChNumber desc')->find(); if(!$jm_right_info){ continue; } $channel_data = array( 'qw' => $qw_info['ChValue'], 'sd' => $sd_info['ChValue'], 'gz' => $gz_info['ChValue'], 'group' => $i+1, ); array_push($data['channels'],$channel_data); $roll_left_film_data = array( 'jm' => $jm_left_info['ChNumber'], 'name' => $jm_left_info['DisplayName'], 'group' => $i+1, ); array_push($data['rollfilm'],$roll_left_film_data); $roll_right_film_data = array( 'jm' => $jm_right_info['ChNumber'], 'name' => $jm_left_info['DisplayName'], 'group' => $i+1, ); array_push($data['rollfilm'],$roll_right_film_data); } return $data; } public function login( ){ //允许所有域名跨域访问 header('Access-Control-Allow-Origin: *'); //用户信息 $username = I('post.Username'); $password = I('post.Password'); //检查是否是操作员 $where = array( 'UserName'=>$username ); $userinfo = MM('uc_user')->where($where)->find(); if(!$userinfo){ json_fail('该用户不存在'); } /* //用户是否有权限 if($userinfo['RoleId'] != \Zndp\User\RoleEnum::FARM_OPERATOR){ json_fail('当前用户没有操作权限'); }*/ $login_list = array( \Zndp\User\RoleEnum::BASE_ADMINISTRATOR,//基地管理员 \Zndp\User\RoleEnum::BASE_LEADER,//基地负责人 ); if( !in_array($userinfo['RoleId'],$login_list) ){ json_fail('当前用户没有登录权限'); } //密码错误 $password = (new \Zndp\User\Util)->encPwd($password); if($password != $userinfo['Password']){ json_fail('用户名或者密码不正确'); } //保存用户cid $cid = I('post.cid'); if($cid){ $result = MM('uc_user')->where($where)->setField('ClientId',$cid); if($result === false){ json_fail('CID有误'); } } //登录成功 json_success('登陆成功',$userinfo['ID']); } public function allDevicesRealTimeData( ){ //允许所有域名跨域访问 header('Access-Control-Allow-Origin: *'); $userid = I('get.userid'); if(!$userid){ json_fail('用户信息不存在'); } /*$farmid = MM('uc_user')->where(array('ID'=>$userid))->getField('FarmId'); if(!$farmid){ json_fail('用户下没有农场'); }*/ // 新流程 $depart_id = MM('uc_user')->where(array('ID'=>$userid))->getField('OrganizationId'); if(!$depart_id){ json_fail('账号部门信息有误,请联系负责人'); } //获取部门下所有基地 $base_ids = \Zndp\User\Util::get_depart_farm($depart_id); $where = array('FarmId'=>array('IN',$base_ids)); $group_list = MM('dpsb_group')->where($where)->select(); if(!$group_list){ json_fail('设备组不存在'); } $device_data_list = array(); foreach($group_list as $row){ $device_list = MM('dpsb_device')->where(array('DeviceGroupId'=>$row['ID']))->select(); foreach($device_list as $device){ $device_data = $this->getDeivceRealData($device['ID']); array_push($device_data_list,$device_data); } } json_success('',$device_data_list); } private function getDeivceRealData( $device_id ){ $device_info = MM('dpsb_device')->where(array('ID'=>$device_id))->find(); if(!$device_info) return false; $data = array( "id" => $device_id, "title" => $device_info['WorkUnitName'], "addr" => $device_info['DeviceAddr'], "time" => $device_info['GatherTime'], "channels" => array(), "rollfilm" => array(), ); for($i=0;$i<3;$i++){ $channel_data = array(); //气温 $where = array( 'DeviceId'=>$device_id, 'ChType'=> \Zndp\Device\ChannelType::TEMPERATURE, 'ChGroup' => $i, ); $qw_info = MM('dpsb_channel')->where($where)->find(); if(!$qw_info){ continue; } //湿度 $where = array( 'DeviceId'=>$device_id, 'ChType'=> \Zndp\Device\ChannelType::HUMIDITY, 'ChGroup' => $i, ); $sd_info = MM('dpsb_channel')->where($where)->find(); if(!$sd_info){ continue; } //光照 $where = array( 'DeviceId'=>$device_id, 'ChType'=> \Zndp\Device\ChannelType::ILLINATIONUM, 'ChGroup' => $i, ); $gz_info = MM('dpsb_channel')->where($where)->find(); if(!$gz_info){ continue; } //卷膜1 $where = array( 'DeviceId'=>$device_id, 'ChType'=> \Zndp\Device\ChannelType::FILM_CONTROL, 'ChGroup' => $i, ); $jm_left_info = MM('dpsb_channel')->where($where)->order('ChNumber asc')->find(); if(!$jm_left_info){ continue; } //卷膜5 $where = array( 'DeviceId'=>$device_id, 'ChType'=> \Zndp\Device\ChannelType::FILM_CONTROL, 'ChGroup' => $i, ); $jm_right_info = MM('dpsb_channel')->where($where)->order('ChNumber desc')->find(); if(!$jm_right_info){ continue; } $channel_data = array( 'qw' => $qw_info['ChValue'], 'sd' => $sd_info['ChValue'], 'gz' => $gz_info['ChValue'], 'group' => $i+1, ); array_push($data['channels'],$channel_data); $roll_left_film_data = array( 'jm' => $jm_left_info['ChNumber'], 'name' => $jm_left_info['DisplayName'], 'group' => $i+1, ); array_push($data['rollfilm'],$roll_left_film_data); $roll_right_film_data = array( 'jm' => $jm_right_info['ChNumber'], 'name' => $jm_right_info['DisplayName'], 'group' => $i+1, ); array_push($data['rollfilm'],$roll_right_film_data); } return $data; } public function oneDeviceRealTimeData( ){ //允许所有域名跨域访问 header('Access-Control-Allow-Origin: *'); $userid = I('get.userid'); $deviceid = I('get.deviceid'); if(!$deviceid) json_fail('设备id不存在'); if(!$userid) json_fail('用户信息不存在'); $farmid = MM('uc_user')->where(array('ID'=>$userid))->getField('FarmId'); if(!$farmid) json_fail('用户下没有农场'); $group_list = MM('dpsb_group')->where(array('FarmId'=>$farmid))->select(); if(!$group_list) json_fail('设备组不存在'); $device_data = $this->getDeivceRealData($deviceid); json_success('',$device_data); } public function getAlarmData( ){ //允许所有域名跨域访问 header('Access-Control-Allow-Origin: *'); //获取登录用户部门id $userid = I('get.userid'); $where = array('ID'=>$userid); $user_info = MM('uc_user')->field('RoleId,OrganizationId')->where($where)->find(); //组装查询条件 if( $user_info['RoleId'] == \Zndp\User\RoleEnum::BASE_ADMINISTRATOR){//基地管理员只查看自己的大棚 $where = array( 'ManagerId' => $userid ); }else{//否则查出该部门下所有基地 $base_ids = \Zndp\User\Util::get_depart_farm($user_info['OrganizationId']); $where = array('FarmId'=>array('IN',$base_ids)); } //查出大棚告警日志 $farmland_ids = MM('dpyh_farmland')->field('ID')->where($where)->select(); $farmland_ids = array_column($farmland_ids,'ID'); $where = array( 'FarmlandId' => array('IN',$farmland_ids) ); $alarm_list = MM('dpsj_alarm_log')->where($where)->order('SendTime desc')->limit(100)->select(); if( $alarm_list ){ $alarm_list = array( 'success' => true, 'message' => '获取成功', 'data' => $alarm_list ); }else{ $alarm_list = array( 'success' => false, 'message' => '没有数据', 'data' => $alarm_list ); } echo json_encode($alarm_list,JSON_UNESCAPED_UNICODE); } public function allFarmlandRealTimeData( ){ //允许所有域名跨域访问 header('Access-Control-Allow-Origin: *'); $userid = I('get.userid'); if(!$userid){ json_fail('用户信息不存在'); } // 新流程 $user_info = MM('uc_user')->field('ID,RoleId,OrganizationId')->where(array('ID'=>$userid))->find(); if(!$user_info['OrganizationId']){ json_fail('账号部门信息有误,请联系负责人'); } if($user_info['RoleId'] == \Zndp\User\RoleEnum::BASE_ADMINISTRATOR ){ //基地管理员只能查看自己管理的大棚 $where = array('ManagerId'=>$user_info['ID']); $farmland_list = MM('dpyh_farmland')->field('ID,FarmlandName')->where($where)->select(); }else{ //获取部门下所有基地 $base_ids = \Zndp\User\Util::get_depart_farm($user_info['OrganizationId']); $where = array('FarmId'=>array('IN',$base_ids)); $farmland_list = MM('dpyh_farmland')->field('ID,FarmlandName')->where($where)->select(); } if(!$farmland_list){ json_fail('没有大棚存在'); } $farmland_data_list = array(); foreach($farmland_list as $farmland){ $where = array('FarmlandId'=>$farmland['ID']); $chgroup_list = MM('dpsb_chgroup')->field('DeviceId,ChGroup')->where($where)->select(); foreach($chgroup_list as $chgroup){ //传设备id和通道组用于获取通道 $channel_data = $this->getChgroupRealData($chgroup['DeviceId'],$chgroup['ChGroup'],$farmland); array_push($farmland_data_list,$channel_data); } } json_success('',$farmland_data_list); } private function getChgroupRealData( $device_id, $chgroup, $farmland_info ){ $where = array('DeviceId'=>$device_id,'ChGroup'=>$chgroup); //查找通道组下所有通道 $channel_list = MM('dpsb_channel')->field('ChNumber,DisplayName,ChType,ChValue,GatherTime')->where($where)->order('ChNumber asc')->select(); if(!$channel_list || !$farmland_info){ return false; } //拼接数据 $device_addr = MM('dpsb_device')->where(array('ID'=>$device_id))->getField('DeviceAddr'); $farmland_data = array( 'id' => $farmland_info['ID'], //用于传给详情页面 'title' => $farmland_info['FarmlandName'],//显示标题 'addr' => $device_addr,//设备序列号 //'time' => $channel_list['GatherTime'],//最新上报数据时间 "channels" => array(),//光照、温度、湿度传感器数据 "rollfilm" => array(),//卷膜机数据 ); $channel_data = array(); //初始化传感器数据 $jm_data = array(); //初始化卷膜机数据 foreach($channel_list as $channel){ $channel_unit = (new \Zndp\Device\ChannelType())->getTypeUnit($channel['ChType']);//传感器单位 if($channel['ChType'] == \Zndp\Device\ChannelType::TEMPERATURE ){ //气温+ $farmland_data['time'] = $channel['GatherTime'];//最新上报数据时间 $data = array( 'name' => $channel['DisplayName'], //名称 'value'=> $channel['ChValue'], //值 'unit' => $channel_unit, //单位 'icon' => 'icon_qw.png', //图标 ); array_push($channel_data,$data); //$channel_data[$channel['DisplayName']] = $channel['ChValue'] .' '.$channel_unit; }elseif($channel['ChType'] == \Zndp\Device\ChannelType::HUMIDITY){ //湿度 if( $farmland_data['time'] < $channel['GatherTime'] ){ $farmland_data['time'] = $channel['GatherTime'];//最新上报数据时间 } $data = array( 'name' => $channel['DisplayName'], //名称 'value'=> $channel['ChValue'], //值 'unit' => $channel_unit, //单位 'icon' => 'icon_sd.png', //图标 ); array_push($channel_data,$data); //$channel_data[$channel['DisplayName']] = $channel['ChValue'] .' '.$channel_unit; }elseif($channel['ChType'] == \Zndp\Device\ChannelType::ILLINATIONUM){ //光照 if( $farmland_data['time'] < $channel['GatherTime'] ){ $farmland_data['time'] = $channel['GatherTime'];//最新上报数据时间 } $data = array( 'name' => $channel['DisplayName'], //名称 'value'=> $channel['ChValue'], //值 'unit' => $channel_unit, //单位 'icon' => 'icon_gz.png', //图标 ); array_push($channel_data,$data); //$channel_data[$channel['DisplayName']] = $channel['ChValue'] .' '.$channel_unit; }elseif($channel['ChType'] == \Zndp\Device\ChannelType::FILM_CONTROL){ //卷膜机 $jm_name = \Zndp\Device\ChannelType::getDisplayName($channel['ChType'],$chgroup,$channel['ChNumber']); $jm_data[] = array( 'jm' => $channel['ChNumber'],//通道号 'name' => $jm_name, //卷膜机名称 'group' => $chgroup //通道组 ); }else{ } } $farmland_data['channels'] = $channel_data; $farmland_data['rollfilm'] = $jm_data; return $farmland_data; } public function oneFarmlandRealTimeData( ){ //允许所有域名跨域访问 header('Access-Control-Allow-Origin: *'); $userid = I('get.userid'); $farmland_id = I('get.farmland_id'); if(!$farmland_id || !$userid){ json_fail('用户或大棚id不存在'); } $where = array('ID'=>$farmland_id); $farmland_info = MM('dpyh_farmland')->field('ID,FarmlandName')->where($where)->find(); $where = array('FarmlandId'=>$farmland_id); $chgroup_info = MM('dpsb_chgroup')->field('DeviceId,ChGroup')->where($where)->find(); $channel_data = $this->getChgroupRealData($chgroup_info['DeviceId'],$chgroup_info['ChGroup'],$farmland_info); json_success('',$channel_data); } public function getAppAlarmData( ){ //允许所有域名跨域访问 header('Access-Control-Allow-Origin: *'); //获取登录用户部门id $userid = I('get.userid'); $where = array('ID'=>$userid); $user_info = MM('uc_user')->field('RoleId,OrganizationId')->where($where)->find(); //组装查询条件 if( $user_info['RoleId'] == \Zndp\User\RoleEnum::BASE_ADMINISTRATOR){//基地管理员只查看自己的大棚 $where = array( 'ManagerId' => $userid ); }else{//否则查出该部门下所有基地 $base_ids = \Zndp\User\Util::get_depart_farm($user_info['OrganizationId']); $where = array('FarmId'=>array('IN',$base_ids)); } //查出大棚告警日志 $farmland_ids = MM('dpyh_farmland')->field('ID')->where($where)->select(); $farmland_ids = array_column($farmland_ids,'ID'); $where = array( 'FarmlandId' => array('IN',$farmland_ids), 'Platform'=>1 ); $alarm_list = MM('dpsj_alarm_log')->where($where)->order('SendTime desc')->limit(100)->select(); if( $alarm_list ){ $alarm_list = array( 'success' => true, 'message' => '获取成功', 'data' => $alarm_list ); }else{ $alarm_list = array( 'success' => false, 'message' => '没有数据', 'data' => $alarm_list ); } echo json_encode($alarm_list,JSON_UNESCAPED_UNICODE); } }