'可用',
2 => '不可用',
);
$front = array
(
1 => '可用',
2 => '不可用',
);
$show_type = array
(
1 => '数据区',
2 => '状态区',
100 => '不显示',
);
$type = array
(
1 => '否',
2 => '是',
);
$status = array
(
1 => '显式',
2 => '隐式',
);
$oper = array
(
'open' => '启动',
'close' => '关闭',
'other' => '普通指令',
'set' => '设备设置',
'device' => '设备状态码',
//'none' => '非直接发送指令',
//'camera' => '摄像头',
);
$id = Dever::input('where_id');
$element = Dever::input('option_element_id');
$code = function() use ($id, $element)
{
$array = array(-1 => array('name' => '非互斥命令码'));
$code = Dever::load('device/code-getAll', array('option_id' => $id, 'option_element_id' => $element));
if($code)
{
$array += $code;
}
return $array;
};
$next_code = function() use ($id, $element)
{
$array = array(-1 => array('name' => '无下级命令码'));
$code = Dever::load('device/code-getAll', array('option_id' => $id, 'option_element_id' => $element));
if($code)
{
$array += $code;
}
return $array;
};
$proxy_code = function() use ($id, $element)
{
$array = array(-1 => array('name' => '无代理命令码'));
$code = Dever::load('device/code-getAll', array('option_id' => $id, 'option_element_id' => $element));
if($code)
{
$array += $code;
}
return $array;
};
$main_code = function() use ($id, $element)
{
$array = array(-1 => array('name' => '无主任务命令码'));
$code = Dever::load('device/code-getAll', array('option_id' => $id, 'option_element_id' => $element));
if($code)
{
$array += $code;
}
return $array;
};
return array
(
# 表名
'name' => 'code',
# 显示给用户看的名称
'lang' => '命令码设置',
'menu' => false,
'start' => array
(
'update' => 'device/code.save',
),
'end' => array
(
'insert' => 'device/code.save',
),
# 数据结构
'struct' => array
(
'id' => array
(
'type' => 'int-11',
'name' => '命令码ID',
'default' => '',
'desc' => '',
'match' => 'is_numeric',
'search' => 'order',
'order' => 'desc',
//'list' => true,
),
'name' => array
(
'type' => 'varchar-32',
'name' => '操作名称',
'default' => '',
'desc' => '请输入操作名称',
'match' => 'is_string',
'update' => 'text',
'search' => 'fulltext',
'list' => true,
),
'oper' => array
(
'type' => 'varchar-32',
'name' => '操作方式-前台根据这个来判断具体的命令码,请准确选择,如果选择非直接发送指令,那么下述发送指令不会立刻发送,需要等到条件满足时才会发送,比如旋转圈数',
'default' => 'other',
'desc' => '操作方式',
'match' => 'option',
'update' => 'radio',
'option' => $oper,
'search' => 'fulltext',
'list' => true,
),
'element_id' => array
(
'type' => 'int-11',
'name' => '所属元件',
'default' => Dever::input('option_element_id'),
'desc' => '请选择所属元件',
'match' => 'is_numeric',
'update' => 'hidden',
),
'type' => array
(
'type' => 'tinyint-1',
'name' => '是否数据指令-数据指令用于数据计算,可根据数据记录,进行公式或者其他方式计算',
'default' => '1',
'desc' => '请选择是否数据指令',
'match' => 'is_numeric',
'option' => $type,
'update' => 'radio',
//'list' => true,
# 开启显示控制,可以控制下边的表单
'show' => 'type',
),
'data' => array
(
'type' => 'varchar-500',
'name' => '数据指令名称-仅用于数据计算,根据以下填写的计算公式,计算出数据,本字段为该数据的名称,如水压,多个名称请用@隔开',
'default' => '',
'desc' => '请输入数据指令名称',
'match' => 'is_string',
'update' => 'textarea',
//'search' => 'fulltext',
//'list' => true,
'show' => array('type_2'),
),
'gs' => array
(
'type' => 'varchar-200',
'name' => '数据计算公式-根据该公式计算出当前回传回得数据,{b}为本次回传数据,多个请用@隔开',
'default' => '',
'desc' => '请输入数据计算公式',
'match' => 'is_string',
'update' => 'textarea',
//'search' => 'fulltext',
//'list' => true,
'show' => array('type_2'),
),
'dw' => array
(
'type' => 'varchar-200',
'name' => '数据单位-显示出来的数据单位,多个请用@隔开',
'default' => '',
'desc' => '显示出来的数据单位',
'match' => 'option',
'update' => 'textarea',
//'search' => 'fulltext',
//'list' => true,
'show' => array('type_2'),
),
//100102(.*)@200203(.*)||00 10@01 20||阀门1状态(1开0关) 阀门1通电时间(10ms)@阀门2状态(1开0关) 阀门2通电时间(10ms)||01=开&00=关@time
'send' => array
(
'type' => 'text-255',
'name' => '发送指令-多个指令用换行隔开,如果有后续指令[如at指令],请用|AT|隔开,会依次向服务器发送这些指令,如果选择设备设置,此处的变量请用(.*)代替,如10 01 03(.*)03 03,带上||则为后续设置,此时多个指令用@隔开,注意与换行的区别',
'default' => '',
'desc' => '请输入发送指令',
'match' => 'option',
'update' => 'textarea',
'list_name' => '指令',
'list' => '"发送:{send}
接收:{receive}" . ({type} != 1 ? "
数据指令:{data}" : "")',
//'list' => 'table',
'modal' => '查看详情',
),
'send_name' => array
(
'type' => 'text-255',
'name' => '发送指令对应的名称-如果定义了这个,则会取代上述"操作名称",多个指令名称用换行隔开,除非直接发送指令外,其他指令均需和上边的发送指令一一对应',
'default' => '',
'desc' => '请输入发送指令名称',
'match' => 'option',
'update' => 'textarea',
),
'receive' => array
(
'type' => 'text-255',
'name' => '固定接收指令-多个指令用换行隔开,注意,本指令可用于数据计算,必须写入固定的接收指令部分,变化部分请用(.*)代替,如0103020000b844,可将0000b844替换为(.*),加|为配置信息,第一为取多少个数据(4个字节为一个数据)',
'default' => '',
'desc' => '请输入接收指令',
'match' => 'option',
'update' => 'textarea',
//'list' => true,
),
'reorder' => array
(
'type' => 'int-11',
'name' => '排序-数值越大越靠前',
'default' => '1',
'desc' => '请输入排序',
'match' => 'option',
'update' => 'text',
'search' => 'order',
'list' => true,
'order' => 'desc',
'edit' => true,
),
'time' => array
(
'type' => 'int-11',
'name' => '发送时间间隔-秒级别,默认为0不周期性发送,大于0则按照本时间间隔进行周期性发送指令,需要计划任务支持',
'default' => '0',
'match' => 'is_numeric',
'desc' => '请输入时间间隔',
'update' => 'text',
'list' => true,
'edit' => true,
),
'code_id' => array
(
'type' => 'int-11',
'name' => '互斥命令码-选择互斥的命令码,同时只能存在一个,如启动和关闭,启动命令码执行之后,关闭才能执行',
'default' => '-1',
'desc' => '互斥命令码',
'match' => 'is_numeric',
'option' => $code,
'update' => 'select',
'list' => true,
//'edit' => 'yes',
),
'next_code_id' => array
(
'type' => 'int-11',
'name' => '下级命令码-选择下级命令码,则本次命令码在执行成功之后,会发送后续的下级命令码。适用于在关闭时,同时关闭多项命令码的操作。',
'default' => '-1',
'desc' => '下级命令码',
'match' => 'is_numeric',
'option' => $next_code,
//'update' => 'select',
//'list' => true,
//'edit' => 'yes',
),
'proxy_code_id' => array
(
'type' => 'int-11',
'name' => '代理命令码-选择代理命令码,在执行该命令码时,同步执行代理命令码,注意和下级命令码不同,代理命令码不依托于执行状态。',
'default' => '-1',
'desc' => '代理命令码',
'match' => 'is_numeric',
'option' => $proxy_code,
//'update' => 'select',
//'list' => true,
//'edit' => 'yes',
),
'second' => array
(
'type' => 'varchar-30',
'name' => '代理或下级命令码执行延时-单位为秒,添加后执行该命令码将会延时',
'default' => '0.5',
'desc' => '代理或下级命令码执行延时',
'match' => 'option',
//'update' => 'text',
),
'main_code_id' => array
(
'type' => 'int-11',
'name' => '主任务命令码-当当前命令码执行成功后无法区分状态时(比如很多命令码返回的命令码都是一个),可以启用主任务命令码来区分是哪个主进程',
'default' => '-1',
'desc' => '主任务命令码',
'match' => 'is_numeric',
'option' => $main_code,
//'update' => 'select',
//'list' => true,
//'edit' => 'yes',
),
'status' => array
(
'type' => 'tinyint-1',
'name' => '命令码类型-显式命令码会在点击按钮后立刻发送,隐式命令码则不会立刻发送执行,一般是在下级命令码中设置为隐式命令码',
'default' => '1',
'desc' => '请选择状态',
'match' => 'is_numeric',
'option' => $status,
//'update' => 'radio',
'list' => true,
'edit' => true,
),
'show_type' => array
(
'type' => 'int-11',
'name' => '显示位置',
'default' => '1',
'desc' => '请选择显示位置',
'match' => 'is_numeric',
'option' => $show_type,
'update' => 'radio',
//'list' => true,
),
'state' => array
(
'type' => 'tinyint-1',
'name' => '状态',
'default' => '1',
'desc' => '请选择状态',
'match' => 'is_numeric',
'option' => $option,
'update' => 'radio',
'list' => true,
),
'cdate' => array
(
'type' => 'int-11',
'name' => '录入时间',
'match' => array('is_numeric', time()),
'desc' => '',
# 只有insert时才生效
'insert' => true,
//'list' => 'date("Y-m-d H:i:s", {cdate})',
),
),
'alter' => array
(
1 => array
(
array('update', 'data', 'data', 'varchar-255 数据指令名称'),//更新字段
),
2 => array
(
array('update', 'data', 'data', 'varchar-500 数据指令名称'),//更新字段
),
3 => array
(
array('update', 'gs', 'gs', 'varchar-500 公式'),//更新字段
),
'version' => 3,
),
# request 请求接口定义
'request' => array
(
'info' => array
(
# 匹配的正则或函数 选填项
'where' => array
(
'state' => 1,
'id' => 'yes',
),
'type' => 'one',
),
# 取所有菜单
'all' => array
(
'where' => array
(
'state' => 1,
'element_id' => 'yes',
),
'type' => 'all',
'order' => array('reorder` desc,`id', 'desc'),
'col' => '*|id',
),
'getAll' => array
(
'option' => array
(
//'state' => 1,
'id' => array('yes', '!='),
'element_id' => 'yes',
),
'type' => 'all',
'order' => array('reorder` desc,`id', 'desc'),
'col' => '*|id',
),
'getIds' => array
(
'where' => array
(
'state' => 1,
'type' => 2,
'id' => array('yes', 'in'),
),
'type' => 'all',
'order' => array('reorder` desc,`id', 'desc'),
'col' => '*|id',
),
'getIdsData' => array
(
'where' => array
(
'state' => 1,
'type' => 2,
'id' => array('yes', 'in'),
),
'type' => 'all',
'order' => array('reorder` desc,`id', 'desc'),
'col' => 'id,data as name|id',
),
# 根据id获取
'getData' => array
(
'where' => array
(
//'state' => 1,
//'type' => 2,
'element_id' => 'yes',
),
'type' => 'all',
'col' => '*',
),
# 根据id获取
'getDataByIds' => array
(
'where' => array
(
//'state' => 1,
//'type' => 2,
'id' => array('yes', 'in'),
),
'type' => 'all',
'col' => '*',
),
),
);