Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 
 

462 rader
17 KiB

  1. <?php
  2. namespace backend\modules\api\controllers;
  3. use backend\modules\api\models\OperaTickets;
  4. use backend\modules\api\models\RunMain;
  5. use backend\modules\api\models\RunProd;
  6. use backend\modules\api\models\OutsideTicket;
  7. use backend\modules\api\models\OperaTicketsDistrib;
  8. use backend\modules\api\models\OperaTicketsAgent;
  9. use backend\modules\api\models\RunStock;
  10. use yii\web\Controller;
  11. use Yii;
  12. class NfxController extends Controller
  13. {
  14. public $enableCsrfValidation = false;
  15. /**
  16. * Function Description:入口
  17. * Function Name: actionIndex
  18. *
  19. * @return string
  20. *
  21. * @author Redstop
  22. */
  23. public function actionIndex()
  24. {
  25. $request = Yii::$app->request;
  26. $action = $request->post('action');
  27. $func = 'action';
  28. $action = explode('_', $action);
  29. foreach ($action as $key => $vel) {
  30. $func .= ucfirst($vel);
  31. }
  32. //check 验证码
  33. if ($this->actionCheckAuthCode() == false) {
  34. $json = ['code' => 1, 'info' => '验证身份失败'];
  35. return json_encode($json);
  36. }
  37. if ($action === false || method_exists($this, $func) == false) {
  38. $json = ['code' => 1, 'info' => '必要参数缺失'];
  39. return json_encode($json);
  40. }
  41. return $this->$func();
  42. }
  43. /**
  44. * Function Description:验证验证码
  45. * Function Name: actionCheckAuthCode
  46. *
  47. * @return string
  48. *
  49. * @author Redstop
  50. */
  51. public function actionCheckAuthCode()
  52. {
  53. $user = Yii::$app->request->post('user');//用户名
  54. $user_key = Yii::$app->request->post('user_key');//用户key
  55. $request_time = Yii::$app->request->post('request_time');//用户key
  56. $auth_code = Yii::$app->request->post('auth_code');//用户key
  57. //加密规则为 request_time(linux时间戳)前三位作为种子,调用srand生成随机数 + user + user_key,进行MD5加密后,换成大写字母
  58. $real_auth_code = strtoupper(md5(substr($request_time, 0, 3) . "|" . $user . "|" . $user_key . "|" . substr($request_time, strlen($request_time) - 3, 3)));
  59. if ($real_auth_code == $auth_code) {
  60. return true;
  61. }
  62. return false;
  63. }
  64. /**
  65. * Function Description:获取今后三个月的可售票种信息
  66. * Function Name: actionGetTicketArray
  67. *
  68. *
  69. * @return string
  70. *
  71. * @author Redstop
  72. */
  73. public function actionGetTicketArray()
  74. {
  75. $opera_ticket = new OperaTickets();
  76. $opera_ticket_distrib = new OperaTicketsDistrib();
  77. $opera_ticket_agent = new OperaTicketsAgent();
  78. $run_prod = new RunProd();
  79. $run_main = new RunMain();
  80. #region 获取参数
  81. $user_id = Yii::$app->request->post('user_id','772');//用户id
  82. #endregion
  83. $start_date = date("Y-m-d");//开始日期
  84. $end_date = date("Y-m-d", strtotime("+3 months"));//结束日期
  85. //1.从run_main中取得今后三个月可出售的班次,然后获取相关票种(单程),并将包含上下车站点及POI的票种信息返回
  86. $run_id_arr = $run_main->getRunListByDate($start_date, $end_date);
  87. //2.从run_prod中获取所有的票种id
  88. $ticket_id_arr = $run_prod->getTicketIdListByRunId($run_id_arr);
  89. //3.从opera_ticket_distrib中获取所有例外的票种id
  90. $ticket_id_arr2 = $opera_ticket_distrib->getUnsellTicketListByUserId($user_id);
  91. //4.从opera_ticket_agent中获取所有可售线路id
  92. $ticket_id_arr3 = $opera_ticket_agent->getTicketListByUserId($user_id);
  93. // $ticket_id_arr2 = false;
  94. // $ticket_id_arr3 = false;
  95. //5.获取票种详情列表
  96. $ticket_list_info = $opera_ticket->getTicketListByTicketId($ticket_id_arr, $user_id, $ticket_id_arr2, $ticket_id_arr3 );
  97. $json = ['code' => 0, 'info' => '获取数据成功', 'data' => $ticket_list_info];
  98. return json_encode($json);
  99. }
  100. /**
  101. * Function Description:通过出发日期和票种id获取班次数据
  102. * Function Name: actionGetRunArray
  103. *
  104. *
  105. * @author 张帅
  106. */
  107. public function actionGetRunArray()
  108. {
  109. $run_main = new RunMain();
  110. #region 获取参数
  111. $run_date = Yii::$app->request->post('run_date');//出发日期
  112. $ticket_id = Yii::$app->request->post('ticket_id');//票种id
  113. #endregion
  114. $run_list = $run_main->getRunListByDateTicket($run_date, $ticket_id);
  115. $json = ['code' => 0, 'info' => '获取数据成功', 'data' => $run_list];
  116. return json_encode($json);
  117. }
  118. /**
  119. * Function Description:通过出发日期和线路id获取可售票种信息
  120. * Function Name: actionGetRunTicketArrayByDateLine
  121. *
  122. * @return string
  123. *
  124. * @author 张帅
  125. */
  126. public function actionGetRunTicketArrayByDateLine()
  127. {
  128. $run_main = new RunMain();
  129. $run_stock = new RunStock();
  130. #region 获取参数
  131. $run_date = Yii::$app->request->post('run_date');//出发日期
  132. $line_id = Yii::$app->request->post('line_id');//线路id
  133. #endregion
  134. #region 1.从run_prod中获取所有的票种id
  135. $run_ticket_arr = $run_main->getRunTicketIdListByRunId($run_date, $line_id);
  136. if (count($run_ticket_arr) == 0) {
  137. $json = ['code' => 0, 'info' => '获取数据成功', 'data' => $run_ticket_arr];
  138. return json_encode($json);
  139. }
  140. #endregion
  141. #new 3.需要新增站点时间 关联run_station
  142. $run_station_time = $run_main->getStationStartTime($run_ticket_arr);
  143. if (count($run_station_time)==0){
  144. $json = ['code' => 0, 'info' => '获取数据成功', 'data' => $run_ticket_arr];
  145. return json_encode($json);
  146. }
  147. #region 2.获取票种库存
  148. $run_id_arr = [];
  149. $run_date_arr = [];
  150. foreach ($run_ticket_arr as $key => $vel) {
  151. if (!isset($run_id_arr['run_id'])) {
  152. $run_id_arr[$vel['run_id']] = $vel['run_id'];
  153. }
  154. }
  155. $stock_list = $run_stock->getStockListByRunId($run_id_arr);
  156. #endregion
  157. #region 3.处理数据
  158. $stock_list = $run_stock->execRunTicketArray($run_ticket_arr, $stock_list,$run_station_time);
  159. #endregion
  160. $json = ['code' => 0, 'info' => '获取数据成功', 'data' => $stock_list];
  161. return json_encode($json);
  162. }
  163. /**
  164. * Function Description:通过出发日期和出发地目的地获取可售票种信息
  165. * Function Name: actionGetRunTicketArrayByDateLine
  166. *
  167. * @return string
  168. *
  169. * @author 张帅
  170. */
  171. public function actionGetRunTicketArrayByDateArea()
  172. {
  173. $run_main = new RunMain();
  174. $run_stock = new RunStock();
  175. #region 获取参数
  176. $run_date = Yii::$app->request->post('run_date','');//出发日期
  177. $start_area = Yii::$app->request->post('start_area_id','');//出发站点
  178. $end_area = Yii::$app->request->post('end_area_id','');//结束战斗
  179. $user_id = Yii::$app->request->post('user_id','');//用户ID
  180. $supplier_id = Yii::$app->request->post('org_id','164');//渠道来源编号
  181. #endregion
  182. #region 1.从run_prod中获取所有的票种id
  183. $run_ticket_arr = $run_main->getRunTicketIdListByArea($run_date, $start_area, $end_area,$supplier_id,$user_id);
  184. if (count($run_ticket_arr) == 0) {
  185. $json = ['code' => 0, 'info' => '获取数据成功', 'data' => $run_ticket_arr];
  186. return json_encode($json);
  187. }
  188. #endregion
  189. #new 3.需要新增站点时间 关联run_station
  190. $run_station_time = $run_main->getStationStartTime($run_ticket_arr);
  191. if (count($run_station_time)==0){
  192. $json = ['code' => 0, 'info' => '获取数据成功', 'data' => $run_ticket_arr];
  193. return json_encode($json);
  194. }
  195. #region 2.获取票种库存
  196. $run_id_arr = [];
  197. foreach ($run_ticket_arr as $key => $vel) {
  198. if (!isset($run_id_arr['run_id'])) {
  199. $run_id_arr[$vel['run_id']] = $vel['run_id'];
  200. }
  201. }
  202. $stock_list = $run_stock->getStockListByRunId($run_id_arr);
  203. #endregion
  204. #region 3.处理数据
  205. $stock_list = $run_stock->execRunTicketArray($run_ticket_arr, $stock_list,$run_station_time);
  206. #endregion
  207. $json = ['code' => 0, 'info' => '获取数据成功', 'data' => $stock_list];
  208. return json_encode($json);
  209. }
  210. /**
  211. * Function Description:通过票种ID获取未来三个月内可售票种日期
  212. * Function Name: actionGetTicketAvailableDateArray
  213. *
  214. * @return string
  215. *
  216. * @author 邱颂
  217. */
  218. public function actionGetTicketAvailableDateArray() {
  219. $run_main = new RunMain();
  220. #region 获取参数
  221. $ticket_id = Yii::$app->request->post('ticket_id');//票种id
  222. #endregion
  223. $start_date = date("Y-m-d");
  224. $end_date = date("Y-m-d", strtotime("+3 months"));
  225. $run_list = $run_main->getRunListBySnEDateTicket($start_date, $end_date, $ticket_id);
  226. $date_array = array();
  227. foreach ( $run_list as $run_info ){
  228. $date_array[] = $run_info["start_date"];
  229. }
  230. //数组去重且排序---2017-09-26 lmn
  231. $date_array=array_unique($date_array);
  232. sort($date_array);
  233. $json = ['code' => 0, 'info' => '获取数据成功', 'data' => $date_array];
  234. return json_encode($json);
  235. }
  236. /**
  237. * Function Description:通过出发地POI和目的地POI获取未来三个月内可售票种日期
  238. * Function Name: actionGetAreaAvailableDateArray
  239. *
  240. * @return string
  241. *
  242. * @author 邱颂
  243. */
  244. public function actionGetAreaAvailableDateArray()
  245. {
  246. $run_main = new RunMain();
  247. $run_stock = new RunStock();
  248. #region 获取参数
  249. $line_id = Yii::$app->request->post('line_id', 0);//线路id
  250. $start_area = Yii::$app->request->post('start_area_id', 0);//线路id
  251. $end_area = Yii::$app->request->post('end_area_id', 0);//线路id
  252. #endregion
  253. #region 1.从run_prod中获取所有的票种id
  254. $start_date = date("Y-m-d");
  255. $end_date = date("Y-m-d", strtotime("+3 months"));
  256. $run_ticket_arr = $run_main->getRunTicketIdListByAreaNDate($start_date, $end_date, $start_area, $end_area, $line_id);
  257. if (count($run_ticket_arr) == 0) {
  258. $json = ['code' => 0, 'info' => '获取数据成功', 'data' => $run_ticket_arr];
  259. return json_encode($json);
  260. }
  261. #endregion
  262. #region 2.获取票种库存
  263. $run_id_arr = [];
  264. $run_date_arr = [];
  265. foreach ($run_ticket_arr as $key => $vel) {
  266. if (!isset($run_id_arr['run_id'])) {
  267. $run_id_arr[$vel['run_id']] = $vel['run_id'];
  268. }
  269. if (!isset($run_date_arr['run_id'])) {
  270. $run_date_arr[$vel['run_id']] = $vel['run_date'];
  271. }
  272. }
  273. $stock_list = $run_stock->getStockListByRunId($run_id_arr);
  274. #endregion
  275. $return_date = array();
  276. foreach( $stock_list as $stock_info ) {
  277. if( ($stock_info["total_count"] - $stock_info["saled_count"]) > 3 ) {
  278. if( !in_array($run_date_arr[$stock_info["run_id"]], $return_date ) ) {
  279. $return_date[] = $run_date_arr[$stock_info["run_id"]];
  280. }
  281. }
  282. }
  283. sort($return_date);
  284. $json = ['code' => 0, 'info' => '获取数据成功', 'data' => $return_date];
  285. return json_encode($json);
  286. }
  287. /**
  288. * Function Description:根据起始poi终点poi 和日期获取 当天可用线路及班次出发时间
  289. * Function Name: actionGetRunLineByPoi
  290. *
  291. * @return string
  292. *
  293. * @author 娄梦宁
  294. */
  295. public function actionGetRunLineByPoi(){
  296. #region 获取参数
  297. $start_poi = Yii::$app->request->post('start_poi', 0);//起始站点poi
  298. $end_poi = Yii::$app->request->post('end_poi', 0);//终点站点poi
  299. $date = Yii::$app->request->post('date', 0);//出发日期
  300. #endregion
  301. $run_main = new RunMain();
  302. #region 1.从run_prod中获取所有的票种id
  303. $run_line_arr = $run_main->getRunLineByArea($date, $start_poi, $end_poi);
  304. $json = ['code' => 0, 'info' => '获取数据成功', 'data' => $run_line_arr];
  305. return json_encode($json);
  306. #endregion
  307. }
  308. /***************************************************************************************/
  309. /* 门票接口(迪士尼和狮子王专用) */
  310. /* */
  311. /***************************************************************************************/
  312. /**
  313. * Function Description:获取指定门票最低价格日历表
  314. * Function Name: actionCheckAuthCode
  315. *
  316. * @return string
  317. *
  318. * @author Redstop
  319. */
  320. public function actionGateTicketMiniValue()
  321. {
  322. #region 获取参数
  323. $ticket_code = Yii::$app->request->post('sign');
  324. #endregion
  325. $outside_ticket = new OutsideTicket();
  326. $return_array = $outside_ticket->getTicketMiniValueRun($ticket_code);
  327. $json = ['code' => 0, 'info' => '获取数据成功', 'list' => $return_array];
  328. return json_encode($json);
  329. }
  330. /**
  331. * Function Description:获取指定门票制定日期价格
  332. * Function Name: actionCheckAuthCode
  333. *
  334. * @return string
  335. *
  336. * @author Redstop
  337. */
  338. public function actionGateTicketDateRun()
  339. {
  340. #region 获取参数
  341. $ticket_code = Yii::$app->request->post('sign');
  342. $ticket_date = Yii::$app->request->post('date');
  343. #endregion
  344. $outside_ticket = new OutsideTicket();
  345. $return_array = $outside_ticket->getTicketDateRun($ticket_code, $ticket_date);
  346. $return_list = array();
  347. foreach( $return_array as $row_info ) {
  348. if( $row_info["is_onsale"] == 0 ) {
  349. $row_info["ticket_num"] = 0;
  350. }
  351. $return_list[] = $row_info;
  352. }
  353. $json = ['code' => 0, 'info' => '获取数据成功', 'list' => $return_list];
  354. return json_encode($json);
  355. }
  356. /**
  357. * Function Description:获取所有门票数据
  358. * Function Name: actionCheckAuthCode
  359. *
  360. * @return string
  361. *
  362. * @author Redstop
  363. */
  364. public function actionGateTicketAll()
  365. {
  366. $outside_ticket = new OutsideTicket();
  367. $return_array = $outside_ticket->getTicketAll();
  368. $ticket_array = array();
  369. foreach ($return_array as $ticket_info) {
  370. $ticket_info["prod_code"] = $ticket_info["prod_code"] == "DSNSZW" ? $ticket_info["prod_code"] : $ticket_info["prod_id"];
  371. $ticket_info["prod_code"] = $ticket_info["prod_id"];
  372. if ($ticket_info["parent_id"] == 0) {
  373. $ticket_array[$ticket_info["prod_id"]] = array("sign" => $ticket_info["prod_code"], "prod_id" => $ticket_info["prod_id"], "name" => $ticket_info["prod_name"], "sub_ticket" => array());
  374. } else {
  375. $parent_id = $ticket_info["parent_id"];
  376. $sub_ticket_info = array("prod_id" => $ticket_info["prod_id"], "prod_name" => $ticket_info["prod_name"]);
  377. $ticket_array[$parent_id]["sub_ticket"][] = $sub_ticket_info;
  378. }
  379. }
  380. $return_array = array();
  381. foreach ($ticket_array as $ticket_info) {
  382. $prod_code = $ticket_info["sign"];
  383. if (strlen($prod_code) <= 0) $prod_code = $ticket_info["prod_id"];
  384. if ($prod_code == "DSNSZW") {
  385. //狮子王特殊对应
  386. $ticket_info_tmp = $ticket_info;
  387. $ticket_info_tmp["name"] = $ticket_info["name"] . " 13:30场";
  388. $return_array[$ticket_info["sign"] . "_1330"] = $ticket_info_tmp;
  389. $ticket_info_tmp["sign"] = $ticket_info["sign"] . "_1330";
  390. $ticket_info_tmp = $ticket_info;
  391. $ticket_info_tmp["name"] = $ticket_info["name"] . " 15:00场";
  392. $ticket_info_tmp["sign"] = $ticket_info["sign"] . "_1500";
  393. $return_array[$ticket_info["sign"] . "_1500"] = $ticket_info_tmp;
  394. $ticket_info_tmp = $ticket_info;
  395. $ticket_info_tmp["sign"] = $ticket_info["sign"] . "_1900";
  396. $ticket_info_tmp["name"] = $ticket_info["name"] . " 19:00场";
  397. $return_array[$ticket_info["sign"] . "_1900"] = $ticket_info_tmp;
  398. } else {
  399. $return_array[$ticket_info["sign"]] = $ticket_info;
  400. }
  401. }
  402. $json = ['code' => 0, 'info' => '获取数据成功', 'list' => $return_array];
  403. return json_encode($json);
  404. }
  405. }