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.

api_common.php 34 KiB

3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694
  1. <?php
  2. function getRunMainArray( $sell_line_array, $start_date, $search_end_date, $pdo, $return_prod_id, $return_prod_time, &$run_id_array, &$prod_id_array, &$all_run_array, &$run_return_array, &$all_line_run_array ) {
  3. $sql2 = " SELECT * FROM run_main WHERE PROD_ID IN (".implode(",",$sell_line_array).") AND RUN_STATUS IN (138) AND RUN_DATE >= '".$start_date."' AND RUN_DATE <= '".$search_end_date."' ORDER BY RUN_DATE ";
  4. $result=$pdo->query($sql2);
  5. if( false == $result ) {
  6. return false;
  7. }
  8. $rowset=$result->fetchAll();
  9. $result->closeCursor();
  10. $run_id_array = array();
  11. $prod_id_array = array();
  12. $all_run_array = array();
  13. $run_return_array = array();
  14. $all_line_run_array = array();
  15. foreach( $rowset as $row_info ) {
  16. $all_run_array[$row_info["RUN_ID"]] = $row_info;
  17. if( !in_array($row_info["RUN_ID"], $run_id_array ) ) {
  18. $run_id_array[] = $row_info["RUN_ID"];
  19. }
  20. if( !in_array($row_info["PROD_ID"], $prod_id_array ) ) {
  21. $prod_id_array[] = $row_info["PROD_ID"];
  22. }
  23. if( !isset($all_line_run_array[$row_info["PROD_ID"]]) ) {
  24. $all_line_run_array[$row_info["PROD_ID"]] = array();
  25. }
  26. if( !isset($all_line_run_array[$row_info["PROD_ID"]][$row_info["RUN_DATE"]]) ) {
  27. $all_line_run_array[$row_info["PROD_ID"]][$row_info["RUN_DATE"]] = array();
  28. }
  29. if( !isset($all_line_run_array[$row_info["PROD_ID"]][$row_info["RUN_DATE"]][$row_info["RUN_MINUTES"]]) ) {
  30. $all_line_run_array[$row_info["PROD_ID"]][$row_info["RUN_DATE"]][$row_info["RUN_MINUTES"]] = array();
  31. }
  32. $all_line_run_array[$row_info["PROD_ID"]][$row_info["RUN_DATE"]][$row_info["RUN_MINUTES"]][] = $row_info["RUN_ID"];
  33. //对于结果集进行遍历,针对PROD和日期进行归纳并存储进run_return_array
  34. //run_return_array为三维数组 第一维是PROD_ID(去程) 第二维是日期(去程) 最终会存入两个返程的RUN_ID
  35. if( isset($return_prod_id[$row_info["PROD_ID"]]) ) {
  36. $re_prod_id_array = $return_prod_id[$row_info["PROD_ID"]];
  37. foreach( $re_prod_id_array as $re_prod_id ) {
  38. if (!isset($run_return_array[$re_prod_id])) {
  39. $run_return_array[$re_prod_id] = array();
  40. }
  41. $come_date1 = date("Y-m-d", strtotime("{$row_info["RUN_DATE"]}"));
  42. $come_date2 = date("Y-m-d", strtotime("{$row_info["RUN_DATE"]} -1 days"));
  43. $come_date3 = date("Y-m-d", strtotime("{$row_info["RUN_DATE"]} -2 days"));
  44. if (!isset($run_return_array[$re_prod_id][$come_date1])) {
  45. $run_return_array[$re_prod_id][$come_date1] = array();
  46. }
  47. if (!isset($run_return_array[$re_prod_id][$come_date2])) {
  48. $run_return_array[$re_prod_id][$come_date2] = array();
  49. }
  50. if (!isset($run_return_array[$re_prod_id][$come_date3])) {
  51. $run_return_array[$re_prod_id][$come_date3] = array();
  52. }
  53. if (isset($return_prod_time[$row_info["PROD_ID"]])) {
  54. $return_start_time = $return_prod_time[$row_info["PROD_ID"]];
  55. if ($return_start_time == $row_info["RUN_TIME"]) {
  56. $run_return_array[$re_prod_id][$come_date1][] = $row_info["RUN_ID"];
  57. $run_return_array[$re_prod_id][$come_date2][] = $row_info["RUN_ID"];
  58. $run_return_array[$re_prod_id][$come_date3][] = $row_info["RUN_ID"];
  59. }
  60. } else {
  61. $run_return_array[$re_prod_id][$come_date1][] = $row_info["RUN_ID"];
  62. $run_return_array[$re_prod_id][$come_date2][] = $row_info["RUN_ID"];
  63. $run_return_array[$re_prod_id][$come_date3][] = $row_info["RUN_ID"];
  64. }
  65. }
  66. }
  67. }
  68. return $rowset;
  69. }
  70. function getDisneyLineArray( $pdo ) {
  71. $disney_line_array = array();
  72. $sql2 = " SELECT LINE_ID,LINE_TYPE FROM opera_line WHERE LINE_TYPE = 256 AND CANCEL_FLAG = 0 ";
  73. $result=$pdo->query($sql2);
  74. if( false == $result ) {
  75. return $disney_line_array;
  76. }
  77. $result_array=$result->fetchAll();
  78. $result->closeCursor();
  79. foreach( $result_array as $disney_line_info ) {
  80. $disney_line_array[] = $disney_line_info["LINE_ID"];
  81. }
  82. return $disney_line_array;
  83. }
  84. function getSellLineArray( $pdo, &$line_array, &$no_sell_array ) {
  85. $res_array = array();
  86. $sql3 = " SELECT LINE_ID,LINE_NAME,CANCEL_FLAG,IF_DISABLED FROM opera_line WHERE LINE_TYPE IN (255,256) ";
  87. $result=$pdo->query($sql3);
  88. if( false == $result) {
  89. return $res_array;
  90. }
  91. $result_array=$result->fetchAll();
  92. $result->closeCursor();
  93. $line_array = array();
  94. foreach( $result_array as $res_info ) {
  95. if( $res_info["CANCEL_FLAG"] == 1 || $res_info["IF_DISABLED"] == 1 ) {
  96. $no_sell_array[] = $res_info["LINE_ID"];
  97. } else {
  98. $res_array[] = $res_info["LINE_ID"];
  99. $line_array[$res_info["LINE_ID"]] = $res_info;
  100. }
  101. }
  102. return $res_array;
  103. }
  104. function getBaseResourceArray( $pdo ) {
  105. $res_array = array();
  106. $sql3 = " SELECT * FROM base_resource WHERE RES_TYPE_ID=24 ";
  107. $result=$pdo->query($sql3);
  108. if( false == $result) {
  109. return $res_array;
  110. }
  111. $result_array=$result->fetchAll();
  112. $result->closeCursor();
  113. foreach( $result_array as $res_info ) {
  114. $res_array[$res_info["RES_ID"]] = $res_info;
  115. }
  116. return $res_array;
  117. }
  118. function getBaseResourcePropertyArray( $pdo ) {
  119. $res_array = array();
  120. $sql3 = " SELECT res_id,type_id,property FROM base_resource_property WHERE type_id IN (212,213,279) ";
  121. $result=$pdo->query($sql3);
  122. if( false == $result) {
  123. return $res_array;
  124. }
  125. $result_array=$result->fetchAll();
  126. $result->closeCursor();
  127. foreach( $result_array as $res_info ) {
  128. $res_index = $res_info["res_id"];
  129. if( !isset($res_array[$res_index]) ) {
  130. $res_array[$res_index] = array();
  131. }
  132. $res_array[$res_index][$res_info["type_id"]] = $res_info["property"];
  133. }
  134. return $res_array;
  135. }
  136. function getBaseAreaArray($pdo) {
  137. $city_array = array();
  138. $sql4 = " SELECT * FROM base_area WHERE CANCEL_FLAG=0 ";
  139. $result=$pdo->query($sql4);
  140. if( false == $result ) {
  141. return $city_array;
  142. }
  143. $result_array=$result->fetchAll();
  144. $result->closeCursor();
  145. foreach( $result_array as $city_info ) {
  146. $city_array[$city_info["ID"]] = $city_info;
  147. }
  148. return $city_array;
  149. }
  150. function getRunBusArray( $pdo, $run_id_array ) {
  151. $run_bus_array = array();
  152. $sql5 = " SELECT * FROM run_bus WHERE RUN_ID IN(".implode(",",$run_id_array).") AND CANCEL_FLAG = 0 AND RUN_BUS_STATUS IN (138) ";
  153. $result=$pdo->query($sql5);
  154. if( false == $result ) {
  155. return $run_bus_array;
  156. }
  157. $result_array=$result->fetchAll();
  158. $result->closeCursor();
  159. //将所有班次的车次信息按照班次进行归类 存入$run_bus_array
  160. foreach( $result_array as $run_bus_info ) {
  161. if( !isset($run_bus_array[$run_bus_info["RUN_ID"]]) ) {
  162. $run_bus_array[$run_bus_info["RUN_ID"]] = array();
  163. }
  164. $run_bus_array[$run_bus_info["RUN_ID"]][] = $run_bus_info;
  165. }
  166. return $run_bus_array;
  167. }
  168. function getTicketDetailArray( $prod_id_array,$no_sell_array, $pdo,&$prod_tickets_array, &$prod_tickets_id_array, &$bothway_tickets_id_array, &$prod_price_array, &$start_end_array, &$res_start_reach_array ) {
  169. $sql6 = " SELECT * FROM opera_tickets WHERE LINE_ID IN(".implode(",",$prod_id_array).") AND TICKET_ID NOT IN (".implode(",",$no_sell_array).") AND CANCEL_FLAG = 0 ";
  170. $result=$pdo->query($sql6);
  171. if( false == $result ) {
  172. return false;
  173. }
  174. $result_array=$result->fetchAll();
  175. $result->closeCursor();
  176. $prod_tickets_array = array();
  177. $prod_tickets_id_array = array();
  178. $bothway_tickets_id_array = array();
  179. $prod_price_array = array();
  180. $start_end_array = array();
  181. $res_start_reach_array = array();
  182. //将所有票种信息按照PROD_ID来进行分类存储进$prod_tickets_array
  183. //获取所有票种价格信息
  184. //并将所有的票种PROD_ID存储进$prod_tickets_id_array
  185. foreach( $result_array as $prod_tickets_info ) {
  186. $prod_tickets_array[$prod_tickets_info["TICKET_ID"]] = $prod_tickets_info;
  187. $prod_tickets_id_array[] = $prod_tickets_info["TICKET_ID"];
  188. if( mb_strpos($prod_tickets_info["TICKET_NAME"],"往返") ) {
  189. $bothway_tickets_id_array[] = $prod_tickets_info["TICKET_ID"];
  190. }
  191. if( !isset($prod_price_array[$prod_tickets_info["LINE_ID"]]) ) {
  192. $prod_price_array[$prod_tickets_info["LINE_ID"]] = array();
  193. }
  194. $prod_price_array[$prod_tickets_info["LINE_ID"]][$prod_tickets_info["TICKET_ID"]] = $prod_tickets_info;
  195. $start_end_array[$prod_tickets_info["TICKET_ID"]] = $prod_tickets_info;
  196. if( !isset($res_start_reach_array[$prod_tickets_info["START_STATION_RES_ID"]]) ) $res_start_reach_array[$prod_tickets_info["START_STATION_RES_ID"]] = array();
  197. if( !isset($res_start_reach_array[$prod_tickets_info["START_STATION_RES_ID"]][$prod_tickets_info["END_STATION_RES_ID"]]) ) $res_start_reach_array[$prod_tickets_info["START_STATION_RES_ID"]][$prod_tickets_info["END_STATION_RES_ID"]] = array();
  198. if( in_array($prod_tickets_info["TICKET_ID"], $bothway_tickets_id_array)) $res_start_reach_array[$prod_tickets_info["START_STATION_RES_ID"]][$prod_tickets_info["END_STATION_RES_ID"]][$prod_tickets_info["LINE_ID"]] = $prod_tickets_info["TICKET_ID"];
  199. }
  200. return true;
  201. }
  202. function getTicketDetailArray2( $prod_id_array,$no_sell_array, $pdo,&$prod_tickets_array, &$prod_tickets_id_array, &$bothway_tickets_id_array, &$prod_price_array, &$start_end_array, &$res_start_reach_array ) {
  203. $sql6 = " SELECT * FROM opera_tickets WHERE LINE_ID IN(".implode(",",$prod_id_array).") AND TICKET_ID NOT IN (".implode(",",$no_sell_array).") AND CANCEL_FLAG = 0 ";
  204. $result=$pdo->query($sql6);
  205. if( false == $result ) {
  206. return false;
  207. }
  208. $result_array=$result->fetchAll();
  209. $result->closeCursor();
  210. $prod_tickets_array = array();
  211. $prod_tickets_id_array = array();
  212. $bothway_tickets_id_array = array();
  213. $prod_price_array = array();
  214. $start_end_array = array();
  215. $res_start_reach_array = array();
  216. //将所有票种信息按照PROD_ID来进行分类存储进$prod_tickets_array
  217. //获取所有票种价格信息
  218. //并将所有的票种PROD_ID存储进$prod_tickets_id_array
  219. foreach( $result_array as $prod_tickets_info ) {
  220. $prod_tickets_array[$prod_tickets_info["TICKET_ID"]] = $prod_tickets_info;
  221. $prod_tickets_id_array[] = $prod_tickets_info["TICKET_ID"];
  222. if( mb_strpos($prod_tickets_info["TICKET_NAME"],"往返") === false ) {
  223. $bothway_tickets_id_array[] = $prod_tickets_info["TICKET_ID"];
  224. }
  225. if( !isset($prod_price_array[$prod_tickets_info["LINE_ID"]]) ) {
  226. $prod_price_array[$prod_tickets_info["LINE_ID"]] = array();
  227. }
  228. $prod_price_array[$prod_tickets_info["LINE_ID"]][$prod_tickets_info["TICKET_ID"]] = $prod_tickets_info;
  229. $start_end_array[$prod_tickets_info["TICKET_ID"]] = $prod_tickets_info;
  230. if( !isset($res_start_reach_array[$prod_tickets_info["START_STATION_RES_ID"]]) ) $res_start_reach_array[$prod_tickets_info["START_STATION_RES_ID"]] = array();
  231. if( !isset($res_start_reach_array[$prod_tickets_info["START_STATION_RES_ID"]][$prod_tickets_info["END_STATION_RES_ID"]]) ) $res_start_reach_array[$prod_tickets_info["START_STATION_RES_ID"]][$prod_tickets_info["END_STATION_RES_ID"]] = array();
  232. if( in_array($prod_tickets_info["TICKET_ID"], $bothway_tickets_id_array)) $res_start_reach_array[$prod_tickets_info["START_STATION_RES_ID"]][$prod_tickets_info["END_STATION_RES_ID"]][$prod_tickets_info["LINE_ID"]] = $prod_tickets_info["TICKET_ID"];
  233. }
  234. return true;
  235. }
  236. function getOrgTicketsArray( $pdo, $from_org_id, $prod_tickets_id_array ) {
  237. $org_tickets_array = array();
  238. $sql = " SELECT TICKET_ID,SUPPLIER_ID,PROD_PRICE,AUTHORITY_STATUS FROM opera_tickets_distrib WHERE SUPPLIER_ID={$from_org_id} AND CANCEL_FLAG=0 ";
  239. if( $prod_tickets_id_array != false ) {
  240. $sql .= " AND TICKET_ID IN(".implode( ",", $prod_tickets_id_array ).") ";
  241. }
  242. $result=$pdo->query($sql);
  243. if( false == $result ) {
  244. return $org_tickets_array;
  245. }
  246. $result_array=$result->fetchAll();
  247. $result->closeCursor();
  248. foreach( $result_array as $result_info ) {
  249. if( !isset($org_tickets_array[$result_info["TICKET_ID"]]) ) {
  250. $org_tickets_array[$result_info["TICKET_ID"]] = $result_info;
  251. }
  252. }
  253. return $org_tickets_array;
  254. }
  255. function getOrgTicketsAgentArray( $pdo, $from_org_id, $prod_tickets_id_array ) {
  256. $org_tickets_array = array();
  257. $sql = " SELECT TICKET_ID,PROD_PRICE,AUTHORITY_STATUS,IS_ONSALE FROM opera_tickets_agent WHERE TO_MAIN_CORP_ID={$from_org_id} AND CANCEL_FLAG=0 ";
  258. if( $prod_tickets_id_array != false ) {
  259. $sql .= " AND TICKET_ID IN(".implode( ",", $prod_tickets_id_array ).") ";
  260. }
  261. $result=$pdo->query($sql);
  262. if( false == $result ) {
  263. return $org_tickets_array;
  264. }
  265. $result_array=$result->fetchAll();
  266. $result->closeCursor();
  267. foreach( $result_array as $result_info ) {
  268. if( !isset($org_tickets_array[$result_info["TICKET_ID"]]) ) {
  269. $org_tickets_array[$result_info["TICKET_ID"]] = $result_info;
  270. }
  271. }
  272. return $org_tickets_array;
  273. }
  274. //
  275. function getOrgTicketsDiscountArray( $pdo, $from_org_id, $prod_tickets_id_array ) {
  276. $org_ticket_discount_array = array();
  277. $sql = " SELECT TICKET_ID,OFF_VALUE,SUPPLIER_ID FROM opera_tickets_discount WHERE SUPPLIER_ID IN ( {$from_org_id}, 164 ) AND DISCOUNT_TYPE=332 AND TICKET_ID IN (".implode( ",", $prod_tickets_id_array ).") AND CANCEL_FLAG=0";
  278. $result=$pdo->query($sql);
  279. if( false == $result ) {
  280. return $org_ticket_discount_array;
  281. }
  282. $result_array=$result->fetchAll();
  283. $result->closeCursor();
  284. foreach( $result_array as $result_info ) {
  285. if( $result_info["SUPPLIER_ID"] == $from_org_id || !isset($org_ticket_discount_array[$result_info["TICKET_ID"]]) ) {
  286. $org_ticket_discount_array[$result_info["TICKET_ID"]] = $result_info;
  287. }
  288. }
  289. return $org_ticket_discount_array;
  290. }
  291. function getRunProdArray( $run_id_array, $pdo ) {
  292. $run_prod_array = array();
  293. $sql7 = " SELECT * FROM run_prod WHERE RUN_ID IN(".implode(",",$run_id_array).") AND CANCEL_FLAG = 0 ";
  294. $result=$pdo->query($sql7);
  295. if( false == $result ) {
  296. return $run_prod_array;
  297. }
  298. $result_array=$result->fetchAll();
  299. $result->closeCursor();
  300. foreach( $result_array as $run_prod_info ) {
  301. if( !isset($run_prod_array[$run_prod_info["RUN_ID"]]) ) {
  302. $run_prod_array[$run_prod_info["RUN_ID"]] = array();
  303. }
  304. $run_prod_array[$run_prod_info["RUN_ID"]][] = $run_prod_info;
  305. }
  306. return $run_prod_array;
  307. }
  308. function getRunStockArray( $run_id_array , $pdo, &$run_stock_array ) {
  309. $run_stock_array = array();
  310. $sql = " SELECT RUN_ID,RES_ID,TOTAL_COUNT,SALED_COUNT FROM run_stock WHERE RUN_ID IN (".implode( ",", $run_id_array).") and SEAT_TYPE = 72 AND CANCEL_FLAG = 0 ";
  311. $result=$pdo->query($sql);
  312. if( false == $result ) {
  313. return false;
  314. }
  315. $result_array=$result->fetchAll();
  316. $result->closeCursor();
  317. foreach( $result_array as $run_stock_info ) {
  318. $run_stock_index = $run_stock_info["RUN_ID"]."_".$run_stock_info["RES_ID"];
  319. $sold_stock = $run_stock_info["TOTAL_COUNT"] - $run_stock_info["SALED_COUNT"] - 3;
  320. $run_stock_array[$run_stock_index] = $sold_stock > 0 ? $sold_stock : 0;
  321. }
  322. return true;
  323. }
  324. function getRunStockArray2( $run_id_array , $pdo, &$run_stock_array ) {
  325. $run_stock_array = array();
  326. $sql = "SELECT rs.RUN_ID,rs.RES_ID,rs.SEQ_ID,rs.TOTAL_COUNT,rs.SALED_COUNT, rs2.STATION_INOUT_TYPE
  327. FROM run_stock as rs
  328. left join run_station as rs2 on rs.RUN_ID = rs2.RUN_ID AND rs.RES_ID = rs2.STATION_RES_ID
  329. WHERE rs.RUN_ID IN (".implode( ",", $run_id_array).") and rs.SEAT_TYPE = 72 AND rs.CANCEL_FLAG = 0 ";
  330. $result=$pdo->query($sql);
  331. if( false == $result ) {
  332. return false;
  333. }
  334. $result_array=$result->fetchAll();
  335. if( $result_array == false ) {
  336. return false;
  337. }
  338. $result->closeCursor();
  339. $run_stock_all = array();
  340. foreach( $result_array as $run_stock_info ) {
  341. if( !isset($run_stock_all[$run_stock_info["RUN_ID"]]) ) {
  342. $run_stock_all[$run_stock_info["RUN_ID"]] = array();
  343. }
  344. $run_stock_all[$run_stock_info["RUN_ID"]][$run_stock_info["SEQ_ID"]] = $run_stock_info;
  345. }
  346. foreach( $run_stock_all as $run_id => $run_stock_tmp ) {
  347. $run_stock_tmp2 = $run_stock_tmp;
  348. foreach( $run_stock_tmp as $seq_index => $run_stock_start ) {
  349. $remain_count_start = $run_stock_tmp2[$seq_index]["TOTAL_COUNT"] - $run_stock_tmp2[$seq_index]["SALED_COUNT"] - 3;
  350. $remain_count_start = $remain_count_start > 0 ? $remain_count_start : 0;
  351. if( $run_stock_tmp2[$seq_index]["STATION_INOUT_TYPE"] == 114 ) {
  352. $remain_count_start = 0;
  353. }
  354. $remain_count_min = $remain_count_start;
  355. $end_seq_index = $seq_index + 1;
  356. while( isset($run_stock_tmp2[$end_seq_index]) ) {
  357. $remain_count_tmp = $run_stock_tmp2[$end_seq_index-1]["TOTAL_COUNT"] - $run_stock_tmp2[$end_seq_index-1]["SALED_COUNT"] - 3;
  358. $remain_count_tmp = $remain_count_tmp > 0 ? $remain_count_tmp : 0;
  359. $remain_count_min = $remain_count_min > $remain_count_tmp ? $remain_count_tmp : $remain_count_min;
  360. $run_stock_array[$run_id."_".$run_stock_tmp2[$seq_index]["RES_ID"]."_".$run_stock_tmp2[$end_seq_index]["RES_ID"]] = $remain_count_min;
  361. //test
  362. if( $run_stock_tmp2[$end_seq_index]["STATION_INOUT_TYPE"] == 114 ) {
  363. $run_stock_array[$run_id."_".$run_stock_tmp2[$seq_index]["RES_ID"]."_".$run_stock_tmp2[$end_seq_index]["RES_ID"]] = 0;
  364. }
  365. //e
  366. $end_seq_index++;
  367. }
  368. }
  369. }
  370. return true;
  371. }
  372. function getRunStationArray( $run_id_array, $pdo, &$run_station_array, &$res_start_time_array ) {
  373. $sql8 = " SELECT * FROM run_station WHERE RUN_ID IN (".implode( ",", $run_id_array).") ";
  374. $result=$pdo->query($sql8);
  375. if( false == $result ) {
  376. return false;
  377. }
  378. $result_array=$result->fetchAll();
  379. $result->closeCursor();
  380. $run_station_array = array();
  381. $res_start_time_array = array();
  382. //把班次站点信息按照班次RUN_ID进行归类,并总结出每个班次的起始站点和终了站点
  383. //根据班次站点对于时间进行归纳,并存储至$res_start_time_array
  384. foreach( $result_array as $run_station_info ) {
  385. if( !isset($run_station_array[$run_station_info["RUN_ID"]]) ) {
  386. $run_station_array[$run_station_info["RUN_ID"]] = array( "start_time" => "","start_res_id" => 0, "start_area_id" => 0, "end_res_id" => 0, "end_area_id" => 0, "end_order_no" => 0 );
  387. }
  388. if( !isset($res_start_time_array[$run_station_info["RUN_ID"]])) {
  389. $res_start_time_array[$run_station_info["RUN_ID"]] = array();
  390. }
  391. $res_start_time_array[$run_station_info["RUN_ID"]][$run_station_info["STATION_RES_ID"]] = $run_station_info["START_TIME"];
  392. if( $run_station_info["STATION_ORDER_ID"] == 1 ) {
  393. $run_station_array[$run_station_info["RUN_ID"]]["start_time"] = $run_station_info["START_TIME"];
  394. $run_station_array[$run_station_info["RUN_ID"]]["start_res_id"] = $run_station_info["STATION_RES_ID"];
  395. $run_station_array[$run_station_info["RUN_ID"]]["start_area_id"] = $run_station_info["AREA_ID"];
  396. } else {
  397. if( $run_station_array[$run_station_info["RUN_ID"]]["end_order_no"] < $run_station_info["STATION_ORDER_ID"] ) {
  398. $run_station_array[$run_station_info["RUN_ID"]]["end_order_no"] = $run_station_info["STATION_ORDER_ID"];
  399. $run_station_array[$run_station_info["RUN_ID"]]["end_res_id"] = $run_station_info["STATION_RES_ID"];
  400. $run_station_array[$run_station_info["RUN_ID"]]["end_area_id"] = $run_station_info["AREA_ID"];
  401. }
  402. }
  403. }
  404. return true;
  405. }
  406. function getCompainLineArray( $pdo, $search_date, $from_org_id, &$compain_line_array, &$compain_summary_array ) {
  407. $sql = " SELECT e.compain_id, r.start_date,r.end_date, r.run_start,r.run_end, e.line_id,r.compain_type,r.compain_param,r.compain_max_ticket,r.compain_tag FROM opera_compain_rule as r, opera_compain_entry as e ".
  408. " WHERE r.to_org_id={$from_org_id} AND r.start_date <= '{$search_date}' AND r.end_date >= '{$search_date}' AND e.cancel_flag = 0 AND r.id=e.compain_id AND r.cancel_flag = 0 ";
  409. $result=$pdo->query($sql);
  410. if( false == $result ) {
  411. return false;
  412. }
  413. $compain_summary_array = array();
  414. $compain_line_array = array();
  415. $line_id_array = array();
  416. $compain_id_array = array();
  417. $result_array=$result->fetchAll();
  418. $result->closeCursor();
  419. foreach( $result_array as $compain_info ) {
  420. $compain_line_array[$compain_info["line_id"]] = $compain_info;
  421. $line_id_array[] = $compain_info["line_id"];
  422. $compain_id_array[] = $compain_info["compain_id"];
  423. }
  424. $sql = " SELECT compain_id,line_id,run_id,compain_price,compain_max,compain_saled,create_time FROM opera_compain_summary WHERE compain_id IN(".implode(",", $compain_id_array).") AND line_id IN(".implode(",", $line_id_array).") ";
  425. $result=$pdo->query($sql);
  426. if( false == $result ) {
  427. return true;
  428. }
  429. $result_array=$result->fetchAll();
  430. $result->closeCursor();
  431. foreach( $result_array as $summary_info ) {
  432. $compain_summary_array[$summary_info["run_id"]] = $summary_info;
  433. }
  434. return true;
  435. }
  436. function setSellPriceFromCompain( $tickets_info, $run_info, $pdo, $compain_line_array, &$compain_summary_array, &$compain_tickets_max, &$compain_tag ) {
  437. if( false == $compain_line_array || count($compain_line_array) <= 0 || !isset($compain_line_array[$run_info["PROD_ID"]]) ) {
  438. return $tickets_info["CUS_PRICE"];
  439. }
  440. $compain_line_info = $compain_line_array[$run_info["PROD_ID"]];
  441. if( $compain_line_info["run_start"] > $run_info["RUN_DATE"] || $compain_line_info["run_end"] < $run_info["RUN_DATE"] ) {
  442. return $tickets_info["CUS_PRICE"];
  443. }
  444. $compain_id = $compain_line_info["compain_id"];
  445. $line_id = $compain_line_info["line_id"];
  446. $run_id = $run_info["RUN_ID"];
  447. $compain_type = $compain_line_info["compain_type"];
  448. $compain_param = $compain_line_info["compain_param"];
  449. $org_price = $tickets_info["CUS_PRICE"];
  450. $compain_price = getCompainPrice( $compain_type, $compain_param, $org_price );
  451. $compain_max = $compain_line_info["compain_max_ticket"];
  452. $compain_tag = $compain_line_info["compain_tag"];
  453. $compain_saled = 0;
  454. $create_time = date("Y-m-d H:i:s");
  455. if(!isset($compain_summary_array[$run_info["RUN_ID"]]) ) {
  456. $compain_summary_info = updateCompainSummaryInfo( $compain_id, $line_id, $run_id, $compain_price, $compain_max, $compain_saled, $create_time, $create_time, $pdo );
  457. $compain_summary_array[$run_info["RUN_ID"]] = $compain_summary_info;
  458. return $compain_price;
  459. }
  460. $compain_summary_info = $compain_summary_array[$run_info["RUN_ID"]];
  461. $compain_tickets_max = $compain_summary_info["compain_max"];
  462. if( $compain_summary_info["compain_max"] > $compain_summary_info["compain_saled"] ) {
  463. return $compain_price;
  464. } else {
  465. return $org_price;
  466. }
  467. }
  468. function updateCompainSummaryInfo( $compain_id, $line_id, $run_id, $compain_price, $compain_max, $compain_saled, $create_time, $last_update, $pdo ) {
  469. $sql_insert = " INSERT INTO opera_compain_summary (compain_id,line_id,run_id,compain_price,compain_max,compain_saled,create_time,last_update) ".
  470. " VALUES ( {$compain_id}, {$line_id}, {$run_id}, {$compain_price}, {$compain_max}, {$compain_saled}, '{$create_time}', '{$last_update}' ) ".
  471. " ON DUPLICATE KEY UPDATE compain_saled=compain_saled+{$compain_saled}, last_update='{$last_update}' ";
  472. $pdo->exec($sql_insert);
  473. if( $compain_saled == 0 ) {
  474. return array( 'compain_id' => $compain_id, 'line_id' => $line_id, 'run_id' => $run_id, 'compain_price' => $compain_price, 'compain_max' => $compain_max, 'compain_saled' => $compain_saled, 'create_time' => $create_time, 'last_update' => $last_update );
  475. }
  476. return true;
  477. }
  478. function getCompainPrice( $compain_type, $compain_param, $org_price ) {
  479. switch( $compain_type ) {
  480. case 1://立减
  481. $return_price = $org_price - $compain_param;
  482. break;
  483. case 2://折扣
  484. $return_price = $org_price * $compain_param / 100;
  485. break;
  486. case 3://降至
  487. $return_price = $org_price > $compain_param ? $compain_param : $org_price;
  488. break;
  489. default:
  490. $return_price = $org_price;
  491. break;
  492. }
  493. $return_price = $return_price > 0 ? $return_price : 0;
  494. return $return_price;
  495. }
  496. function autoUpdateCompainSummary( $line_id, $run_id, $from_org_id, $search_date, $ticket_num, $pdo ) {
  497. $sql = " SELECT s.compain_id, s.line_id, s.run_id, s.compain_price, s.compain_max, s.compain_saled ".
  498. " FROM opera_compain_summary as s, opera_compain_rule as r".
  499. " WHERE s.line_id={$line_id} AND s.run_id={$run_id} AND s.compain_max>s.compain_saled AND r.id=s.compain_id AND r.to_org_id={$from_org_id} AND r.start_date <= '{$search_date}' AND r.end_date >= '{$search_date}' AND r.cancel_flag=0 ";
  500. $result=$pdo->query($sql);
  501. if( false == $result ) {
  502. return true;
  503. }
  504. $result_array = $result->fetchAll();
  505. $result->closeCursor();
  506. if( false == $result_array ) {
  507. return true;
  508. }
  509. $compain_summary_info = $result_array[0];
  510. $compain_id = $compain_summary_info["compain_id"];
  511. $line_id = $compain_summary_info["line_id"];
  512. $run_id = $compain_summary_info["run_id"];
  513. $compain_price = $compain_summary_info["compain_price"];
  514. $compain_max = $compain_summary_info["compain_max"];
  515. $create_time = date("Y-m-d H:i:s");
  516. updateCompainSummaryInfo( $compain_id, $line_id, $run_id, $compain_price, $compain_max, $ticket_num, $create_time, $create_time, $pdo );
  517. }
  518. function setRunInfoNoTicket( $base_info ) {
  519. $return_info = $base_info;
  520. $return_info["total_count"] = 0;
  521. $return_info["saled_count"] = 0;
  522. $return_info["remain_count"] = 0;
  523. return $return_info;
  524. }
  525. function getTicketsDiscountArray( $pdo, $from_org_id, $extra_sql = false ) {
  526. $sql = " SELECT ticket_id, supplier_id, off_value FROM opera_tickets_discount WHERE discount_type=332 AND supplier_id IN (164,{$from_org_id}) AND is_onsale=1 AND cancel_flag = 0 ";
  527. if( $extra_sql != false ) {
  528. $sql .= " AND ".$extra_sql;
  529. }
  530. $result=$pdo->query($sql);
  531. if( false == $result ) {
  532. return array();
  533. }
  534. $result_array = $result->fetchAll();
  535. $result->closeCursor();
  536. if( false == $result_array ) {
  537. return array();
  538. }
  539. $return_array = array();
  540. foreach( $result_array as $result_info ) {
  541. if( !isset($return_array[$result_info["ticket_id"]]) ) {
  542. $return_array[$result_info["ticket_id"]] = $result_info;
  543. } else if( $result_info["supplier_id"] != 164 ) {
  544. $return_array[$result_info["ticket_id"]] = $result_info;
  545. }
  546. }
  547. return $return_array;
  548. }
  549. function getCombiedLineProd( $pdo ) {
  550. $sql = " SELECT id,prod_name,all_price,prod_type_list,prod_id_list,prod_time_list,prod_price_list FROM opera_line_combined_rule WHERE cancel_flag=0";
  551. $result=$pdo->query($sql);
  552. if( false == $result ) {
  553. return false;
  554. }
  555. $result_array = $result->fetchAll();
  556. $result->closeCursor();
  557. if( false == $result_array ) {
  558. return false;
  559. }
  560. $return_array = array();
  561. foreach( $result_array as $combied_info ) {
  562. $combied_line_txt = $combied_info["prod_id_list"];
  563. $combied_line_array = explode("_", $combied_line_txt);
  564. $combied_time_txt = $combied_info["prod_time_list"];
  565. $combied_time_array = explode("_", $combied_time_txt);
  566. $combied_price_txt = $combied_info["prod_price_list"];
  567. $combied_price_array = explode("_", $combied_price_txt);
  568. if( !isset($return_array[$combied_line_array[0]]) ) {
  569. $return_array[$combied_line_array[0]] = array();
  570. }
  571. if( !isset($return_array[$combied_line_array[0]][$combied_time_array[0]]) ) {
  572. $return_array[$combied_line_array[0]][$combied_time_array[0]] = array();
  573. }
  574. $combied_info_tmp = array();
  575. $combied_info_tmp["all_price"] = $combied_info["all_price"];
  576. $combied_info_tmp["line_id1"] = $combied_line_array[0];
  577. $combied_info_tmp["start_minutes1"] = $combied_time_array[0];
  578. $combied_info_tmp["line_id2"] = $combied_line_array[1];
  579. $combied_info_tmp["start_minutes2"] = $combied_time_array[1];
  580. $combied_info_tmp["price1"] = $combied_price_array[0];
  581. $combied_info_tmp["price2"] = $combied_price_array[1];
  582. $return_array[$combied_line_array[0]][$combied_time_array[0]][] = $combied_info_tmp;
  583. }
  584. return $return_array;
  585. }
  586. function insert_combined_data( $combied_line_array, $all_run_array, $all_line_run_array, $run_prod_array, $start_end_array, $run_bus_array, $res_start_time_array, $city_array, $res_array, $row_info, $base_info, $tickets_info, &$combined_array ) {
  587. $combied_rule_array = $combied_line_array[$row_info["PROD_ID"]][$row_info["RUN_MINUTES"]];
  588. foreach( $combied_rule_array as $combied_rule_info ) {
  589. $second_line_id = $combied_rule_info["line_id2"];
  590. $second_start_minutes = $combied_rule_info["start_minutes2"];
  591. $combied_full_price = $combied_rule_info["all_price"];
  592. if( !isset($all_line_run_array[$second_line_id][$row_info["RUN_DATE"]][$second_start_minutes]) ) {
  593. continue;
  594. }
  595. $second_run_id_array = $all_line_run_array[$second_line_id][$row_info["RUN_DATE"]][$second_start_minutes];
  596. insert_base_data_from_run_info( $second_run_id_array, $base_info, $row_info, $all_run_array, $run_bus_array, $run_prod_array, $tickets_info, $combied_full_price, $start_end_array, $city_array, $res_array, $res_start_time_array, $combined_array);
  597. }
  598. }
  599. function insert_base_data_from_run_info( $second_run_id_array, $base_info, $row_info, $all_run_array, $run_bus_array, $run_prod_array, $tickets_info, $combied_full_price, $start_end_array, $city_array, $res_array, $res_start_time_array, &$combined_array) {
  600. foreach( $second_run_id_array as $second_run_id ) {
  601. $sencond_run_info = $all_run_array[$second_run_id];
  602. if( $sencond_run_info["RUN_STATUS"] != 138 || $sencond_run_info["RUN_DATE"] < $row_info["RUN_DATE"] || !isset($run_bus_array[$second_run_id])) {
  603. continue;
  604. }
  605. $total_count_b = 0;
  606. $saled_count_b = 0;
  607. foreach ( $run_bus_array[$second_run_id] as $run_bus_info) {
  608. $total_count_b += $run_bus_info["SEAT_COUNT"];
  609. $saled_count_b += $run_bus_info["SALED_COUNT"];
  610. }
  611. $remain_count_b = $total_count_b > ($saled_count_b + 3) ? $total_count_b - ($saled_count_b + 3) : 0;
  612. $remain_count_b = $remain_count_b > $base_info["remain_count"] ? $base_info["remain_count"] : $remain_count_b;
  613. $second_tickets_array = $run_prod_array[$second_run_id];
  614. foreach( $second_tickets_array as $second_tickets_info ) {
  615. $combined_base_info = create_combined_base_info( $second_tickets_info, $base_info, $row_info, $tickets_info, $second_run_id, $combied_full_price, $start_end_array, $city_array, $res_array, $res_start_time_array, $remain_count_b );
  616. if( $combined_base_info != false ) {
  617. $combined_array[] = $combined_base_info;
  618. }
  619. }
  620. }
  621. }
  622. function create_combined_base_info( $second_tickets_info, $base_info, $row_info, $tickets_info, $second_run_id, $combied_full_price, $start_end_array, $city_array, $res_array, $res_start_time_array, $remain_count_b ) {
  623. $second_tickets_id = $second_tickets_info["PROD_ID"];
  624. $combined_base_info = $base_info;
  625. $combined_base_info["run_code"] = $row_info["RUN_ID"] . "_" . $tickets_info["TICKET_ID"] . "_" . $second_run_id . "_" . $second_tickets_id;
  626. $combined_base_info["run_codeX"] = base_convert($row_info["RUN_ID"],10,36) . "_" . base_convert($tickets_info["TICKET_ID"],10,36) . "_" . base_convert($second_run_id,10,36) . "_" . base_convert($second_tickets_id,10,36);
  627. $combined_base_info["full_price"] = $combied_full_price;
  628. $combined_base_info["remain_count"] = $remain_count_b;
  629. $combined_base_info["saled_count"] = $combined_base_info["total_count"] - $combined_base_info["remain_count"];
  630. $combined_base_info["bus_no"] = "以实际情况为准1";
  631. $start_end_info2 = $start_end_array[$second_tickets_id];
  632. if( $base_info["end_res"] != $res_array[$start_end_info2["START_STATION_RES_ID"]]["RES_NAME"] ) {
  633. return false;
  634. }
  635. $combined_base_info["end_city"] = $city_array[$start_end_info2["END_STATION_AREA_ID"]]["AREA_NAME"];
  636. $combined_base_info["end_res"] = $res_array[$start_end_info2["END_STATION_RES_ID"]]["RES_NAME"];
  637. $combined_base_info["end_time"] = $res_start_time_array[$second_run_id][$start_end_info2["END_STATION_RES_ID"]];
  638. if( !isset($combined_base_info["end_date"]) ) {
  639. $combined_base_info["end_date"] = $combined_base_info["start_date"];
  640. }
  641. $cost_time = strtotime($combined_base_info["end_date"] ." ".$combined_base_info["end_time"] ) - strtotime($combined_base_info["start_date"] ." ".$combined_base_info["start_time"] );
  642. $combined_base_info["cost_time"] = ceil($cost_time/60);
  643. $combined_base_info["disp_run_code"] = "ZZ".$tickets_info["TICKET_ID"].substr($row_info["RUN_ID"],3,3)."C".$second_tickets_id;
  644. $combined_base_info["extra_description"] = "抵达".$base_info["end_res"]."后零距离换乘";
  645. $combined_base_info["compain_tag"] = "需转驳";
  646. $combined_base_info["compain_detail"] = "抵达".$base_info["end_res"]."后零距离换乘";
  647. $combined_base_info["description"] = "";
  648. return $combined_base_info;
  649. }