123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596 |
- <?php
- class DpsbPolicyAction extends CommonAction {
- const tableName = 'dpsb_policy';
- const pkName = 'ID';
-
-
- function sys_device_list( ){
- $list = new \Jms\Gui\ClGrid();
- $list->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'] = "<span style = 'color:green'>自动</span>";
- }else{
- $row['Man'] = "<span style = 'color:gray'>手动</span>";
- }
- if($row['SendResult'] == 0){
- $row['SendResult'] = "<span style = 'color:green'>成功</span>";
- }
- };
- $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'] = "<span style = 'color:green'>自动</span>";
- }else{
- $row['Man'] = "<span style = 'color:gray'>手动</span>";
- }
- if($row['SendResult'] == 0){
- $row['SendResult'] = "<span style = 'color:green'>成功</span>";
- }
- $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'] = "<span style = 'color:green'>自动</span>";
- }elseif($row['Man'] == 1){
- $row['Man'] = "<span style = 'color:gray'>手动</span>";
- }
- // 定时控制状态
- if($row['IsTime'] == 0){
- $row['IsTime_text'] = '关闭';
- }elseif($row['IsTime'] == 1){
- $row['IsTime_text'] = '开启';
- }
- //发送状态
- if($row['SendResult'] == 0){
- $row['SendResult'] = "<span style = 'color:green'>成功</span>";
- }
- };
- $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);
- }
-
- }
|