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.
 
 
 
 

581 line
29 KiB

  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=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 getBaseAreaArray($pdo) {
  119. $city_array = array();
  120. $sql4 = " SELECT * FROM base_area WHERE CANCEL_FLAG=0 ";
  121. $result=$pdo->query($sql4);
  122. if( false == $result ) {
  123. return $city_array;
  124. }
  125. $result_array=$result->fetchAll();
  126. $result->closeCursor();
  127. foreach( $result_array as $city_info ) {
  128. $city_array[$city_info["ID"]] = $city_info;
  129. }
  130. return $city_array;
  131. }
  132. function getRunBusArray( $pdo, $run_id_array ) {
  133. $run_bus_array = array();
  134. $sql5 = " SELECT * FROM run_bus WHERE RUN_ID IN(".implode(",",$run_id_array).") AND CANCEL_FLAG = 0 AND RUN_BUS_STATUS = 138 ";
  135. $result=$pdo->query($sql5);
  136. if( false == $result ) {
  137. return $run_bus_array;
  138. }
  139. $result_array=$result->fetchAll();
  140. $result->closeCursor();
  141. //将所有班次的车次信息按照班次进行归类 存入$run_bus_array
  142. foreach( $result_array as $run_bus_info ) {
  143. if( !isset($run_bus_array[$run_bus_info["RUN_ID"]]) ) {
  144. $run_bus_array[$run_bus_info["RUN_ID"]] = array();
  145. }
  146. $run_bus_array[$run_bus_info["RUN_ID"]][] = $run_bus_info;
  147. }
  148. return $run_bus_array;
  149. }
  150. 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 ) {
  151. $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 ";
  152. $result=$pdo->query($sql6);
  153. if( false == $result ) {
  154. return false;
  155. }
  156. $result_array=$result->fetchAll();
  157. $result->closeCursor();
  158. $prod_tickets_array = array();
  159. $prod_tickets_id_array = array();
  160. $bothway_tickets_id_array = array();
  161. $prod_price_array = array();
  162. $start_end_array = array();
  163. $res_start_reach_array = array();
  164. //将所有票种信息按照PROD_ID来进行分类存储进$prod_tickets_array
  165. //获取所有票种价格信息
  166. //并将所有的票种PROD_ID存储进$prod_tickets_id_array
  167. foreach( $result_array as $prod_tickets_info ) {
  168. $prod_tickets_array[$prod_tickets_info["TICKET_ID"]] = $prod_tickets_info;
  169. $prod_tickets_id_array[] = $prod_tickets_info["TICKET_ID"];
  170. if( mb_strpos($prod_tickets_info["TICKET_NAME"],"往返") ) {
  171. $bothway_tickets_id_array[] = $prod_tickets_info["TICKET_ID"];
  172. }
  173. if( !isset($prod_price_array[$prod_tickets_info["LINE_ID"]]) ) {
  174. $prod_price_array[$prod_tickets_info["LINE_ID"]] = array();
  175. }
  176. $prod_price_array[$prod_tickets_info["LINE_ID"]][$prod_tickets_info["TICKET_ID"]] = $prod_tickets_info;
  177. $start_end_array[$prod_tickets_info["TICKET_ID"]] = $prod_tickets_info;
  178. 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();
  179. 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();
  180. 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"];
  181. }
  182. return true;
  183. }
  184. 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 ) {
  185. $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 ";
  186. $result=$pdo->query($sql6);
  187. if( false == $result ) {
  188. return false;
  189. }
  190. $result_array=$result->fetchAll();
  191. $result->closeCursor();
  192. $prod_tickets_array = array();
  193. $prod_tickets_id_array = array();
  194. $bothway_tickets_id_array = array();
  195. $prod_price_array = array();
  196. $start_end_array = array();
  197. $res_start_reach_array = array();
  198. //将所有票种信息按照PROD_ID来进行分类存储进$prod_tickets_array
  199. //获取所有票种价格信息
  200. //并将所有的票种PROD_ID存储进$prod_tickets_id_array
  201. foreach( $result_array as $prod_tickets_info ) {
  202. $prod_tickets_array[$prod_tickets_info["TICKET_ID"]] = $prod_tickets_info;
  203. $prod_tickets_id_array[] = $prod_tickets_info["TICKET_ID"];
  204. if( mb_strpos($prod_tickets_info["TICKET_NAME"],"往返") === false ) {
  205. $bothway_tickets_id_array[] = $prod_tickets_info["TICKET_ID"];
  206. }
  207. if( !isset($prod_price_array[$prod_tickets_info["LINE_ID"]]) ) {
  208. $prod_price_array[$prod_tickets_info["LINE_ID"]] = array();
  209. }
  210. $prod_price_array[$prod_tickets_info["LINE_ID"]][$prod_tickets_info["TICKET_ID"]] = $prod_tickets_info;
  211. $start_end_array[$prod_tickets_info["TICKET_ID"]] = $prod_tickets_info;
  212. 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();
  213. 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();
  214. 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"];
  215. }
  216. return true;
  217. }
  218. function getOrgTicketsArray( $pdo, $from_org_id, $prod_tickets_id_array ) {
  219. $org_tickets_array = array();
  220. $sql = " SELECT TICKET_ID,SUPPLIER_ID,PROD_PRICE,AUTHORITY_STATUS FROM opera_tickets_distrib WHERE SUPPLIER_ID={$from_org_id} AND CANCEL_FLAG=0 ";
  221. if( $prod_tickets_id_array != false ) {
  222. $sql .= " AND TICKET_ID IN(".implode( ",", $prod_tickets_id_array ).") ";
  223. }
  224. $result=$pdo->query($sql);
  225. if( false == $result ) {
  226. return $org_tickets_array;
  227. }
  228. $result_array=$result->fetchAll();
  229. $result->closeCursor();
  230. foreach( $result_array as $result_info ) {
  231. if( !isset($org_tickets_array[$result_info["TICKET_ID"]]) ) {
  232. $org_tickets_array[$result_info["TICKET_ID"]] = $result_info;
  233. }
  234. }
  235. return $org_tickets_array;
  236. }
  237. //
  238. function getOrgTicketsDiscountArray( $pdo, $from_org_id, $prod_tickets_id_array ) {
  239. $org_ticket_discount_array = array();
  240. $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";
  241. $result=$pdo->query($sql);
  242. if( false == $result ) {
  243. return $org_ticket_discount_array;
  244. }
  245. $result_array=$result->fetchAll();
  246. $result->closeCursor();
  247. foreach( $result_array as $result_info ) {
  248. if( $result_info["SUPPLIER_ID"] == $from_org_id || !isset($org_ticket_discount_array[$result_info["TICKET_ID"]]) ) {
  249. $org_ticket_discount_array[$result_info["TICKET_ID"]] = $result_info;
  250. }
  251. }
  252. return $org_ticket_discount_array;
  253. }
  254. function getRunProdArray( $run_id_array, $pdo ) {
  255. $run_prod_array = array();
  256. $sql7 = " SELECT * FROM run_prod WHERE RUN_ID IN(".implode(",",$run_id_array).") AND CANCEL_FLAG = 0 ";
  257. $result=$pdo->query($sql7);
  258. if( false == $result ) {
  259. return $run_prod_array;
  260. }
  261. $result_array=$result->fetchAll();
  262. $result->closeCursor();
  263. foreach( $result_array as $run_prod_info ) {
  264. if( !isset($run_prod_array[$run_prod_info["RUN_ID"]]) ) {
  265. $run_prod_array[$run_prod_info["RUN_ID"]] = array();
  266. }
  267. $run_prod_array[$run_prod_info["RUN_ID"]][] = $run_prod_info;
  268. }
  269. return $run_prod_array;
  270. }
  271. function getRunStationArray( $run_id_array, $pdo, &$run_station_array, &$res_start_time_array ) {
  272. $sql8 = " SELECT * FROM run_station WHERE RUN_ID IN (".implode( ",", $run_id_array).") ";
  273. $result=$pdo->query($sql8);
  274. if( false == $result ) {
  275. return false;
  276. }
  277. $result_array=$result->fetchAll();
  278. $result->closeCursor();
  279. $run_station_array = array();
  280. $res_start_time_array = array();
  281. //把班次站点信息按照班次RUN_ID进行归类,并总结出每个班次的起始站点和终了站点
  282. //根据班次站点对于时间进行归纳,并存储至$res_start_time_array
  283. foreach( $result_array as $run_station_info ) {
  284. if( !isset($run_station_array[$run_station_info["RUN_ID"]]) ) {
  285. $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 );
  286. }
  287. if( !isset($res_start_time_array[$run_station_info["RUN_ID"]])) {
  288. $res_start_time_array[$run_station_info["RUN_ID"]] = array();
  289. }
  290. $res_start_time_array[$run_station_info["RUN_ID"]][$run_station_info["STATION_RES_ID"]] = $run_station_info["START_TIME"];
  291. if( $run_station_info["STATION_ORDER_ID"] == 1 ) {
  292. $run_station_array[$run_station_info["RUN_ID"]]["start_time"] = $run_station_info["START_TIME"];
  293. $run_station_array[$run_station_info["RUN_ID"]]["start_res_id"] = $run_station_info["STATION_RES_ID"];
  294. $run_station_array[$run_station_info["RUN_ID"]]["start_area_id"] = $run_station_info["AREA_ID"];
  295. } else {
  296. if( $run_station_array[$run_station_info["RUN_ID"]]["end_order_no"] < $run_station_info["STATION_ORDER_ID"] ) {
  297. $run_station_array[$run_station_info["RUN_ID"]]["end_order_no"] = $run_station_info["STATION_ORDER_ID"];
  298. $run_station_array[$run_station_info["RUN_ID"]]["end_res_id"] = $run_station_info["STATION_RES_ID"];
  299. $run_station_array[$run_station_info["RUN_ID"]]["end_area_id"] = $run_station_info["AREA_ID"];
  300. }
  301. }
  302. }
  303. return true;
  304. }
  305. function getCompainLineArray( $pdo, $search_date, $from_org_id, &$compain_line_array, &$compain_summary_array ) {
  306. $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 ".
  307. " 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 ";
  308. $result=$pdo->query($sql);
  309. if( false == $result ) {
  310. return false;
  311. }
  312. $compain_summary_array = array();
  313. $compain_line_array = array();
  314. $line_id_array = array();
  315. $compain_id_array = array();
  316. $result_array=$result->fetchAll();
  317. $result->closeCursor();
  318. foreach( $result_array as $compain_info ) {
  319. $compain_line_array[$compain_info["line_id"]] = $compain_info;
  320. $line_id_array[] = $compain_info["line_id"];
  321. $compain_id_array[] = $compain_info["compain_id"];
  322. }
  323. $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).") ";
  324. $result=$pdo->query($sql);
  325. if( false == $result ) {
  326. return true;
  327. }
  328. $result_array=$result->fetchAll();
  329. $result->closeCursor();
  330. foreach( $result_array as $summary_info ) {
  331. $compain_summary_array[$summary_info["run_id"]] = $summary_info;
  332. }
  333. return true;
  334. }
  335. function setSellPriceFromCompain( $tickets_info, $run_info, $pdo, $compain_line_array, &$compain_summary_array, &$compain_tickets_max, &$compain_tag ) {
  336. if( false == $compain_line_array || count($compain_line_array) <= 0 || !isset($compain_line_array[$run_info["PROD_ID"]]) ) {
  337. return $tickets_info["CUS_PRICE"];
  338. }
  339. $compain_line_info = $compain_line_array[$run_info["PROD_ID"]];
  340. if( $compain_line_info["run_start"] > $run_info["RUN_DATE"] || $compain_line_info["run_end"] < $run_info["RUN_DATE"] ) {
  341. return $tickets_info["CUS_PRICE"];
  342. }
  343. $compain_id = $compain_line_info["compain_id"];
  344. $line_id = $compain_line_info["line_id"];
  345. $run_id = $run_info["RUN_ID"];
  346. $compain_type = $compain_line_info["compain_type"];
  347. $compain_param = $compain_line_info["compain_param"];
  348. $org_price = $tickets_info["CUS_PRICE"];
  349. $compain_price = getCompainPrice( $compain_type, $compain_param, $org_price );
  350. $compain_max = $compain_line_info["compain_max_ticket"];
  351. $compain_tag = $compain_line_info["compain_tag"];
  352. $compain_saled = 0;
  353. $create_time = date("Y-m-d H:i:s");
  354. if(!isset($compain_summary_array[$run_info["RUN_ID"]]) ) {
  355. $compain_summary_info = updateCompainSummaryInfo( $compain_id, $line_id, $run_id, $compain_price, $compain_max, $compain_saled, $create_time, $create_time, $pdo );
  356. $compain_summary_array[$run_info["RUN_ID"]] = $compain_summary_info;
  357. return $compain_price;
  358. }
  359. $compain_summary_info = $compain_summary_array[$run_info["RUN_ID"]];
  360. $compain_tickets_max = $compain_summary_info["compain_max"];
  361. if( $compain_summary_info["compain_max"] > $compain_summary_info["compain_saled"] ) {
  362. return $compain_price;
  363. } else {
  364. return $org_price;
  365. }
  366. }
  367. function updateCompainSummaryInfo( $compain_id, $line_id, $run_id, $compain_price, $compain_max, $compain_saled, $create_time, $last_update, $pdo ) {
  368. $sql_insert = " INSERT INTO opera_compain_summary (compain_id,line_id,run_id,compain_price,compain_max,compain_saled,create_time,last_update) ".
  369. " VALUES ( {$compain_id}, {$line_id}, {$run_id}, {$compain_price}, {$compain_max}, {$compain_saled}, '{$create_time}', '{$last_update}' ) ".
  370. " ON DUPLICATE KEY UPDATE compain_saled=compain_saled+{$compain_saled}, last_update='{$last_update}' ";
  371. $pdo->exec($sql_insert);
  372. if( $compain_saled == 0 ) {
  373. 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 );
  374. }
  375. return true;
  376. }
  377. function getCompainPrice( $compain_type, $compain_param, $org_price ) {
  378. switch( $compain_type ) {
  379. case 1://立减
  380. $return_price = $org_price - $compain_param;
  381. break;
  382. case 2://折扣
  383. $return_price = $org_price * $compain_param / 100;
  384. break;
  385. case 3://降至
  386. $return_price = $org_price > $compain_param ? $compain_param : $org_price;
  387. break;
  388. default:
  389. $return_price = $org_price;
  390. break;
  391. }
  392. $return_price = $return_price > 0 ? $return_price : 0;
  393. return $return_price;
  394. }
  395. function autoUpdateCompainSummary( $line_id, $run_id, $from_org_id, $search_date, $ticket_num, $pdo ) {
  396. $sql = " SELECT s.compain_id, s.line_id, s.run_id, s.compain_price, s.compain_max, s.compain_saled ".
  397. " FROM opera_compain_summary as s, opera_compain_rule as r".
  398. " 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 ";
  399. $result=$pdo->query($sql);
  400. if( false == $result ) {
  401. return true;
  402. }
  403. $result_array = $result->fetchAll();
  404. $result->closeCursor();
  405. if( false == $result_array ) {
  406. return true;
  407. }
  408. $compain_summary_info = $result_array[0];
  409. $compain_id = $compain_summary_info["compain_id"];
  410. $line_id = $compain_summary_info["line_id"];
  411. $run_id = $compain_summary_info["run_id"];
  412. $compain_price = $compain_summary_info["compain_price"];
  413. $compain_max = $compain_summary_info["compain_max"];
  414. $create_time = date("Y-m-d H:i:s");
  415. updateCompainSummaryInfo( $compain_id, $line_id, $run_id, $compain_price, $compain_max, $ticket_num, $create_time, $create_time, $pdo );
  416. }
  417. function setRunInfoNoTicket( $base_info ) {
  418. $return_info = $base_info;
  419. $return_info["total_count"] = 0;
  420. $return_info["saled_count"] = 0;
  421. $return_info["remain_count"] = 0;
  422. return $return_info;
  423. }
  424. function getTicketsDiscountArray( $pdo, $from_org_id, $extra_sql = false ) {
  425. $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 ";
  426. if( $extra_sql != false ) {
  427. $sql .= " AND ".$extra_sql;
  428. }
  429. $result=$pdo->query($sql);
  430. if( false == $result ) {
  431. return array();
  432. }
  433. $result_array = $result->fetchAll();
  434. $result->closeCursor();
  435. if( false == $result_array ) {
  436. return array();
  437. }
  438. $return_array = array();
  439. foreach( $result_array as $result_info ) {
  440. if( !isset($return_array[$result_info["ticket_id"]]) ) {
  441. $return_array[$result_info["ticket_id"]] = $result_info;
  442. } else if( $result_info["supplier_id"] != 164 ) {
  443. $return_array[$result_info["ticket_id"]] = $result_info;
  444. }
  445. }
  446. return $return_array;
  447. }
  448. function getCombiedLineProd( $pdo ) {
  449. $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";
  450. $result=$pdo->query($sql);
  451. if( false == $result ) {
  452. return false;
  453. }
  454. $result_array = $result->fetchAll();
  455. $result->closeCursor();
  456. if( false == $result_array ) {
  457. return false;
  458. }
  459. $return_array = array();
  460. foreach( $result_array as $combied_info ) {
  461. $combied_line_txt = $combied_info["prod_id_list"];
  462. $combied_line_array = explode("_", $combied_line_txt);
  463. $combied_time_txt = $combied_info["prod_time_list"];
  464. $combied_time_array = explode("_", $combied_time_txt);
  465. $combied_price_txt = $combied_info["prod_price_list"];
  466. $combied_price_array = explode("_", $combied_price_txt);
  467. if( !isset($return_array[$combied_line_array[0]]) ) {
  468. $return_array[$combied_line_array[0]] = array();
  469. }
  470. if( !isset($return_array[$combied_line_array[0]][$combied_time_array[0]]) ) {
  471. $return_array[$combied_line_array[0]][$combied_time_array[0]] = array();
  472. }
  473. $combied_info_tmp = array();
  474. $combied_info_tmp["all_price"] = $combied_info["all_price"];
  475. $combied_info_tmp["line_id1"] = $combied_line_array[0];
  476. $combied_info_tmp["start_minutes1"] = $combied_time_array[0];
  477. $combied_info_tmp["line_id2"] = $combied_line_array[1];
  478. $combied_info_tmp["start_minutes2"] = $combied_time_array[1];
  479. $combied_info_tmp["price1"] = $combied_price_array[0];
  480. $combied_info_tmp["price2"] = $combied_price_array[1];
  481. $return_array[$combied_line_array[0]][$combied_time_array[0]][] = $combied_info_tmp;
  482. }
  483. return $return_array;
  484. }
  485. 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 ) {
  486. $combied_rule_array = $combied_line_array[$row_info["PROD_ID"]][$row_info["RUN_MINUTES"]];
  487. foreach( $combied_rule_array as $combied_rule_info ) {
  488. $second_line_id = $combied_rule_info["line_id2"];
  489. $second_start_minutes = $combied_rule_info["start_minutes2"];
  490. $combied_full_price = $combied_rule_info["all_price"];
  491. if( !isset($all_line_run_array[$second_line_id][$row_info["RUN_DATE"]][$second_start_minutes]) ) {
  492. continue;
  493. }
  494. $second_run_id_array = $all_line_run_array[$second_line_id][$row_info["RUN_DATE"]][$second_start_minutes];
  495. 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);
  496. }
  497. }
  498. 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) {
  499. foreach( $second_run_id_array as $second_run_id ) {
  500. $sencond_run_info = $all_run_array[$second_run_id];
  501. if( $sencond_run_info["RUN_STATUS"] != 138 || $sencond_run_info["RUN_DATE"] < $row_info["RUN_DATE"] || !isset($run_bus_array[$second_run_id])) {
  502. continue;
  503. }
  504. $total_count_b = 0;
  505. $saled_count_b = 0;
  506. foreach ( $run_bus_array[$second_run_id] as $run_bus_info) {
  507. $total_count_b += $run_bus_info["SEAT_COUNT"];
  508. $saled_count_b += $run_bus_info["SALED_COUNT"];
  509. }
  510. $remain_count_b = $total_count_b > ($saled_count_b + 3) ? $total_count_b - ($saled_count_b + 3) : 0;
  511. $remain_count_b = $remain_count_b > $base_info["remain_count"] ? $base_info["remain_count"] : $remain_count_b;
  512. $second_tickets_array = $run_prod_array[$second_run_id];
  513. foreach( $second_tickets_array as $second_tickets_info ) {
  514. $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 );
  515. $combined_array[] = $combined_base_info;
  516. }
  517. }
  518. }
  519. 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 ) {
  520. $second_tickets_id = $second_tickets_info["PROD_ID"];
  521. $combined_base_info = $base_info;
  522. $combined_base_info["run_code"] = $row_info["RUN_ID"] . "_" . $tickets_info["TICKET_ID"] . "_" . $second_run_id . "_" . $second_tickets_id;
  523. $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);
  524. $combined_base_info["full_price"] = $combied_full_price;
  525. $combined_base_info["remain_count"] = $remain_count_b;
  526. $combined_base_info["saled_count"] = $combined_base_info["total_count"] - $combined_base_info["remain_count"];
  527. $combined_base_info["bus_no"] = "以实际情况为准1";
  528. $start_end_info2 = $start_end_array[$second_tickets_id];
  529. $combined_base_info["end_city"] = $city_array[$start_end_info2["END_STATION_AREA_ID"]]["AREA_NAME"];
  530. $combined_base_info["end_res"] = $res_array[$start_end_info2["END_STATION_RES_ID"]]["RES_NAME"];
  531. $combined_base_info["end_time"] = $res_start_time_array[$second_run_id][$start_end_info2["END_STATION_RES_ID"]];
  532. if( !isset($combined_base_info["end_date"]) ) {
  533. $combined_base_info["end_date"] = $combined_base_info["start_date"];
  534. }
  535. $cost_time = strtotime($combined_base_info["end_date"] ." ".$combined_base_info["end_time"] ) - strtotime($combined_base_info["start_date"] ." ".$combined_base_info["start_time"] );
  536. $combined_base_info["cost_time"] = ceil($cost_time/60);
  537. $combined_base_info["disp_run_code"] = "ZZ".$tickets_info["TICKET_ID"].substr($row_info["RUN_ID"],3,3)."C".$second_tickets_id;
  538. $combined_base_info["extra_description"] = "抵达".$base_info["end_res"]."后零距离换乘";
  539. $combined_base_info["compain_tag"] = "需转驳";
  540. $combined_base_info["compain_detail"] = "抵达".$base_info["end_res"]."后零距离换乘";
  541. $combined_base_info["description"] = "";
  542. return $combined_base_info;
  543. }