You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

1271 lines
62 KiB

  1. <?php
  2. /**
  3. * author:张帅
  4. * Class driver
  5. */
  6. class driver extends base
  7. {
  8. /**
  9. * 获取验证手机号
  10. * @param $param
  11. */
  12. private function checkLogin($phone)
  13. {
  14. $sql = "SELECT
  15. guide_id as id,guide_name as name,org_id,
  16. (SELECT supplier_name FROM base_supplier WHERE id = org_id LIMIT 1) as supplier_name
  17. FROM
  18. base_guide
  19. WHERE
  20. phone_no = " . $phone . " AND cancel_flag = 0
  21. LIMIT 1";
  22. $guide_info = $this->query($sql);
  23. if (count($guide_info) == 1) {
  24. $json['code'] = '0';
  25. $json['info'] = '手机号有效';
  26. $json['driver_info'] = $guide_info[0];
  27. $json['type'] = '导游';
  28. return $json;
  29. }
  30. $sql = "SELECT
  31. driver_id AS id,driver_name AS name,org_id,
  32. (SELECT supplier_name FROM base_supplier WHERE id = org_id LIMIT 1) AS supplier_name
  33. FROM
  34. base_driver
  35. WHERE
  36. phone_no = " . $phone . "
  37. AND cancel_flag = 0
  38. LIMIT 1";
  39. $driver_info = $this->query($sql);
  40. if (count($driver_info) == 1) {
  41. $json['code'] = '0';
  42. $json['info'] = '手机号有效';
  43. $json['driver_info'] = $driver_info[0];
  44. $json['type'] = '司机';
  45. } else {
  46. $json['code'] = '1';
  47. $json['info'] = '手机号无效';
  48. }
  49. return $json;
  50. }
  51. /**
  52. * 获取验证码
  53. * @param $param
  54. */
  55. public function getCode($param)
  56. {
  57. $phone = isset($param['phone']) ? trim($param['phone']) : false;
  58. $div = isset($param['div']) ? trim($param['div']) : false;
  59. $user_id = $this->user_id;
  60. $time = date('Y-m-d :H:i:s', time());
  61. if (!$phone || !$div) {
  62. $json['code'] = '2';
  63. $json['info'] = "缺少必要参数";
  64. return $json;
  65. }
  66. $driver_info = $this->checkLogin($phone);
  67. if ($driver_info['code'] == '1') {
  68. return $driver_info;
  69. }
  70. $driver_id = $driver_info['driver_info']['id'];
  71. $is_exist_sql = "SELECT
  72. id
  73. FROM
  74. driver_login
  75. WHERE
  76. phone = '" . $phone . "'
  77. AND `div` = '" . $div . "'
  78. AND res_id = " . $driver_id . "
  79. AND cancel_flag = 0
  80. LIMIT 1";
  81. $is_exist = $this->query($is_exist_sql);
  82. $code = rand(1000, 9999);
  83. if (count($is_exist) == 1) {
  84. $sql = "UPDATE driver_login
  85. SET update_user_id = " . $user_id . ",
  86. update_time = '" . $time . "',
  87. `code` = " . $code . ",
  88. status = 179,
  89. code_deadline = '" . $time . "'
  90. WHERE
  91. id = " . $is_exist[0]['id'];
  92. } else {
  93. $sql = "INSERT INTO driver_login (
  94. res_id,
  95. phone,
  96. `code`,
  97. `div`,
  98. code_deadline,
  99. status,
  100. cancel_flag,
  101. create_user_id,
  102. create_time,
  103. update_user_id,
  104. update_time,
  105. mark
  106. )
  107. VALUE(" . $driver_id . ",'" . $phone . "','" . $code . "','" . $div . "','" . $time . "',179,0," . $user_id . ",'" . $time . "'," . $user_id . ",'" . $time . "',1)";
  108. }
  109. $result = $this->exec($sql);
  110. if ($result) {
  111. $content = array('phone' => $phone, 'code' => $code);
  112. message::sendMessage(1, $content);
  113. $json['code'] = '0';
  114. $json['info'] = '获取验证码成功';
  115. $json['code_info'] = $code;
  116. $json['driver_id'] = $driver_id;
  117. } else {
  118. $json['code'] = '1';
  119. $json['info'] = '数据库原因,获取验证码失败';
  120. }
  121. return $json;
  122. }
  123. /**
  124. * 退出登录
  125. * @param $param
  126. */
  127. public function loginOut($param)
  128. {
  129. $driver_id = isset($param['driver_id']) ? trim($param['driver_id']) : false;//id
  130. if (!$driver_id) {
  131. $json['code'] = '2';
  132. $json['info'] = "缺少必要参数";
  133. return $json;
  134. }
  135. $user_id = $this->user_id;
  136. $time = date('Y-m-d :H:i:s', time());
  137. $sql = "UPDATE driver_login
  138. SET `status` = 179,
  139. update_user_id = " . $user_id . ",
  140. update_time = '" . $time . "',
  141. mark = 2
  142. WHERE
  143. res_id = " . $driver_id . "
  144. AND cancel_flag = 0";
  145. $login_out = $this->exec($sql);
  146. if ($login_out) {
  147. $json['code'] = '0';
  148. $json['info'] = '退出成功';
  149. } else {
  150. $json['code'] = '1';
  151. $json['info'] = '数据库原因,退出失败';
  152. }
  153. return $json;
  154. }
  155. /**
  156. * 登录
  157. */
  158. public function login($param)
  159. {
  160. $phone = isset($param['phone']) ? trim($param['phone']) : false;
  161. $div = isset($param['div']) ? trim($param['div']) : false;
  162. $code = isset($param['code']) ? trim($param['code']) : false;
  163. $user_id = $this->user_id;
  164. $time = date('Y-m-d :H:i:s', time());
  165. if (!$phone || !$div || !$code) {
  166. $json['code'] = '2';
  167. $json['info'] = "缺少必要参数";
  168. return $json;
  169. }
  170. $driver_info = $this->checkLogin($phone);
  171. if ($driver_info['code'] == '1') {
  172. return $driver_info;
  173. }
  174. $driver_type = $driver_info['type'];
  175. $driver_info = $driver_info['driver_info'];
  176. $check_sql = "SELECT
  177. id,code
  178. FROM
  179. driver_login
  180. WHERE
  181. phone = '" . $phone . "'
  182. AND `div` = '" . $div . "'
  183. AND res_id = " . $driver_info['id'] . "
  184. AND cancel_flag = 0
  185. LIMIT 1";
  186. $check_result = $this->query($check_sql);
  187. if (count($check_result) == 0) {
  188. $json['code'] = '1';
  189. $json['info'] = '请获取验证码';
  190. return $json;
  191. }
  192. if ($check_result[0]['code'] != $code) {
  193. $json['code'] = '1';
  194. $json['info'] = '请输入正确的验证码';
  195. return $json;
  196. }
  197. $update_sql = "UPDATE driver_login
  198. SET update_user_id = " . $user_id . ",
  199. update_time = '" . $time . "',
  200. status = 180,
  201. login_deadline = '" . $time . "'
  202. WHERE
  203. id = " . $check_result[0]['id'];
  204. $result = $this->exec($update_sql);
  205. if ($result) {
  206. $json['code'] = '0';
  207. $json['info'] = '登陆成功';
  208. $json['driver_info'] = $driver_info;
  209. $json['driver_type'] = $driver_type;
  210. } else {
  211. $json['code'] = '1';
  212. $json['info'] = '数据库原因,登录失败';
  213. }
  214. return $json;
  215. }
  216. /**获取行程
  217. * @param $param
  218. */
  219. public function getTravel($param)
  220. {
  221. zzcsUtils::validateParams(array('date_type,driver_id,driver_type' => 'empty'), $param);
  222. $date_type = isset($param['date_type']) ? trim($param['date_type']) : false;//行程类型 过去past 今日today 未来future
  223. $driver_id = isset($param['driver_id']) ? trim($param['driver_id']) : false;//id
  224. $driver_type = isset($param['driver_type']) ? trim($param['driver_type']) : false;//司机driver,导游guide
  225. $page_size = isset($param['page_size']) ? trim($param['page_size']) : false;//每页展示条数
  226. $current_page = isset($param['current_page']) ? trim($param['current_page']) : false;//当前页
  227. if (!$date_type || !$driver_id || !$driver_type || ($date_type == 'formerly' && (!$page_size || !$current_page))) {
  228. $json['code'] = '2';
  229. $json['info'] = "缺少必要参数";
  230. return $json;
  231. }
  232. //获取司机或导游的查询条件
  233. if ($driver_type == 'driver') {
  234. $select_driver_type = ' b.send_bus_driver_res_id = ' . $driver_id;
  235. } else {
  236. $select_driver_type = ' b.send_tour_guide_res_id = ' . $driver_id;
  237. }
  238. //获取时间类型的查询条件
  239. $today = date('Y-m-d', time());
  240. if ($date_type == 'today') {
  241. $select_date_type = " m.run_date = '" . $today . "' ";
  242. $order_by = " ORDER BY m.run_date asc,m.run_time asc ";
  243. } elseif ($date_type == 'past') {
  244. $early_date = date('Y-m-d', strtotime("-1 month"));
  245. $last_date = date('Y-m-d', strtotime("-1 day"));
  246. $order_by = " ORDER BY m.run_date desc,m.run_time asc ";
  247. $select_date_type = " m.run_date BETWEEN '" . $early_date . "' AND '" . $last_date . "' ";
  248. } else {
  249. $order_by = " ORDER BY m.run_date asc,m.run_time asc ";
  250. $select_date_type = " m.run_date > '" . $today . "' ";
  251. }
  252. if ($date_type == 'past') {//往日行程获取分页
  253. $start_row = ($current_page - 1) * $page_size;
  254. $limit = " limit " . $start_row . "," . $page_size;
  255. } else {
  256. $limit = '';
  257. }
  258. $sql = "SELECT
  259. run_id,run_date,run_time,send_bus_no,people_num,bus_order_id,
  260. (SELECT area_id FROM run_station WHERE run_id = temp.run_id AND station_order_id = temp.start_order_id limit 1) AS start_area_id,
  261. (SELECT area_name FROM base_area WHERE id = (SELECT area_id FROM run_station WHERE run_id = temp.run_id AND station_order_id = temp.start_order_id limit 1)) AS start_area_name,
  262. (SELECT area_id FROM run_station WHERE run_id = temp.run_id AND station_order_id = temp.end_order_id limit 1) AS end_area_id,
  263. (SELECT area_name FROM base_area WHERE id = (SELECT area_id FROM run_station WHERE run_id = temp.run_id AND station_order_id = temp.end_order_id limit 1)) AS end_area_name
  264. FROM
  265. (
  266. SELECT
  267. m.run_id,m.run_date,m.run_time,b.send_bus_no,b.bus_order_id,
  268. b.real_total_count AS people_num,
  269. min(s.station_order_id) AS start_order_id,
  270. max(s.station_order_id) AS end_order_id
  271. FROM
  272. run_main AS m,
  273. run_bus AS b,
  274. run_station AS s
  275. WHERE
  276. m.run_id = b.run_id
  277. AND m.run_id = s.run_id
  278. AND b.cancel_flag = 0
  279. AND " . $select_date_type . "
  280. AND " . $select_driver_type . "
  281. GROUP BY
  282. m.run_id
  283. " . $order_by . "
  284. ) as temp" . $limit;
  285. $run_list = $this->query($sql);
  286. if ($date_type == 'past') {//往日行程获取分页
  287. if (count($run_list) == 0) {
  288. $json['code'] = '0';
  289. $json['info'] = '没有相关数据信息';
  290. $json['run_list'] = array();
  291. $json['page']['page_size'] = $page_size;
  292. $json['page']['current_page'] = $current_page;
  293. $json['page']['total_count'] = '0';
  294. $json['page']['total_page'] = '0';
  295. return $json;
  296. }
  297. $count_sql = "SELECT
  298. count(run_id) as total_count
  299. FROM
  300. (
  301. SELECT
  302. m.run_id
  303. FROM
  304. run_main AS m,
  305. run_bus AS b,
  306. run_station AS s
  307. WHERE
  308. m.run_id = b.run_id
  309. AND m.run_id = s.run_id
  310. AND b.cancel_flag = 0
  311. AND " . $select_date_type . "
  312. AND " . $select_driver_type . "
  313. GROUP BY
  314. m.run_id
  315. ) as temp";
  316. $total_count = $this->query($count_sql);
  317. $total_count = $total_count[0]['total_count'];
  318. $total_page = ceil($total_count / $page_size);
  319. $json['code'] = '0';
  320. $json['info'] = '返回列表信息成功';
  321. $json['run_list'] = $run_list;
  322. $json['page']['page_size'] = $page_size;
  323. $json['page']['current_page'] = $current_page;
  324. $json['page']['total_count'] = $total_count;
  325. $json['page']['total_page'] = $total_page;
  326. return $json;
  327. } else {
  328. $json['code'] = '0';
  329. $json['info'] = '返回数据成功';
  330. $json['run_list'] = $run_list;
  331. return $json;
  332. }
  333. }
  334. /**
  335. * 获取车次的线路订单统计信息
  336. * 温依莅
  337. * @param $param
  338. */
  339. public function getOrderCount($param)
  340. {
  341. $json['code'] = '2';
  342. $json['info'] = "该接口暂停使用";
  343. return $json;
  344. $run_id = isset($param['run_id']) ? trim($param['run_id']) : false;//班次id 448706
  345. $bus_order_id = isset($param['bus_order_id']) ? trim($param['bus_order_id']) : false;//车号 1
  346. if (!$run_id || !$bus_order_id) {
  347. $json['code'] = '2';
  348. $json['info'] = "缺少必要参数";
  349. return $json;
  350. }
  351. //首先做一个判断,是单一线路订单还是组合线路订单
  352. $judge_sql = "SELECT
  353. c.line_type
  354. FROM
  355. order_main a
  356. INNER JOIN order_main b ON a.order_id = b.PARENT_ORDER_ID
  357. LEFT JOIN opera_line c ON a.parent_prod_id = c.line_id
  358. WHERE
  359. b.run_id = $run_id
  360. AND b.RUN_BUS_ORDER_ID = $bus_order_id
  361. GROUP BY
  362. a.order_id
  363. LIMIT 1;";
  364. $res = $this->query($judge_sql);
  365. if (false == $res || count($res) == 0) {
  366. $json['code'] = '3';
  367. $json['info'] = "参数有误";
  368. return $json;
  369. }
  370. if ($res[0]['line_type'] != 316) {
  371. //如果是单一线路订单
  372. $sql = "select sum(num) as people_num,GROUP_CONCAT(sin,'|') as order_description,tmp.* from
  373. (SELECT
  374. a.PARENT_ORDER_ID as main_order_id,
  375. a.customer_mobile as phone,
  376. a.customer_memo,
  377. a.sales_man,
  378. IFNULL(a.receive_value,0) as receive_value,
  379. a.prod_start_station_res_id as res_id,
  380. a.prod_start_station_res_name as res_name,
  381. a.prod_start_station_seq_id as seq_id,
  382. a.run_id,
  383. a.run_bus_order_id as bus_no,
  384. a.real_passenger_num as change_type,
  385. m.line_id,
  386. m.line_code AS line_name,
  387. count(a.order_id) AS num,
  388. CONCAT_WS(',',c.TYPE_NAME,count(a.order_id)) as sin,
  389. IFNULL((SELECT check_status from order_check_tickets WHERE order_id = a.order_id AND run_id = run_id AND bus_no = bus_no AND check_station = a.prod_start_station_res_id AND check_seq_id = seq_id LIMIT 1),0) as check_status
  390. FROM
  391. order_main a
  392. LEFT JOIN opera_tickets b ON a.prod_id = b.TICKET_ID
  393. LEFT JOIN dict_type c ON b.HUMAN_TYPE = c.id
  394. LEFT JOIN opera_line m ON a.PARENT_PROD_ID = m.line_id
  395. WHERE
  396. a.run_id = $run_id AND a.RUN_BUS_ORDER_ID = $bus_order_id
  397. AND a.order_valid_status=1 AND a.order_status<>148
  398. AND m.cancel_flag=0 AND m.if_disabled=0 AND m.is_onsale=1
  399. GROUP BY
  400. a.PARENT_ORDER_ID,a.PROD_ID) as tmp group by main_order_id;";
  401. //如果该车次是单一线路订单,获取该车次各单一订单的订单人数
  402. $sql2 = "SELECT
  403. b.line_code AS line_codes,
  404. count(a.order_id) as num
  405. FROM
  406. order_main a
  407. LEFT JOIN opera_line b ON a.PARENT_PROD_ID = b.line_id
  408. WHERE
  409. a.run_id = $run_id AND a.RUN_BUS_ORDER_ID = $bus_order_id
  410. AND a.order_valid_status=1 AND a.order_status<>148
  411. AND b.cancel_flag=0 AND b.if_disabled=0 AND b.is_onsale=1;";
  412. } else {
  413. //获取该车次的日期和线路信息,用以区分判断组合线路两日 行程
  414. $get_date_sql = "select a.run_date,b.line_type from run_main a left join opera_line b on a.prod_id=b.line_id where a.run_id=$run_id limit 1";
  415. $res_info = $this->query($get_date_sql);
  416. if (!$res_info) {
  417. $json['code'] = '3';
  418. $json['info'] = "获取数据失败";
  419. return $json;
  420. }
  421. //run_date表示该车次出发日期,line_type 接驳256,直通255
  422. $run_date = $res_info[0]['run_date'];
  423. $line_type = $res_info[0]['line_type'];
  424. if (!$line_type) {
  425. $line_type = 255;
  426. }
  427. //如果是组合线路订单
  428. $sql = "SELECT
  429. a.order_id as main_order_id,
  430. a.real_passenger_num as change_type,
  431. a.customer_mobile as phone,
  432. a.customer_memo,
  433. a.sales_man,
  434. $line_type as line_type,
  435. a.prod_start_station_res_name as ori_res_name,
  436. (SELECT
  437. s.send_bus_no
  438. FROM
  439. order_main g
  440. LEFT JOIN opera_line h ON g.parent_prod_id = h.line_id
  441. LEFT JOIN run_bus s ON g.run_id = s.RUN_ID
  442. AND g.RUN_BUS_ORDER_ID = s.BUS_ORDER_ID
  443. WHERE
  444. g.PARENT_ORDER_ID = a.order_id
  445. AND h.line_type = 255 and g.run_date='$run_date' limit 1) as send_bus_no,
  446. IF(a.receive_value=0.00,0,a.receive_value) as receive_value,
  447. IFNULL((SELECT g.prod_start_station_res_id FROM order_main g LEFT JOIN opera_line h ON g.parent_prod_id=h.line_id WHERE g.PARENT_ORDER_ID=a.order_id and g.run_id=$run_id and g.RUN_BUS_ORDER_ID=$bus_order_id limit 1),0) AS res_id,
  448. IFNULL((SELECT g.prod_start_station_res_name FROM order_main g LEFT JOIN opera_line h ON g.parent_prod_id=h.line_id WHERE g.PARENT_ORDER_ID=a.order_id and g.run_id=$run_id and g.RUN_BUS_ORDER_ID=$bus_order_id limit 1),0) AS res_name,
  449. IFNULL((SELECT g.prod_start_station_seq_id FROM order_main g LEFT JOIN opera_line h ON g.parent_prod_id=h.line_id WHERE g.PARENT_ORDER_ID=a.order_id and g.run_id=$run_id and g.RUN_BUS_ORDER_ID=$bus_order_id limit 1),0) AS seq_id,
  450. IFNULL((SELECT g.run_id FROM order_main g LEFT JOIN opera_line h ON g.parent_prod_id=h.line_id WHERE g.PARENT_ORDER_ID=a.order_id and g.run_id=$run_id and g.RUN_BUS_ORDER_ID=$bus_order_id limit 1),0) AS run_id,
  451. IFNULL((SELECT o.run_bus_order_id FROM order_main o LEFT JOIN opera_line v ON o.parent_prod_id=v.line_id WHERE o.PARENT_ORDER_ID=a.order_id and o.run_id=$run_id and o.RUN_BUS_ORDER_ID=$bus_order_id limit 1),0) AS bus_no,
  452. b.line_id,
  453. b.line_code AS line_name,
  454. IFNULL(SUBSTRING_INDEX(a.order_description,'|',-1),0) AS people_num,
  455. a.order_description,
  456. IFNULL((SELECT check_status from order_check_tickets WHERE order_id = a.order_id AND run_id = run_id AND bus_no = bus_no LIMIT 1),0) as check_status
  457. FROM
  458. order_main a LEFT JOIN opera_line b
  459. ON
  460. a.parent_prod_id = b.line_id
  461. WHERE
  462. CONCAT_WS('-',$run_id,$bus_order_id) in (SELECT CONCAT_WS('-',o.run_id,o.RUN_BUS_ORDER_ID) FROM order_main o LEFT JOIN opera_line v ON o.parent_prod_id=v.line_id WHERE o.PARENT_ORDER_ID=a.order_id)
  463. AND a.order_valid_status=1 AND a.order_status<>148
  464. AND b.cancel_flag=0 AND b.if_disabled=0 AND b.is_onsale=1;";
  465. //如果是该车次是组合订单,获取该车次各组合订单人数
  466. $sql2 = " SELECT
  467. b.line_code AS line_codes,
  468. sum(IFNULL(SUBSTRING_INDEX(a.order_description,'|',-1),0)) AS num
  469. FROM
  470. order_main a LEFT JOIN opera_line b
  471. ON
  472. a.parent_prod_id = b.line_id
  473. WHERE
  474. CONCAT_WS('-',$run_id,$bus_order_id) in (SELECT CONCAT_WS('-',o.run_id,o.RUN_BUS_ORDER_ID) FROM order_main o LEFT JOIN opera_line v ON o.parent_prod_id=v.line_id WHERE o.PARENT_ORDER_ID=a.order_id)
  475. AND a.order_valid_status=1 AND a.order_status<>148
  476. AND b.line_type=316 AND b.cancel_flag=0 AND b.if_disabled=0 AND b.is_onsale=1
  477. group by line_codes;";
  478. }
  479. zzcsUtils::writeLog($sql);
  480. $run_bus_info = $this->query($sql);
  481. if (false === $run_bus_info) {
  482. $json['code'] = '1';
  483. $json['info'] = '获取车次信息失败';
  484. return $json;
  485. }
  486. $bus_order_count = $this->query($sql2);
  487. if (false === $bus_order_count) {
  488. $json['code'] = '1';
  489. $json['info'] = '获取车次订单信息失败';
  490. return $json;
  491. }
  492. //--处理得到订单具体票种信息(成人,儿童)
  493. if ($res[0]['line_type'] != 316) {
  494. //单一订单 票种人数处理--原
  495. /*foreach ($run_bus_info as $k => $v) {
  496. $tmp_id = $v['main_order_id'];
  497. $tmp_sql = "SELECT
  498. n.TYPE_NAME as human_type,
  499. count(l.order_id) AS num
  500. FROM
  501. order_main l
  502. LEFT JOIN opera_tickets m ON l.prod_id = m.TICKET_ID
  503. LEFT JOIN dict_type n ON m.HUMAN_TYPE = n.id
  504. WHERE
  505. l.PARENT_ORDER_ID = $tmp_id
  506. GROUP BY
  507. l.PROD_ID";
  508. $tmp_res = $this->query($tmp_sql);
  509. if (false === $tmp_res || count($tmp_res) == 0) {
  510. $run_bus_info[$k]['ticket_info'] = array();
  511. } else {
  512. $run_bus_info[$k]['ticket_info'] = $tmp_res;
  513. }
  514. }*/
  515. //单一订单 票种人数处理--新
  516. foreach ($run_bus_info as $k => $v) {
  517. $temp_str = $v['order_description'];
  518. $temp_arr = explode('|', $temp_str, -1);
  519. $ticket_list = array();
  520. foreach ($temp_arr as $k1 => $v1) {
  521. $arr = explode(',', $v1);
  522. $len = count($arr);
  523. //$ticket_list[$k]['ticket_id'] = $arr[0];
  524. $ticket_list[$k1]['human_type'] = $arr[$len - 2];
  525. $ticket_list[$k1]['num'] = end($arr);
  526. }
  527. $run_bus_info[$k]['ticket_info'] = $ticket_list;
  528. }
  529. } else {
  530. //组合订单 票种人数处理
  531. foreach ($run_bus_info as $k => $v) {
  532. $temp_str = $v['order_description'];
  533. $temp_arr = explode('|', $temp_str, -1);
  534. $ticket_list = array();
  535. foreach ($temp_arr as $k1 => $v1) {
  536. $arr = explode(',', $v1);
  537. $len = count($arr);
  538. //$ticket_list[$k]['ticket_id'] = $arr[0];
  539. $ticket_list[$k1]['human_type'] = $arr[$len - 2];
  540. $ticket_list[$k1]['num'] = end($arr);
  541. }
  542. $run_bus_info[$k]['ticket_info'] = $ticket_list;
  543. }
  544. }
  545. if (false === $bus_order_count) {
  546. $json['code'] = '1';
  547. $json['info'] = '获取车次订单信息失败';
  548. return $json;
  549. }
  550. $json['code'] = '0';
  551. $json['info'] = '返回统计信息成功';
  552. $json['order_count'] = $bus_order_count;
  553. return $json;
  554. }
  555. /**
  556. * 获取班次详情
  557. * @param $param
  558. */
  559. public function getRunInfo($param)
  560. {
  561. $run_id = isset($param['run_id']) ? trim($param['run_id']) : false;//班次id 448706
  562. $bus_order_id = isset($param['bus_order_id']) ? trim($param['bus_order_id']) : false;//车号 1
  563. if (!$run_id || !$bus_order_id) {
  564. $json['code'] = '2';
  565. $json['info'] = "缺少必要参数";
  566. return $json;
  567. }
  568. /*原sql语句*/
  569. /*$sql = "SELECT
  570. m.parent_order_id as main_order_id,
  571. count(m.order_id) as people_num,
  572. m.run_id,
  573. m.run_bus_order_id as bus_no,
  574. m.prod_start_station_seq_id as seq_id,
  575. m.prod_start_station_res_id as res_id,
  576. m.prod_start_station_res_name as res_name,
  577. m.customer_mobile as phone,
  578. m.parent_prod_id as line_id,
  579. (SELECT line_code FROM opera_line WHERE line_id = (SELECT parent_prod_id from order_main WHERE order_id = m.parent_order_id limit 1) LIMIT 1) as line_name,
  580. IFNULL((SELECT check_status from order_check_tickets WHERE order_id = m.parent_order_id AND run_id = m.run_id AND bus_no = m.run_bus_order_id AND check_station = m.prod_start_station_res_id AND check_seq_id = m.prod_start_station_seq_id LIMIT 1),0) as check_status
  581. FROM
  582. order_main AS m,
  583. run_station AS s
  584. WHERE
  585. m.run_id = s.run_id
  586. AND m.prod_start_station_seq_id = s.station_order_id
  587. AND m.cancel_flag = 0
  588. AND m.parent_order_id != 0
  589. AND m.run_id = " . $run_id . "
  590. AND m.run_bus_order_id = " . $bus_order_id . "
  591. GROUP BY m.prod_start_station_seq_id,m.parent_order_id
  592. ORDER BY m.prod_start_station_seq_id";*/
  593. //新sql语句 ---温依莅
  594. //首先做一个判断,是单一线路订单还是组合线路订单
  595. $judge_sql = ''."SELECT
  596. c.line_type
  597. FROM
  598. order_main a
  599. INNER JOIN order_main b ON a.order_id = b.PARENT_ORDER_ID
  600. LEFT JOIN opera_line c ON a.parent_prod_id = c.line_id
  601. WHERE
  602. b.run_id = $run_id
  603. AND b.RUN_BUS_ORDER_ID = $bus_order_id
  604. GROUP BY
  605. a.order_id
  606. LIMIT 1;";
  607. $res = $this->query($judge_sql);
  608. if (false == $res || count($res) == 0) {
  609. $json['code'] = '3';
  610. $json['info'] = "参数有误";
  611. return $json;
  612. }
  613. if ($res[0]['line_type'] != 316) {
  614. //如果是单一线路订单
  615. /*$sql = "SELECT
  616. a.PARENT_ORDER_ID as main_order_id,
  617. a.customer_mobile as phone,
  618. a.customer_memo,
  619. IFNULL(a.receive_value,0) as receive_value,
  620. a.prod_start_station_res_id as res_id,
  621. a.prod_start_station_res_name as res_name,
  622. a.prod_start_station_seq_id as seq_id,
  623. a.run_id,
  624. a.run_bus_order_id as bus_no,
  625. a.real_passenger_num as change_type,
  626. b.line_id,
  627. b.line_code AS line_name,
  628. count(a.order_id) as people_num,
  629. IFNULL((SELECT check_status from order_check_tickets WHERE order_id = a.order_id AND run_id = run_id AND bus_no = bus_no AND check_station = a.prod_start_station_res_id AND check_seq_id = seq_id LIMIT 1),0) as check_status
  630. FROM
  631. order_main a
  632. LEFT JOIN opera_line b ON a.PARENT_PROD_ID = b.line_id
  633. WHERE
  634. a.run_id = $run_id AND a.RUN_BUS_ORDER_ID = $bus_order_id
  635. AND a.order_valid_status=1 AND a.order_status<>148
  636. AND b.cancel_flag=0 AND b.if_disabled=0 AND b.is_onsale=1
  637. GROUP BY
  638. a.PARENT_ORDER_ID;";*/
  639. $sql = ''."select sum(num) as people_num,GROUP_CONCAT(sin,'|') as order_description,tmp.* from
  640. (SELECT
  641. a.PARENT_ORDER_ID as main_order_id,
  642. IFNULL((select tavern_stay from order_expand_xm where order_id = a.order_id),'') 'tavern_stay',
  643. IFNULL((SELECT special_state from order_unusual_process where order_id = a.order_id),'') 'special_state',
  644. a.customer_mobile as phone,
  645. 0 as group_line_flag,
  646. a.customer_memo,
  647. a.sales_man,
  648. IF(a.receive_value='0.00','0',ifnull(a.receive_value,0)) as receive_value,
  649. a.prod_start_station_res_id as res_id,
  650. a.prod_start_station_res_name as res_name,
  651. a.prod_start_station_seq_id as seq_id,
  652. a.run_id,
  653. a.run_bus_order_id as bus_no,
  654. a.real_passenger_num as change_type,
  655. m.line_id,
  656. m.line_code AS line_name,
  657. count(a.order_id) AS num,
  658. CONCAT_WS(',',c.TYPE_NAME,count(a.order_id)) as sin,
  659. IFNULL((SELECT check_status from order_check_tickets WHERE order_id = a.order_id AND run_id = run_id AND bus_no = bus_no AND check_station = a.prod_start_station_res_id AND check_seq_id = seq_id LIMIT 1),0) as check_status
  660. FROM
  661. order_main a
  662. LEFT JOIN opera_tickets b ON a.prod_id = b.TICKET_ID
  663. LEFT JOIN dict_type c ON b.HUMAN_TYPE = c.id
  664. LEFT JOIN opera_line m ON a.PARENT_PROD_ID = m.line_id
  665. WHERE
  666. a.run_id = $run_id AND a.RUN_BUS_ORDER_ID = $bus_order_id
  667. AND a.order_valid_status=1 AND a.order_status<>148
  668. AND m.cancel_flag=0 AND m.if_disabled=0 AND m.is_onsale=1
  669. GROUP BY
  670. a.PARENT_ORDER_ID,a.PROD_ID) as tmp group by main_order_id;";
  671. //如果该车次是单一线路订单,获取该车次各单一订单的订单人数
  672. $sql2 = ''."SELECT
  673. b.line_code AS line_codes,
  674. count(a.order_id) as num
  675. FROM
  676. order_main a
  677. LEFT JOIN opera_line b ON a.PARENT_PROD_ID = b.line_id
  678. WHERE
  679. a.run_id = $run_id AND a.RUN_BUS_ORDER_ID = $bus_order_id
  680. AND a.order_valid_status=1 AND a.order_status<>148
  681. AND b.cancel_flag=0 AND b.if_disabled=0 AND b.is_onsale=1;";
  682. } else {
  683. //如果是组合线路订单
  684. //获取该车次的日期和线路信息,用以区分判断组合线路两日 行程
  685. $get_date_sql = ''."select a.run_date,b.line_type from run_main a left join opera_line b on a.prod_id=b.line_id where a.run_id=$run_id limit 1";
  686. $res_info = $this->query($get_date_sql);
  687. if (!$res_info) {
  688. $json['code'] = '3';
  689. $json['info'] = "获取数据失败";
  690. return $json;
  691. }
  692. //run_date表示该车次出发日期,line_type 接驳256,直通255
  693. $run_date = $res_info[0]['run_date'];
  694. $line_type = $res_info[0]['line_type'];
  695. if (!$line_type) { //是0或者''
  696. $line_type = 255;
  697. }
  698. $sql = ''."SELECT
  699. a.order_id as main_order_id,
  700. IFNULL((select tavern_stay from order_expand_xm where order_id = a.order_id),'') 'tavern_stay',
  701. IFNULL((SELECT special_state from order_unusual_process where order_id = a.order_id),'') 'special_state',
  702. 1 as group_line_flag,
  703. a.real_passenger_num as change_type,
  704. a.customer_mobile as phone,
  705. a.customer_memo,
  706. (DATEDIFF('$run_date',a.prod_start_station_date)+1) as day,
  707. a.sales_man,
  708. $line_type as line_type,
  709. a.prod_start_station_res_name as ori_res_name,
  710. (SELECT
  711. s.send_bus_no
  712. FROM
  713. order_main g
  714. LEFT JOIN opera_line h ON g.parent_prod_id = h.line_id
  715. LEFT JOIN run_bus s ON g.run_id = s.RUN_ID
  716. AND g.RUN_BUS_ORDER_ID = s.BUS_ORDER_ID
  717. WHERE
  718. g.PARENT_ORDER_ID = a.order_id
  719. AND h.line_type = 255 and g.run_date='$run_date' limit 1) as send_bus_no,
  720. IF(a.receive_value='0.00','0',ifnull(a.receive_value,0)) as receive_value,
  721. IFNULL((SELECT g.prod_start_station_res_id FROM order_main g LEFT JOIN opera_line h ON g.parent_prod_id=h.line_id WHERE g.PARENT_ORDER_ID=a.order_id and g.run_id=$run_id and g.RUN_BUS_ORDER_ID=$bus_order_id limit 1),0) AS res_id,
  722. IFNULL((SELECT g.prod_start_station_res_name FROM order_main g LEFT JOIN opera_line h ON g.parent_prod_id=h.line_id WHERE g.PARENT_ORDER_ID=a.order_id and g.run_id=$run_id and g.RUN_BUS_ORDER_ID=$bus_order_id limit 1),0) AS res_name,
  723. IFNULL((SELECT g.prod_start_station_seq_id FROM order_main g LEFT JOIN opera_line h ON g.parent_prod_id=h.line_id WHERE g.PARENT_ORDER_ID=a.order_id and g.run_id=$run_id and g.RUN_BUS_ORDER_ID=$bus_order_id limit 1),0) AS seq_id,
  724. IFNULL((SELECT g.run_id FROM order_main g LEFT JOIN opera_line h ON g.parent_prod_id=h.line_id WHERE g.PARENT_ORDER_ID=a.order_id and g.run_id=$run_id and g.RUN_BUS_ORDER_ID=$bus_order_id limit 1),0) AS run_id,
  725. IFNULL((SELECT o.run_bus_order_id FROM order_main o LEFT JOIN opera_line v ON o.parent_prod_id=v.line_id WHERE o.PARENT_ORDER_ID=a.order_id and o.run_id=$run_id and o.RUN_BUS_ORDER_ID=$bus_order_id limit 1),0) AS bus_no,
  726. b.line_id,
  727. b.line_code AS line_name,
  728. IFNULL(SUBSTRING_INDEX(a.order_description,'|',-1),0) AS people_num,
  729. a.order_description,
  730. IFNULL((SELECT check_status from order_check_tickets WHERE order_id = a.order_id AND run_id = run_id AND bus_no = bus_no LIMIT 1),0) as check_status
  731. FROM
  732. order_main a LEFT JOIN opera_line b
  733. ON
  734. a.parent_prod_id = b.line_id
  735. WHERE
  736. CONCAT_WS('-',$run_id,$bus_order_id) in (SELECT CONCAT_WS('-',o.run_id,o.RUN_BUS_ORDER_ID) FROM order_main o LEFT JOIN opera_line v ON o.parent_prod_id=v.line_id WHERE o.PARENT_ORDER_ID=a.order_id)
  737. AND a.order_valid_status=1 AND a.order_status<>148
  738. AND b.cancel_flag=0 AND b.if_disabled=0 AND b.is_onsale=1;";
  739. //如果是该车次是组合订单,获取该车次各组合订单人数
  740. $sql2 = ''." SELECT
  741. b.line_code AS line_codes,
  742. sum(IFNULL(SUBSTRING_INDEX(a.order_description,'|',-1),0)) AS num
  743. FROM
  744. order_main a LEFT JOIN opera_line b
  745. ON
  746. a.parent_prod_id = b.line_id
  747. WHERE
  748. CONCAT_WS('-',$run_id,$bus_order_id) in (SELECT CONCAT_WS('-',o.run_id,o.RUN_BUS_ORDER_ID) FROM order_main o LEFT JOIN opera_line v ON o.parent_prod_id=v.line_id WHERE o.PARENT_ORDER_ID=a.order_id)
  749. AND a.order_valid_status=1 AND a.order_status<>148
  750. AND b.line_type=316 AND b.cancel_flag=0 AND b.if_disabled=0 AND b.is_onsale=1
  751. group by line_codes;";
  752. }
  753. zzcsUtils::writeLog($sql);
  754. $run_bus_info = $this->query($sql);
  755. if (false === $run_bus_info) {
  756. $json['code'] = '1';
  757. $json['info'] = '获取车次信息失败';
  758. return $json;
  759. }
  760. $bus_order_count = $this->query($sql2);
  761. if (false === $bus_order_count) {
  762. $json['code'] = '1';
  763. $json['info'] = '获取车次订单信息失败';
  764. return $json;
  765. }
  766. //--处理得到订单具体票种信息(成人,儿童)
  767. if ($res[0]['line_type'] != 316) {
  768. //单一订单 票种人数处理--原
  769. /*foreach ($run_bus_info as $k => $v) {
  770. $tmp_id = $v['main_order_id'];
  771. $tmp_sql = "SELECT
  772. n.TYPE_NAME as human_type,
  773. count(l.order_id) AS num
  774. FROM
  775. order_main l
  776. LEFT JOIN opera_tickets m ON l.prod_id = m.TICKET_ID
  777. LEFT JOIN dict_type n ON m.HUMAN_TYPE = n.id
  778. WHERE
  779. l.PARENT_ORDER_ID = $tmp_id
  780. GROUP BY
  781. l.PROD_ID";
  782. $tmp_res = $this->query($tmp_sql);
  783. if (false === $tmp_res || count($tmp_res) == 0) {
  784. $run_bus_info[$k]['ticket_info'] = array();
  785. } else {
  786. $run_bus_info[$k]['ticket_info'] = $tmp_res;
  787. }
  788. }*/
  789. //单一订单 票种人数处理--新
  790. foreach ($run_bus_info as $k => $v) {
  791. $temp_str = $v['order_description'];
  792. $temp_arr = explode('|', $temp_str, -1);
  793. $ticket_list = array();
  794. foreach ($temp_arr as $k1 => $v1) {
  795. $arr = explode(',', $v1);
  796. $len = count($arr);
  797. //$ticket_list[$k]['ticket_id'] = $arr[0];
  798. $ticket_list[$k1]['human_type'] = $arr[$len - 2];
  799. $ticket_list[$k1]['num'] = end($arr);
  800. }
  801. $run_bus_info[$k]['ticket_info'] = $ticket_list;
  802. }
  803. } else {
  804. //组合订单 票种人数处理
  805. foreach ($run_bus_info as $k => $v) {
  806. $temp_str = $v['order_description'];
  807. $temp_arr = explode('|', $temp_str, -1);
  808. $ticket_list = array();
  809. foreach ($temp_arr as $k1 => $v1) {
  810. $arr = explode(',', $v1);
  811. $len = count($arr);
  812. //$ticket_list[$k]['ticket_id'] = $arr[0];
  813. $ticket_list[$k1]['human_type'] = $arr[$len - 2];
  814. $ticket_list[$k1]['num'] = end($arr);
  815. }
  816. $run_bus_info[$k]['ticket_info'] = $ticket_list;
  817. }
  818. }
  819. //按始发站重排数组//
  820. if (count($run_bus_info) > 0) {
  821. $run_bus_array = array();
  822. foreach ($run_bus_info as $k => $v) {
  823. if (!isset($run_bus_array[$v['res_id']]['info'])) {
  824. $run_bus_array[$v['res_id']]['info']['res_id'] = $v['res_id'];
  825. $run_bus_array[$v['res_id']]['info']['res_name'] = $v['res_name'];
  826. }
  827. $run_bus_array[$v['res_id']]['order_list'][$v['main_order_id']]['tavern_stay'] = $v['tavern_stay'];
  828. $run_bus_array[$v['res_id']]['order_list'][$v['main_order_id']]['special_state'] = $v['special_state'];
  829. $run_bus_array[$v['res_id']]['order_list'][$v['main_order_id']]['change_type'] = $v['change_type'];
  830. $run_bus_array[$v['res_id']]['order_list'][$v['main_order_id']]['order_id'] = $v['main_order_id'];
  831. $run_bus_array[$v['res_id']]['order_list'][$v['main_order_id']]['run_id'] = $v['run_id'];
  832. $run_bus_array[$v['res_id']]['order_list'][$v['main_order_id']]['res_id'] = $v['res_id'];
  833. $run_bus_array[$v['res_id']]['order_list'][$v['main_order_id']]['bus_order_id'] = $v['bus_no'];
  834. $run_bus_array[$v['res_id']]['order_list'][$v['main_order_id']]['seq_id'] = $v['seq_id'];
  835. $run_bus_array[$v['res_id']]['order_list'][$v['main_order_id']]['phone'] = $v['phone'];
  836. $run_bus_array[$v['res_id']]['order_list'][$v['main_order_id']]['customer_memo'] = $v['customer_memo'];
  837. $run_bus_array[$v['res_id']]['order_list'][$v['main_order_id']]['day'] = $v['day'];
  838. $run_bus_array[$v['res_id']]['order_list'][$v['main_order_id']]['group_line_flag'] = $v['group_line_flag'];
  839. $run_bus_array[$v['res_id']]['order_list'][$v['main_order_id']]['sales_man'] = $v['sales_man'];
  840. $run_bus_array[$v['res_id']]['order_list'][$v['main_order_id']]['line_type'] = $v['line_type'];
  841. $run_bus_array[$v['res_id']]['order_list'][$v['main_order_id']]['ori_res_name'] = $v['ori_res_name'];
  842. $run_bus_array[$v['res_id']]['order_list'][$v['main_order_id']]['send_bus_no'] = $v['send_bus_no'];
  843. $run_bus_array[$v['res_id']]['order_list'][$v['main_order_id']]['receive_value'] = $v['receive_value'];
  844. $run_bus_array[$v['res_id']]['order_list'][$v['main_order_id']]['people_num'] = $v['people_num'];
  845. //如果是二日游,这里把line_name改为eg:z(a+e)(第二天)
  846. if ($v['day'] == 2) {
  847. $run_bus_array[$v['res_id']]['order_list'][$v['main_order_id']]['line_name'] = $v['line_name'] . '(第二日)';
  848. } else {
  849. $run_bus_array[$v['res_id']]['order_list'][$v['main_order_id']]['line_name'] = $v['line_name'];
  850. }
  851. $run_bus_array[$v['res_id']]['order_list'][$v['main_order_id']]['check_status'] = $v['check_status'];
  852. $run_bus_array[$v['res_id']]['order_list'][$v['main_order_id']]['ticket_info'] = $v['ticket_info'];
  853. }
  854. $run_bus_array = array_merge($run_bus_array);
  855. foreach ($run_bus_array as $k => $v) {
  856. $run_bus_array[$k]['order_list'] = array_merge($run_bus_array[$k]['order_list']);
  857. }
  858. foreach ($run_bus_array as $res_k => $res_v) {
  859. $up_car = 0;
  860. $not_on = 0;
  861. $count_people = 0;
  862. foreach ($res_v['order_list'] as $order_k => $order_v) {
  863. if ($order_v['change_type'] == -1) {
  864. $count_people += $order_v['people_num'];
  865. } else {
  866. $count_people += $order_v['change_type'];
  867. }
  868. if ($order_v['check_status'] == 1) {
  869. if ($order_v['change_type'] == -1) {
  870. $up_car += $order_v['people_num'];
  871. } else {
  872. $up_car += $order_v['change_type'];
  873. }
  874. } else {
  875. $not_on += $order_v['people_num'];
  876. }
  877. }
  878. $run_bus_array[$res_k]['info']['up_car'] = $up_car;
  879. $run_bus_array[$res_k]['info']['not_on'] = $not_on;
  880. $run_bus_array[$res_k]['info']['count_people'] = $count_people;
  881. }
  882. } else {
  883. $run_bus_array = array();
  884. $bus_order_count = array();
  885. }
  886. //---按线路重排数组--//
  887. if (count($run_bus_info) > 0) {
  888. foreach ($run_bus_info as $k => $v) {
  889. if (!isset($bus_count_array[$v['line_name']]['info'])) {
  890. $bus_count_array[$v['line_name']]['info']['line_name'] = $v['line_name'];
  891. }
  892. $bus_count_array[$v['line_name']]['order_list'][$v['main_order_id']]['change_type'] = $v['change_type'];
  893. $bus_count_array[$v['line_name']]['order_list'][$v['main_order_id']]['order_id'] = $v['main_order_id'];
  894. $bus_count_array[$v['line_name']]['order_list'][$v['main_order_id']]['day'] = $v['day'];
  895. //$bus_count_array[$v['line_name']]['order_list'][$v['main_order_id']]['run_id'] = $v['run_id'];
  896. //$bus_count_array[$v['line_name']]['order_list'][$v['main_order_id']]['res_id'] = $v['res_id'];
  897. //$bus_count_array[$v['line_name']]['order_list'][$v['main_order_id']]['bus_order_id'] = $v['bus_no'];
  898. //$bus_count_array[$v['line_name']]['order_list'][$v['main_order_id']]['seq_id'] = $v['seq_id'];
  899. $bus_count_array[$v['line_name']]['order_list'][$v['main_order_id']]['phone'] = $v['phone'];
  900. //$bus_count_array[$v['line_name']]['order_list'][$v['main_order_id']]['customer_memo'] = $v['customer_memo'];
  901. //$bus_count_array[$v['line_name']]['order_list'][$v['main_order_id']]['sales_man'] = $v['sales_man'];
  902. //$bus_count_array[$v['line_name']]['order_list'][$v['main_order_id']]['line_type'] = $v['line_type'];
  903. //$bus_count_array[$v['line_name']]['order_list'][$v['main_order_id']]['ori_res_name'] = $v['ori_res_name'];
  904. //$bus_count_array[$v['line_name']]['order_list'][$v['main_order_id']]['send_bus_no'] = $v['send_bus_no'];
  905. //$bus_count_array[$v['line_name']]['order_list'][$v['main_order_id']]['receive_value'] = $v['receive_value'];
  906. $bus_count_array[$v['line_name']]['order_list'][$v['main_order_id']]['people_num'] = $v['people_num'];
  907. //$bus_count_array[$v['line_name']]['order_list'][$v['main_order_id']]['line_name'] = $v['line_name'];
  908. //$bus_count_array[$v['line_name']]['order_list'][$v['main_order_id']]['check_status'] = $v['check_status'];
  909. $bus_count_array[$v['line_name']]['order_list'][$v['main_order_id']]['ticket_info'] = $v['ticket_info'];
  910. }
  911. $bus_count_array = array_merge($bus_count_array);
  912. foreach ($bus_count_array as $k => $v) {
  913. $bus_count_array[$k]['order_list'] = array_merge($bus_count_array[$k]['order_list']);
  914. }
  915. foreach ($bus_count_array as $res_k => $res_v) {
  916. $real_people = 0;
  917. $ori_people = 0;
  918. foreach ($res_v['order_list'] as $order_k => $order_v) {
  919. if ($order_v['change_type'] == -1) {
  920. $real_people += $order_v['people_num'];
  921. } else {
  922. $real_people += $order_v['change_type'];
  923. }
  924. $ori_people += $order_v['people_num'];
  925. }
  926. $bus_count_array[$res_k]['info']['real_people'] = $real_people;
  927. $bus_count_array[$res_k]['info']['ori_people'] = $ori_people;
  928. }
  929. } else {
  930. $bus_count_array = array();
  931. $bus_order_count = array();
  932. }
  933. $bus_count_array2 = array_values($bus_count_array);
  934. $json['code'] = '0';
  935. $json['info'] = '返回详情成功';
  936. $json['list'] = $run_bus_array;
  937. $json['order_count'] = $bus_count_array2;
  938. //$json['list_test'] = $run_bus_info;
  939. return $json;
  940. }
  941. /**
  942. * 检票
  943. * @param $param
  944. */
  945. public function checkTicket($param)
  946. {
  947. $run_id = isset($param['run_id']) ? trim($param['run_id']) : false;//班次id 448706
  948. $bus_order_id = isset($param['bus_order_id']) ? trim($param['bus_order_id']) : false;//车号 1
  949. $driver_id = isset($param['driver_id']) ? trim($param['driver_id']) : false;//司机id
  950. $check_order_str = isset($param['check_order_str']) ? trim($param['check_order_str']) : false;//检票字符串
  951. $check_time = date('Y-m-d H:i:s', time());
  952. if (!$run_id || !$bus_order_id || !$driver_id || !$check_order_str) {
  953. $json['code'] = '2';
  954. $json['info'] = "缺少必要参数";
  955. return $json;
  956. }
  957. $check_order_str = substr($check_order_str, 1, -1);
  958. $check_order_array = explode('}{', $check_order_str);
  959. foreach ($check_order_array as $k => $v) {
  960. $v = explode(',', $v);
  961. $one = array();
  962. $one['order_id'] = $v[0];
  963. $one['seq_id'] = $v[1];
  964. $one['res_id'] = $v[2];
  965. $check_order_array[$k] = $one;
  966. }
  967. $sql = "INSERT INTO order_check_tickets (
  968. order_id,
  969. run_id,
  970. bus_no,
  971. check_status,
  972. check_time,
  973. check_station,
  974. check_seq_id,
  975. check_user_id
  976. )values";
  977. foreach ($check_order_array as $k => $v) {
  978. $value_array[] = "(" . $v['order_id'] . "," . $run_id . "," . $bus_order_id . ",1,'" . $check_time . "'," . $v['res_id'] . "," . $v['seq_id'] . "," . $driver_id . ")";
  979. }
  980. $sql .= implode(',', $value_array);
  981. $result = $this->exec($sql);
  982. if ($result) {
  983. $json['code'] = '0';
  984. $json['info'] = '检票成功';
  985. } else {
  986. $json['code'] = '1';
  987. $json['info'] = '数据库原因,检票失败';
  988. }
  989. return $json;
  990. }
  991. /**
  992. * 提交版本
  993. * @param $param
  994. */
  995. public function submitVersion($param)
  996. {
  997. $driver_id = isset($param['driver_id']) ? trim($param['driver_id']) : false;//司机id
  998. $div = isset($param['div']) ? trim($param['div']) : false;
  999. $driver_name = isset($param['driver_name']) ? trim($param['driver_name']) : false;//司机名字
  1000. $version_code = isset($param['version_code']) ? trim($param['version_code']) : false;//版本号
  1001. if (!$driver_id || !$div || !$driver_name || !$version_code) {
  1002. $json['code'] = '2';
  1003. $json['info'] = "缺少必要参数";
  1004. return $json;
  1005. }
  1006. $update_time = date('Y-m-d H:i:s', time());
  1007. $sql = "SELECT
  1008. id
  1009. FROM
  1010. driver_app_update_status_xiamen
  1011. WHERE
  1012. driver_res_id = " . $driver_id . "
  1013. AND `div` = '" . $div . "'
  1014. LIMIT 1";
  1015. $check_version = $this->query($sql);
  1016. if (count($check_version) == 1) {
  1017. $update_sql = "UPDATE driver_app_update_status_xiamen
  1018. SET driver_update_time = '" . $update_time . "',
  1019. version_code_now = '" . $version_code . "'
  1020. WHERE id = " . $check_version[0]['id'];
  1021. } else {
  1022. $update_sql = "INSERT INTO driver_app_update_status_xiamen (
  1023. driver_res_id,
  1024. `div`,
  1025. driver_update_time,
  1026. driver_name,
  1027. version_code_now
  1028. )
  1029. VALUE(" . $driver_id . ",'" . $div . "','" . $update_time . "','" . $driver_name . "','" . $version_code . "')";
  1030. }
  1031. $result = $this->exec($update_sql);
  1032. if ($result) {
  1033. $json['code'] = '0';
  1034. $json['info'] = '版本提交成功';
  1035. } else {
  1036. $json['code'] = '1';
  1037. $json['info'] = '数据库原因,版本提交失败';
  1038. }
  1039. return $json;
  1040. }
  1041. /**
  1042. * 更新版本
  1043. * @param $param
  1044. */
  1045. public function updateVersion($param)
  1046. {
  1047. $download_address = isset($param['download_address']) ? trim($param['download_address']) : false;//更新地址
  1048. $version_code = isset($param['version_code']) ? trim($param['version_code']) : false;//最新版本号
  1049. if (!$download_address || !$version_code) {
  1050. $json['code'] = '2';
  1051. $json['info'] = "缺少必要参数";
  1052. return $json;
  1053. }
  1054. $update_time = date('Y-m-d H:i:s', time());
  1055. $sql = "UPDATE driver_app_update_status_xiamen
  1056. SET publish_update_time = '" . $update_time . "',
  1057. download_address = '" . $download_address . "',
  1058. version_code = '" . $version_code . "'";
  1059. $result = $this->exec($sql);
  1060. if ($result) {
  1061. $json['code'] = '0';
  1062. $json['info'] = '版本更新成功';
  1063. } else {
  1064. $json['code'] = '1';
  1065. $json['info'] = '数据库原因,版本更新失败';
  1066. }
  1067. return $json;
  1068. }
  1069. /**
  1070. * 获取版本
  1071. */
  1072. public function getVersion($param)
  1073. {
  1074. $driver_id = isset($param['driver_id']) ? trim($param['driver_id']) : false;//司机id
  1075. $div = isset($param['div']) ? trim($param['div']) : false;
  1076. if (!$driver_id || !$div) {
  1077. $json['code'] = '2';
  1078. $json['info'] = "缺少必要参数";
  1079. return $json;
  1080. }
  1081. $sql = "SELECT
  1082. download_address,
  1083. version_code
  1084. FROM
  1085. driver_app_update_status_xiamen
  1086. WHERE
  1087. driver_res_id = " . $driver_id . "
  1088. AND `div` = " . $div . "
  1089. LIMIT 1";
  1090. $info = $this->query($sql);
  1091. if (count($info) == 0) {
  1092. $json['code'] = '1';
  1093. $json['info'] = '请上传版本号';
  1094. } else {
  1095. $json['code'] = '0';
  1096. $json['info'] = '获取最新版本号成功';
  1097. $json['download_address'] = $info[0]['download_address'];
  1098. $json['version_code'] = $info[0]['version_code'];
  1099. }
  1100. return $json;
  1101. }
  1102. /**
  1103. * 更新行程
  1104. * @param $param
  1105. */
  1106. public function updateRoute($param)
  1107. {
  1108. $driver_id = isset($param['driver_id']) ? trim($param['driver_id']) : false;//司机id
  1109. $div = isset($param['div']) ? trim($param['div']) : false;//司机id
  1110. $pos_x = isset($param['pos_x']) ? trim($param['pos_x']) : false;
  1111. $pos_y = isset($param['pos_y']) ? trim($param['pos_y']) : false;
  1112. $update_time = date('Y-m-d H:i:s', time());
  1113. if (!$driver_id || !$pos_x || !$pos_y || !$div) {
  1114. $json['code'] = '2';
  1115. $json['info'] = "缺少必要参数";
  1116. return $json;
  1117. }
  1118. $sql = "INSERT INTO run_bus_pos (
  1119. phone_serial_no,
  1120. log_time,
  1121. pos_x,
  1122. pos_y,
  1123. driver_id
  1124. )
  1125. VALUE
  1126. ('" . $div . "','" . $update_time . "','" . $pos_x . "','" . $pos_y . "'," . $driver_id . ")
  1127. ON DUPLICATE KEY UPDATE log_time = '" . $update_time . "',
  1128. pos_x = '" . $pos_x . "',
  1129. pos_y = '" . $pos_y . "'";
  1130. $result = $this->query($sql);
  1131. if ($result) {
  1132. $json['code'] = '0';
  1133. $json['info'] = '更新行程成功';
  1134. } else {
  1135. $json['code'] = '1';
  1136. $json['info'] = '数据库原因,更新行程失败';
  1137. }
  1138. return $json;
  1139. }
  1140. /**
  1141. * 更新乘客数
  1142. * @param $param
  1143. */
  1144. public function updatePassenerNum($param)
  1145. {
  1146. $valid = zzcsUtils::validateParams(
  1147. array(
  1148. 'order_id,passener_num,run_id,bus_order_id,user_type,order_num,old_num,group_line_flag' => 'number'
  1149. ), $param); //参数验证
  1150. if (!$valid['status']) {
  1151. $result['code'] = (string)$valid['status'];
  1152. $result['info'] = $valid['info'];
  1153. return $result;
  1154. }
  1155. $order_id = $param['order_id'];//主订单id
  1156. $passener_num = $param['passener_num'];//新真实上车人数
  1157. $run_id = $param['run_id'];//班次id
  1158. $bus_order_id = $param['bus_order_id'];//车次号
  1159. $user_type = $param['user_type'];//用户类型 1司机,2导游
  1160. $order_num = $param['order_num'];//订单人数
  1161. $old_num = $param['old_num'];//原真实上车人数
  1162. $group_line_flag = $param['group_line_flag'];//1表示组合线路订单0表示单一线路订单
  1163. $phone = empty($param['phone']) ? '' : $param['phone'];//司机或导游手机号
  1164. $special_state = empty($param['special_state']) ? '' : $param['special_state'];//订单特殊变更备注
  1165. //获取其他需要插入driver_record 表的数据
  1166. $sql_info = '' . "select b.run_date,a.send_bus_res_id,a.send_bus_no,a.send_bus_driver_res_id,a.send_driver_name,send_driver_mobile,a.send_tour_guide_res_id,a.send_tour_guide_name,a.send_tour_guide_mobile from run_bus a left join run_main b on a.run_id=b.run_id where a.run_id=$run_id and a.bus_order_id=$bus_order_id;";
  1167. $tmp = $this->query($sql_info);
  1168. if (!$tmp) {
  1169. $json['code'] = '1';
  1170. $json['info'] = '获取车次信息失败';
  1171. return $json;
  1172. }
  1173. //修改run_bus人数
  1174. $sql_runbus = '' . " SELECT ORDER_ID,ORDER_DESCRIPTION,REAL_PASSENGER_NUM,RUN_ID,RUN_BUS_ORDER_ID FROM order_main where ORDER_ID = {$order_id} OR PARENT_ORDER_ID = {$order_id} ORDER BY ORDER_ID ";
  1175. $result = $this->query($sql_runbus);
  1176. if (!$result) {
  1177. $json['code'] = '1';
  1178. $json['info'] = '实际上车人数更新失败';
  1179. return $json;
  1180. }
  1181. $orgin_num = 0;
  1182. $run_bus_array = array();
  1183. foreach ($result as $sub_order_info) {
  1184. if ($sub_order_info["RUN_ID"] == 0) {
  1185. $order_des = $sub_order_info["ORDER_DESCRIPTION"];
  1186. $order_des_array = explode("|", $order_des);
  1187. $order_num_index = count($order_des_array) - 1;
  1188. if (strlen($order_des_array[$order_num_index]) > 0) {
  1189. $orgin_num = $order_des_array[$order_num_index];
  1190. } else {
  1191. $main_des_array = explode(",", $order_des_array[0]);
  1192. $order_num_index = count($main_des_array) - 1;
  1193. $orgin_num = $main_des_array[$order_num_index];
  1194. }
  1195. //如果是第二次修改,则按主订单real_passenger_num来判断orgin_num----温依莅
  1196. if ($sub_order_info['REAL_PASSENGER_NUM'] != -1) {
  1197. $orgin_num = $sub_order_info['REAL_PASSENGER_NUM'];
  1198. }
  1199. continue;
  1200. }
  1201. if (!isset($run_bus_array[$sub_order_info["RUN_ID"]])) {
  1202. $run_bus_array[$sub_order_info["RUN_ID"]] = $sub_order_info["RUN_BUS_ORDER_ID"];
  1203. }
  1204. }
  1205. $update_sql = '';
  1206. $update_time = date('Y-m-d H:i:s', time());
  1207. if ($passener_num != $orgin_num) {//当人数变更时
  1208. if ($passener_num > $orgin_num) {
  1209. $base_sql = '' . " UPDATE run_bus SET REAL_TOTAL_COUNT = REAL_TOTAL_COUNT +" . ($passener_num - $orgin_num) . " WHERE ";
  1210. } else {
  1211. $base_sql = '' . " UPDATE run_bus SET REAL_TOTAL_COUNT = REAL_TOTAL_COUNT -" . ($orgin_num - $passener_num) . " WHERE ";
  1212. }
  1213. $update_sql .= $base_sql . " RUN_ID=$run_id AND BUS_ORDER_ID=$bus_order_id;";
  1214. $update_sql .= '' . "UPDATE order_main
  1215. SET real_passenger_num = " . $passener_num . "
  1216. WHERE order_id = {$order_id} OR parent_order_id = {$order_id};";
  1217. //把相关数据插入driver_record记录表
  1218. $update_sql .= '' . "REPLACE INTO driver_record
  1219. (CREATE_TIME, ORDER_ID, RUN_ID, RUN_DATE, BUS_ORDER_ID, USER_TYPE, SEND_BUS_RES_ID, SEND_BUS_NO, SEND_BUS_DRIVER_RES_ID, SEND_DRIVER_NAME, SEND_DRIVER_MOBILE, SEND_TOUR_GUIDE_RES_ID, SEND_TOUR_GUIDE_NAME, SEND_TOUR_GUIDE_MOBILE, GROUP_LINE_FLAG, ORDER_NUM, OLD_NUM, NEW_NUM)
  1220. VALUES
  1221. (NOW(),$order_id,$run_id,'" . $tmp[0]['run_date'] . "',$bus_order_id,$user_type" . "," . $tmp[0]['send_bus_res_id'] . ",'" . $tmp[0]['send_bus_no'] . "'," . $tmp[0]['send_bus_driver_res_id'] . ",'" . $tmp[0]['send_driver_name'] . "','" . $tmp[0]['send_driver_mobile'] . "'," . $tmp[0]['send_tour_guide_res_id'] . ",'" . $tmp[0]['send_tour_guide_name'] . "','" . $tmp[0]['send_tour_guide_mobile'] . "',$group_line_flag,$order_num,$old_num,$passener_num);";
  1222. }
  1223. $update_sql .= '' . "replace into order_unusual_process(`order_id`, `special_state`,`submitter_phone`,`create_time`)
  1224. VALUES({$order_id},'{$_POST['special_state']}','{$phone}','{$update_time}');";
  1225. zzcsUtils::writeLog($update_sql);
  1226. if ($update_sql == '' || $this->exec($update_sql)) {
  1227. $json['code'] = '0';
  1228. $json['info'] = '实际上车人数更新成功';
  1229. } else {
  1230. $json['code'] = '1';
  1231. $json['info'] = '实际上车人数更新失败';
  1232. }
  1233. return $json;
  1234. }
  1235. }
  1236. ?>