queue.logic.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. <?php
  2. class queue_logic
  3. {
  4. public function login($req_url,$key)
  5. {
  6. $resp = $this->reqest($req_url,'/login',['key' => $key]);
  7. if(!empty($resp) && $resp['code'] == 0) {
  8. return $resp['data']['token'];
  9. } else {
  10. Log::record("Login Error,{$resp['msg']}",Log::ERR);
  11. return false;
  12. }
  13. }
  14. private function reqest($url,$api,$params,$token='')
  15. {
  16. if(empty($token)) {
  17. $url = "{$url}{$api}";
  18. }
  19. else {
  20. $url = "{$url}{$api}?token={$token}";
  21. }
  22. $resp = http_post_data($url,json_encode($params));
  23. $resp = json_decode($resp,true);
  24. return $resp;
  25. }
  26. public function OpenBox($params) {
  27. $postData['cabinet_code'] = $params['cabinet_code'];
  28. $postData['box_position_list'] = $params['box_position_list'];
  29. $postData['delay_time'] = $params['delay_time'];
  30. $postData['id'] = $params['id'];
  31. return $this->proc_request($params,'/open_box',$postData);
  32. }
  33. public function LockCabinet($params) {
  34. $postData['cabinet_code'] = $params['cabinet_code'];
  35. $postData['delay_time'] = $params['delay_time'];
  36. $postData['id'] = $params['id'];
  37. return $this->proc_request($params,'/lock_cabinet',$postData);
  38. }
  39. public function UnLockCabinet($params) {
  40. $postData['cabinet_code'] = $params['cabinet_code'];
  41. $postData['delay_time'] = $params['delay_time'];
  42. $postData['id'] = $params['id'];
  43. return $this->proc_request($params,'/unlock_cabinet',$postData);
  44. }
  45. public function ReleaseAlarm($params) {
  46. $postData['cabinet_code'] = $params['cabinet_code'];
  47. $postData['delay_time'] = $params['delay_time'];
  48. $postData['id'] = $params['id'];
  49. return $this->proc_request($params,'/release_alarm',$postData);
  50. }
  51. public function Reboot($params) {
  52. $postData['cabinet_code'] = $params['cabinet_code'];
  53. $postData['delay_time'] = $params['delay_time'];
  54. $postData['id'] = $params['id'];
  55. return $this->proc_request($params,'/reboot',$postData);
  56. }
  57. public function QueryState($params) {
  58. $postData['cabinet_code'] = $params['cabinet_code'];
  59. $postData['delay_time'] = $params['delay_time'];
  60. $postData['id'] = $params['id'];
  61. return $this->proc_request($params,'/query_state',$postData);
  62. }
  63. public function QueryBoxState($params) {
  64. $postData['cabinet_code'] = $params['cabinet_code'];
  65. $postData['box_position_list'] = $params['box_position_list'];
  66. $postData['delay_time'] = $params['delay_time'];
  67. $postData['id'] = $params['id'];
  68. return $this->proc_request($params,'/query_box_state',$postData);
  69. }
  70. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  71. private function proc_request($params,$api,$postData)
  72. {
  73. $token = $this->login($params['req_url'],$params['key']);
  74. if(empty($token)) {
  75. $ret = ['code'=> 1,'msg' => '柜体服务器错误'];
  76. $this->sync_result($params['ret_queue'],$params['method'],$ret);
  77. return $ret;
  78. }
  79. $resp = $this->reqest($params['req_url'] ,$api, $postData,$token);
  80. if(empty($resp)) {
  81. $ret = ['code'=> 1,'msg' => "{$api} fail."];
  82. $this->sync_result($params['ret_queue'],$params['method'],$ret);
  83. return $ret;
  84. }
  85. $resp = $this->sync_result($params['ret_queue'],$params['method'],$resp);
  86. return $resp;
  87. }
  88. private function sync_result($queue_name, $key, $params) {
  89. global $config;
  90. $host = $config['net_queue']['host'];
  91. $port = $config['net_queue']['port'];
  92. try {
  93. $queuedb = new QueueDB($queue_name,$host,$port);
  94. $queuedb->push(serialize([$key=>$params]));
  95. return ['code'=>0 , 'msg' => 'ok'];
  96. } catch (Exception $ex) {
  97. return ['code'=>1 , 'msg' => 'cabinet redis connect error'];
  98. }
  99. }
  100. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  101. public function UpdateAllBoxState()
  102. {
  103. global $config;
  104. $admin_url = $config['admin_url'];
  105. $result = $this->getCabinets("{$admin_url}/GetCabinetsBoxs");
  106. if(empty($result) || $result['code'] != 0) {
  107. return false;
  108. }
  109. $cabinets = $result['data'];
  110. foreach ($cabinets as $cabinet)
  111. {
  112. $params['req_url'] = $cabinet['req_url'];
  113. $params['key'] = $cabinet['login_key'];
  114. $token = $this->login($params['req_url'],$params['key']);
  115. if(empty($token)) {
  116. return false;
  117. }
  118. $boxes = $cabinet['box_data'];
  119. $i = 1;
  120. foreach ($boxes as $box)
  121. {
  122. $data['id'] = "{$i}";
  123. $data['cabinet_code'] = $cabinet['cabinet_code'];
  124. $data['box_position_list'] = [$box['box_number']];
  125. $data['delay_time'] = 0;
  126. $resp = $this->reqest($params['req_url'],'/query_box_state',$data,$token);
  127. if($resp['code'] == 0)
  128. {
  129. $update_url = $admin_url . "/BoxChangeStatus";
  130. foreach ($resp['data']['result_list'] as $value) {
  131. $data = [];
  132. $data['cabinet_code'] = $cabinet['cabinet_code'];
  133. $data['box_number'] = $value['box_position'];
  134. $data['box_status'] = $value['result'];
  135. $ret = http_request($update_url,$resp,'POST');
  136. if($ret == false || $ret['code'] != 0) {
  137. Log::record("update box state error: cabinet={$cabinet['cabinet_code']},box={$box['box_number']}",log::DEBUG);
  138. }
  139. }
  140. }
  141. else {
  142. Log::record("query state err: cabinet={$cabinet['cabinet_code']},box={$box['box_number']}",log::DEBUG);
  143. }
  144. $i++;
  145. }
  146. }
  147. }
  148. public function getCabinets($url) {
  149. $resp = http_request($url,[]);
  150. if($resp) {
  151. $result = json_decode($resp,true);
  152. return $result;
  153. }
  154. else {
  155. return false;
  156. }
  157. }
  158. }