ApiAction.class.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559
  1. <?php
  2. class ApiAction extends Action {
  3. public function login( ){
  4. $data = I('post.data');
  5. //$data = json_decode(htmlspecialchars_decode(I('post.data')),true);
  6. if(!$data){
  7. $this->api_fail(C('FAIL'),'没有用户信息');
  8. }
  9. $cond = array(
  10. 'LicensePlate|GpsDeviceNumber|DeviceNumber'=>$data['username'],
  11. 'Password'=>$data['password']
  12. );
  13. $userinfo = M('jms_vehicle')->where($cond)->find();
  14. if(!$userinfo){
  15. $this->api_fail(C('FAIL'),'用户名或者密码不正确');
  16. }
  17. $token = md5($data['username'].I('post.loginMark').$data['password'].date('Y-m-d H:i:s'));
  18. $result = \Jiaruan\RedisCache::setSessionRules(I('post.loginMark'),$token);
  19. if($result === false){
  20. $this->api_fail(C('FAIL'),'添加redis失败');
  21. }
  22. $where = array("ID" => $userinfo['ID']);
  23. $data = array(
  24. "LoginMark" => I('post.loginMark'),
  25. "Token" => $token
  26. );
  27. $res = M('jms_vehicle')->createSave($where,$data);
  28. if(!$res){
  29. $this->api_fail(C('FAIL'),'token信息保存失败');
  30. }
  31. $baseinfo = array(
  32. "userId" => $userinfo['ID'],
  33. "enCode" => "System",
  34. "account" => $userinfo['FullName'],
  35. "password" => $userinfo['Password'],
  36. "secretkey" => '',
  37. "realName" => $userinfo['FullName'],
  38. "nickName" => $userinfo['FullName'],
  39. "headIcon" => ".jpg",
  40. "gender" => $userinfo['Sex'],
  41. "mobile" => $userinfo['UserPhone'],
  42. "telephone" => $userinfo['Telephone'],
  43. "email" => $userinfo['Email'],
  44. "oICQ" => $userinfo['QQ'],
  45. "weChat" => $userinfo['WxName'],
  46. "companyId" => "",
  47. "companyIds" => array(),
  48. "departmentId" => "",
  49. "departmentIds" => array(),
  50. "openId" => $userinfo['WxOpenId'],
  51. "roleIds" => $userinfo['RoleId'],
  52. "postIds" => "",
  53. "isSystem" => true,
  54. "appId" => "renlian_1.0.0_App",
  55. "logTime" => date('Y-m-d H:i:s'),
  56. "iPAddress" => $_SERVER['REMOTE_ADDR'],
  57. "browser" => "Safari 11.0",
  58. "loginMark" => I('post.loginMark'),
  59. "token" => $token,
  60. "imUrl" => '',
  61. "imOpen" => '',
  62. "wfProcessId" => '',
  63. "photoUrl" => $userinfo['Avatar'],
  64. "plate" => $userinfo['LicensePlate'],
  65. 'deviceNumber' => $userinfo['DeviceNumber'],
  66. 'gpsNumber' => $userinfo['GpsDeviceNumber']
  67. );
  68. $data = array(
  69. "baseinfo" => $baseinfo,
  70. "post" => array(),
  71. "role" => array()
  72. );
  73. $this->api_success('登录成功',$data);
  74. }
  75. public function modifypassword( ){
  76. $this->token_verify();
  77. $post_data = I('post.data');
  78. if( empty($post_data) ){
  79. $this->api_fail(C('FAIL'),'post_data不能为空!');
  80. }
  81. $userid = $post_data['userid'];
  82. $newpassword = $post_data['newpassword'];
  83. $oldpassword = $post_data['oldpassword'];
  84. if(!M('jms_vehicle')->where(array('ID'=>$userid,'Password'=>$oldpassword))->find()){
  85. $this->api_fail(C('FAIL'),'旧密码不正确');
  86. }
  87. $where = array(
  88. 'ID' => $userid,
  89. 'Password' => $oldpassword
  90. );
  91. $data = array(
  92. 'Password' => $newpassword
  93. );
  94. $res = M('jms_vehicle')->createSave($where,$data);
  95. if(!$res){
  96. $this->api_fail(C('FAIL'),'修改密码失败');
  97. }
  98. $this->api_success('修改成功');
  99. }
  100. public function get_baojing_info( ){
  101. $this->token_verify();
  102. $plate = I('get.plate');
  103. $msg = M('jms_baojing_message')->where(array('Type'=>C('STOLEN_ALARM'),'LicensePlate'=>$plate))->select();
  104. if(!$msg){
  105. $this->api_fail(C('FAIL'),'报警信息不存在');
  106. }
  107. $this->api_success('成功',$msg);
  108. }
  109. public function get_map_index_data( ){
  110. $this->token_verify();
  111. $deviceNumber = $_GET['data']['deviceNumber'];
  112. if(!$deviceNumber){
  113. $this->api_fail(C('FAIL'),'faild, no deviceNumber !');
  114. }
  115. //获取车辆最新位置
  116. $result = M('jms_vehicle')->field('GpsLongitude, GpsLatitude, Address, FenceShapeInfo, LockStatus, FenceAlarmEnable, Battery, GpsOnlineTime, Speed')->where(array('DeviceNumber' => $deviceNumber))->find();
  117. if(!$result){
  118. $this->api_fail(C('FAIL'),'cant find this vehicl !');
  119. }
  120. $onlineTimeStamp = strtotime($result['GpsOnlineTime']);
  121. if(!$onlineTimeStamp){
  122. $onlineTimeStamp = 0;
  123. }
  124. $mapData = array(
  125. 'vehicleLocation' => array('longitude' => $result['GpsLongitude'], 'latitude' => $result['GpsLatitude']),
  126. 'vehicleAddress' => $result['Address'],
  127. 'lockStatus' => $result['LockStatus'],
  128. 'fenceShapeInfo' => $result['FenceShapeInfo'],
  129. 'battery' => $result['Battery'],
  130. 'fenceAlarmStatus' => $result['FenceAlarmEnable'],
  131. 'onlineTime' => $onlineTimeStamp,
  132. 'speed' => $result['Speed']
  133. );
  134. $this->api_success('success', $mapData);
  135. }
  136. public function get_insure_info( ){
  137. $this->token_verify();
  138. $cityid = I('get.cityid');
  139. $insure_info = M('jms_insurance')->where(array('CityId'=>$cityid))->select();
  140. if(!$insure_info){
  141. $this->api_fail(C('FAIL'),'保险信息不存在');
  142. }
  143. $this->api_success('成功',$insure_info);
  144. }
  145. public function get_user_platenumber( ){
  146. $this->token_verify();
  147. $userid = I('get.userid');
  148. if(!$userid){
  149. $this->api_fail(C('FAIL'),'用户id不存在');
  150. }
  151. $plate_info = M('jms_vehicle')->where(array('ID'=>$userid))->field('ID,LicensePlate')->select();
  152. if(!$plate_info){
  153. $this->api_fail(C('FAIL'),'该车主没有使用的车牌');
  154. }
  155. $this->api_success('成功',$plate_info);
  156. }
  157. public function submit_add_baojing( ){
  158. $this->token_verify();
  159. $post_data = I('post.data');
  160. if( empty($post_data) ){
  161. $this->api_fail(C('FAIL'),'post_data不能为空!');
  162. }
  163. $Keyword = strtoupper($post_data['LicensePlate']);
  164. if ( empty($Keyword)) {
  165. $this->api_fail(C('FAIL'),'报警车辆不能为空');
  166. }
  167. $userid = $post_data['userid'];
  168. if ( empty($userid)) {
  169. $this->api_fail(C('FAIL'),'用户id不能为空');
  170. }
  171. //获取登录用户城市id
  172. /*$cond = array('ID'=>$userid);
  173. $cityid = M('uc_user')->where($cond)->getField('CityId');
  174. if(!$cityid){
  175. $this->api_fail('failerror','获取登录城市失败!');
  176. }*/
  177. $vehicle_info = M('jms_vehicle')->where(array( 'LicensePlate|IdCard|UserPhone' => $Keyword ))->field('ID,UserId,CityId,IdCard,UserPhone,LicensePlate')->find();
  178. if(!$vehicle_info){
  179. $this->api_fail(C('FAIL'),'报警车辆不存在!');
  180. }
  181. /*if( $vehicle_info['CityId'] != $cityid ){
  182. $this->api_fail('failerror','该车辆不在管辖区域,无法添加报警!');
  183. }
  184. if(!$vehicle_info['UserId']){
  185. $this->api_fail('failerror','此车辆还未开户,不能添加报警信息!');
  186. }*/
  187. //$vehicle_id = $vehicle_info['ID'];
  188. /*$chezhu_id = $vehicle_info['UserId'];
  189. //$chezhu_info = fd_get_userinfo($chezhu_id);
  190. //$chezhu_info = get_chezhu_info($chezhu_id);*/
  191. //$this->api_check_vehicle_isrepeat2($vehicle_id);
  192. if (I('post.StolenDate')) {
  193. $StolenDate = $post_data['StolenDate'];
  194. $StolenDate = date('Y-m-d',strtotime($StolenDate));
  195. // 被盗日期不能超过当前时间
  196. $now_time = date('Y-m-d');
  197. if(strtotime($StolenDate) > strtotime($now_time)){
  198. $this->api_fail(C('FAIL'),'被盗日期不能超过当前时间!');
  199. }
  200. } else {
  201. $StolenDate = date('Y-m-d');
  202. }
  203. if(M('jms_baojing')->where(array('LicensePlate' => $vehicle_info['LicensePlate'],'StolenState'=>0))->find()){
  204. $this->api_fail(C('FAIL'),'报警信息已经存在');
  205. }
  206. $data = array(
  207. 'WoContent' => $post_data['WoContent'],
  208. 'VehicleId' => $userid,
  209. 'LicensePlate' => $vehicle_info['LicensePlate'],
  210. 'IdCard' => $vehicle_info['IdCard'],
  211. 'UserId' => $userid,
  212. 'UserPhone' => I('post.UserPhone'),
  213. 'CityId' => $vehicle_info['CityId'],
  214. 'SubmitUserId' => $userid,
  215. 'SubmitTime' => date('Y-m-d H:i:s'),
  216. 'StolenDate' => $StolenDate,
  217. 'StolenCityId' => $vehicle_info['CityId'], //新增:被盗城市id
  218. );
  219. if (!M('jms_baojing')->createAdd($data)) {
  220. $this->api_fail(C('FAIL'),'添加报警信息失败');
  221. }
  222. $this->api_success('添加报警信息成功');
  223. }
  224. public function update_jg_registrationid( ){
  225. $this->token_verify();
  226. $post_data = I('post.data');
  227. //$post_data = json_decode(htmlspecialchars_decode(I('post.data')),true);
  228. if( empty($post_data) ){
  229. $this->api_fail(C('FAIL'),'post_data不能为空!');
  230. }
  231. $regid = $post_data['regid'];//极光推设备唯一标识id
  232. if( empty($regid) ){
  233. $this->api_fail(C('FAIL'),'极光推注册id不能为空!');
  234. }
  235. if(!$post_data['uid']){
  236. $this->api_fail(C('FAIL'),'uid不能为空!');
  237. }
  238. $cond = array(
  239. 'ID' => $post_data['uid']
  240. );
  241. $result = M('jms_vehicle')->where($cond)->setField('JgClientRegistrationId',$regid);
  242. if( false === $result ){
  243. $this->api_fail(C('FAIL'),'更新极光推注册信息失败! error:'.M('jms_vehicle')->getDbError());
  244. }
  245. $this->api_success('更新成功');
  246. }
  247. public function save_fence_info( ){
  248. $this->token_verify();
  249. $fence_info =I('post.data');
  250. $fenceData = htmlspecialchars_decode($fence_info['data']);
  251. $device_number = $fence_info['vehicleNumber'];
  252. //var_dump($fence_info['fenceAlarmEnable']);
  253. if( !$fence_info || !$device_number){
  254. json_fail('Missing param !');
  255. }
  256. $cond = array('DeviceNumber' => $device_number);
  257. $data = array(
  258. 'FenceAlarmEnable' => $fence_info['fenceAlarmEnable'] == 'true' ? true : false,
  259. 'FenceShapeInfo' => $fenceData
  260. );
  261. $result = M('jms_vehicle')->where($cond)->save($data);
  262. if( $result === false ){
  263. json_fail('保存失败');
  264. }
  265. json_success('保存成功');
  266. }
  267. public function get_gps_route( ){
  268. $this->token_verify();
  269. $postParm = I('post.data');
  270. $search_date = $postParm['date'];
  271. $gps_number = $postParm['gpsNumber'];
  272. if( !$gps_number || !$search_date){
  273. json_fail('Missing param !');
  274. }
  275. $timestamp = strtotime($search_date);
  276. if( !$timestamp ){
  277. json_fail('Date format error !');
  278. }
  279. $start_date = strtotime( date('Y-m-d 00:00:00',$timestamp) );
  280. $end_date = strtotime( date('Y-m-d 23:59:59',$timestamp) );
  281. $cond = array(
  282. 'DeviceId' => $gps_number,
  283. 'DeviceTime' => array( 'between', array($start_date,$end_date) ),
  284. );
  285. $fields = 'Longitude as lng,Latitude as lat,Speed as speed, DeviceTime as deviceTime';
  286. $dateStr = str_replace("-","",$search_date);
  287. $route_list = M('gps_location_'.$dateStr, '', C('DB_DSN_GPS'))->field($fields)->where($cond)->order('DeviceTime asc')->select();
  288. //var_dump(M('gps_location_'.$dateStr, '', C('DB_DSN_GPS'))->getLastSql());
  289. if( !$route_list ){
  290. json_fail('无轨迹 !');
  291. }
  292. foreach($route_list as &$v){
  293. $v['deviceTime'] = date('Y-m-d H:i:s', $v['deviceTime']);
  294. }
  295. $route_data = json_encode($route_list);
  296. //$testData = json_encode($testData);
  297. json_success('success',$route_data);
  298. //json_success('success',$testData);
  299. }
  300. public function change_lock_status( ){
  301. $this->token_verify();
  302. $lock_state = I('post.data')['lockStatus'];
  303. $device_number = I('post.data')['deviceNumber'];
  304. if( !$device_number || $lock_state === ''){
  305. json_fail('Missing param !');
  306. }
  307. //检查锁定状态值
  308. if( !is_numeric($lock_state) && ($lock_state != 0 && $lock_state != 1) ){
  309. json_fail('unknown state !');
  310. }
  311. $cond = array('DeviceNumber' => $device_number);
  312. $result = M('jms_vehicle')->where($cond)->setField('LockStatus',$lock_state);
  313. if( $result === false ){
  314. json_fail('设置失败');
  315. }
  316. json_success('设置成功');
  317. }
  318. public function api_success( $msg, $data ){
  319. $array = array(
  320. 'success'=>true,
  321. 'message'=>$msg,
  322. 'data' => $data,
  323. 'code'=>200
  324. );
  325. echo json_encode($array,JSON_UNESCAPED_UNICODE);
  326. exit;
  327. }
  328. public function api_fail( $code, $msg, $data ){
  329. $array = array(
  330. 'success'=>false,
  331. 'message'=>$msg,
  332. 'data' => $data,
  333. 'code'=>$code
  334. );
  335. echo json_encode($array,JSON_UNESCAPED_UNICODE);
  336. exit;
  337. }
  338. public function get_gonggao_info( ){
  339. $this->token_verify();
  340. $plate = I('get.plate');
  341. $msg = M('jms_baojing_message')->where(array('Type'=>C('BROADCASTING'),'LicensePlate'=>$plate))->select();
  342. if(!$msg){
  343. $this->api_fail(C('FAIL'),'公告信息不存在');
  344. }
  345. $this->api_success('成功',$msg);
  346. }
  347. public function token_verify( ){
  348. $token = I('token');//用户登录token
  349. $login_mark = I('loginMark');
  350. if(!$token){
  351. $this->api_fail(C('FAIL'),'token不存在 !');
  352. }
  353. if(!$login_mark){
  354. $this->api_fail(C('FAIL'),'login_mark不存在 !');
  355. }
  356. //获取token
  357. $redis = Redis('czapp_client_login_session','hash');
  358. $key = $login_mark;
  359. $val = json_decode($redis->get($key),true);
  360. if(!$val){
  361. $this->api_fail(C('FAIL'),'无效token1 !');
  362. }
  363. //验证token是否一致
  364. if( $token != $val['token'] ){
  365. $this->api_fail(C('FAIL'),'无效token2 !');
  366. }
  367. //验证token是否过期
  368. if(!$val['login_time']){
  369. $this->api_fail(C('FAIL'),'没有登录时间,token校验失败 !');
  370. }
  371. $login_time = strtotime($val['login_time']);
  372. $end_time = $login_time + $val['expire']*60;
  373. if(time()>$end_time){
  374. $this->api_fail(C('TOKEN_OVERTIME'),'token失效,请重新登录 !');
  375. }
  376. }
  377. public function get_gonggao_detail( ){
  378. header('Access-Control-Allow-Origin:*');
  379. $this->token_verify();
  380. $plate = I('get.plate');
  381. $msg = M('jms_baojing_message')->where(array('Type'=>C('BROADCASTING'),'LicensePlate'=>$plate))->find();
  382. if(!$msg){
  383. $this->api_fail(C('FAIL'),'公告信息不存在');
  384. }
  385. $this->api_success('成功',$msg);
  386. }
  387. public function get_baojing_detail( ){
  388. $this->token_verify();
  389. $plate = I('get.plate');
  390. $addtime = I('get.addtime');
  391. $msg = M('jms_baojing_message')->where(array('Type'=>C('STOLEN_ALARM'),'LicensePlate'=>$plate,'AddTime'=>$addtime))->find();
  392. if(!$msg){
  393. $this->api_fail(C('FAIL'),'报警信息不存在');
  394. }
  395. $this->api_success('成功',$msg);
  396. }
  397. public function register( ){
  398. $where = array('LicensePlate'=>I('post.LicensePlate'));
  399. $userinfo = M('jms_vehicle')->where($where)->find();
  400. if(!$userinfo){
  401. $this->api_fail(C('FAIL'),'用户车牌还未登记');
  402. }
  403. if($userinfo['FullName'] != I('post.FullName')){
  404. $this->api_fail(C('FAIL'),'姓名和备案时填写不一致');
  405. }
  406. if($userinfo['IdCard'] != I('post.IdCard')){
  407. $this->api_fail(C('FAIL'),'身份证和备案时填写不一致');
  408. }
  409. $data = array(
  410. 'Password' => I('post.Password'),
  411. );
  412. $result = M('jms_vehicle')->createSave($where,$data);
  413. if(!$result){
  414. $this->api_fail(C('FAIL'),'注册失败');
  415. }
  416. $this->api_success('注册成功');
  417. }
  418. public function get_fence_info( ){
  419. $this->token_verify();
  420. $device_number = I('get.data');
  421. if( !$device_number){
  422. json_fail('Missing param !');
  423. }
  424. $cond = array(
  425. 'DeviceNumber' => $device_number,
  426. );
  427. $fields = 'FenceShapeInfo as fenceInfo,FenceAlarmEnable as fenceStatus';
  428. $fence = M('jms_vehicle')->field($fields)->where($cond)->find();
  429. if( !$fence ){
  430. json_fail('无围栏 !');
  431. }
  432. $fence = json_encode($fence);
  433. json_success('success',$fence);
  434. }
  435. public function get_gps_route_table( ){
  436. $this->token_verify();
  437. $postParm = I('post.data');
  438. $search_date = $postParm['date'];
  439. $gps_number = $postParm['gpsNumber'];
  440. if( !$gps_number || !$search_date){
  441. json_fail('请检查GPS标签或者日期 !');
  442. }
  443. //$list = $this->getBTGpsRoute($search_date,$gps_number);
  444. $list = $this->getBTGpsRoute($search_date,'1');
  445. $respData = array();
  446. foreach($list as $v){
  447. $nv = array(
  448. 'lat' => $v['Latitude'],
  449. 'lng' => $v['Longitude'],
  450. 'speed' => $v['Speed'],
  451. 'deviceTime' => $v['OnlineTime']
  452. );
  453. array_push($respData, $nv);
  454. }
  455. /*
  456. foreach(&$respData as &$v){
  457. $v['deviceTime'] = date('Y-m-d H:i:s', $v['deviceTime']);
  458. }
  459. */
  460. if(!$respData){
  461. json_success('无轨迹');
  462. }
  463. $route_data = json_encode($respData);
  464. //$testData = json_encode($testData);
  465. json_success('success',$route_data);
  466. //json_success('success',$testData);
  467. }
  468. private function getBTGpsRoute( $date, $gpsNumber ){
  469. if(!$gpsNumber){
  470. return false;
  471. }
  472. if(!$date){
  473. $date = date('Y-m-d');
  474. }
  475. //获取所有轨迹信号
  476. $option = array();
  477. $option['pagesize'] = 100;
  478. $option['asc'];
  479. $option['fields'] = array('Longitude','Latitude','Speed','DeviceTime');
  480. $routesig = new \Rlfd\Route\RouteSignal();
  481. $list = $routesig->queryEbicyleDailyGpsSignals($gpsNumber, $date,$option);
  482. //var_dump($list);
  483. //var_dump(array('route'=>$list,'vehicle'=>$vehicle_info));
  484. return $list;
  485. }
  486. }