IndexController.php 9.4 KB

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