sql_sort = 'DeviceId desc'; $list->sql_filter = function($search,&$cond){ $cond['DeviceId'] = I('get.id'); }; $list->row_filter = function(&$row) use ($list){ for($i=1;$i<=5;$i++){ $ontime = 'OnTime'.$i; $offtime = 'OffTime'.$i; $row[$ontime] = $this->timeToStr($row[$ontime]); $row[$offtime] = $this->timeToStr($row[$offtime]); } $device_id = I('get.id'); $where = array( 'DeviceId' => $device_id, 'ChNumber' => $row['Channel'] ); $cond = array( 'DeviceId' => $device_id, 'ChNumber' => $row['RefChannel'] ); $row['DeviceId_text'] = M('dpsb_device')->where(array('ID'=>$row['DeviceId']))->getField('WorkUnitName'); $channel_list = M('dpsb_channel')->where($where)->find(); $refchannel_list = M('dpsb_channel')->where($cond)->find(); $row['Channel'] = $channel_list['DisplayName']; $row['RefChannel'] = $refchannel_list['DisplayName']; if($row['Man'] == 0){ $row['Man'] = "自动"; }else{ $row['Man'] = "手动"; } if($row['SendResult'] == 0){ $row['SendResult'] = "成功"; } }; $list->toolbar_filter = function(&$button){ $deviceid = I('get.id'); if($button['icon'] == 'add'){ $button['url'] .= '&deviceid=' .$deviceid; //修改按钮网址 } }; $list->display($this); } function sys_addedit( ){ $form = new \Jiaruan\LigerIframeForm(); $form->before_add = function(&$data){ $data['DeviceId'] = I('get.deviceid'); for($i=1;$i<=5;$i++){ $ontime = 'OnTime'.$i; $offtime = 'OffTime'.$i; $patten = "/^([0-5]\d):([0-5]\d)$/"; //$patten = "(s((([0-1]?[0-9])|([1-2][0-3])):([0-5]?[0-9])))?$" if($data[$ontime]){ if(!preg_match($patten, $data[$ontime])){ json_fail($ontime .'时间格式不正确'); }else{ $data[$ontime] = $this->strToTime($data[$ontime]); } }else{ $data[$ontime] = -1; } if($data[$offtime]){ if(!preg_match($patten, $data[$offtime])){ json_fail($offtime .'时间格式不正确'); }else{ $data[$offtime] = $this->strToTime($data[$offtime]); } }else{ $data[$offtime] = -1; } } $addr = M('dpsb_device')->where(array('ID'=>$data['DeviceId']))->getField('DeviceAddr'); $host = '127.0.0.1'; $port = 10240; $socket = new Jms\Network\TcpClient($host,$port); $msg = array( 'method' => 'apiModifyAutoControlInfo', 'Addr' => $addr, 'channelNumber' => $data['Channel'], 'man' => $data['Man'], 'refChannel' => $data['RefChannel'], 'TimeEn' => $data['IsTime'], 'UpperLimit_Value' => $data['UpperLimitValue'], 'UpperLimit_State' => $data['UpperLimitState'], 'LowerLimit_Value' => $data['LowerLimitValue'], 'LowerLimit_State' => $data['LowerLimitState'], 'OnTime1' => $data['OnTime1'], 'OffTime1' => $data['OffTime1'], 'OnTime2' => $data['OnTime2'], 'OffTime2' => $data['OffTime2'], 'OnTime3' => $data['OnTime3'], 'OffTime3' => $data['OffTime3'], 'OnTime4' => $data['OnTime4'], 'OffTime4' => $data['OffTime4'], 'OnTime5' => $data['OnTime5'], 'OffTime5' => $data['OffTime5'], 'IssueTime' => $data['IssueTime'], ); $res = $socket->send(json_encode($msg)); if($res['success']){ json_success('下发成功'); }else{ json_fail($res['message']); } }; $form->before_display = function(&$data){ $deviceid = I('get.deviceid'); $data['IssueTime'] = 5; $data['DeviceName'] = MM('dpsb_device')->where(array('ID'=>$deviceid))->getField('WorkUnitName'); $data['Man'] = 1; $data['IsTime'] = 0; $data['UpperLimitState'] = 0; $data['LowerLimitState'] = 0; for($i=1;$i<=5;$i++){ $ontime = 'OnTime'.$i; $offtime = 'OffTime'.$i; $data[$ontime] = $this->timeToStr($data[$ontime]); $data[$offtime] = $this->timeToStr($data[$offtime]); } }; $form->before_save = function(&$data){ $data['DeviceId'] = I('get.deviceid'); for($i=1;$i<=5;$i++){ $ontime = 'OnTime'.$i; $offtime = 'OffTime'.$i; $patten = "/^([0-5]\d):([0-5]\d)$/"; if($data[$ontime]){ if(!preg_match($patten, $data[$ontime])){ json_fail($ontime .'时间格式不正确'); }else{ $data[$ontime] = $this->strToTime($data[$ontime]); } }else{ $data[$ontime] = -1; } if($data[$offtime]){ if(!preg_match($patten, $data[$offtime])){ json_fail($offtime .'时间格式不正确'); }else{ $data[$offtime] = $this->strToTime($data[$offtime]); } }else{ $data[$offtime] = -1; } } $addr = M('dpsb_device')->where(array('ID'=>$data['DeviceId']))->getField('DeviceAddr'); $host = '127.0.0.1'; $port = 10240; $socket = new Jms\Network\TcpClient($host,$port); $msg = array( 'method' => 'apiModifyAutoControlInfo', 'Addr' => $addr, 'channelNumber' => $data['Channel'], 'man' => $data['Man'], 'refChannel' => $data['RefChannel'], 'TimeEn' => $data['IsTime'], 'UpperLimit_Value' => $data['UpperLimitValue'], 'UpperLimit_State' => $data['UpperLimitState'], 'LowerLimit_Value' => $data['LowerLimitValue'], 'LowerLimit_State' => $data['LowerLimitState'], 'OnTime1' => $data['OnTime1'], 'OffTime1' => $data['OffTime1'], 'OnTime2' => $data['OnTime2'], 'OffTime2' => $data['OffTime2'], 'OnTime3' => $data['OnTime3'], 'OffTime3' => $data['OffTime3'], 'OnTime4' => $data['OnTime4'], 'OffTime4' => $data['OffTime4'], 'OnTime5' => $data['OnTime5'], 'OffTime5' => $data['OffTime5'], 'IssueTime' => $data['IssueTime'], ); $res = $socket->send(json_encode($msg)); if($res['success']){ json_success('下发成功'); }else{ json_fail($res['message']); } }; $form->form_filter = function(&$form){ //显示下拉数据 $deviceid = I('get.deviceid'); $type = new \Zndp\Device\Option; $controlchannel = $type->getControlChannelOption($deviceid); $channel = $type->getATypeChannelOption($deviceid); $form['fields']['Channel']['editor'] = array('options'=>$controlchannel); $form['fields']['RefChannel']['editor'] = array('options'=>$channel); }; $form->display($this); } public function strToTime( $time ){ $array = explode(':',$time); $data = $array[0]*60+$array[1]; return $data; } public function timeToStr( $time ){ if($time == -1){ $data = ''; }else{ $minute = $time%60; if($minute<10){ $minute = '0'.$minute; } $hour = ($time-$minute)/60; if($hour<10){ $hour = '0'.$hour; } $data = $hour.':'.$minute; } return $data; } function sys_list( ){ $list = new \Jms\Gui\ClGrid(); $list->sql_sort = 'DeviceId desc'; $list->sql_filter = function($search,&$cond){ //显示登录用户权限下所有策略 if($this->userinfo['OrganizationId']){ //非平台管理员 //基地管理员获取自己的策略 if( $this->userinfo['RoleId'] == \Zndp\User\RoleEnum::BASE_ADMINISTRATOR ){ $where = array('ManagerId'=>$this->userid); }else{ //否则获取登录角色下属所有基地管理员的操作记录 $base_ids = \Zndp\User\Util::get_depart_farm($this->userinfo['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'); $cond['FarmlandId'] = array('IN',$farmland_ids); } }; $list->row_filter = function(&$row) use ($list){ for($i=1;$i<=5;$i++){ $ontime = 'OnTime'.$i; $offtime = 'OffTime'.$i; $row[$ontime] = $this->timeToStr($row[$ontime]); $row[$offtime] = $this->timeToStr($row[$offtime]); } $where = array( 'DeviceId' => $row['DeviceId'], 'ChNumber' => $row['Channel'] ); $cond = array( 'DeviceId' => $row['DeviceId'], 'ChNumber' => $row['RefChannel'] ); $row['DeviceId_text'] = M('dpsb_device')->where(array('ID'=>$row['DeviceId']))->getField('WorkUnitName'); $channel_list = M('dpsb_channel')->where($where)->find(); $refchannel_list = M('dpsb_channel')->where($cond)->find(); $row['Channel'] = $channel_list['DisplayName']; $row['RefChannel'] = $refchannel_list['DisplayName']; if($row['Man'] == 0){ $row['Man'] = "自动"; }else{ $row['Man'] = "手动"; } if($row['SendResult'] == 0){ $row['SendResult'] = "成功"; } $row['IsTime_text'] = $row['IsTime'] ? '是' : '否'; }; $list->toolbar_filter = function(&$button){ $deviceid = I('get.id'); if($button['icon'] == 'add'){ $button['url'] .= '&deviceid=' .$deviceid; //修改按钮网址 } }; $list->display($this); } public function sys_del( ){ if (IS_AJAX) { $group_id = I('get.id'); if ( empty($group_id)) { json_fail('决策id不能为空'); } if(M('dpsb_policy')->where(array( 'ID' => $group_id ))->delete() === false){ json_fail('删除失败',''); } json_success('删除成功',''); } } function test( ){ } function sys_addedit_dp( ){ $form = new \Jms\Gui\ClForm(); $form->before_display = function(&$data){ $farmland_id = I('get.farmland_id'); $data['FarmlandName'] = MM('dpyh_farmland')->where(array('ID'=>$farmland_id))->getField('FarmlandName'); $data['IssueTime'] = $data['IssueTime'] ? : 5; //自动控制时间(秒) $data['Man'] = isset($data['Man']) ? $data['Man'] : 1; // 手动控制 $data['UpperLimitState'] = $data['UpperLimitState'] ? : 0;//不启用上限 $data['LowerLimitState'] = $data['LowerLimitState'] ? : 0;//不启用下限 $data['IsTime'] = $data['IsTime'] ? : 0; // 关闭定时控制 // 定时控制时间 for($i=1;$i<=5;$i++){ $ontime = 'OnTime'.$i; $offtime = 'OffTime'.$i; $data[$ontime] = $this->timeToStr($data[$ontime]); $data[$offtime] = $this->timeToStr($data[$offtime]); } }; $form->before_add = function(&$data){ $data['DeviceId'] = I('get.deviceid'); $data['FarmlandId'] = I('get.farmland_id'); $data['UpperLimitValue'] = floatval($data['UpperLimitValue']); $data['LowerLimitValue'] = floatval($data['LowerLimitValue']); for($i=1;$i<=5;$i++){ $ontime = 'OnTime'.$i; $offtime = 'OffTime'.$i; // 00:00 - 23:59 $patten = "/^(([0-1]\d)|([2][0-3])):[0-5]\d$/"; if($data[$ontime]){ if(!preg_match($patten, $data[$ontime])){ json_fail($ontime .'时间格式不正确'); }else{ $data[$ontime] = $this->strToTime($data[$ontime]); } }else{ $data[$ontime] = -1; } if($data[$offtime]){ if(!preg_match($patten, $data[$offtime])){ json_fail($offtime .'时间格式不正确'); }else{ $data[$offtime] = $this->strToTime($data[$offtime]); } }else{ $data[$offtime] = -1; } } //如果设备id为DeviceId,通道号为channelNumber的策略已存在,则修改 $where = array( 'DeviceId'=> $data['DeviceId'], 'Channel'=> $data['Channel'], ); $policy_id = M('dpsb_policy')->where($where)->getField('ID'); if( $policy_id ){ $where = array('ID'=>$policy_id); $result = M('dpsb_policy')->createSave($where,$data); if( $result === false ){ json_fail('添加失败,请稍后再试'); } } // 发送控制策略 $addr = M('dpsb_device')->where(array('ID'=>$data['DeviceId']))->getField('DeviceAddr'); $host = '127.0.0.1'; $port = 10240; $socket = new Jms\Network\TcpClient($host,$port); $msg = array( 'method' => 'apiModifyAutoControlInfo', 'Addr' => $addr, 'channelNumber' => $data['Channel'], 'man' => $data['Man'], 'refChannel' => $data['RefChannel'], 'TimeEn' => $data['IsTime'], 'UpperLimit_Value' => $data['UpperLimitValue'], 'UpperLimit_State' => $data['UpperLimitState'], 'LowerLimit_Value' => $data['LowerLimitValue'], 'LowerLimit_State' => $data['LowerLimitState'], 'OnTime1' => $data['OnTime1'], 'OffTime1' => $data['OffTime1'], 'OnTime2' => $data['OnTime2'], 'OffTime2' => $data['OffTime2'], 'OnTime3' => $data['OnTime3'], 'OffTime3' => $data['OffTime3'], 'OnTime4' => $data['OnTime4'], 'OffTime4' => $data['OffTime4'], 'OnTime5' => $data['OnTime5'], 'OffTime5' => $data['OffTime5'], 'IssueTime' => $data['IssueTime'], ); $res = $socket->send(json_encode($msg)); $data['SendTime'] = date('Y-m-d H:i:s'); //添加到dpsj_policy日志表中 $data['SendResult'] = $res['message']; $result = M('dpsj_policy')->createAdd($data); if($res['success']){ if($result !== false){ $msg = '下发成功,策略日志添加成功'; }else{ $msg = '下发成功,策略日志添加失败'; } json_success($msg); }else{ if($result !== false){ $msg = '下发失败,策略日志添加成功'; }else{ $msg = '下发失败,策略日志添加失败'; } json_fail($msg); } }; $form->before_modify = function(&$data){ $data['DeviceId'] = I('get.deviceid'); $data['FarmlandId'] = I('get.farmland_id'); $data['UpperLimitValue'] = floatval($data['UpperLimitValue']); $data['LowerLimitValue'] = floatval($data['LowerLimitValue']); for($i=1;$i<=5;$i++){ $ontime = 'OnTime'.$i; $offtime = 'OffTime'.$i; $patten = "/^([0-5]\d):([0-5]\d)$/"; if($data[$ontime]){ if(!preg_match($patten, $data[$ontime])){ json_fail($ontime .'时间格式不正确'); }else{ $data[$ontime] = $this->strToTime($data[$ontime]); } }else{ $data[$ontime] = -1; } if($data[$offtime]){ if(!preg_match($patten, $data[$offtime])){ json_fail($offtime .'时间格式不正确'); }else{ $data[$offtime] = $this->strToTime($data[$offtime]); } }else{ $data[$offtime] = -1; } } }; $form->after_modify = function($data){ // 发送控制策略 $addr = M('dpsb_device')->where(array('ID'=>$data['DeviceId']))->getField('DeviceAddr'); $host = '127.0.0.1'; $port = 10240; $socket = new Jms\Network\TcpClient($host,$port); $msg = array( 'method' => 'apiModifyAutoControlInfo', 'Addr' => $addr, 'channelNumber' => $data['Channel'], 'man' => $data['Man'], 'refChannel' => $data['RefChannel'], 'TimeEn' => $data['IsTime'], 'UpperLimit_Value' => $data['UpperLimitValue'], 'UpperLimit_State' => $data['UpperLimitState'], 'LowerLimit_Value' => $data['LowerLimitValue'], 'LowerLimit_State' => $data['LowerLimitState'], 'OnTime1' => $data['OnTime1'], 'OffTime1' => $data['OffTime1'], 'OnTime2' => $data['OnTime2'], 'OffTime2' => $data['OffTime2'], 'OnTime3' => $data['OnTime3'], 'OffTime3' => $data['OffTime3'], 'OnTime4' => $data['OnTime4'], 'OffTime4' => $data['OffTime4'], 'OnTime5' => $data['OnTime5'], 'OffTime5' => $data['OffTime5'], 'IssueTime' => $data['IssueTime'], ); $res = $socket->send(json_encode($msg)); $data['SendTime'] = date('Y-m-d H:i:s'); //添加到dpsj_policy日志表中 $data['SendResult'] = $res['message']; unset($data['ID']); $result = M('dpsj_policy')->createAdd($data); if($res['success']){ if($result !== false){ $msg = '下发成功,策略日志添加成功'; }else{ $msg = '下发成功,策略日志添加失败'; } json_success($msg); }else{ if($result !== false){ $msg = '下发失败,策略日志添加成功'; }else{ $msg = '下发失败,策略日志添加失败'; } json_fail($msg); } }; $form->form_filter = function(&$form){ $deviceid = I('get.deviceid'); $chgroup = I('get.chgroup'); $type = new \Zndp\Device\Option; $controlchannel = $type->getControlChannelOption($deviceid,$chgroup); $form['fields']['Channel']['editor'] = array('options'=>$controlchannel);//初始化控制通道 $channel = $type->getATypeChannelOption($deviceid,$chgroup); $form['fields']['RefChannel']['editor'] = array('options'=>$channel); //初始化参考通道 }; $form->display($this); } function sys_farmland_list( ){ $farmland_id = I('get.farmland_id'); $where = array('FarmlandId'=>$farmland_id); $chgroup_info = M('dpsb_chgroup')->field('DeviceId,ChGroup,FarmlandId')->where($where)->find(); $list = new \Jms\Gui\ClGrid(); $list->sql_sort = 'SendTime desc'; $list->sql_filter = function($search,&$cond)use($chgroup_info){ //显示绑定该大棚的设备组中的通道策略 $where = array('DeviceId'=>$chgroup_info['DeviceId'],'ChGroup'=>$chgroup_info['ChGroup']); $channel_list = M('dpsb_channel')->field('ChNumber')->where($where)->select(); $channels = array_column($channel_list,'ChNumber'); $cond['DeviceId'] = $chgroup_info['DeviceId']; $cond['Channel'] = array('IN',$channels); }; $list->row_filter = function(&$row) use ($list,$chgroup_info){ $row['FarmlandId'] = $chgroup_info['FarmlandId'];//传给添加,编辑策略表单 $row['ChGroup'] = $chgroup_info['ChGroup'];//传给添加,编辑策略表单 for($i=1;$i<=5;$i++){ $ontime = 'OnTime'.$i; $offtime = 'OffTime'.$i; $row[$ontime] = $this->timeToStr($row[$ontime]); $row[$offtime] = $this->timeToStr($row[$offtime]); } //设备名称 $row['DeviceId_text'] = M('dpsb_device')->where(array('ID'=>$row['DeviceId']))->getField('WorkUnitName'); //控制通道名称 $where = array( 'DeviceId' => $row['DeviceId'], 'ChNumber' => $row['Channel'] ); $dpsb_channel = M('dpsb_channel'); $row['Channel_text'] = $dpsb_channel->where($where)->getField('DisplayName'); //参考通道名称 $cond = array( 'DeviceId' => $row['DeviceId'], 'ChNumber' => $row['RefChannel'] ); $row['RefChannel_text'] = $dpsb_channel->where($cond)->getField('DisplayName'); // 上限参考状态 $row['UpperLimitState_text'] = $row['UpperLimitState'] ? '启用' : '停用'; // 下限参考状态 $row['LowerLimitState_text'] = $row['LowerLimitState'] ? '启用' : '停用'; //控制状态 if($row['Man'] == 0){ $row['Man'] = "自动"; }elseif($row['Man'] == 1){ $row['Man'] = "手动"; } // 定时控制状态 if($row['IsTime'] == 0){ $row['IsTime_text'] = '关闭'; }elseif($row['IsTime'] == 1){ $row['IsTime_text'] = '开启'; } //发送状态 if($row['SendResult'] == 0){ $row['SendResult'] = "成功"; } }; $list->toolbar_filter = function(&$button)use($chgroup_info){ if($button['icon'] == 'add'){ $button['url'] .= '&deviceid=' .$chgroup_info['DeviceId'].'&farmland_id=' .$chgroup_info['FarmlandId'] .'&chgroup=' .$chgroup_info['ChGroup']; //修改按钮网址 } }; $list->display($this); } }