getCache(); $prod_detail = $cache->get('ZZWX_ProdDetail_' . $pro_cate_id); if (empty($prod_detail['prod_arr'])) { $prod_category = new ProdCategory(); $prod_main = new ProdMain(); $prod_detail = $prod_category->getBusProdDetail($pro_cate_id); //子产品列表 $prod_arr = $prod_main->getProdArr($pro_cate_id); if (count($prod_arr)) { foreach ($prod_arr as $key => $val) { $prod_arr[$key]['prod_price'] = ' -- '; } } $prod_detail['prod_arr'] = $prod_arr; $cache->set('ZZWX_ProdDetail_' . $pro_cate_id, $prod_detail, 60 * 10);//缓存10分钟 } if ($prod_detail['delete_flag'] == 1) { return Util::returnArrEr('该产品已经下架!'); } //获取主线路售卖日期 $getRunDate = static::getLineSaleDate($pro_cate_id, 0, $start_poi, $end_poi); $prod_detail['run_date'] = $getRunDate['data']['list']; return Util::returnArrSu('', $prod_detail); } /** * Des:获取主线路产品库存日历 * Name: getLineSaleDate * @param $pro_cate_id * @param $if_back * @param $start_poi * @param $end_poi * @param $date * @return array * @author 倪宗锋 */ public function getLineSaleDate($pro_cate_id, $if_back, $start_poi = '', $end_poi = '', $date = '') { if (Util::checkPattern('intVal', $pro_cate_id) == false) { return Util::returnArrEr('params error'); } $prodCate = new ProdCategory(); $prodInfo = $prodCate->getBusProdDetail($pro_cate_id); if ($if_back) { if (empty($start_poi) == false && empty($end_poi) == false) {//如果用户设置了其实和终点poi则以用户设置poi为准 $end_area_id = $start_poi; $start_area_id = $end_poi; } else { $end_area_id = $prodInfo['start_area_id'];//站点 起始站POI作为终点站POI $start_area_id = $prodInfo['end_area_id'];//站点 终点站POI作为起始站POI } $return = static::getLineSaleDateFromCs('', $start_area_id, $end_area_id);//获取两个POI之间的班次库存 } else { if (empty($prodInfo['sign'])) { return Util::returnArrEr('该产品已下架!'); } $line_id = $prodInfo['sign'];//线路ID if (empty($start_poi) == false && empty($end_poi) == false) {//如果用户设置了其实和终点poi则以用户设置poi为准 $return = static::getLineSaleDateFromCs($line_id, $start_poi, $end_poi);//获取线路的班次库存 } else { $return = static::getLineSaleDateFromCs($line_id);//获取线路的班次库存 } } //将比今天或者指定日期小的日期剔除 if (empty($return['data']['list']['0']) == false) { if (empty($date)) { $date = date('Y-m-d'); } foreach ($return['data']['list'] as $key => $val) { if (strtotime($val) < strtotime($date)) { unset($return['data']['list'][$key]); } else { break; } } } $return['data']['list'] = array_values($return['data']['list']); return $return; } /** * Des:获取主线路的按日期查询班次及库存 * Name: getLineBusStock * @param $params array * date 出发时间 * pro_cate_id 产品品类ID * if_back 是否返程 * @return array * @author 倪宗锋 */ public static function getLineBusStock($params) { if (Util::checkPattern('intVal', $params['pro_cate_id']) == false) { return Util::returnArrEr('params error!'); } /**从cs获取主线路班次库存*/ $getBusStock = static::getBusStockForLineFromCs($params); if ($getBusStock['flag'] == false) { return $getBusStock; } /**设置前端使用的价格库存*/ $setReturn = static::setTicketReturn($getBusStock['data'], $params); return $setReturn; } /** * Des:从cs获取主线路班次库存 * Name: getBusStockForLineFromCs * @param $params array * @return array * @author 倪宗锋 */ public static function getBusStockForLineFromCs($params) { $date = $params['date']; //如果用户搜索了用户的 if ($params['if_back']) { if (empty($params['start_poi']) == false && empty($params['end_poi']) == false) {//如果用户设置了其实和终点poi则以用户设置poi为准 $end_area_id = $params['start_poi']; $start_area_id = $params['end_poi']; } else { $prodCate = new ProdCategory(); $prodInfo = $prodCate->getBusProdDetail($params['pro_cate_id']); $end_area_id = $prodInfo['start_area_id'];//站点 起始站POI作为终点站POI $start_area_id = $prodInfo['end_area_id'];//站点 终点站POI作为起始站POI } $return = static::getGoBusStockForArea($start_area_id, $end_area_id, $date);//获取两个POI之间的班次库存 } else { $prodCate = new ProdCategory(); $prodInfo = $prodCate->getBusProdDetail($params['pro_cate_id']); if (empty($prodInfo['sign'])) { return Util::returnArrEr('该产品已下架!'); } $line_id = $prodInfo['sign'];//线路ID $return = static::getGoBusStockForLine($line_id, $date);//获取线路的班次库存 /******************************增加售卖截止时间判断*****************************/ $close_sale_time = $prodInfo['close_sale_time']; if ($close_sale_time == '') $close_sale_time = 24; $s_time = strtotime($date) + $close_sale_time * 60 * 60; $curr_h_i = date('H:i:s', $s_time); if ($curr_h_i == '00:00:00') $curr_h_i = '24:00:00'; //1.判断是否存在订单了 $orderMain = new OrderMain(); $param = ["prod_cate_id" => $params['pro_cate_id'], "start_date" => $date, "start_time" => $curr_h_i, "small24" => $close_sale_time < 0]; $boolExist = $orderMain->existOrder($param); if (!$boolExist) { if ($s_time <= time()) { return Util::returnArrEr('该日的班次已截止售卖,请选择其它日期'); } } /******************************华丽的分割线*****************************/ } return $return; } /** * Des:设置获取班次返回值 * Name: setTicketReturn * @param $data * @param $params * @return array * @author 倪宗锋 */ public static function setTicketReturn($data, $params) { /**获取所有去重后的票种ID*/ $ticketIds = static::getTicketByCSTicket($data); if (empty($ticketIds['ticket'])) { return Util::returnArrEr('当前日期票已售完,请选择其他日期!'); } /**获取票种对应的站点数组*/ $bus_ticket = new BusTicket(); $ticketArr = $bus_ticket->getTicketAndLineByIDs($ticketIds['ticket'], $params); foreach ($ticketIds['runBusArr'] as $key => $val) { $ticketIds['runBusArr'][$key]['start_station_list'] = static::getBusArrBYTicketList($val['ticket_list'], $ticketArr, $params['date']); unset($ticketIds['runBusArr'][$key]['ticket_list']); if (count($ticketIds['runBusArr'][$key]['start_station_list']) <= 0) {//如果没有可选站点则 删除该班次 unset($ticketIds['runBusArr'][$key]); continue; } $ticketIds['runBusArr'][$key]['run_time'] = $ticketIds['runBusArr'][$key]['start_station_list'][0]['start_res_time'];//第一个有效站点的时间作为班次的时间 foreach ($ticketIds['runBusArr'][$key]['start_station_list'] as $start_station_val) { if (strtotime($start_station_val['start_res_time']) <= strtotime($ticketIds['runBusArr'][$key]['run_time'])) { $ticketIds['runBusArr'][$key]['run_time'] = $start_station_val['start_res_time']; } } // if (empty($params['run_time']) == false && $params['run_time'] != $ticketIds['runBusArr'][$key]['run_time']) { // unset($ticketIds['runBusArr'][$key]); // } } ksort($ticketIds['runBusArr']); if (empty($ticketIds['runBusArr'])) { return Util::returnArrEr('没有库存,请重选日期'); } return Util::returnArrSu('', ['station_list' => array_values($ticketIds['runBusArr'])]); } /** * Des:凭借前端班次数组 * Name: getBusArrBYTicketList * @param $ticketList * @param $ticketArr * @param $date * @return array * @author 倪宗锋 */ public static function getBusArrBYTicketList($ticketList, $ticketArr, $date) { $theArr = []; foreach ($ticketList as $key => $val) { /**判断时间*/ $stat_time = strtotime($date . ' ' . $val['start_time'] . ':00'); if ($stat_time <= time()) { continue; } foreach ($ticketArr as $tkey => $tVal) { if (isset($tVal['end_station_list'][$key])) { $sArr = []; if (empty($theArr[$tkey])) { $theArr[$tkey]['start_res_id'] = $tVal['start_res_id']; $theArr[$tkey]['start_res_name'] = $tVal['start_res_name']; if (isset($val['prod_num'])) { $theArr[$tkey]['start_res_time'] = $val['start_time']; } else {//兼容之前的版本 $theArr[$tkey]['start_res_time'] = '00:00:00'; } $theArr[$tkey]['end_station_list'] = []; } $sArr['station_id'] = $tVal['end_station_list'][$key]['end_res_id']; $sArr['station_name'] = $tVal['end_station_list'][$key]['end_res_name']; $sArr['pro_cate_id'] = $tVal['end_station_list'][$key]['pro_cate_id']; if (isset($val['prod_num'])) { $sArr['count'] = $val['prod_num']; $sArr['end_res_time'] = $val['end_time']; } else {//兼容之前的版本 $sArr['count'] = $val; $sArr['end_res_time'] = '00:00'; } $theArr[$tkey]['end_station_list'][] = $sArr; } } } return array_values($theArr); } /** * Des:获取TICKET字符串 * Name: getTicketByCSTicket * @param $busArr * @return array * @author 倪宗锋 */ public static function getTicketByCSTicket($busArr) { $ticketArr = []; $runBusArr = []; foreach ($busArr as $val) { if (count($val['ticket_list']) == 0) { continue; } $cnt = 0; foreach ($val['ticket_list'] as $key => $tiVal) { if ($tiVal > 0) { $cnt++; $ticketArr[$key] = $key;//去重保存 } } if ($cnt) {//没有库存的不保存 $runBusArr[$val['run_time']] = $val; } } return ['ticket' => array_values($ticketArr), 'runBusArr' => $runBusArr]; } /** * Des:获取新路某天的各班次及票库存数据 * Name: getGoBusStockForLine * @param $line_id * @param $date * @return array * @author 倪宗锋 */ public static function getGoBusStockForLine($line_id, $date) { $time = time(); $siteConfig = Util::getSiteConfig(); $send_data = [ 'auth_code' => Util::authCodeForCs($time), 'user_key' => $siteConfig['adm_user_key'], 'user' => $siteConfig['adm_user'], 'user_id' => $siteConfig['adm_user_id'], 'request_time' => $time, 'action' => 'get_run_ticket_array_by_date_line', 'line_id' => $line_id, 'run_date' => $date, 'org_id' => $siteConfig['adm_source_id'] ]; $curlInterface = new CurlInterface($send_data, 4); $curlInterface->setBaseUrl(''); $ticket_arr_cs = $curlInterface->execute($siteConfig['adm_host1'] . '/api/nfx', 'POST'); if ($ticket_arr_cs['code'] == 0) { return Util::returnArrSu('', $ticket_arr_cs['data']); } return Util::returnArrEr('当前日期所有票已售完!'); } /** * Des:获取新路某天的各班次及票库存数据 * Name: getGoBusStockForLine * @param $start_area_id * @param $end_area_id * @param $date * @return array * @author 倪宗锋 */ public static function getGoBusStockForArea($start_area_id, $end_area_id, $date) { $time = time(); $siteConfig = Util::getSiteConfig(); $send_data = [ 'auth_code' => Util::authCodeForCs($time), 'user_key' => $siteConfig['adm_user_key'], 'user' => $siteConfig['adm_user'], 'user_id' => $siteConfig['adm_user_id'], 'request_time' => $time, 'action' => 'get_run_ticket_array_by_date_area', 'start_area_id' => $start_area_id, 'end_area_id' => $end_area_id, 'run_date' => $date, 'org_id' => $siteConfig['adm_source_id'] ]; $curlInterface = new CurlInterface($send_data, 4); $curlInterface->setBaseUrl(''); $ticket_arr_cs = $curlInterface->execute($siteConfig['adm_host1'] . '/api/nfx', 'POST'); if ($ticket_arr_cs['code'] == 0 && empty($ticket_arr_cs['data']) == false) { return Util::returnArrSu('', $ticket_arr_cs['data']); } return Util::returnArrEr('当前日期所有票已售完!',[]); } /** * Des:获取某天经过某两个站点的poi的线路及上车poi首站的时间集合 * Name: getLineRunTimeByPoi * @param $start_poi * @param $end_poi * @param $date * @return array * @author 倪宗锋 */ public static function getLineRunTimeByPoi($start_poi, $end_poi, $date) { $time = time(); $siteConfig = Util::getSiteConfig(); $send_data = [ 'auth_code' => Util::authCodeForCs($time), 'user_key' => $siteConfig['adm_user_key'], 'user' => $siteConfig['adm_user'], 'user_id' => $siteConfig['adm_user_id'], 'request_time' => $time, 'action' => 'get_run_line_by_poi', 'start_poi' => $start_poi, 'end_poi' => $end_poi, 'date' => $date, 'org_id' => $siteConfig['adm_source_id'] ]; $curlInterface = new CurlInterface($send_data, 4); $curlInterface->setBaseUrl(''); $ticket_arr_cs = $curlInterface->execute($siteConfig['adm_host1'] . '/api/nfx', 'POST'); if (isset($ticket_arr_cs['code']) && $ticket_arr_cs['code'] == 0) { return Util::returnArrSu('', $ticket_arr_cs['data']); } return Util::returnArrEr('获取数据失败!'); } /** * Des:获取主线路库存 * Name: getLineSaleDate * @param string $line_id * @param string $start_area_id * @param string $end_area_id * @return array * @author 倪宗锋 */ public static function getLineSaleDateFromCs($line_id = '', $start_area_id = '', $end_area_id = '') { $time = time(); $siteConfig = Util::getSiteConfig(); $send_data = [ 'auth_code' => Util::authCodeForCs($time), 'user_key' => $siteConfig['adm_user_key'], 'user' => $siteConfig['adm_user'], 'user_id' => $siteConfig['adm_user_id'], 'request_time' => $time, 'action' => 'get_area_available_date_array', 'start_area_id' => $start_area_id, 'end_area_id' => $end_area_id, 'line_id' => $line_id, 'org_id' => $siteConfig['adm_source_id'] ]; $curlInterface = new CurlInterface($send_data, 4); $curlInterface->setBaseUrl(''); $ticket_arr_cs = $curlInterface->execute($siteConfig['adm_host1'] . '/api/nfx', 'POST'); if ($ticket_arr_cs['code'] == 0) { return Util::returnArrSu('', ['list' => $ticket_arr_cs['data']]); } return Util::returnArrSu('', ['list' => []]); } }