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.
 
 
 
 

341 regels
15 KiB

  1. <?php
  2. header("Access-Control-Allow-Origin:*");
  3. //载入配置文件和连接数据库
  4. $pdo=conn();
  5. //区分是普通乘客还是分销员 0普通,1分销
  6. $user_type = 0;
  7. //判断出发地 目的地 时间是否为空
  8. $start_area = empty($_POST['start_area'])?"":" and a.property = ".$_POST['start_area'];
  9. $end_area = empty($_POST['end_area'])?"":" and b.property = ".$_POST['end_area'];
  10. $time = empty($_POST['go_time'])?date("Y-m-d",time()+24*3600):$_POST['go_time'];
  11. $current_day = date("Y-m-d");
  12. $limit_time = date("H:i", strtotime("+30 minutes"));
  13. $bus_type = $_POST['bus_type'];
  14. if($bus_type == 255){
  15. $bus_type = "255,0";
  16. }
  17. //$currpage = 1;
  18. //$pagesize = 2;
  19. $currpage = $_POST['currpage'];
  20. $pagesize = $_POST['pagesize'];
  21. $num = ($currpage - 1) * $pagesize;
  22. //$start_area = "";
  23. //$end_area = "";
  24. //$start_area = 791;//"上海"
  25. //$end_area = 3225;//"乌镇"
  26. //$time = date("Y-m-d",time());
  27. //$time = '2016-08-04';
  28. //通过出发点和目的地查询票种
  29. $sql = "select a.prod_id,a.property as s_area,b.property as e_area,c.property as up,d.property as down from opera_product_property as a,opera_product_property as b,opera_product_property as c,opera_product_property as d
  30. where a.prod_id = b.prod_id and a.prod_id = c.prod_id and a.prod_id = d.prod_id
  31. and a.type_id = 125 ".$start_area." and b.type_id= 126 ".$end_area." and c.type_id = 112 and d.type_id = 113";
  32. $result = $pdo->query($sql);
  33. $prod = $result->fetchAll(PDO::FETCH_ASSOC);
  34. if(count($prod) > 0){
  35. //找到属于票种的信息
  36. //城市名
  37. $area_array = array();
  38. foreach($prod as $k => $v){
  39. $list[$k] = $v['prod_id'];
  40. }
  41. $prod_id = implode(',',$list);
  42. //从未删除的线路中找到属于自己线路的票种
  43. $sql = "select a.prod_id as ticket_id,b.prod_id as line_id from opera_product as a,opera_product as b where a.parent_id = b.prod_id and a.prod_id in (".$prod_id.") and a.if_disabled = 0 and a.ticket_mark in(0,1) and a.prod_type = 82 and a.cancel_flag = 0 and b.cancel_flag = 0 and b.bus_type in (" . $bus_type . ")";
  44. $result = $pdo->query($sql);
  45. $list = $result->fetchAll(PDO::FETCH_ASSOC);
  46. if(count($list) > 0){
  47. //获取票种的上下车站点,并打包
  48. //已票种ID为索引的数组
  49. $prod_array = array();
  50. //出发/目的地数组
  51. $all_area = array();
  52. foreach($prod as $k => $v){
  53. $all_area[] = $v['s_area'];
  54. $all_area[] = $v['e_area'];
  55. if( !isset($prod_array[$v['prod_id']]) ) {
  56. $prod_array[$v['prod_id']] = $v;
  57. }
  58. }
  59. $all_area = array_unique($all_area);
  60. //获取所有地名
  61. $sql = "select id,area_name from base_area where id in(" . implode(",",$all_area) .")";
  62. $result = $pdo->query($sql);
  63. $area = $result->fetchAll(PDO::FETCH_ASSOC);
  64. foreach($area as $area_info) {
  65. $area_array[$area_info['id']] = $area_info['area_name'];
  66. }
  67. //合并后的票种数组,索引为票种ID
  68. $ticket_array = array();
  69. //票种的ID数组
  70. $ticket_id_array = array();
  71. //线路-(出发地-目的地)-(上车站-下车站)- 票种
  72. $line_ticket_array = array();
  73. //线路的ID数组
  74. $line_id_array = array();
  75. foreach($list as $k => $v){
  76. $ticket_id_array[] = $v["ticket_id"];
  77. $v2 = $prod_array[$v["ticket_id"]];
  78. $new_v = array_merge($v,$v2);
  79. $ticket_array[$v["ticket_id"]] = array_merge($v,$v2);
  80. //取出所有符合票种的全部线路信息
  81. if( !in_array($new_v["line_id"],$line_id_array)) {
  82. $line_id_array[] = $new_v["line_id"];
  83. }
  84. //创建线路索引
  85. if( !isset($line_ticket_array[$new_v["line_id"]])) {
  86. $line_ticket_array[$new_v["line_id"]] = array();
  87. }
  88. $line_ticket_array[$new_v["line_id"]][$new_v["ticket_id"]] = $new_v;
  89. // //创建线路-(出发地-目的地)-(上车站-下车站)索引
  90. // if( !isset($line_ticket_array[$new_v["line_id"]][$new_v["s_area"]."_".$new_v["e_area"]])) {
  91. // $line_ticket_array[$new_v["line_id"]][$new_v["s_area"]."_".$new_v["e_area"]] = array();
  92. // }
  93. // //将票种对应放入已创建的索引中
  94. // $line_ticket_array[$new_v["line_id"]][$new_v["s_area"]."_".$new_v["e_area"]][$new_v["up"]."_".$new_v["down"]] = $new_v;
  95. }
  96. //print_r($line_ticket_array);die;
  97. $sql = "select run_id,run_date,prod_id as line_id from run_main where run_status = 138 and prod_id in (" . implode(",", $line_id_array) . ") and run_date = '" . $time . "' ";
  98. if( $time == $current_day ) {
  99. $sql .= " and RUN_TIME > '{$limit_time}' ";
  100. }
  101. $sql .= " order by run_id desc ";
  102. $result = $pdo->query($sql);
  103. //班次线路票种
  104. $run_line_ticket = $result->fetchAll(PDO::FETCH_ASSOC);
  105. if(count($run_line_ticket) > 0) {
  106. $run_id_array = array();
  107. $run_info_array = array();
  108. foreach( $run_line_ticket as $run_line_info ) {
  109. if( in_array($run_line_info["line_id"],$line_id_array) ) {
  110. $run_id_array[] = $run_line_info["run_id"];
  111. $run_info_array[$run_line_info["run_id"]] = $run_line_info;
  112. }
  113. }
  114. $sql = "select id,run_id,station_order_id,start_time,station_res_id,station_inout_type from run_station where run_id in (" . implode(',',$run_id_array) . ") group by run_id,station_order_id order by run_id";
  115. $result = $pdo->query($sql);
  116. //获取线路的所有站点
  117. $station = $result->fetchAll(PDO::FETCH_ASSOC);
  118. //获取以班次为索引的所用站点及时间
  119. $run_station_array = array();
  120. foreach( $station as $station_info ) {
  121. if( !isset($run_station_array[$station_info["run_id"]]) ) {
  122. $run_station_array[$station_info["run_id"]]=array();
  123. }
  124. $run_station_array[$station_info["run_id"]][$station_info["station_res_id"]] = $station_info["start_time"];
  125. }
  126. //获取票种价格
  127. $sql = "select cus_price,cus_price,prod_id from opera_product_price where prod_id in (" . implode(",",$ticket_id_array) . ")";
  128. $result = $pdo->query($sql);
  129. $price = $result->fetchAll(PDO::FETCH_ASSOC);
  130. //价格-票种数据
  131. $price_array = array();
  132. foreach($price as $price_info){
  133. if($user_type == 0){
  134. $price_array[$price_info['prod_id']] = $price_info['cus_price'];
  135. }else{
  136. $price_array[$price_info['prod_id']] = $price_info['prod_price'];
  137. }
  138. }
  139. //班次-线路-票种数组
  140. $run_line_ticket_array = array();
  141. //print_r($line_ticket_array);exit();
  142. foreach( $run_info_array as $run_id_key => $run_info ) {
  143. if( in_array($run_info['line_id'],$line_id_array)) {
  144. //$run_nav = array_merge($run_info,$line_ticket_array[$run_info['line_id']]);
  145. $run_line_ticket_array[$run_id_key] = array();
  146. foreach($line_ticket_array[$run_info['line_id']] as $run_ticket_array){
  147. $t_nve = $run_ticket_array;
  148. $t_nve['start_time'] = $run_station_array[$run_id_key][$t_nve['up']];
  149. $t_nve['end_time'] = $run_station_array[$run_id_key][$t_nve['down']];
  150. $t_nve['price'] = $price_array[$t_nve['ticket_id']];
  151. //创建线路-(出发地-目的地)-(上车站-下车站)索引;
  152. if( !isset($run_line_ticket_array[$run_id_key]['tickets'][$t_nve["s_area"]."_".$t_nve["e_area"]])) {
  153. $run_line_ticket_array[$run_id_key]['tickets'][$t_nve["s_area"]."_".$t_nve["e_area"]] = array();
  154. }
  155. //将票种对应放入已创建的索引中
  156. $run_line_ticket_array[$run_id_key]['tickets'][$t_nve["s_area"]."_".$t_nve["e_area"]][$t_nve["up"]."_".$t_nve["down"]] = $t_nve;
  157. $run_line_ticket_array[$run_id_key]['info'] = $run_info;
  158. }
  159. }
  160. }
  161. //print_r($run_line_ticket_array);exit();
  162. $i = 0;
  163. $data = array();
  164. foreach($run_line_ticket_array as $k_run => $v_run){
  165. foreach($v_run['tickets'] as $k_area => $v_area){
  166. $araa_id_area = explode("_",$k_area);
  167. $data[$i]['run_id'] = $k_run;
  168. $data[$i]['line_id'] = $v_run['info']['line_id'];
  169. $data[$i]['run_date'] = $v_run['info']['run_date'];
  170. $data[$i]['start_area_id'] = $araa_id_area[0];
  171. $data[$i]['start_area_name'] = $area_array[$araa_id_area[0]];
  172. $data[$i]['end_area_id'] = $araa_id_area[1];
  173. $data[$i]['end_area_name'] = $area_array[$araa_id_area[1]];
  174. $start_time_array = array();
  175. $price_all_array = array();
  176. //$ticket_all_str = array();
  177. foreach($v_area as $k_sta => $v_sta) {
  178. $start_time_array[] = $v_sta['start_time'];
  179. $price_all_array[] = $v_sta['price'];
  180. //$ticket_all_str[] = "{" . $v_sta['ticket_id'] . "," . $v_sta['up'] . "," . $v_sta['start_time'] . "," .$v_sta['down'] . "," . $v_sta['end_time'] . "," . $v_sta['price'] . "}";
  181. }
  182. asort($start_time_array);
  183. sort($start_time_array);
  184. $price_all_array = array_unique($price_all_array);
  185. $price_all_array = implode("/",$price_all_array);
  186. //$ticket_all_str = implode("|",$ticket_all_str);
  187. $data[$i]['start_time'] = $start_time_array[0];
  188. $data[$i]['price'] = $price_all_array;
  189. $data[$i]['ticket'] = $v_area;
  190. $data[$i]['site_type'] = '普通座';
  191. $i++;
  192. }
  193. }
  194. $data2 = array_slice($data,$num,$pagesize);
  195. sort($data2);
  196. foreach($data2 as $data_key => $data_info){
  197. $tickets_num_array = array();
  198. $ticket_all_str = array();
  199. $tic_status = 1;
  200. foreach($data_info['ticket'] as $k => $v_sta){
  201. $station_array = explode("_",$k);
  202. $sql = "select a.res_id,a.seq_id,a.seat_type,a.total_count,a.saled_count
  203. from run_stock as a,
  204. (select seq_id from run_stock where run_id = " . $data_info['run_id'] . " and res_id = " . $station_array[0] . " and seat_type = 72 and cancel_flag = 0 and prod_id = " . $data_info['line_id'] . ") as b,
  205. (select seq_id from run_stock where run_id = " . $data_info['run_id'] . " and res_id = " . $station_array[1] . " and seat_type = 72 and cancel_flag = 0 and prod_id = " . $data_info['line_id'] . ") as c
  206. where a.run_id = " . $data_info['run_id'] . " and a.seat_type = 72 and a.cancel_flag = 0 and a.prod_id = " . $data_info['line_id'] . " and a.seq_id >= b.seq_id and a.seq_id < c.seq_id order by seq_id";
  207. $result = $pdo->query($sql);
  208. $stock = $result->fetchAll(PDO::FETCH_ASSOC);
  209. $tickets_array = array();
  210. foreach($stock as $kk => $v){
  211. $tickets_array[] = $v['total_count'] - $v['saled_count'];
  212. }
  213. asort($tickets_array);
  214. sort($tickets_array);
  215. $tickets = $tickets_array[0];
  216. $data2[$data_key]['ticket'][$k]['num'] = $tickets;
  217. $ticket_all_str[] = "{" . $v_sta['ticket_id'] . "," . $v_sta['up'] . "," . $v_sta['start_time'] . "," .$v_sta['down'] . "," . $v_sta['end_time'] . "," . $v_sta['price'] . "," . $tickets . "}";
  218. $tickets_num_array[] = $tickets;
  219. if($tickets <= 20){
  220. $tic_status = 0;
  221. }
  222. }
  223. $tickets_num_array = array_unique($tickets_num_array);
  224. if($tic_status == 0){
  225. $tickets_num_array = implode("/",$tickets_num_array);
  226. }else{
  227. $tickets_num_array = "充足";
  228. }
  229. $ticket_all_str = implode("|",$ticket_all_str);
  230. $data2[$data_key]['num'] = $tickets_num_array;
  231. $data2[$data_key]['ticket'] = $ticket_all_str;
  232. }
  233. //获取符合条件的线路-票种二位数组
  234. $code = 0;
  235. $info = $CODE[0];
  236. $list = $data2;
  237. //获取总条数
  238. //班次线路票种
  239. $totalnum = count($data);
  240. }else{
  241. $code = 0;
  242. $info = $CODE[7];
  243. $list = "";
  244. $totalnum = 0;
  245. }
  246. }else{
  247. //product表没有符合查询的线路及票种
  248. $code = 0;
  249. $info = $CODE[4];
  250. $list = "";
  251. $totalnum = 0;
  252. }
  253. }else{
  254. //property表没有符合出发地目的地的数据
  255. $code = 0;
  256. $info = $CODE[3];
  257. $list = "";
  258. $totalnum = 0;
  259. }
  260. $json = array();
  261. $json['code'] = $code;
  262. $json['info'] = $info;
  263. $json['list'] = $list;
  264. $json['totalnum'] = $totalnum;
  265. //print_r($json);
  266. echo json_encode($json);
  267. ?>