DeviceConfigController.class.php.bak.2021-05-21 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406
  1. <?php
  2. namespace Home\Controller;
  3. use Think\Controller;
  4. use Think\Db;
  5. include '../Common/function.php';
  6. class DeviceConfigController extends ComController
  7. {
  8. private $host = "https://device.api.ct10649.com:8743/";
  9. private $appId = "wvdOfp7JVe0ULwnFKwBF0edfbcAa";
  10. private $secret = "Bihoe_rY9vebXMw6sFfpQy0jiRca";
  11. public function getDeviceList()
  12. {
  13. $Data = I();
  14. $company_code = $Data['company_code'];
  15. $device_data1 = M()->query("SELECT a.id,a.owner_code,a.owner_name,a.dwtype,IF(timestampdiff(HOUR,max(`b`.`data_time`),now())<12,'在线','离线') AS device_state,a.install_time,a.unitinfo FROM sp_owner AS a JOIN sp_owner_status AS b ON a.owner_code=b.device_id WHERE a.dwtype!=1 AND a.company='" . $company_code . "' GROUP BY a.owner_code ORDER BY a.install_time DESC");
  16. $device_data2 = M()->query("SELECT a.id,a.owner_code,a.owner_name,a.dwtype,IF(true_status=0,'在线','离线') AS device_state,a.install_time,a.unitinfo FROM sp_owner AS a JOIN sp_devices_status AS b ON a.owner_code=b.deviceid WHERE a.company='" . $company_code . "' AND a.dwtype=1 GROUP BY a.owner_code ORDER BY a.install_time DESC");
  17. $device_data = array_merge($device_data1, $device_data2);
  18. array_multisort(array_column($device_data, 'install_time'), SORT_DESC, $device_data);
  19. $res['msg'] = '操作成功';
  20. $res['flag'] = true;
  21. $res['data'] = $device_data;
  22. echo json_encode($res);
  23. }
  24. public function setDevice()
  25. {
  26. $Data = I('');
  27. $data['owner_code'] = $Data['device_code'];
  28. $data['owner_name'] = $Data['device_name'];
  29. $data['unitinfo'] = $Data['unitinfo'];
  30. $data['louyu'] = $Data['louyu'];
  31. $data['sim'] = $Data['sim'];
  32. $data['maintainTime'] = $Data['maintainTime'];
  33. $data['dest_address'] = $Data['dest_address'];
  34. $data['addr1'] = $Data['addr1'];
  35. $data['addr2'] = $Data['addr2'];
  36. $data['addr3'] = $Data['addr3'];
  37. $data['address'] = $Data['address'];
  38. $data['posistion'] = $Data['posistion'];
  39. $data['install_time'] = date("Y-m-d H:i:s");
  40. $data['install_man'] = $_SESSION['phone'];
  41. $data['dwtype'] = $Data['type'];
  42. $data['owner_xh'] = '0' . $data['owner_xh_a'] . $data['owner_xh_b'] . $data['owner_xh_c'];
  43. $data['s_interval'] = $Data['s_interval'];
  44. $data['community'] = $Data['community'];
  45. $data['company'] = $Data['company_code'];
  46. $data['rtmp'] = $Data['rtmp'];
  47. $data['hls'] = $Data['hls'];
  48. $data['html5'] = $Data['html5'];
  49. $data['danwei'] = $Data['danwei'];
  50. $data['owner_bl'] = $Data['owner_bl'];
  51. $data['push_param1'] = $Data['push_param1'];
  52. $data['push_param2'] = $Data['push_param2'];
  53. $data['push_param3'] = $Data['push_param3'];
  54. $data['push_param4'] = $Data['push_param4'];
  55. $data['login_param'] = $Data['login_param'];
  56. $data['transfer_type'] = $Data['transfer_type'];
  57. $data1['deviceid'] = $Data['device_code'];
  58. $data1['deviceno'] = 0;
  59. $data1['devicestatus'] = '75';
  60. $data1['statustime'] = 0;
  61. $data1['f_evt'] = 40;
  62. $data1['c_evt'] = "00";
  63. $data1['w_evt'] = "";
  64. $data1['true_status'] = '75';
  65. $data1['lastcommtime'] = '0';
  66. $data2['owner_code'] = $Data['device_code'];
  67. $data2['owner_dwtype'] = $Data['type'];
  68. $data2['device_name'] = $Data['device_name'];
  69. $data2['object_name'] = $Data['unitinfo'];
  70. $data2['min_level'] = $Data['louyu'];
  71. $data2['max_level'] = $Data['louyu'];
  72. $data2['is_top'] = $Data['is_top'];
  73. $data2['start_port'] = '0';
  74. $data2['rec_cur'] = '0';
  75. $data3['deviceType']=$Data['deviceType'];//设备类型 Smoke:烟感、MultiSensor:水表、WaterMeter:宇洁戎情水表、topsailSensor:拓扑索尔
  76. $data3['manufacturerName']=$Data['manufacturerName'];//厂商名称:ST、ZHYQ、shanghaijunyanTest、Topsail
  77. $data3['model']=$Data['model'];//设备型号 烟感型号:517N01、水表型号:PT124B-2892-010、宇洁戎情水表型号:WPTA、拓扑索尔水表液位:TH12
  78. $data3['location']=$Data['location'];//地址 区域
  79. $data3['protocolType']=$Data['protocolType'];//协议
  80. switch ($Data['type']) {
  81. case '1'://报警主机
  82. $data2['dwtype'] = 'YTUI';
  83. $Res1 = M('owner')->add($data);
  84. $Res2 = M('devices_status')->add($data1);
  85. $Res3 = M('object_share')->add($data2);
  86. break;
  87. case '2'://消防水
  88. $data2['dwtype'] = 'YTWP';
  89. $data2['start_port'] = '0';
  90. $data2['rec_cur'] = '0';
  91. $Res = M()->query("SELECT max(object_code) AS object_code FROM sp_object_share WHERE object_code LIKE '" . $data2['dwtype'] . "-" . $Data['company_code'] . "%'");
  92. if (empty($Res)) {
  93. $data2['object_code'] = $data2['dwtype'] . '-' . $Data['company_code'] . '001';
  94. } else {
  95. $sort = (int)substr($Res[0]['object_code'], 10, 3) + 1;
  96. $num = str_pad($sort, 3, "0", STR_PAD_LEFT);
  97. $data2['object_code'] = $data2['dwtype'] . '-' . $Data['company_code'] . $num;
  98. }
  99. switch ($data['transfer_type']) {
  100. case 'NB':
  101. if(empty($data3['deviceType'])||empty($data3['manufacturerName'])||empty($data3['model'])||empty($data3['location'])||empty($data3['protocolType'])){
  102. $res['msg'] = "请填写好必要内容";
  103. $res['flag'] = 3002;
  104. echo json_encode($res);
  105. exit();
  106. }
  107. $R =ytapi187_query("select * from device where device_id='" . $Data['device_code'] . "'");
  108. if (empty($R)) {
  109. if (empty($Data['device_code']) || empty($Data['device_name'])) {
  110. $res['msg'] = '请填写好必要内容';
  111. $res['flag'] = 3002;
  112. echo json_encode($res);
  113. exit();
  114. }
  115. // print_r("测试".$R);
  116. // exit();
  117. $token = json_decode(gettoken(), true);
  118. $sendata = [
  119. "verifyCode" => $data['device_id'],//"868744030067098"
  120. "nodeId" => $data['device_id'],
  121. "timeout" => 0
  122. ];
  123. $sendata = [
  124. "verifyCode" => $Data['device_code'],//"868744030067098"
  125. "nodeId" => $Data['device_code'],
  126. "timeout" => 0
  127. ];
  128. $header = [
  129. "Content-Type:application/json",
  130. "app_key:" . $this->appId,
  131. "Authorization:Bearer " . $token["accessToken"]
  132. ];
  133. $rescurl = curl($this->host . "iocm/app/reg/v1.1.0/deviceCredentials?appId=" . $this->appId, json_encode($sendata), $header);
  134. if ($rescurl[0] == 200) {
  135. $res1 = json_decode($rescurl[1], true);
  136. } else {
  137. $res['msg'] = $rescurl;
  138. $res['flag'] = 3002;
  139. echo json_encode($res);
  140. exit();
  141. }
  142. $list = array();
  143. $list['device_id'] = trim($Data['device_code']);
  144. $list['name'] = $Data['device_name'];
  145. $list['iot_id'] = $res1['deviceId'];
  146. $list['psk'] = $res1['psk'];
  147. $list['addtime'] = date('Y-m-d H:i:s');
  148. $list['updatetime'] = date('Y-m-d H:i:s');
  149. $device_table = "dev_" . $Data['device_code'];
  150. $create_sql = "
  151. CREATE TABLE `" . $device_table . "` (
  152. `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  153. `device_id` varchar(200) DEFAULT NULL,
  154. `iot_id` varchar(255) DEFAULT NULL,
  155. `service` text,
  156. `addtime` varchar(50) DEFAULT NULL,
  157. `notifyType` varchar(50) DEFAULT NULL,
  158. PRIMARY KEY (`id`)
  159. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;";
  160. ytapi187_inset($create_sql);
  161. $rs = ytapi187_inset("INSERT INTO device (device_id,name,addtime,updatetime,iot_id,psk,manufacturerId,manufacturerName,deviceType
  162. ,model,location,isSecure,status,protocolType,owner_id) values ('".$list['device_id']."','".$list['name']."','".$list['addtime']."',
  163. '".$list['updatetime']."','".$list['iot_id']."','".$list['psk']."','','','','','','','','','')");
  164. if ($rs) {
  165. $owner1=M()->query("SELECT company,louyu,unitinfo FROM sp_owner WHERE owner_code = '".$Data['device_code']."'");
  166. if ($owner1){
  167. $data4['owner_name'] = $Data['device_name'];
  168. $data4['unitinfo'] = $Data['unitinfo'];
  169. $data4['louyu'] = $Data['louyu'];
  170. $data4['company'] = $Data['company_code'];
  171. $where4['owner_code']=$Data['device_code'];
  172. $res4=M('owner')->where($where4)->save($data4);
  173. }else{
  174. $token=json_decode(gettoken(),true);
  175. $sendata=[
  176. "name"=>$Data['device_code'],
  177. "deviceType"=>$Data['deviceType'],
  178. "manufacturerName"=>$Data['manufacturerName'],
  179. "manufacturerId"=>$Data['manufacturerId'],//厂商ID ST、ZHYQ、JunyanTest、Topsail
  180. "model"=>$Data['model'],
  181. "protocolType"=>$Data['protocolType'],
  182. "location"=>trim($Data['location']),
  183. ];
  184. $header=[
  185. "Content-Type:application/json",
  186. "app_key:".$this->appId,
  187. "Authorization:Bearer ".$token["accessToken"]
  188. ];
  189. $rescurl=curl($this->host."iocm/app/dm/v1.4.0/devices/".$list['iot_id']."?appId=".$this->appId,json_encode($sendata,320),$header,"PUT");
  190. }
  191. if($rescurl[0]==204){//成功
  192. $res1=json_decode($rescurl[1],true);
  193. }else{//失败
  194. $res['msg'] = $rescurl[1];
  195. $res['flag'] = 3002;
  196. echo json_encode($res);
  197. exit();
  198. }
  199. // $list = array();
  200. // $data5['deviceType'] = $data['deviceType'];//设备类型
  201. // $data5['name'] = $data['name'];//设备类型
  202. // $data5['manufacturerName'] = $data['manufacturerName'];//厂商名称
  203. // $data5['model'] = $data['model'];//设备型号
  204. // $data5['isSecure'] = $data['isSecure'];
  205. // $data5['manufacturerId'] = $data['manufacturerId'];//设备型号
  206. // $data5['protocolType'] = $data['protocolType'];
  207. // $data5['location'] = $data['location'];
  208. // $data5['updatetime'] = date('Y-m-d H:i:s');
  209. $device_update=ytapi187_inset("UPDATE device set deviceType='".$Data['deviceType']."',name='".$Data['device_name']."',manufacturerName=
  210. '".$Data['manufacturerName']."',model='".$Data['model']."',isSecure='".$Data['isSecure']."',manufacturerId='".$Data['manufacturerId']."',
  211. protocolType='".$Data['protocolType']."',location='".$Data['location']."',updatetime='".date('Y-m-d H:i:s')."' where device_id=
  212. '".$Data['device_code']."'");
  213. // print_r("select * from devcie where device_id='".$Data['device_code']."'");
  214. // exit();
  215. $device_query=ytapi187_query("select * from device where device_id='".$Data['device_code']."'");
  216. // $res = Db::name('device')->where('id', $data['id'])->update($data5);
  217. // $res1 = Db::name('device')->where('id', $data['id'])->find();
  218. $device_id = $device_query[0]['device_id'];
  219. $deviceType = $Data['deviceType'];
  220. $create_sql = addtable($device_id, $deviceType);
  221. $table = Db::execute($create_sql);
  222. $deviceStatus=M()->query("SELECT statustime FROM sp_devices_status WHERE deviceid = '".$device_query[0]['device_id']."'");
  223. if (!$deviceStatus) {
  224. $data6['deviceid'] = $device_query[0]['device_id'];
  225. $data6['deviceno'] = 0;
  226. $data6['devicestatus'] = '75';
  227. $data6['statustime'] = date('Y-m-d H:i:s');
  228. $data6['f_evt'] = 40;
  229. $data6['c_evt'] = 00;
  230. $data6['w_evt'] = "";
  231. $data6['true_status'] = '75';
  232. $data6['lastcommtime'] = '0';
  233. $device_status=M('devices_status')->add($data6);
  234. }
  235. if ($Data['company_code']) {;
  236. $Res1 = M('owner')->add($data);
  237. // $Res2 = M('devices_status')->add($data1);
  238. $Res3 = M('object_share')->add($data2);
  239. }
  240. if ($device_update) {
  241. $res['msg'] = "操作成功";
  242. $res['flag'] = true;
  243. echo json_encode($res);
  244. exit();
  245. } else {
  246. $res['msg'] = "添加失败,请稍后再试";
  247. $res['flag'] = 3002;
  248. echo json_encode($res);
  249. exit();
  250. }
  251. } else {
  252. $res['msg'] = "添加失败,请稍后再试";
  253. $res['flag'] = 3002;
  254. echo json_encode($res);
  255. exit();
  256. }
  257. } else {
  258. $res['msg'] = '该设备编号已经添加';
  259. $res['flag'] = 3002;
  260. echo json_encode($res);
  261. exit();
  262. }
  263. break;
  264. case 'Lora':
  265. $a = '';
  266. break;
  267. case '4G':
  268. $Res1 = M('owner')->add($data);
  269. $Res2 = M('devices_status')->add($data1);
  270. $Res3 = M('object_share')->add($data2);
  271. break;
  272. default:
  273. $res['msg'] = '操作失败,该传输方式不存在,请联系管理员';
  274. $res['flag'] = 3002;
  275. echo json_encode($res);
  276. exit();
  277. }
  278. break;
  279. case '3'://烟感
  280. $data2['dwtype'] = 'YTSM';
  281. switch ($data['transfer_type']) {
  282. case 'NB':
  283. break;
  284. case 'Lora':
  285. $a = '';
  286. break;
  287. case '4G':
  288. $Res1 = M('owner')->add($data);
  289. $Res2 = M('devices_status')->add($data1);
  290. $Res3 = M('object_share')->add($data2);
  291. break;
  292. default:
  293. $res['msg'] = '操作失败,该传输方式不存在,请联系管理员';
  294. $res['flag'] = 3002;
  295. echo json_encode($res);
  296. exit();
  297. }
  298. break;
  299. case '4'://消防栓
  300. $data2['dwtype'] = 'YTFH';
  301. $Res1 = M('owner')->add($data);
  302. $Res2 = M('devices_status')->add($data1);
  303. $Res3 = M('object_share')->add($data2);
  304. break;
  305. case '5'://液位
  306. $data2['dwtype'] = 'YTLL';
  307. switch ($data['transfer_type']) {
  308. case 'NB':
  309. break;
  310. case 'Lora':
  311. $a = '';
  312. break;
  313. case '4G':
  314. $Res1 = M('owner')->add($data);
  315. $Res2 = M('devices_status')->add($data1);
  316. $Res3 = M('object_share')->add($data2);
  317. break;
  318. default:
  319. $res['msg'] = '操作失败,该传输方式不存在,请联系管理员';
  320. $res['flag'] = 3002;
  321. echo json_encode($res);
  322. exit();
  323. }
  324. break;
  325. case '6'://RTU
  326. $Res1 = M('owner')->add($data);
  327. $Res2 = M('devices_status')->add($data1);
  328. break;
  329. case '7'://电气火灾
  330. $Res1 = M('owner')->add($data);
  331. $Res2 = M('devices_status')->add($data1);
  332. break;
  333. case '16'://视频监测
  334. $data2['dwtype'] = 'YTVA';
  335. $Res1 = M('owner')->add($data);
  336. $Res2 = M('devices_status')->add($data1);
  337. $Res3 = M('object_share')->add($data2);
  338. break;
  339. case '17'://电梯监测
  340. $data2['dwtype'] = 'YTLF';
  341. $Res1 = M('owner')->add($data);
  342. $Res2 = M('devices_status')->add($data1);
  343. $Res3 = M('object_share')->add($data2);
  344. break;
  345. case '128'://井盖
  346. $data2['dwtype'] = 'YTMC';
  347. $Res1 = M('owner')->add($data);
  348. $Res2 = M('devices_status')->add($data1);
  349. $Res3 = M('object_share')->add($data2);
  350. break;
  351. case '129'://地磁
  352. $Res1 = M('owner')->add($data);
  353. $Res2 = M('devices_status')->add($data1);
  354. break;
  355. case '130'://门禁
  356. $Res1 = M('owner')->add($data);
  357. $Res2 = M('devices_status')->add($data1);
  358. break;
  359. case '131'://可燃气体
  360. $Res1 = M('owner')->add($data);
  361. $Res2 = M('devices_status')->add($data1);
  362. break;
  363. default:
  364. $res['msg'] = '操作失败,设备类型尚未定义,请联系管理员';
  365. $res['flag'] = 3002;
  366. echo json_encode($res);
  367. exit();
  368. break;
  369. }
  370. if ($Res1 == 1 && $Res2 == 1) {
  371. $res['msg'] = '操作成功';
  372. $res['flag'] = true;
  373. } else {
  374. $res['msg'] = '操作失败';
  375. $res['flag'] = true;
  376. }
  377. }
  378. }