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);
}
}