IndexController.php 9.3 KB

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