|
- <?php
- /**
- *
- * ============================================================================
- * * 版权所有 蜘蛛出行 * *
- * 网站地址: http://www.zhizhuchuxing.com
- * ----------------------------------------------------------------------------
- * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
- * 使用;不允许对程序代码以任何形式任何目的的再发布。
- * ============================================================================
- * Author By: 倪宗锋
- * PhpStorm CtripBus.php
- * Create By 2018/4/17 9:33 $
- */
-
- namespace backend\modules\api\logic;
-
-
- use backend\modules\api\models\BaseArea;
- use backend\modules\api\models\BaseResource;
- use backend\modules\api\models\OperaLine;
- use backend\modules\api\models\OperaStation;
- use backend\modules\api\models\OperaTickets;
- use backend\modules\api\models\OrderCustomerInfo;
- use backend\modules\api\models\OrderMain;
- use backend\modules\api\models\OutsideSubmitOrder;
- use backend\modules\api\models\RunMain;
- use backend\modules\api\models\RunProd;
- use backend\modules\api\models\RunStation;
- use backend\modules\api\util\Util;
- use backend\modules\api\models\OperaMessageTemplate;
- use backend\modules\api\models\OrderSendMessage;
- use common\util\CtripBusUtil;
- use common\util\CurlInterface;
-
- class CtripBus
- {
- /**
- * Function Description:获取出发城市列表
- * Function Name: GetFromCityList
- * @param $params
- * @return array
- * @author 田玲菲
- */
- public function GetFromCityList($params)
- {
- $baseResource = new BaseResource();
- $res = $baseResource->getFromCity();
- $result = [];
- foreach ($res as $val) {
- $result[] = $val['AREA_NAME'];
- }
- return Util::returnArrSu('', ['fromCityList' => array_values($result)]);
- }
-
-
- /**
- * Function Description:获取到达城市列表
- * Function Name: GetToCityList
- * @param $params
- * @return array
- * @author 田玲菲
- */
- public function GetToCityList($params)
- {
- //1. 验证参数
- if (empty($params['fromCity'])) { //出发城市
- return Util::returnArrEr("参数为空【fromCity】", [], '2100');
- }
- $baseArea = new BaseArea();
- $fromCity = $baseArea->getInfoByName($params['fromCity']);
- if (empty($fromCity['ID'])) {
- return Util::returnArrEr("查询出错", [], '2101');
- }
- $fromCityId = $fromCity['ID'];
- //2.获取近期出发的所有线路的上下车城市
- $baseResource = new BaseResource();
- $result = $baseResource->getInOutCity($fromCityId);
- return Util::returnArrSu('', ['toCityList' => $result]);
- }
-
- /**
- * Des:获取线路数据
- * Name: GetLine
- * @param $params
- * @return array
- * @author 倪宗锋
- */
- public function GetLine($params)
- {
- if (empty($params['fromCity'])) {//出发城市
- return Util::returnArrEr("参数为空【fromCity】", [], '1005');
- }
- if (empty($params['fromDate'])) {//出发日期
- return Util::returnArrEr("参数为空【fromDate】", [], '1005');
- }
- if (empty($params['toCity'])) {//到达城市
- return Util::returnArrEr("参数为空【toCity】", [], '1005');
- }
- $fromDate = $params['fromDate'];
- // 1.查询出发城市和到达城市的res_id
- $baseArea = new BaseArea();
- $fromCity = $baseArea->getInfoByName($params['fromCity']);
- if (empty($fromCity['ID'])) {
- return Util::returnArrEr("查询出错", [], '2101');
- }
- $fromCityId = $fromCity['ID'];
- $toCity = $baseArea->getInfoByName($params['toCity']);
- if (empty($toCity['ID'])) {
- return Util::returnArrEr("查询出错", [], '2101');
- }
- $toCityId = $toCity['ID'];
- // 2.根据出发日期查出当天有哪些线路
- //todo
- $return = [
- 'fromCity' => $params['fromCity'],
- 'toCity' => $params['toCity'],
- 'lineSchedule' => [
- ],
-
- ];
- $runMain = new RunMain();
- $lineIdArr = $runMain->getLineArrayByDateAndArea($fromDate, $fromCityId, $toCityId);
- if (empty($lineIdArr[0]['line_id'])) {//没有获取到 可以售卖的线路
- return Util::returnArrEr('未获取到数据', $return, '1');
- }
- $runProd = new RunProd();
- #3设置线路信息
- $operaLine = new OperaLine();
- $runStation = new OperaStation();
- foreach ($lineIdArr as $v) {
- $line_id = $v['line_id'];
- //校验黑名单
- $blackLine = [454085, 453973];
- if (in_array($line_id, $blackLine)) {
- continue;
- }
- $lineListInfo['schedule'] = $runProd->getSchedule($fromDate, $fromCityId, $toCityId, $line_id);
- $line_info = $operaLine->getLineInfo($line_id);
- $line_station = $runStation->getStationList($line_id, $fromCityId, $toCityId);
- $ticket_array = $operaLine->getOperaLineTicketsFromLine($line_id, $fromCityId, $toCityId);
- $bottomPrice = 0;
- foreach ($ticket_array as $val) {
- if ($bottomPrice == 0) {
- $bottomPrice = $val['price'];
- }
- if ($val['price'] < $bottomPrice) {
- $bottomPrice = $val['price'];
- }
- }
- $lineListInfo['line'] = [
- 'id' => $line_id . '_' . $fromCityId . '_' . $toCityId,//线路ID
- 'desc' => $line_info['desc'],//线路 说明
- 'name' => $line_info['name'],//线路名称
- 'distance' => intval($line_info['distance']),//总路程
- 'timeExpendMinutes' => $line_info['timeExpendMinutes'],//时间
- 'bottomPrice' => $bottomPrice,//最低价
- 'segmentPrices' => $ticket_array,//特殊站点价格
- // 'commissionRule' => [],//佣金规则
- 'checkTicketMethods' => ['短信'],//验票方式
- 'stations' => $line_station,//站点信息
- 'limitTicketCntMin' => 1,//最少购买数量
- 'limitTicketCntMax' => 20,//最多购买 数量
- // 'luggageLimit' => [],//行李大小设置
- // 'obtainTicket' => [],//取票地址
- // 'refundTicketRules' => [],//取消规则
- // 'specialTickets' => [],//儿童设置
- // 'parkingPoints' => [],//游玩点
- // 'TransferPoint' => [],//换车说明
- // 'ScenicTicket' => [],//景点信息
- // 'Gift' => [],//礼物 信息
- ];
-
- $return['lineSchedule'][] = $lineListInfo;
- }
- return util::returnArrSu('成功', $return);
- }
-
- /**
- * Des:取消订单
- * Name: refundTicket
- * @param $params
- * @return array
- * @author 倪宗锋
- */
- public function refundTicket($params)
- {
- if (empty($params['corpOrderId'])) {
- return Util::returnArrEr('params error', '', '301');
- }
- $orderMain = new OrderMain();
- $checkOutsideOrderNo = $orderMain->checkOutsideOrderNo($params['corpOrderId'], CtripBusUtil::util()->getSupplierId());
- if (empty($checkOutsideOrderNo['0']['order_id'])) {
- return Util::returnArrEr('order not exist', '', '301');
- }
- if ($checkOutsideOrderNo[0]['order_status'] == '148') {
- $orderDetail = $this->orderDetail(['corpOrderId' => $params['corpOrderId']]);
- return Util::returnArrSu('success', $orderDetail['data']);
- }
- $data = [
- 'order_id' => $checkOutsideOrderNo['0']['order_id'],
- ];
- $curl = new CurlInterface($data, 4);
- $result = $curl->execute('http://' . CS1_DOMAIN . '/api/submit-order/cancel-bus-order', 'POST');
- if (!isset($result['code']) || $result['code'] != '0') {
- $msg = empty($result['info']) ? '取消订单失败!' : $result['info'];
- return Util::returnArrEr($msg, '', $result['code']);
- }
- $orderDetail = $this->orderDetail(['corpOrderId' => $params['corpOrderId']]);
- return Util::returnArrSu('success', $orderDetail['data']);
- }
-
- /**
- * Des:出票信息
- * Name: orderDetail
- * @param $params
- * @return array
- * @author 倪宗锋
- */
- public function orderDetail($params)
- {
- if (empty($params['corpOrderId'])) {
- return Util::returnArrEr('params error', '', '301');
- }
- $orderMain = new OrderMain();
- $checkOutsideOrderNo = $orderMain->checkOutsideOrderNo($params['corpOrderId'], CtripBusUtil::util()->getSupplierId());
- if (empty($checkOutsideOrderNo['0']['order_id'])) {
- return Util::returnArrEr('order not exist', '', '301');
- }
- /*******设置订单状态**********/
- $message = '';
- if (in_array($checkOutsideOrderNo['0']['order_status'], [146, 117, 314])) {
- $order_status = 2;
- } else if ($checkOutsideOrderNo['0']['order_status'] == 148) {
- $order_status = 5;
- } else {
- $order_status = 4;
- $message = '未支付';
- }
- #获取出行人 信息
- $order_id = $checkOutsideOrderNo['0']['order_id'];
- $orderCustomer = new OrderCustomerInfo();
- $getCustomer = $orderCustomer->getCustomer($order_id);
- $tickets = [];
- foreach ($getCustomer as $val) {
- $array = [
- 'certificateNo' => $val['cus_id_no'],//乘客证件号码
- 'ticketStatus' => $order_status,//订单出票状态,1出票中,2已出票,3 无票,4退票中,5已退票,6退票失败
- ];
- if (empty($message) == false) {
- $array['noTicketReason'] = $message;//无票原因。ticketStatus=3时必填
- }
- if ($order_status == 2) {
- $array['ticketNo'] = $order_id;//出票号
- $array['ticketPwd'] = $order_id;//票密码/验证码
- }
- $tickets[] = $array;
- }
- //获取出票短信
-
-
- //返回值
- $return = [
- 'orderId' => $order_id,
- 'corpOrderId' => $params['corpOrderId'],
- 'smsTemplate' => $params['send_message'],
- 'tickets' => $tickets
- ];
- return Util::returnArrSu('', $return);
- }
-
- /**
- * Des:下单
- * Name: order
- * @param $params
- * @return array
- * @author 倪宗锋
- */
- public function makeOrder($params)
- {
- $checkParams = $this->checkOrderParams($params);//参数 校验并返回产品详情
- if ($checkParams['flag'] == false) {
- return $checkParams;
- }
-
- $params['lineId'] = explode('_', $params['lineId'])[0];
- $prodInfo = $checkParams['data'];
- //错误返回值
- $errorTicketArray = [];
- foreach ($params["tickets"] as $val) {
- $errorTicket = [
- "certificateNo" => $val["certificateNo"],
- "ticketStatus" => 3,
- "noTicketReason" => "无票"
- ];
- $errorTicketArray[] = $errorTicket;
- }
- $errorReturn = [
- "order_id" => "",
- "corpOrderId" => $params["corpOrderId"],
- 'smsTemplate' => '',
- "tickets" => $errorTicketArray
- ];
- #校验订单是否已经存在
- $orderDetail = $this->orderDetail(['corpOrderId' => $params['corpOrderId']]);//获取定下详情,如果存在则直接返回
- if ($orderDetail['flag'] == true) {
- return Util::returnArrSu('error', $errorReturn);
- }
- #不存在则去下单
- #获取班次ID
- $runMain = new RunMain();
- $run_id = $runMain->getRunIdByLine($params['lineId'], $params['fromDate'], $params['fromTime']);
- if (empty($run_id)) {
- return Util::returnArrSu('get run error', $errorReturn);
- }
- #获取票种ID
- $operaTicket = new OperaTickets();
- $getTicket = $operaTicket->getTicketByRes($params['lineId'], $params['fromStationCode'], $params['toStationCode']);
- if (empty($getTicket['ticket_id'])) {
- return Util::returnArrSu('get ticket error', $errorReturn);
- }
- $ticket_id = $getTicket['ticket_id'];
- $outSideSubmitOrder = new OutsideSubmitOrder();
- $date = [
- 'from_org_id' => CtripBusUtil::util()->getSupplierId(),
- 'outside_order_no' => $params['corpOrderId'],
- 'ticket_id' => $ticket_id,
- 'ticket_num' => $prodInfo['prod_cnt'],
- 'price' => $prodInfo['price'],
- 'all_price' => $prodInfo['total_money'],
- 'customer_name' => $params['contactName'],
- 'customer_mobile' => $params['contactMobile'],
- 'customer_id_no' => '',
- 'passenger' => $prodInfo['passenger_str']
- ];
- $submitOrderId = $outSideSubmitOrder->addRow($date);
- #设置 返回下单接口参数
- $prod_str = [1, $run_id, $ticket_id, $prodInfo['price'], $prodInfo['prod_cnt']];
- $order_info_str = [2, 0, CtripBusUtil::util()->getSupplierId(), $params['corpOrderId'], 0, 275, 1, '李秉臻'];
- $customer_info_str = [$params['contactName'], $params['contactMobile'], 1, '', ''];
- $passenger_info = $prodInfo['passenger_info'];
- $data = [
- 'prod_str' => '{' . implode(',', $prod_str) . '}',
- 'order_info_str' => '{' . implode(',', $order_info_str) . '}',
- 'customer_info_str' => '{' . implode(',', $customer_info_str) . '}',
- 'passenger_info' => json_encode($passenger_info),
- 'is_send_msg' => 0
- ];
- $curl = new CurlInterface($data, 4);
- $result = $curl->execute('http://' . CS1_DOMAIN . '/api/submit-order/submit-bus-order', 'POST');
- if (!isset($result['code']) || $result['code'] != '0') {
- $msg = empty($result['info']) ? '取消订单失败!' : $result['info'];
- $outSideSubmitOrder->editInfo(['status' => 2, 'ID' => $submitOrderId]);
- return Util::returnArrSu($msg, $errorReturn);
- }
- $outSideSubmitOrder->editInfo(['status' => 1, 'ID' => $submitOrderId]);
- //获取短信内容,同时模拟插入发送短信履历
- $order_id_array = explode(",", $result['data']);
- $send_message = $this->getSendMessageAndSimulateSend($order_id_array[0]);
- return $this->orderDetail(['corpOrderId' => $params['corpOrderId'], 'send_message' => $send_message]);
- }
-
-
- /**
- * Des:下单参数校验并返回整理后的数据
- * Name: checkOrderParams
- * @param $params
- * @return array
- * @author 倪宗锋
- */
- public function checkOrderParams($params)
- {
- if (empty($params['corpOrderId'])) {
- return Util::returnArrEr('params error', '', '301');
- }
- if (empty($params['contactMobile'])) {
- return Util::returnArrEr('params error', '', '301');
- }
- if (empty($params['contactName'])) {
- return Util::returnArrEr('params error', '', '301');
- }
- if (empty($params['fromDate'])) {
- return Util::returnArrEr('params error', '', '301');
- }
- if (empty($params['fromTime'])) {
- return Util::returnArrEr('params error', '', '301');
- }
- if (empty($params['fromStationCode'])) {
- return Util::returnArrEr('params error', '', '301');
- }
- if (empty($params['toStationCode'])) {
- return Util::returnArrEr('params error', '', '301');
- }
- if (empty($params['lineId'])) {
- return Util::returnArrEr('params error', '', '301');
- }
- if (empty($params['tickets']) || !is_array($params['tickets'])) {
- return Util::returnArrEr('params error', '', '301');
- }
- //购买的产品数量
- $prod_info = [
- 'total_money' => 0,
- 'price' => 0,
- 'prod_cnt' => 0,
- 'passenger_info' => []
- ];
- foreach ($params['tickets'] as $val) {
- if (empty($val['certificateNo'])) {
- return Util::returnArrEr('params error', '', '301');
- }
- if (empty($val['passengerName'])) {
- return Util::returnArrEr('params error', '', '301');
- }
- #产品信息
- $prod_info['price'] = $val['price'];
- $prod_info['total_money'] += intval($val['price']);
- $prod_info['prod_cnt'] += 1;
- #出行人信息
- $pass = [
- 'passenger_name' => $val['passengerName'],
- 'passenger_cardid' => $val['certificateNo'],
- ];
- $pass_str = $val['passengerName'] . '*' . $val['certificateNo'];
- $prod_info['passenger_info'][] = $pass;
- if (empty($prod_info['passenger_str'])) {
- $prod_info['passenger_str'] = $pass_str;
- } else {
- $prod_info['passenger_str'] .= '/' . $pass_str;
- }
- }
- return Util::returnArrSu('', $prod_info);
- }
-
- /**
- * Des:查询余票
- * Name: remainTicket
- * @param $params
- * @return array
- * @author 倪宗锋
- */
- public function remainTicket($params)
- {
- #参数校验
- if (empty($params['fromDate'])) {
- return Util::returnArrEr('params error', '', '301');
- }
- if (empty($params['fromTime'])) {
- return Util::returnArrEr('params error', '', '301');
- }
- if (empty($params['fromStationCode'])) {
- return Util::returnArrEr('params error', '', '301');
- }
- if (empty($params['toStationCode'])) {
- return Util::returnArrEr('params error', '', '301');
- }
- if (empty($params['lineId'])) {
- return Util::returnArrEr('params error', '', '301');
- }
- $params['lineId'] = explode('_', $params['lineId'])[0];
- #获取库存
- $runMain = new RunMain();
- $getStock = $runMain->getStockByDateLineIdRes($params['lineId'], $params['fromDate'], $params['fromTime'], $params['fromStationCode'], $params['toStationCode']);
- if (empty($getStock[0]['count'])) {
- $count = 0;
- } else {
- $count = $getStock[0]['count'];
- }
- return Util::returnArrSu('', ['leftTicketCnt' => $count]);
- }
-
- /**
- *
- */
- public function getSendMessageAndSimulateSend($order_id)
- {
- $msg = new OperaMessageTemplate();
- $res = $msg->otaGetMsgInfo($order_id);
- if (!isset($res["code"]) || $res["code"] != 0) {
- return "获取短信错误,请联系客服!!!";
- } else {
- $current_time = date("Y-m-d H:i:s");
- $send_message = $res["content"];
- $send_tel = $res["mobile"];
- $send_msg_values = [
- 'ORDER_ID' => $order_id,
- 'SEND_MOBILE' => $send_tel,
- 'SEND_MESSAGE' => $send_message,
- 'SEND_TIME' => $current_time,
- 'SEND_ERROR' => 1,
- 'CREATE_USER_ID' => 2,
- 'CREATE_TIME' => $current_time,
- 'UPDATE_USER_ID' => 2,
- 'UPDATE_TIME' => $current_time
- ];
- $msgRecord = new OrderSendMessage();
- $msgRecord->attributes = $send_msg_values;
- $res = $msgRecord->insert();
- return $send_message;
- }
- }
-
- }
|