|
- <?php
-
- namespace backend\modules\api\controllers;
-
- use backend\modules\api\models\OperaTickets;
- use backend\modules\api\models\RunMain;
- use backend\modules\api\models\RunProd;
- use backend\modules\api\models\OutsideTicket;
- use backend\modules\api\models\OperaTicketsDistrib;
- use backend\modules\api\models\OperaTicketsAgent;
- use backend\modules\api\models\RunStock;
- use yii\web\Controller;
- use Yii;
-
- class NfxController extends Controller
- {
- public $enableCsrfValidation = false;
-
- /**
- * Function Description:入口
- * Function Name: actionIndex
- *
- * @return string
- *
- * @author Redstop
- */
- public function actionIndex()
- {
- $request = Yii::$app->request;
- $action = $request->post('action');
- $func = 'action';
- $action = explode('_', $action);
- foreach ($action as $key => $vel) {
- $func .= ucfirst($vel);
- }
- //check 验证码
- if ($this->actionCheckAuthCode() == false) {
- $json = ['code' => 1, 'info' => '验证身份失败'];
- return json_encode($json);
- }
-
- if ($action === false || method_exists($this, $func) == false) {
- $json = ['code' => 1, 'info' => '必要参数缺失'];
- return json_encode($json);
- }
- return $this->$func();
- }
-
- /**
- * Function Description:验证验证码
- * Function Name: actionCheckAuthCode
- *
- * @return string
- *
- * @author Redstop
- */
- public function actionCheckAuthCode()
- {
- $user = Yii::$app->request->post('user');//用户名
- $user_key = Yii::$app->request->post('user_key');//用户key
- $request_time = Yii::$app->request->post('request_time');//用户key
- $auth_code = Yii::$app->request->post('auth_code');//用户key
- //加密规则为 request_time(linux时间戳)前三位作为种子,调用srand生成随机数 + user + user_key,进行MD5加密后,换成大写字母
- $real_auth_code = strtoupper(md5(substr($request_time, 0, 3) . "|" . $user . "|" . $user_key . "|" . substr($request_time, strlen($request_time) - 3, 3)));
- if ($real_auth_code == $auth_code) {
- return true;
- }
- return false;
- }
-
- /**
- * Function Description:获取今后三个月的可售票种信息
- * Function Name: actionGetTicketArray
- *
- *
- * @return string
- *
- * @author Redstop
- */
- public function actionGetTicketArray()
- {
- $opera_ticket = new OperaTickets();
- $opera_ticket_distrib = new OperaTicketsDistrib();
- $opera_ticket_agent = new OperaTicketsAgent();
- $run_prod = new RunProd();
- $run_main = new RunMain();
-
- #region 获取参数
- $user_id = Yii::$app->request->post('user_id','772');//用户id
- #endregion
-
- $start_date = date("Y-m-d");//开始日期
- $end_date = date("Y-m-d", strtotime("+3 months"));//结束日期
-
- //1.从run_main中取得今后三个月可出售的班次,然后获取相关票种(单程),并将包含上下车站点及POI的票种信息返回
- $run_id_arr = $run_main->getRunListByDate($start_date, $end_date);
-
- //2.从run_prod中获取所有的票种id
- $ticket_id_arr = $run_prod->getTicketIdListByRunId($run_id_arr);
-
- //3.从opera_ticket_distrib中获取所有例外的票种id
- $ticket_id_arr2 = $opera_ticket_distrib->getUnsellTicketListByUserId($user_id);
-
- //4.从opera_ticket_agent中获取所有可售线路id
- $ticket_id_arr3 = $opera_ticket_agent->getTicketListByUserId($user_id);
-
- // $ticket_id_arr2 = false;
- // $ticket_id_arr3 = false;
- //5.获取票种详情列表
- $ticket_list_info = $opera_ticket->getTicketListByTicketId($ticket_id_arr, $user_id, $ticket_id_arr2, $ticket_id_arr3 );
-
- $json = ['code' => 0, 'info' => '获取数据成功', 'data' => $ticket_list_info];
- return json_encode($json);
- }
-
- /**
- * Function Description:通过出发日期和票种id获取班次数据
- * Function Name: actionGetRunArray
- *
- *
- * @author 张帅
- */
- public function actionGetRunArray()
- {
- $run_main = new RunMain();
-
- #region 获取参数
- $run_date = Yii::$app->request->post('run_date');//出发日期
- $ticket_id = Yii::$app->request->post('ticket_id');//票种id
- #endregion
-
- $run_list = $run_main->getRunListByDateTicket($run_date, $ticket_id);
-
- $json = ['code' => 0, 'info' => '获取数据成功', 'data' => $run_list];
- return json_encode($json);
- }
-
- /**
- * Function Description:通过出发日期和线路id获取可售票种信息
- * Function Name: actionGetRunTicketArrayByDateLine
- *
- * @return string
- *
- * @author 张帅
- */
- public function actionGetRunTicketArrayByDateLine()
- {
- $run_main = new RunMain();
- $run_stock = new RunStock();
-
- #region 获取参数
- $run_date = Yii::$app->request->post('run_date');//出发日期
- $line_id = Yii::$app->request->post('line_id');//线路id
- #endregion
-
- #region 1.从run_prod中获取所有的票种id
- $run_ticket_arr = $run_main->getRunTicketIdListByRunId($run_date, $line_id);
- if (count($run_ticket_arr) == 0) {
- $json = ['code' => 0, 'info' => '获取数据成功', 'data' => $run_ticket_arr];
- return json_encode($json);
- }
- #endregion
-
- #new 3.需要新增站点时间 关联run_station
- $run_station_time = $run_main->getStationStartTime($run_ticket_arr);
- if (count($run_station_time)==0){
- $json = ['code' => 0, 'info' => '获取数据成功', 'data' => $run_ticket_arr];
- return json_encode($json);
- }
-
-
- #region 2.获取票种库存
- $run_id_arr = [];
- $run_date_arr = [];
- foreach ($run_ticket_arr as $key => $vel) {
- if (!isset($run_id_arr['run_id'])) {
- $run_id_arr[$vel['run_id']] = $vel['run_id'];
- }
- }
- $stock_list = $run_stock->getStockListByRunId($run_id_arr);
- #endregion
-
- #region 3.处理数据
- $stock_list = $run_stock->execRunTicketArray($run_ticket_arr, $stock_list,$run_station_time);
- #endregion
-
- $json = ['code' => 0, 'info' => '获取数据成功', 'data' => $stock_list];
- return json_encode($json);
- }
-
-
- /**
- * Function Description:通过出发日期和出发地目的地获取可售票种信息
- * Function Name: actionGetRunTicketArrayByDateLine
- *
- * @return string
- *
- * @author 张帅
- */
- public function actionGetRunTicketArrayByDateArea()
- {
- $run_main = new RunMain();
- $run_stock = new RunStock();
-
- #region 获取参数
- $run_date = Yii::$app->request->post('run_date','');//出发日期
- $start_area = Yii::$app->request->post('start_area_id','');//出发站点
- $end_area = Yii::$app->request->post('end_area_id','');//结束战斗
- $user_id = Yii::$app->request->post('user_id','');//用户ID
- $supplier_id = Yii::$app->request->post('org_id','164');//渠道来源编号
- #endregion
-
- #region 1.从run_prod中获取所有的票种id
- $run_ticket_arr = $run_main->getRunTicketIdListByArea($run_date, $start_area, $end_area,$supplier_id,$user_id);
- if (count($run_ticket_arr) == 0) {
- $json = ['code' => 0, 'info' => '获取数据成功', 'data' => $run_ticket_arr];
- return json_encode($json);
- }
- #endregion
-
- #new 3.需要新增站点时间 关联run_station
- $run_station_time = $run_main->getStationStartTime($run_ticket_arr);
- if (count($run_station_time)==0){
- $json = ['code' => 0, 'info' => '获取数据成功', 'data' => $run_ticket_arr];
- return json_encode($json);
- }
-
-
- #region 2.获取票种库存
- $run_id_arr = [];
- foreach ($run_ticket_arr as $key => $vel) {
- if (!isset($run_id_arr['run_id'])) {
- $run_id_arr[$vel['run_id']] = $vel['run_id'];
- }
- }
- $stock_list = $run_stock->getStockListByRunId($run_id_arr);
- #endregion
-
- #region 3.处理数据
- $stock_list = $run_stock->execRunTicketArray($run_ticket_arr, $stock_list,$run_station_time);
- #endregion
-
- $json = ['code' => 0, 'info' => '获取数据成功', 'data' => $stock_list];
- return json_encode($json);
- }
-
- /**
- * Function Description:通过票种ID获取未来三个月内可售票种日期
- * Function Name: actionGetTicketAvailableDateArray
- *
- * @return string
- *
- * @author 邱颂
- */
- public function actionGetTicketAvailableDateArray() {
- $run_main = new RunMain();
-
- #region 获取参数
- $ticket_id = Yii::$app->request->post('ticket_id');//票种id
- #endregion
-
- $start_date = date("Y-m-d");
- $end_date = date("Y-m-d", strtotime("+3 months"));
- $run_list = $run_main->getRunListBySnEDateTicket($start_date, $end_date, $ticket_id);
- $date_array = array();
- foreach ( $run_list as $run_info ){
- $date_array[] = $run_info["start_date"];
- }
- //数组去重且排序---2017-09-26 lmn
- $date_array=array_unique($date_array);
- sort($date_array);
- $json = ['code' => 0, 'info' => '获取数据成功', 'data' => $date_array];
- return json_encode($json);
- }
-
-
- /**
- * Function Description:通过出发地POI和目的地POI获取未来三个月内可售票种日期
- * Function Name: actionGetAreaAvailableDateArray
- *
- * @return string
- *
- * @author 邱颂
- */
- public function actionGetAreaAvailableDateArray()
- {
- $run_main = new RunMain();
- $run_stock = new RunStock();
-
- #region 获取参数
- $line_id = Yii::$app->request->post('line_id', 0);//线路id
- $start_area = Yii::$app->request->post('start_area_id', 0);//线路id
- $end_area = Yii::$app->request->post('end_area_id', 0);//线路id
- #endregion
-
- #region 1.从run_prod中获取所有的票种id
- $start_date = date("Y-m-d");
- $end_date = date("Y-m-d", strtotime("+3 months"));
- $run_ticket_arr = $run_main->getRunTicketIdListByAreaNDate($start_date, $end_date, $start_area, $end_area, $line_id);
- if (count($run_ticket_arr) == 0) {
- $json = ['code' => 0, 'info' => '获取数据成功', 'data' => $run_ticket_arr];
- return json_encode($json);
- }
- #endregion
-
- #region 2.获取票种库存
- $run_id_arr = [];
- $run_date_arr = [];
- foreach ($run_ticket_arr as $key => $vel) {
- if (!isset($run_id_arr['run_id'])) {
- $run_id_arr[$vel['run_id']] = $vel['run_id'];
- }
- if (!isset($run_date_arr['run_id'])) {
- $run_date_arr[$vel['run_id']] = $vel['run_date'];
- }
- }
- $stock_list = $run_stock->getStockListByRunId($run_id_arr);
- #endregion
-
- $return_date = array();
- foreach( $stock_list as $stock_info ) {
- if( ($stock_info["total_count"] - $stock_info["saled_count"]) > 3 ) {
- if( !in_array($run_date_arr[$stock_info["run_id"]], $return_date ) ) {
- $return_date[] = $run_date_arr[$stock_info["run_id"]];
- }
- }
- }
-
- sort($return_date);
- $json = ['code' => 0, 'info' => '获取数据成功', 'data' => $return_date];
- return json_encode($json);
- }
-
- /**
- * Function Description:根据起始poi终点poi 和日期获取 当天可用线路及班次出发时间
- * Function Name: actionGetRunLineByPoi
- *
- * @return string
- *
- * @author 娄梦宁
- */
- public function actionGetRunLineByPoi(){
- #region 获取参数
- $start_poi = Yii::$app->request->post('start_poi', 0);//起始站点poi
- $end_poi = Yii::$app->request->post('end_poi', 0);//终点站点poi
- $date = Yii::$app->request->post('date', 0);//出发日期
- #endregion
- $run_main = new RunMain();
- #region 1.从run_prod中获取所有的票种id
- $run_line_arr = $run_main->getRunLineByArea($date, $start_poi, $end_poi);
- $json = ['code' => 0, 'info' => '获取数据成功', 'data' => $run_line_arr];
- return json_encode($json);
- #endregion
- }
-
- /***************************************************************************************/
- /* 门票接口(迪士尼和狮子王专用) */
- /* */
- /***************************************************************************************/
- /**
- * Function Description:获取指定门票最低价格日历表
- * Function Name: actionCheckAuthCode
- *
- * @return string
- *
- * @author Redstop
- */
- public function actionGateTicketMiniValue()
- {
- #region 获取参数
- $ticket_code = Yii::$app->request->post('sign');
- #endregion
- $outside_ticket = new OutsideTicket();
- $return_array = $outside_ticket->getTicketMiniValueRun($ticket_code);
- $json = ['code' => 0, 'info' => '获取数据成功', 'list' => $return_array];
- return json_encode($json);
- }
-
- /**
- * Function Description:获取指定门票制定日期价格
- * Function Name: actionCheckAuthCode
- *
- * @return string
- *
- * @author Redstop
- */
- public function actionGateTicketDateRun()
- {
- #region 获取参数
- $ticket_code = Yii::$app->request->post('sign');
- $ticket_date = Yii::$app->request->post('date');
- #endregion
- $outside_ticket = new OutsideTicket();
- $return_array = $outside_ticket->getTicketDateRun($ticket_code, $ticket_date);
- $return_list = array();
- foreach( $return_array as $row_info ) {
- if( $row_info["is_onsale"] == 0 ) {
- $row_info["ticket_num"] = 0;
- }
- $return_list[] = $row_info;
- }
-
- $json = ['code' => 0, 'info' => '获取数据成功', 'list' => $return_list];
- return json_encode($json);
- }
-
- /**
- * Function Description:获取所有门票数据
- * Function Name: actionCheckAuthCode
- *
- * @return string
- *
- * @author Redstop
- */
- public function actionGateTicketAll()
- {
- $outside_ticket = new OutsideTicket();
- $return_array = $outside_ticket->getTicketAll();
- $ticket_array = array();
- foreach ($return_array as $ticket_info) {
- $ticket_info["prod_code"] = $ticket_info["prod_code"] == "DSNSZW" ? $ticket_info["prod_code"] : $ticket_info["prod_id"];
-
- $ticket_info["prod_code"] = $ticket_info["prod_id"];
- if ($ticket_info["parent_id"] == 0) {
- $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());
- } else {
- $parent_id = $ticket_info["parent_id"];
- $sub_ticket_info = array("prod_id" => $ticket_info["prod_id"], "prod_name" => $ticket_info["prod_name"]);
- $ticket_array[$parent_id]["sub_ticket"][] = $sub_ticket_info;
- }
- }
-
-
- $return_array = array();
- foreach ($ticket_array as $ticket_info) {
- $prod_code = $ticket_info["sign"];
- if (strlen($prod_code) <= 0) $prod_code = $ticket_info["prod_id"];
- if ($prod_code == "DSNSZW") {
- //狮子王特殊对应
- $ticket_info_tmp = $ticket_info;
- $ticket_info_tmp["name"] = $ticket_info["name"] . " 13:30场";
- $return_array[$ticket_info["sign"] . "_1330"] = $ticket_info_tmp;
- $ticket_info_tmp["sign"] = $ticket_info["sign"] . "_1330";
- $ticket_info_tmp = $ticket_info;
- $ticket_info_tmp["name"] = $ticket_info["name"] . " 15:00场";
- $ticket_info_tmp["sign"] = $ticket_info["sign"] . "_1500";
- $return_array[$ticket_info["sign"] . "_1500"] = $ticket_info_tmp;
- $ticket_info_tmp = $ticket_info;
- $ticket_info_tmp["sign"] = $ticket_info["sign"] . "_1900";
- $ticket_info_tmp["name"] = $ticket_info["name"] . " 19:00场";
- $return_array[$ticket_info["sign"] . "_1900"] = $ticket_info_tmp;
- } else {
- $return_array[$ticket_info["sign"]] = $ticket_info;
- }
- }
-
- $json = ['code' => 0, 'info' => '获取数据成功', 'list' => $return_array];
- return json_encode($json);
- }
-
- }
|