DpyhFarmlandAction.class.php 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690
  1. <?php
  2. class DpyhFarmlandAction extends CommonAction {
  3. const tableName = 'dpyh_farmland';
  4. const pkName = 'ID';
  5. function sys_list( ){
  6. $list = new \Jms\Gui\ClGrid();
  7. $list->sql_sort = 'ID desc';
  8. $list->right_filter = function($right,$type){
  9. $page = $_SERVER['PATH_INFO'];
  10. return \Jms\Ucenter\Right::defaultFilter($page,$right,$type);
  11. };
  12. $list->sql_filter = function($search,&$cond){
  13. $level = I('get.lv');//获取当前部门等级
  14. $depart_id = I('get.id');
  15. if($depart_id){
  16. if($level == \Zndp\User\DepartEnum::PLANT_BASE){ //部门为基地
  17. $cond['FarmId'] = $depart_id;
  18. }else{ //其他上级部门
  19. //根据传进来的部门id获取其子部门下所有大棚
  20. $farm_ids = \Zndp\User\Util::get_depart_farm($depart_id);
  21. $cond['FarmId'] = array('IN',$farm_ids);
  22. }
  23. }else{ // 账号登录
  24. if($this->userinfo['OrganizationId']){
  25. //非平台管理员,获取登录角色下所有基地内的大棚
  26. $base_ids = \Zndp\User\Util::get_depart_farm($this->userinfo['OrganizationId']);
  27. $cond['FarmId'] = array('IN',$base_ids);
  28. }
  29. }
  30. //搜索条件
  31. if($search['FarmlandName']){ //按大棚名称搜索
  32. $cond['FarmlandName'] = array('LIKE',"%{$search['FarmlandName']}%");
  33. }
  34. if($search['FarmlandNum']){ //按大棚编号搜索
  35. $cond['FarmlandNum'] = array('LIKE',"%{$search['FarmlandNum']}%");
  36. }
  37. };
  38. $list->row_filter = function(&$row)use($list){
  39. $row['BaseId'] = $row['FarmId'];//基地id,传过去用来获取该基地下设备进行绑定
  40. $type_arr = array(1=>'大棚','大田');
  41. $row['FarmlandType_text'] = $type_arr[$row['FarmlandType']];
  42. $where = array('ID'=>$row['FarmId']);
  43. $row['FarmId_text'] = M('uc_organization')->where($where)->getField('DepartName');
  44. //管理员可选择
  45. $where = array('ID'=>$row['ManagerId']);
  46. $realname = M('uc_user')->where($where)->getField('RealName') ?:'点击设置';
  47. $url = '?s=dpyh_farmland/sys_set_manager&id='.$row['ID'].'&base_id='.$row['FarmId'];
  48. $row['ManagerId_text'] = $list->renderPopup($realname,$url,'设置管理员',400,250,1);
  49. $row['Comment'] = $list->renderXEditableTextarea('备注',$row,'Comment');
  50. //绑定设备
  51. $where = array('FarmlandId'=>$row['ID']);
  52. $chgroup_info = MM('dpsb_chgroup')->field('DeviceId,ChGroup')->where($where)->find();
  53. $row['DeviceId'] = $chgroup_info['DeviceId']; //传给统计数据图形页面
  54. if($chgroup_info){
  55. $where = array('ID'=>$chgroup_info['DeviceId']);
  56. $device_name = MM('dpsb_device')->where($where)->getField('WorkUnitName');
  57. $row['BindDevice'] = $device_name . ' - 通道组'.$chgroup_info['ChGroup'];
  58. }
  59. };
  60. $list->toolbar_filter = function(&$button){
  61. if($button['icon'] == 'add'){
  62. $button['url'] .= '&parent_id=' .I('get.id');
  63. }
  64. };
  65. $list->display($this);
  66. }
  67. function sys_addedit( ){
  68. $form = new \Jms\Gui\ClForm();
  69. $form->before_save = function(&$data){
  70. $where = array('ID'=>$data['FarmId']);
  71. $level = M('uc_organization')->where($where)->getField('Level');
  72. if( $level != \Zndp\User\DepartEnum::PLANT_BASE ){ //不是基地
  73. json_fail('大棚上级部门应为基地');
  74. }
  75. };
  76. $form->after_modify = function($data){
  77. //修改redis-dpyh_alarm_set中的FarmlandName和FarmId
  78. $redis = Redis('dpyh_alarm_set','hash');
  79. $key = 'FarmlandId-' .$data['ID'];
  80. $val = array(
  81. "FarmlandName" => $data['FarmlandName'],
  82. "HighTempLimit" => $data['HighTempLimit'],
  83. "MaxTempExceed" => $data['MaxTempExceed'],
  84. "LowTempLimit" => $data['LowTempLimit'],
  85. "LowTempExceed" => $data['LowTempExceed'],
  86. "IsUseTempLimit" => $data['IsUseTempLimit'],
  87. "SmsInterval" => $data['SmsInterval'],
  88. "FarmId" => $data['FarmId'],
  89. );
  90. $val = json_encode($val, JSON_UNESCAPED_UNICODE);
  91. $hash = array($key => $val);
  92. $redis->push($hash);
  93. };
  94. $form->form_filter = function(&$form){
  95. // 初始化部门下拉选项
  96. $parent_id = I('get.parent_id');
  97. if(!$parent_id){
  98. $parent_id = $this->userinfo['OrganizationId'];
  99. }
  100. // 如果是基地点进来
  101. $where = array('ID'=>$parent_id);
  102. $field = 'ID as id,DepartName as text,Level';
  103. $base_info = M('uc_organization')->field($field)->where($where)->find();
  104. if($base_info['Level'] == \Zndp\User\DepartEnum::PLANT_BASE ){
  105. unset($base_info['Level']);
  106. $depart_list = array($base_info);
  107. }else{
  108. $zndp_util = new \Zndp\User\Util();
  109. $depart_list = $zndp_util->get_depart_option($parent_id);
  110. }
  111. $form['fields']['FarmId']['editor'] = array('options'=>$depart_list);
  112. };
  113. $form->display($this);
  114. }
  115. public function sys_del( ){
  116. $grid = new \Jiaruan\GridData();
  117. $grid->before_delete = function($data){
  118. //删除前对绑定的设备进行解绑
  119. $where = array('FarmlandId'=>$data['ID']);
  120. $res = M('dpsb_chgroup')->where($where)->setField('FarmlandId',-1);
  121. if($res === false){
  122. json_fail('设备解绑失败');
  123. }
  124. };
  125. $grid->deleteByPk($this);
  126. }
  127. function sys_nav_tree( ){
  128. //获取导航树数据
  129. $fields = 'ID as id,ParentID as pId,DepartName as name,Level as level';
  130. $zndp_util = new \Zndp\User\Util();
  131. $depart_id = $this->userinfo['OrganizationId'];
  132. $depart_list = $zndp_util->get_depart_option($depart_id,$fields,'name',false);
  133. if(empty($depart_list)){
  134. //没有数据,显示该
  135. $depart_list[0] = array('id'=>'','pid'=>'','name'=>'没有组织','direct_url'=>'');
  136. }else{
  137. for($i=0; $i<count($depart_list); $i++){// 放入链接
  138. /*if($depart_list[$i]['level'] <= \Zndp\User\DepartEnum::WORK_STATION){
  139. $depart_list[$i]['open']= true;
  140. }*/
  141. $depart_list[$i]['open']= true;
  142. $depart_list[$i]['direct_url'] = '?s=dpyh_farmland/sys_list&lv='.$depart_list[$i]['level'];
  143. }
  144. }
  145. //平台,超级管理员,插入所有大棚列表
  146. $admin_arr = array(\Zndp\User\RoleEnum::GENERAL_ADMINISTRATOR,\Zndp\User\RoleEnum::SUPER_ADMINISTRATOR);
  147. if( in_array($this->userinfo['RoleId'], $admin_arr) ){
  148. $all_list = array('id'=>'0','pId'=>'','name'=>'所有大棚','direct_url'=>'?s=dpyh_farmland/sys_list','open'=>true);
  149. array_unshift($depart_list,$all_list);
  150. }
  151. $this->assign('title','大棚管理');
  152. $this->assign('tree_data',$depart_list);
  153. $this->display();
  154. }
  155. function set_screen_msg_old( ){
  156. $form = new \Jms\Gui\ClForm();
  157. $shed = array('FirstCrop','SecondCrop','ThirdCrop','FourthCrop');
  158. $form->before_display = function(&$data) use($shed){
  159. // 查出绑定的通道组
  160. $where = array('FarmlandId'=>$data['ID']);
  161. $chgroup_list = M('dpsb_chgroup')->field('DeviceId,ChGroup')->where($where)->select();
  162. $device = M('dpsb_device');
  163. foreach($chgroup_list as $key => $val){ //可能绑定有多个设备通道
  164. $where = array(
  165. 'ID' => $val['DeviceId'],
  166. );
  167. $screen_msg = $device->where($where)->getField($shed[$val['ChGroup']]);
  168. if( $screen_msg ){ //如果有绑定控制设备
  169. $shed_data = json_decode($screen_msg, true);
  170. $data = array(
  171. 'num' => ($shed_data['num'.($val['ChGroup']+1)]),
  172. 'variety' => $shed_data['variety'.($val['ChGroup']+1)],
  173. 'farmer' => $shed_data['farmer'.($val['ChGroup']+1)],
  174. 'output' => $shed_data['output'.($val['ChGroup']+1)],
  175. 'unit' => $shed_data['unit'.($val['ChGroup']+1)]
  176. );
  177. }
  178. }
  179. if(!$data['num']){
  180. $data['num'] = $data['FarmlandNum'];
  181. }
  182. };
  183. $form->before_modify = function(&$data) use($shed){
  184. $farmland_id = I('get.id');
  185. // 查出绑定的通道组
  186. $where = array('FarmlandId'=>$farmland_id);
  187. $chgroup_list = M('dpsb_chgroup')->field('DeviceId,ChGroup')->where($where)->select();
  188. $device = M('dpsb_device');
  189. foreach($chgroup_list as $key => $val){ //可能绑定有多个设备通道
  190. $where = array(
  191. 'ID' => $val['DeviceId'],
  192. );
  193. $count = $device->where($where)->count();
  194. if( $count > 0 ){ //如果有绑定控制设备
  195. $shed_data = array(
  196. 'num'.($val['ChGroup']+1) => $data['num'],
  197. 'variety'.($val['ChGroup']+1) =>$data['variety'],
  198. 'farmer'.($val['ChGroup']+1) =>$data['farmer'],
  199. 'output'.($val['ChGroup']+1) =>$data['output'],
  200. 'unit'.($val['ChGroup']+1) =>$data['unit']
  201. );
  202. $shed_data = json_encode($shed_data, JSON_UNESCAPED_UNICODE);
  203. $result = $device->where($where)->setField( $shed[$val['ChGroup']] , $shed_data);
  204. if($result){
  205. json_success('设置成功');
  206. }
  207. }
  208. }
  209. json_fail('没有更改或没有绑定设备');
  210. };
  211. $form->display($this);
  212. }
  213. function dzp_nav_tree( ){
  214. //获取导航树数据
  215. $fields = 'ID as id,ParentID as pId,DepartName as name,Level as level';
  216. $zndp_util = new \Zndp\User\Util();
  217. $depart_id = $this->userinfo['OrganizationId'];
  218. $depart_list = $zndp_util->get_depart_option($depart_id,$fields,'name',false);
  219. if(empty($depart_list)){
  220. //没有数据,显示该
  221. $depart_list[0] = array('id'=>'','pid'=>'','name'=>'没有组织','direct_url'=>'');
  222. }else{
  223. for($i=0; $i<count($depart_list); $i++){// 放入链接
  224. if($depart_list[$i]['level'] <= \Zndp\User\DepartEnum::WORK_STATION){
  225. $depart_list[$i]['open']= true;
  226. }
  227. $depart_list[$i]['direct_url'] = '?s=dpyh_farmland/sys_list_dzp&lv='.$depart_list[$i]['level'];
  228. }
  229. }
  230. //平台,超级管理员,插入所有用户列表
  231. $admin_arr = array(\Zndp\User\RoleEnum::GENERAL_ADMINISTRATOR,\Zndp\User\RoleEnum::SUPER_ADMINISTRATOR);
  232. if( in_array($this->userinfo['RoleId'], $admin_arr) ){
  233. $all_list = array('id'=>'0','pId'=>'','name'=>'所有大棚','direct_url'=>'?s=dpyh_farmland/sys_list_dzp','open'=>true);
  234. array_unshift($depart_list,$all_list);
  235. }
  236. $this->assign('title','大棚管理');
  237. $this->assign('tree_data',$depart_list);
  238. $this->display();
  239. }
  240. function sys_list_dzp( ){
  241. $list = new \Jms\Gui\ClGrid();
  242. $list->sql_filter = function($search,&$cond){
  243. $level = I('get.lv');//获取当前部门等级
  244. $depart_id = I('get.id');
  245. if($depart_id){
  246. if($level == \Zndp\User\DepartEnum::PLANT_BASE){ //部门为基地
  247. $cond['FarmId'] = $depart_id;
  248. }else{ //其他上级部门
  249. //根据传进来的部门id获取其子部门下所有大棚
  250. $farm_ids = \Zndp\User\Util::get_depart_farm($depart_id);
  251. $cond['FarmId'] = array('IN',$farm_ids);
  252. }
  253. }else{ // 账号登录
  254. if($this->userinfo['OrganizationId']){
  255. //非平台管理员,获取登录角色下所有基地内的大棚
  256. $base_ids = \Zndp\User\Util::get_depart_farm($this->userinfo['OrganizationId']);
  257. $cond['FarmId'] = array('IN',$base_ids);
  258. }
  259. }
  260. };
  261. $list->row_filter = function(&$row){
  262. $farm_id = I('get.id');
  263. $row['BaseId'] = $farm_id;//基地id,传过去用来获取该基地下设备进行绑定
  264. $type_arr = array(1=>'大棚','大田');
  265. $row['FarmlandType_text'] = $type_arr[$row['FarmlandType']];
  266. $where = array('ID'=>$row['FarmId']);
  267. $row['FarmId_text'] = M('uc_organization')->where($where)->getField('DepartName');
  268. };
  269. $list->display($this);
  270. }
  271. function sys_list_search( ){
  272. }
  273. function sys_set_manager( ){
  274. $form = new \Jms\Gui\ClForm();
  275. $form->form_filter = function(&$form){
  276. $base_id = I('get.base_id');
  277. $manager_list = get_depart_manager($base_id);
  278. $form['fields']['ManagerId']['editor'] = array('options'=>$manager_list);
  279. };
  280. $form->before_save = function(&$data){
  281. };
  282. $form->display($this);
  283. }
  284. function sys_remote_list( ){
  285. $list = new \Jms\Gui\ClGrid();
  286. $list->sql_sort = 'ID desc';
  287. $list->right_filter = function($right,$type){
  288. $page = $_SERVER['PATH_INFO'];
  289. return \Jms\Ucenter\Right::defaultFilter($page,$right,$type);
  290. };
  291. $list->sql_filter = function($search,&$cond){
  292. $level = I('get.lv');//获取当前部门等级
  293. $depart_id = I('get.id');
  294. if($depart_id){
  295. if($level == \Zndp\User\DepartEnum::PLANT_BASE){ //部门为基地
  296. $cond['FarmId'] = $depart_id;
  297. }else{ //其他上级部门
  298. //根据传进来的部门id获取其子部门下所有大棚
  299. $farm_ids = \Zndp\User\Util::get_depart_farm($depart_id);
  300. $cond['FarmId'] = array('IN',$farm_ids);
  301. }
  302. }else{ // 账号登录
  303. if($this->userinfo['OrganizationId']){
  304. //非平台管理员,获取登录角色下所有基地内的大棚
  305. $base_ids = \Zndp\User\Util::get_depart_farm($this->userinfo['OrganizationId']);
  306. $cond['FarmId'] = array('IN',$base_ids);
  307. }
  308. }
  309. /*
  310. if($this->userinfo['OrganizationId']){
  311. //显示登录用户部门下所有大棚
  312. $depart_ids = \Zndp\User\Util::get_depart_farm($this->userinfo['OrganizationId']);
  313. $cond['FarmId'] = array('IN',$depart_ids);
  314. }*/
  315. //搜索条件
  316. if($search['FarmlandName']){ //按大棚名称搜索
  317. $cond['FarmlandName'] = array('LIKE',"%{$search['FarmlandName']}%");
  318. }
  319. if($search['FarmlandNum']){ //按大棚编号搜索
  320. $cond['FarmlandNum'] = array('LIKE',"%{$search['FarmlandNum']}%");
  321. }
  322. };
  323. $list->row_filter = function(&$row)use($list){
  324. //获取大棚绑定的设备通道组
  325. $where = array('FarmlandId' => $row['ID']);
  326. $chgroup_info = M('dpsb_chgroup')->field('DeviceId,ChGroup')->where($where)->find();
  327. $where = array('ID'=>$chgroup_info['DeviceId']);
  328. $device_addr = M('dpsb_device')->where($where)->getField('DeviceAddr');
  329. //根据通道组查出通道值
  330. $where = array('DeviceId'=>$chgroup_info['DeviceId'],'ChGroup'=>$chgroup_info['ChGroup']);
  331. $channel_list = M('dpsb_channel')->field('ID,ChValue,ChType,ChNumber,GatherTime')->where($where)->order('GatherTime desc')->select();
  332. //查出设备最新更新时间
  333. $row['GatherTime'] = $channel_list[0]['GatherTime'];
  334. foreach($channel_list as $k => $ch){
  335. if( $ch['ChType'] == \Zndp\Device\ChannelType::TEMPERATURE ){ //温度
  336. $row['wd'] = $ch['ChValue'];
  337. }elseif( $ch['ChType'] == \Zndp\Device\ChannelType::HUMIDITY ){ //湿度
  338. $row['sd'] = $ch['ChValue'];
  339. }elseif( $ch['ChType'] == \Zndp\Device\ChannelType::ILLINATIONUM ){ //光照
  340. $row['gz'] = $ch['ChValue'];
  341. }elseif( $ch['ChType'] == \Zndp\Device\ChannelType::FILM_CONTROL ){ //卷膜机
  342. $jmz_arr = array(1,6,11,16);
  343. $jmy_arr = array(5,10,15,20);
  344. if( in_array($ch['ChNumber'],$jmz_arr) ){
  345. $open = $list->renderPopup('打开',"?s=dpyh_farmland/control_device&farmland_id={$row['ID']}&addr={$device_addr}&ch_number={$ch['ChNumber']}&state=1",'打开卷膜机',400,200);
  346. $stop = $list->renderPopup('停止',"?s=dpyh_farmland/control_device&farmland_id={$row['ID']}&addr={$device_addr}&ch_number={$ch['ChNumber']}&state=0",'停止卷膜机',400,200);
  347. $close = $list->renderPopup('关闭',"?s=dpyh_farmland/control_device&farmland_id={$row['ID']}&addr={$device_addr}&ch_number={$ch['ChNumber']}&state=2",'关闭卷膜机',400,200);
  348. $row['jmz'] = $open .' '. $stop .' '.$close;
  349. }
  350. if( in_array($ch['ChNumber'],$jmy_arr) ){
  351. $open = $list->renderPopup('打开',"?s=dpyh_farmland/control_device&farmland_id={$row['ID']}&addr={$device_addr}&ch_number={$ch['ChNumber']}&state=1",'打开卷膜机',400,200);
  352. $stop = $list->renderPopup('停止',"?s=dpyh_farmland/control_device&farmland_id={$row['ID']}&addr={$device_addr}&ch_number={$ch['ChNumber']}&state=0",'停止卷膜机',400,200);
  353. $close = $list->renderPopup('关闭',"?s=dpyh_farmland/control_device&farmland_id={$row['ID']}&addr={$device_addr}&ch_number={$ch['ChNumber']}&state=2",'关闭卷膜机',400,200);
  354. $row['jmy'] = $open .' '. $stop .' '.$close;
  355. }
  356. }else{
  357. }
  358. }
  359. };
  360. $list->display($this);
  361. }
  362. public function control_device( ){
  363. $addr = I('addr');
  364. $ch_number = I('ch_number');
  365. $state = I('state');
  366. $host = '127.0.0.1';
  367. $port = 10240;
  368. $socket = new Jms\Network\TcpClient($host,$port);
  369. $cmd = array(
  370. "method" => "apiSendControl",
  371. "Addr" => $addr, //设备addr
  372. "channelNumber" => $ch_number, //通道编号
  373. "status" => $state,
  374. );
  375. $res = $socket->send(json_encode($cmd));
  376. PB('ui_control_result',$cmd,$res);
  377. if($res['success']){
  378. exit('下发成功');
  379. }else{
  380. exit($res['message']);
  381. }
  382. }
  383. function sys_msg_set( ){
  384. $form = new \Jms\Gui\ClForm();
  385. $form->before_save = function(&$data){
  386. // 温度不能是空字符串
  387. if($data['HighTempLimit'] === '' || $data['LowTempLimit'] === ''){
  388. json_fail('温度不能为空');
  389. }
  390. // 温度必须是数字或数字字符串
  391. if( !is_numeric($data['HighTempLimit']) || !is_numeric($data['LowTempLimit']) ){
  392. json_fail('温度必须是数字');
  393. }
  394. };
  395. $form->after_save = function(&$data){
  396. // 添加大棚报警设置信息到Redis
  397. $redis_alarm_ser = Redis("dpyh_alarm_set","hash");
  398. $key = 'FarmlandId-'.$data['ID'];//大棚ID作为key
  399. $alarm_data = array(
  400. 'FarmlandName' => $data['FarmlandName'],
  401. 'HighTempLimit' => $data['HighTempLimit'],
  402. 'MaxTempExceed' => $data['MaxTempExceed'],
  403. 'LowTempLimit' => $data['LowTempLimit'],
  404. 'LowTempExceed' => $data['LowTempExceed'],
  405. 'IsUseTempLimit' => $data['IsUseTempLimit'],
  406. 'SmsInterval' => $data['SmsInterval'],
  407. 'FarmId' => $data['FarmId']
  408. );
  409. $val = json_encode($alarm_data,JSON_UNESCAPED_UNICODE);
  410. $hash = array($key => $val );
  411. $result = $redis_alarm_ser->add($hash);
  412. if(!$result){
  413. json_fail('Redis缓存设置失败');
  414. }
  415. };
  416. $form->display($this);
  417. }
  418. function sys_remote_tree( ){
  419. //获取导航树数据
  420. $fields = 'ID as id,ParentID as pId,DepartName as name,Level as level';
  421. $zndp_util = new \Zndp\User\Util();
  422. $depart_id = $this->userinfo['OrganizationId'];
  423. $depart_list = $zndp_util->get_depart_option($depart_id,$fields,'name',false);
  424. if(empty($depart_list)){
  425. //没有数据,显示该
  426. $depart_list[0] = array('id'=>'','pid'=>'','name'=>'没有组织','direct_url'=>'');
  427. }else{
  428. for($i=0; $i<count($depart_list); $i++){// 放入链接
  429. /*if($depart_list[$i]['level'] <= \Zndp\User\DepartEnum::WORK_STATION){
  430. $depart_list[$i]['open']= true;
  431. }*/
  432. $depart_list[$i]['open']= true;
  433. $depart_list[$i]['direct_url'] = '?s=dpyh_farmland/sys_remote_list&lv='.$depart_list[$i]['level'];
  434. }
  435. }
  436. //平台,超级管理员,插入所有大棚列表
  437. $admin_arr = array(\Zndp\User\RoleEnum::GENERAL_ADMINISTRATOR,\Zndp\User\RoleEnum::SUPER_ADMINISTRATOR);
  438. if( in_array($this->userinfo['RoleId'], $admin_arr) ){
  439. $all_list = array('id'=>'0','pId'=>'','name'=>'所有大棚','direct_url'=>'?s=dpyh_farmland/sys_remote_list','open'=>true);
  440. array_unshift($depart_list,$all_list);
  441. }
  442. $this->assign('title','大棚管理');
  443. $this->assign('tree_data',$depart_list);
  444. $this->display();
  445. }
  446. function set_screen_msg( ){
  447. $form = new \Jms\Gui\ClForm();
  448. $shed = array('FirstCrop','SecondCrop','ThirdCrop','FourthCrop');
  449. $form->before_display = function(&$data) use($shed){
  450. // 查出绑定的通道组
  451. $where = array('FarmlandId'=>$data['ID']);
  452. $chgroup_list = M('dpsb_chgroup')->field('DeviceId,ChGroup')->where($where)->select();
  453. $device = M('dpsb_device');
  454. foreach($chgroup_list as $key => $val){ //可能绑定有多个设备通道
  455. $where = array(
  456. 'ID' => $val['DeviceId'],
  457. );
  458. $data['content'] = $device->where($where)->getField($shed[$val['ChGroup']]);
  459. }
  460. };
  461. $form->before_modify = function(&$data) use($shed){
  462. $farmland_id = I('get.id');
  463. // 查出绑定的通道组
  464. $where = array('FarmlandId'=>$farmland_id);
  465. $chgroup_list = M('dpsb_chgroup')->field('DeviceId,ChGroup')->where($where)->select();
  466. $device = M('dpsb_device');
  467. foreach($chgroup_list as $key => $val){ //可能绑定有多个设备通道
  468. $where = array(
  469. 'ID' => $val['DeviceId'],
  470. );
  471. $count = $device->where($where)->count();
  472. if( $count > 0 ){ //如果有绑定控制设备
  473. $shed_data = $data['content'];
  474. $result = $device->where($where)->setField( $shed[$val['ChGroup']] , $shed_data);
  475. if($result){
  476. // 设置成功了,重启软件
  477. $addr = $device->where($where)->getField('DeviceAddr');
  478. $host = '127.0.0.1';
  479. $port = 10240;
  480. $socket = new Jms\Network\TcpClient($host,$port);
  481. $cmd = array(
  482. "method" => "apiReboot",
  483. "Addr"=>$addr,
  484. );
  485. $res = $socket->send(json_encode($cmd));
  486. if($res['success']){
  487. json_success('设置成功,设备App自动重启中');
  488. }else{
  489. json_fail('设置成功,设备App自动重启失败,原因:' .$res['message']);
  490. }
  491. }
  492. }
  493. }
  494. json_fail('没有更改或没有绑定设备');
  495. };
  496. $form->display($this);
  497. }
  498. function sys_batch_add( ){
  499. $form = new \Jms\Gui\ClForm();
  500. $form->before_add = function(&$data){
  501. $where = array('ID'=>$data['FarmId']);
  502. $farm_info = M('uc_organization')->field('Level,DepartName')->where($where)->find();
  503. if( $farm_info['Level'] != \Zndp\User\DepartEnum::PLANT_BASE ){ //不是基地
  504. json_fail('大棚上级部门应为基地');
  505. }
  506. //批量添加
  507. if( $data['batch_add'] == 1 ){
  508. //检查起始,结束编号
  509. if( $data['start_num'] === '' || $data['end_num'] === '' ){
  510. json_fail('批量添加必须填写起始和结束编号');
  511. }
  512. //编号要是数字
  513. if( !is_numeric($data['start_num']) || !is_numeric($data['end_num']) ){
  514. json_fail('起始和结束编号必须是数字');
  515. }
  516. //起始编号不能比结束大
  517. if( $data['start_num'] - $data['end_num'] > 0 ){
  518. json_fail('起始编号不能比结束编号大');
  519. }
  520. $dpyh_farmland = M('dpyh_farmland');
  521. $total = 0;
  522. $success = 0;
  523. $fail = 0;
  524. while( $data['start_num'] <= $data['end_num'] ){
  525. $add_data = $data;
  526. $add_data['ID'] = create_guid();
  527. $add_data['FarmlandNum'] = str_pad($data['start_num'],2,'0',STR_PAD_LEFT );
  528. $add_data['FarmlandName']= $farm_info['DepartName'] . $add_data['FarmlandNum'] .'号大棚';
  529. //添加
  530. $result = $dpyh_farmland->createAdd($add_data);
  531. if($result){
  532. $success++;
  533. }else{
  534. $fail++;
  535. }
  536. $total++;
  537. $data['start_num']++;
  538. }
  539. $msg = '总共添加:'.$total.'个,成功:'.$success.',失败:'.$fail;
  540. json_success( $msg );
  541. }
  542. // 单个添加编号和名称不能为空
  543. if( $data['FarmlandNum'] === '' || $data['FarmlandName'] === '' ){
  544. json_fail('单个添加必须填写:编号和名称');
  545. }
  546. };
  547. $form->form_filter = function(&$form){
  548. // 初始化部门下拉选项
  549. $parent_id = I('get.parent_id');
  550. if(!$parent_id){
  551. $parent_id = $this->userinfo['OrganizationId'];
  552. }
  553. // 如果是基地点进来
  554. $where = array('ID'=>$parent_id);
  555. $field = 'ID as id,DepartName as text,Level';
  556. $base_info = M('uc_organization')->field($field)->where($where)->find();
  557. if($base_info['Level'] == \Zndp\User\DepartEnum::PLANT_BASE ){ //基地
  558. unset($base_info['Level']);
  559. $depart_list = array($base_info);
  560. }else{
  561. $zndp_util = new \Zndp\User\Util();
  562. $depart_list = $zndp_util->get_depart_option($parent_id);
  563. }
  564. $form['fields']['FarmId']['editor'] = array('options'=>$depart_list);
  565. };
  566. //字段联动
  567. $form->onchange_filter = function($field,$data){
  568. $result = array();
  569. if($field == 'FarmId'){
  570. if($data[$field]){
  571. // 根据选择的基地显示管理员
  572. $cond = array('ID'=>$data[$field]);
  573. $level = M('uc_organization')->where($cond)->getField('Level');
  574. if( $level == \Zndp\User\DepartEnum::PLANT_BASE ){ //基地才显示
  575. $where = array('OrganizationId' => $data[$field], 'RoleId' => \Zndp\User\RoleEnum::BASE_ADMINISTRATOR );//只显示基地管理员
  576. $fields = 'ID as id,RealName as text';
  577. $result['ManagerId'] = M('uc_user')->field($fields)->where($where)->select();
  578. }else{
  579. $result['ManagerId'] = array();
  580. }
  581. }
  582. }
  583. return $result;
  584. };
  585. $form->display($this);
  586. }
  587. function set_screen_msg_test( ){
  588. $form = new \Jms\Gui\ClForm();
  589. $shed = array('FirstCrop','SecondCrop','ThirdCrop','FourthCrop');
  590. $form->before_display = function(&$data) use($shed){
  591. // 查出绑定的通道组
  592. $where = array('FarmlandId'=>$data['ID']);
  593. $chgroup_list = M('dpsb_chgroup')->field('DeviceId,ChGroup')->where($where)->select();
  594. $device = M('dpsb_device');
  595. foreach($chgroup_list as $key => $val){ //可能绑定有多个设备通道
  596. $where = array(
  597. 'ID' => $val['DeviceId'],
  598. );
  599. $data['content'] = $device->where($where)->getField($shed[$val['ChGroup']]);
  600. }
  601. };
  602. $form->before_modify = function(&$data) use($shed){
  603. $farmland_id = I('get.id');
  604. // 查出绑定的通道组
  605. $where = array('FarmlandId'=>$farmland_id);
  606. $chgroup_list = M('dpsb_chgroup')->field('DeviceId,ChGroup')->where($where)->select();
  607. $device = M('dpsb_device');
  608. foreach($chgroup_list as $key => $val){ //可能绑定有多个设备通道
  609. $where = array(
  610. 'ID' => $val['DeviceId'],
  611. );
  612. $count = $device->where($where)->count();
  613. if( $count > 0 ){ //如果有绑定控制设备
  614. $shed_data = $data['content'];
  615. $result = $device->where($where)->setField( $shed[$val['ChGroup']] , $shed_data);
  616. if($result){
  617. // 设置成功了,重启软件
  618. $addr = $device->where($where)->getField('DeviceAddr');
  619. $host = '127.0.0.1';
  620. $port = 10240;
  621. $socket = new Jms\Network\TcpClient($host,$port);
  622. $cmd = array(
  623. "method" => "apiReboot",
  624. "Addr"=>$addr,
  625. );
  626. $res = $socket->send(json_encode($cmd));
  627. if($res['success']){
  628. json_success('设置成功,设备App自动重启中');
  629. }else{
  630. json_fail('设置成功,设备App自动重启失败,原因:' .$res['message']);
  631. }
  632. }
  633. }
  634. }
  635. json_fail('没有更改或没有绑定设备');
  636. };
  637. $form->display($this);
  638. }
  639. }