IndexController.php 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Model\DeviceInfo;
  4. use App\Model\LockInfo;
  5. use App\Model\SystemConfig;
  6. use App\Server\DeviceServer;
  7. use Illuminate\Http\Request;
  8. use Illuminate\Support\Facades\Artisan;
  9. use Illuminate\Support\Facades\Blade;
  10. use Illuminate\Support\Facades\Cache;
  11. use QL\QueryList;
  12. class IndexController extends Controller
  13. {
  14. public function testOpreation(Request $request)
  15. {
  16. // Artisan::call('SDR: 1 1');
  17. // Artisan::call('SDR', [
  18. // 'id' => 1, 'type' => 1
  19. // ]);
  20. //echo strtotime('+60 days');dd('ok');
  21. $id = $request->get('id');
  22. $device = DeviceInfo::where(['device_name'=>$id])->first();
  23. if($device->type == 1){
  24. $img = SystemConfig::get('lock_config','box_img_four');
  25. } else {
  26. $img = SystemConfig::get('lock_config','box_img_five');
  27. }
  28. $type = $device->type;
  29. switch($type) {
  30. case DeviceInfo::BOXFOUR;
  31. $n = 4;
  32. break;
  33. case DeviceInfo::BOXFIVE;
  34. $n = 5;
  35. break;
  36. case DeviceInfo::BOXFOURRECYCLE;
  37. $n = 5;
  38. break;
  39. case DeviceInfo::BOXFIVERECYCLE;
  40. $n = 6;
  41. break;
  42. default;
  43. $n = 5;
  44. break;
  45. }
  46. for ($i = 1; $i<$n;$i++){
  47. $device_box[] = $i;
  48. }
  49. return view('test_opreation',['img'=>$img,'id'=>$id]);
  50. }
  51. function object_array($array) {
  52. if(is_object($array)) {
  53. $array = (array)$array;
  54. }
  55. if(is_array($array)) {
  56. foreach($array as $key=>$value) {
  57. $array[$key] = object_array($value);
  58. }
  59. }
  60. return $array;
  61. }
  62. //下发协议
  63. public function send_protocol()
  64. {
  65. $type = request('type');
  66. $id = request('id');
  67. $device = DeviceInfo::where('device_name',$id)->first();
  68. $cache_key = $id .'rule_type';
  69. $re_type = Cache::get($cache_key);
  70. $time1 = 240;//3分钟定时
  71. $opt = 180;
  72. $cpt = 240;
  73. if(empty($type) || empty($id)){
  74. return json_encode(['code'=>601,'msg'=>'缺少必要参数']);
  75. }
  76. if(empty($device)){
  77. return json_encode(['code'=>602,'msg'=>'设备不存在']);
  78. }
  79. // echo '缓存类型--'.$re_type.' 当前类型:--'.$type;
  80. if(empty($re_type) && in_array([4,5,6],$re_type)){
  81. if($type == 4) Cache::put($cache_key,$re_type,$time1);
  82. } else {
  83. if($type != $re_type) return json_encode(['code'=>603,'msg'=>'设备下发协议冲突']);
  84. }
  85. // return json_encode(['code'=>200,'msg'=>'不重复']);
  86. switch ($type){
  87. case 1:
  88. $rule = ['cmd'=>'start_test'];
  89. break;
  90. case 2:
  91. $rule = ["cmd"=>"stop_test"];
  92. sleep(6);
  93. break;
  94. case 3:
  95. $open_time = date('H:i',(time() + $opt));
  96. $close_time = date('H:i',(time() + $cpt));
  97. $start_time = date('Y-m-d H:i:s',(time() - 60));
  98. $type_arr = [1=>4,2=>5,3=>5,4=>6];
  99. for ($i = 1; $i<=$type_arr[$type]; $i++){
  100. $rule = ['box'.$i=>[['type'=>1,'start'=>$start_time,'open'=>$open_time,'close'=>$close_time,'value'=>'']],'query'=>3600];
  101. $res = (new DeviceServer())->sendMsg($device->device_name ,json_encode($rule));
  102. sleep(22);
  103. }
  104. // $lock_rule = json_decode($device->lock_rule);
  105. // foreach ($lock_rule as $box_name){
  106. // sleep(22);
  107. // $rule = [$box_name=>[['type'=>1,'start'=>$start_time,'open'=>$open_time,'close'=>$close_time,'value'=>'']],'query'=>3600];
  108. // $res = (new DeviceServer())->sendMsg($device->device_name ,$rule);
  109. // }
  110. break;
  111. case 4:
  112. $box_name = request('box_name');
  113. if(empty($box_name)){
  114. return json_encode(['code'=>601,'msg'=>'缺少必要参数']);
  115. }
  116. $open_time = date('H:i',(time() + $opt));
  117. $close_time = date('H:i',(time() + $cpt));
  118. $start_time = date('Y-m-d H:i',(time() - 60));
  119. $rule = ['box'.$box_name=>[['type'=>1,'start'=>$start_time,'open'=>$open_time,'close'=>$close_time,'value'=>''],],'query'=>3600];
  120. break;
  121. case 5:
  122. $rule = ["cmd"=>"start_update"];
  123. break;
  124. case 6:
  125. $rule = ["cmd"=>"reset"];
  126. break;
  127. }
  128. // $rule = ["cmd"=>"stop_test"];
  129. // dd(json_encode($rule));
  130. if($type != 3){
  131. $res = (new DeviceServer())->sendMsg($device->device_name,json_encode($rule));
  132. }
  133. if(!empty($res) && $res['Success'] == true){
  134. return json_encode(['code'=>200,'msg'=>'下发命令成功']);
  135. } else {
  136. return json_encode(['code'=>601,'msg'=>'下发命令失败']);
  137. }
  138. }
  139. //获取设备信息
  140. public function get_boxname()
  141. {
  142. $id = request('id');
  143. $device = DeviceInfo::where('device_name',$id)->first();
  144. if(empty($device)){
  145. return json_encode(['code'=>200,'msg'=>'ok','data'=>[]]);
  146. }
  147. $lock_config = SystemConfig::get('lock_config');
  148. $data['id'] = $device->id;
  149. $data['device_name'] = $device->device_name;
  150. $data['device_type'] = $device->device_type;
  151. $img_field_arr = [
  152. 1=>'box_img_four',
  153. 2=>'box_img_five',
  154. 3=>'box_img_refour',
  155. 4=>'box_img_refive',
  156. ];
  157. $data['device_image'] = $lock_config[$img_field_arr[$device->device_type]];
  158. return json_encode(['code'=>200,'msg'=>'ok','data'=>$data]);
  159. }
  160. //设备升级与重置命令
  161. public function updateDevice()
  162. {
  163. $device_name = request('id');
  164. $type = request('type'); //设备类型
  165. $phone = request('phone'); //电话
  166. $deviceService = (new DeviceServer());
  167. if(empty($type) || empty($phone)){
  168. return genApiData(601,'参数错误');
  169. }
  170. if(!preg_match("/^1[34578]\d{9}$/",$phone,$match)){
  171. return genApiData(601,'手机号码错误');
  172. }
  173. $data['device_type'] = $type;
  174. $data['phone'] = $phone;
  175. $device_info = DeviceInfo::where(['device_name'=>$device_name])->first();
  176. if($device_info->device_type == $type){
  177. return genApiData(602,'设备类型重复请重新选择');
  178. }
  179. $device_property = $deviceService->getProperty($device_info->iot_id);
  180. $last_version = SystemConfig::get('lock_config','soft_version');
  181. $res = DeviceInfo::where('device_name',$device_name)->update($data);
  182. if($res){
  183. if($device_property['data']['version'] == '' || $device_property['data']['version'] != $last_version){
  184. $rule = ["cmd"=>"start_update"];
  185. $res = $deviceService->sendMsg($device_name ,json_encode($rule));
  186. if($res['Success'] == 'success') {
  187. return genApiData(600,'设备更新新中');
  188. }
  189. } else {
  190. $res = DeviceInfo::where('device_name',$device_name)->update($data);
  191. }
  192. return genApiData(200,'更新成功');
  193. }
  194. return genApiData(601,'异常设备,请联系后台管理员',$res);
  195. // if(empty($device_info)){
  196. // return genApiData(601,'异常设备,请联系后台管理员','');
  197. // }
  198. //
  199. //
  200. // return genApiData(601,'更新失败','');
  201. //
  202. // if($type == 1){
  203. // $rule = ["cmd"=>"start_update"];
  204. // } else if ($type == 2){
  205. // $rule = ["cmd"=>"reset"];
  206. // } else {
  207. // $rule = ["cmd"=>"start_update"];
  208. // }
  209. // $res = $deviceService->sendMsg($device_name,json_encode($rule));
  210. // if($res['Success'] == 'success') {
  211. // return json_encode(['code'=>200,'msg'=>'发送命令成功','data'=>'']);
  212. // }
  213. // return json_encode(['code'=>601,'msg'=>'发送命令成功','data'=>'']);
  214. }
  215. }
  216. //use AlibabaCloud\Client\AlibabaCloud;
  217. //use AlibabaCloud\Client\Exception\ClientException;
  218. //use AlibabaCloud\Client\Exception\ServerException;
  219. //
  220. //// Download:https://github.com/aliyun/openapi-sdk-php
  221. //// Usage:https://github.com/aliyun/openapi-sdk-php/blob/master/README.md
  222. //
  223. //AlibabaCloud::accessKeyClient('<accessKeyId>', '<accessSecret>')
  224. // ->regionId('cn-shanghai')
  225. // ->asDefaultClient();
  226. //
  227. //try {
  228. // $result = AlibabaCloud::rpc()
  229. // ->product('Iot')
  230. // // ->scheme('https') // https | http
  231. // ->version('2018-01-20')
  232. // ->action('GetThingModelTsl')
  233. // ->method('POST')
  234. // ->host('iot.cn-shanghai.aliyuncs.com')
  235. // ->options([
  236. // 'query' => [
  237. // 'RegionId' => "cn-shanghai",
  238. // 'ProductKey' => "a15yVIP0Onl",
  239. // 'ModelVersion' => "Software_Version",
  240. // ],
  241. // ])
  242. // ->request();
  243. // print_r($result->toArray());
  244. //} catch (ClientException $e) {
  245. // echo $e->getErrorMessage() . PHP_EOL;
  246. //} catch (ServerException $e) {
  247. // echo $e->getErrorMessage() . PHP_EOL;
  248. //}