DpjkMobileAction.class.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492
  1. <?php
  2. class DpjkMobileAction extends Action {
  3. public function getDeivceRealDataTest( ){
  4. $device_info = MM('dpsb_device')->where(array('ID'=>$device_id))->find();
  5. if(!$device_info)
  6. return false;
  7. $data = array(
  8. "id" => $device_id,
  9. "title" => $device_info['WorkUnitName'],
  10. "addr" => $device_info['DeviceAddr'],
  11. "time" => $device_info['GatherTime'],
  12. "channels" => array(),
  13. "rollfilm" => array(),
  14. );
  15. for($i=0;$i<3;$i++){
  16. $channel_data = array();
  17. //气温
  18. $where = array(
  19. 'DeviceId'=>$device_id,
  20. 'ChType'=> \Zndp\Device\ChannelType::TEMPERATURE,
  21. 'ChGroup' => $i,
  22. );
  23. $qw_info = MM('dpsb_channel')->where($where)->find();
  24. if(!$qw_info){
  25. continue;
  26. }
  27. //湿度
  28. $where = array(
  29. 'DeviceId'=>$device_id,
  30. 'ChType'=> \Zndp\Device\ChannelType::HUMIDITY,
  31. 'ChGroup' => $i,
  32. );
  33. $sd_info = MM('dpsb_channel')->where($where)->find();
  34. if(!$sd_info){
  35. continue;
  36. }
  37. //光照
  38. $where = array(
  39. 'DeviceId'=>$device_id,
  40. 'ChType'=> \Zndp\Device\ChannelType::ILLINATIONUM,
  41. 'ChGroup' => $i,
  42. );
  43. $gz_info = MM('dpsb_channel')->where($where)->find();
  44. if(!$gz_info){
  45. continue;
  46. }
  47. //卷膜1
  48. $where = array(
  49. 'DeviceId'=>$device_id,
  50. 'ChType'=> \Zndp\Device\ChannelType::FILM_CONTROL,
  51. 'ChGroup' => $i,
  52. );
  53. $jm_left_info = MM('dpsb_channel')->where($where)->order('ChNumber asc')->find();
  54. if(!$jm_left_info){
  55. continue;
  56. }
  57. //卷膜5
  58. $where = array(
  59. 'DeviceId'=>$device_id,
  60. 'ChType'=> \Zndp\Device\ChannelType::FILM_CONTROL,
  61. 'ChGroup' => $i,
  62. );
  63. $jm_right_info = MM('dpsb_channel')->where($where)->order('ChNumber desc')->find();
  64. if(!$jm_right_info){
  65. continue;
  66. }
  67. $channel_data = array(
  68. 'qw' => $qw_info['ChValue'],
  69. 'sd' => $sd_info['ChValue'],
  70. 'gz' => $gz_info['ChValue'],
  71. 'group' => $i+1,
  72. );
  73. array_push($data['channels'],$channel_data);
  74. $roll_left_film_data = array(
  75. 'jm' => $jm_left_info['ChNumber'],
  76. 'name' => $jm_left_info['DisplayName'],
  77. 'group' => $i+1,
  78. );
  79. array_push($data['rollfilm'],$roll_left_film_data);
  80. $roll_right_film_data = array(
  81. 'jm' => $jm_right_info['ChNumber'],
  82. 'name' => $jm_left_info['DisplayName'],
  83. 'group' => $i+1,
  84. );
  85. array_push($data['rollfilm'],$roll_right_film_data);
  86. }
  87. return $data;
  88. }
  89. public function login( ){
  90. //允许所有域名跨域访问
  91. header('Access-Control-Allow-Origin: *');
  92. //用户信息
  93. $username = I('post.Username');
  94. $password = I('post.Password');
  95. //检查是否是操作员
  96. $where = array(
  97. 'UserName'=>$username
  98. );
  99. $userinfo = MM('uc_user')->where($where)->find();
  100. if(!$userinfo){
  101. json_fail('该用户不存在');
  102. }
  103. /*
  104. //用户是否有权限
  105. if($userinfo['RoleId'] != \Zndp\User\RoleEnum::FARM_OPERATOR){
  106. json_fail('当前用户没有操作权限');
  107. }*/
  108. $login_list = array(
  109. \Zndp\User\RoleEnum::BASE_ADMINISTRATOR,//基地管理员
  110. \Zndp\User\RoleEnum::BASE_LEADER,//基地负责人
  111. );
  112. if( !in_array($userinfo['RoleId'],$login_list) ){
  113. json_fail('当前用户没有登录权限');
  114. }
  115. //密码错误
  116. $password = (new \Zndp\User\Util)->encPwd($password);
  117. if($password != $userinfo['Password']){
  118. json_fail('用户名或者密码不正确');
  119. }
  120. //保存用户cid
  121. $cid = I('post.cid');
  122. if($cid){
  123. $result = MM('uc_user')->where($where)->setField('ClientId',$cid);
  124. if($result === false){
  125. json_fail('CID有误');
  126. }
  127. }
  128. //登录成功
  129. json_success('登陆成功',$userinfo['ID']);
  130. }
  131. public function allDevicesRealTimeData( ){
  132. //允许所有域名跨域访问
  133. header('Access-Control-Allow-Origin: *');
  134. $userid = I('get.userid');
  135. if(!$userid){
  136. json_fail('用户信息不存在');
  137. }
  138. /*$farmid = MM('uc_user')->where(array('ID'=>$userid))->getField('FarmId');
  139. if(!$farmid){
  140. json_fail('用户下没有农场');
  141. }*/
  142. // 新流程
  143. $depart_id = MM('uc_user')->where(array('ID'=>$userid))->getField('OrganizationId');
  144. if(!$depart_id){
  145. json_fail('账号部门信息有误,请联系负责人');
  146. }
  147. //获取部门下所有基地
  148. $base_ids = \Zndp\User\Util::get_depart_farm($depart_id);
  149. $where = array('FarmId'=>array('IN',$base_ids));
  150. $group_list = MM('dpsb_group')->where($where)->select();
  151. if(!$group_list){
  152. json_fail('设备组不存在');
  153. }
  154. $device_data_list = array();
  155. foreach($group_list as $row){
  156. $device_list = MM('dpsb_device')->where(array('DeviceGroupId'=>$row['ID']))->select();
  157. foreach($device_list as $device){
  158. $device_data = $this->getDeivceRealData($device['ID']);
  159. array_push($device_data_list,$device_data);
  160. }
  161. }
  162. json_success('',$device_data_list);
  163. }
  164. private function getDeivceRealData( $device_id ){
  165. $device_info = MM('dpsb_device')->where(array('ID'=>$device_id))->find();
  166. if(!$device_info)
  167. return false;
  168. $data = array(
  169. "id" => $device_id,
  170. "title" => $device_info['WorkUnitName'],
  171. "addr" => $device_info['DeviceAddr'],
  172. "time" => $device_info['GatherTime'],
  173. "channels" => array(),
  174. "rollfilm" => array(),
  175. );
  176. for($i=0;$i<3;$i++){
  177. $channel_data = array();
  178. //气温
  179. $where = array(
  180. 'DeviceId'=>$device_id,
  181. 'ChType'=> \Zndp\Device\ChannelType::TEMPERATURE,
  182. 'ChGroup' => $i,
  183. );
  184. $qw_info = MM('dpsb_channel')->where($where)->find();
  185. if(!$qw_info){
  186. continue;
  187. }
  188. //湿度
  189. $where = array(
  190. 'DeviceId'=>$device_id,
  191. 'ChType'=> \Zndp\Device\ChannelType::HUMIDITY,
  192. 'ChGroup' => $i,
  193. );
  194. $sd_info = MM('dpsb_channel')->where($where)->find();
  195. if(!$sd_info){
  196. continue;
  197. }
  198. //光照
  199. $where = array(
  200. 'DeviceId'=>$device_id,
  201. 'ChType'=> \Zndp\Device\ChannelType::ILLINATIONUM,
  202. 'ChGroup' => $i,
  203. );
  204. $gz_info = MM('dpsb_channel')->where($where)->find();
  205. if(!$gz_info){
  206. continue;
  207. }
  208. //卷膜1
  209. $where = array(
  210. 'DeviceId'=>$device_id,
  211. 'ChType'=> \Zndp\Device\ChannelType::FILM_CONTROL,
  212. 'ChGroup' => $i,
  213. );
  214. $jm_left_info = MM('dpsb_channel')->where($where)->order('ChNumber asc')->find();
  215. if(!$jm_left_info){
  216. continue;
  217. }
  218. //卷膜5
  219. $where = array(
  220. 'DeviceId'=>$device_id,
  221. 'ChType'=> \Zndp\Device\ChannelType::FILM_CONTROL,
  222. 'ChGroup' => $i,
  223. );
  224. $jm_right_info = MM('dpsb_channel')->where($where)->order('ChNumber desc')->find();
  225. if(!$jm_right_info){
  226. continue;
  227. }
  228. $channel_data = array(
  229. 'qw' => $qw_info['ChValue'],
  230. 'sd' => $sd_info['ChValue'],
  231. 'gz' => $gz_info['ChValue'],
  232. 'group' => $i+1,
  233. );
  234. array_push($data['channels'],$channel_data);
  235. $roll_left_film_data = array(
  236. 'jm' => $jm_left_info['ChNumber'],
  237. 'name' => $jm_left_info['DisplayName'],
  238. 'group' => $i+1,
  239. );
  240. array_push($data['rollfilm'],$roll_left_film_data);
  241. $roll_right_film_data = array(
  242. 'jm' => $jm_right_info['ChNumber'],
  243. 'name' => $jm_right_info['DisplayName'],
  244. 'group' => $i+1,
  245. );
  246. array_push($data['rollfilm'],$roll_right_film_data);
  247. }
  248. return $data;
  249. }
  250. public function oneDeviceRealTimeData( ){
  251. //允许所有域名跨域访问
  252. header('Access-Control-Allow-Origin: *');
  253. $userid = I('get.userid');
  254. $deviceid = I('get.deviceid');
  255. if(!$deviceid)
  256. json_fail('设备id不存在');
  257. if(!$userid)
  258. json_fail('用户信息不存在');
  259. $farmid = MM('uc_user')->where(array('ID'=>$userid))->getField('FarmId');
  260. if(!$farmid)
  261. json_fail('用户下没有农场');
  262. $group_list = MM('dpsb_group')->where(array('FarmId'=>$farmid))->select();
  263. if(!$group_list)
  264. json_fail('设备组不存在');
  265. $device_data = $this->getDeivceRealData($deviceid);
  266. json_success('',$device_data);
  267. }
  268. public function getAlarmData( ){
  269. //允许所有域名跨域访问
  270. header('Access-Control-Allow-Origin: *');
  271. //获取登录用户部门id
  272. $userid = I('get.userid');
  273. $where = array('ID'=>$userid);
  274. $user_info = MM('uc_user')->field('RoleId,OrganizationId')->where($where)->find();
  275. //组装查询条件
  276. if( $user_info['RoleId'] == \Zndp\User\RoleEnum::BASE_ADMINISTRATOR){//基地管理员只查看自己的大棚
  277. $where = array( 'ManagerId' => $userid );
  278. }else{//否则查出该部门下所有基地
  279. $base_ids = \Zndp\User\Util::get_depart_farm($user_info['OrganizationId']);
  280. $where = array('FarmId'=>array('IN',$base_ids));
  281. }
  282. //查出大棚告警日志
  283. $farmland_ids = MM('dpyh_farmland')->field('ID')->where($where)->select();
  284. $farmland_ids = array_column($farmland_ids,'ID');
  285. $where = array( 'FarmlandId' => array('IN',$farmland_ids) );
  286. $alarm_list = MM('dpsj_alarm_log')->where($where)->order('SendTime desc')->limit(100)->select();
  287. if( $alarm_list ){
  288. $alarm_list = array(
  289. 'success' => true,
  290. 'message' => '获取成功',
  291. 'data' => $alarm_list
  292. );
  293. }else{
  294. $alarm_list = array(
  295. 'success' => false,
  296. 'message' => '没有数据',
  297. 'data' => $alarm_list
  298. );
  299. }
  300. echo json_encode($alarm_list,JSON_UNESCAPED_UNICODE);
  301. }
  302. public function allFarmlandRealTimeData( ){
  303. //允许所有域名跨域访问
  304. header('Access-Control-Allow-Origin: *');
  305. $userid = I('get.userid');
  306. if(!$userid){
  307. json_fail('用户信息不存在');
  308. }
  309. // 新流程
  310. $user_info = MM('uc_user')->field('ID,RoleId,OrganizationId')->where(array('ID'=>$userid))->find();
  311. if(!$user_info['OrganizationId']){
  312. json_fail('账号部门信息有误,请联系负责人');
  313. }
  314. if($user_info['RoleId'] == \Zndp\User\RoleEnum::BASE_ADMINISTRATOR ){ //基地管理员只能查看自己管理的大棚
  315. $where = array('ManagerId'=>$user_info['ID']);
  316. $farmland_list = MM('dpyh_farmland')->field('ID,FarmlandName')->where($where)->select();
  317. }else{
  318. //获取部门下所有基地
  319. $base_ids = \Zndp\User\Util::get_depart_farm($user_info['OrganizationId']);
  320. $where = array('FarmId'=>array('IN',$base_ids));
  321. $farmland_list = MM('dpyh_farmland')->field('ID,FarmlandName')->where($where)->select();
  322. }
  323. if(!$farmland_list){
  324. json_fail('没有大棚存在');
  325. }
  326. $farmland_data_list = array();
  327. foreach($farmland_list as $farmland){
  328. $where = array('FarmlandId'=>$farmland['ID']);
  329. $chgroup_list = MM('dpsb_chgroup')->field('DeviceId,ChGroup')->where($where)->select();
  330. foreach($chgroup_list as $chgroup){ //传设备id和通道组用于获取通道
  331. $channel_data = $this->getChgroupRealData($chgroup['DeviceId'],$chgroup['ChGroup'],$farmland);
  332. array_push($farmland_data_list,$channel_data);
  333. }
  334. }
  335. json_success('',$farmland_data_list);
  336. }
  337. private function getChgroupRealData( $device_id, $chgroup, $farmland_info ){
  338. $where = array('DeviceId'=>$device_id,'ChGroup'=>$chgroup);
  339. //查找通道组下所有通道
  340. $channel_list = MM('dpsb_channel')->field('ChNumber,DisplayName,ChType,ChValue,GatherTime')->where($where)->order('ChNumber asc')->select();
  341. if(!$channel_list || !$farmland_info){
  342. return false;
  343. }
  344. //拼接数据
  345. $device_addr = MM('dpsb_device')->where(array('ID'=>$device_id))->getField('DeviceAddr');
  346. $farmland_data = array(
  347. 'id' => $farmland_info['ID'], //用于传给详情页面
  348. 'title' => $farmland_info['FarmlandName'],//显示标题
  349. 'addr' => $device_addr,//设备序列号
  350. //'time' => $channel_list['GatherTime'],//最新上报数据时间
  351. "channels" => array(),//光照、温度、湿度传感器数据
  352. "rollfilm" => array(),//卷膜机数据
  353. );
  354. $channel_data = array(); //初始化传感器数据
  355. $jm_data = array(); //初始化卷膜机数据
  356. foreach($channel_list as $channel){
  357. $channel_unit = (new \Zndp\Device\ChannelType())->getTypeUnit($channel['ChType']);//传感器单位
  358. if($channel['ChType'] == \Zndp\Device\ChannelType::TEMPERATURE ){ //气温+
  359. $farmland_data['time'] = $channel['GatherTime'];//最新上报数据时间
  360. $data = array(
  361. 'name' => $channel['DisplayName'], //名称
  362. 'value'=> $channel['ChValue'], //值
  363. 'unit' => $channel_unit, //单位
  364. 'icon' => 'icon_qw.png', //图标
  365. );
  366. array_push($channel_data,$data);
  367. //$channel_data[$channel['DisplayName']] = $channel['ChValue'] .' '.$channel_unit;
  368. }elseif($channel['ChType'] == \Zndp\Device\ChannelType::HUMIDITY){ //湿度
  369. if( $farmland_data['time'] < $channel['GatherTime'] ){
  370. $farmland_data['time'] = $channel['GatherTime'];//最新上报数据时间
  371. }
  372. $data = array(
  373. 'name' => $channel['DisplayName'], //名称
  374. 'value'=> $channel['ChValue'], //值
  375. 'unit' => $channel_unit, //单位
  376. 'icon' => 'icon_sd.png', //图标
  377. );
  378. array_push($channel_data,$data);
  379. //$channel_data[$channel['DisplayName']] = $channel['ChValue'] .' '.$channel_unit;
  380. }elseif($channel['ChType'] == \Zndp\Device\ChannelType::ILLINATIONUM){ //光照
  381. if( $farmland_data['time'] < $channel['GatherTime'] ){
  382. $farmland_data['time'] = $channel['GatherTime'];//最新上报数据时间
  383. }
  384. $data = array(
  385. 'name' => $channel['DisplayName'], //名称
  386. 'value'=> $channel['ChValue'], //值
  387. 'unit' => $channel_unit, //单位
  388. 'icon' => 'icon_gz.png', //图标
  389. );
  390. array_push($channel_data,$data);
  391. //$channel_data[$channel['DisplayName']] = $channel['ChValue'] .' '.$channel_unit;
  392. }elseif($channel['ChType'] == \Zndp\Device\ChannelType::FILM_CONTROL){ //卷膜机
  393. $jm_name = \Zndp\Device\ChannelType::getDisplayName($channel['ChType'],$chgroup,$channel['ChNumber']);
  394. $jm_data[] = array(
  395. 'jm' => $channel['ChNumber'],//通道号
  396. 'name' => $jm_name, //卷膜机名称
  397. 'group' => $chgroup //通道组
  398. );
  399. }else{
  400. }
  401. }
  402. $farmland_data['channels'] = $channel_data;
  403. $farmland_data['rollfilm'] = $jm_data;
  404. return $farmland_data;
  405. }
  406. public function oneFarmlandRealTimeData( ){
  407. //允许所有域名跨域访问
  408. header('Access-Control-Allow-Origin: *');
  409. $userid = I('get.userid');
  410. $farmland_id = I('get.farmland_id');
  411. if(!$farmland_id || !$userid){
  412. json_fail('用户或大棚id不存在');
  413. }
  414. $where = array('ID'=>$farmland_id);
  415. $farmland_info = MM('dpyh_farmland')->field('ID,FarmlandName')->where($where)->find();
  416. $where = array('FarmlandId'=>$farmland_id);
  417. $chgroup_info = MM('dpsb_chgroup')->field('DeviceId,ChGroup')->where($where)->find();
  418. $channel_data = $this->getChgroupRealData($chgroup_info['DeviceId'],$chgroup_info['ChGroup'],$farmland_info);
  419. json_success('',$channel_data);
  420. }
  421. public function getAppAlarmData( ){
  422. //允许所有域名跨域访问
  423. header('Access-Control-Allow-Origin: *');
  424. //获取登录用户部门id
  425. $userid = I('get.userid');
  426. $where = array('ID'=>$userid);
  427. $user_info = MM('uc_user')->field('RoleId,OrganizationId')->where($where)->find();
  428. //组装查询条件
  429. if( $user_info['RoleId'] == \Zndp\User\RoleEnum::BASE_ADMINISTRATOR){//基地管理员只查看自己的大棚
  430. $where = array( 'ManagerId' => $userid );
  431. }else{//否则查出该部门下所有基地
  432. $base_ids = \Zndp\User\Util::get_depart_farm($user_info['OrganizationId']);
  433. $where = array('FarmId'=>array('IN',$base_ids));
  434. }
  435. //查出大棚告警日志
  436. $farmland_ids = MM('dpyh_farmland')->field('ID')->where($where)->select();
  437. $farmland_ids = array_column($farmland_ids,'ID');
  438. $where = array( 'FarmlandId' => array('IN',$farmland_ids), 'Platform'=>1 );
  439. $alarm_list = MM('dpsj_alarm_log')->where($where)->order('SendTime desc')->limit(100)->select();
  440. if( $alarm_list ){
  441. $alarm_list = array(
  442. 'success' => true,
  443. 'message' => '获取成功',
  444. 'data' => $alarm_list
  445. );
  446. }else{
  447. $alarm_list = array(
  448. 'success' => false,
  449. 'message' => '没有数据',
  450. 'data' => $alarm_list
  451. );
  452. }
  453. echo json_encode($alarm_list,JSON_UNESCAPED_UNICODE);
  454. }
  455. }