|
- <?php
-
- namespace backend\modules\hotel\controllers;
-
- use Yii;
- use backend\modules\hotel\models\SoapLog;
-
- class SoapLogController extends HotelController
- {
- public $data;
-
- public function actionIndex()
- {
- $searchModel = new SoapLog();
- $search = Yii::$app->request->queryParams;
-
- $search['date'] = isset($search['SoapLog']['date']) && $search['SoapLog']['date'] != ''?$search['SoapLog']['date']:date('Y-m-d');
-
- $dataProvider = $searchModel->search($search, $this->getFile($search['date']));
-
- return $this->render('index', ['dataProvider' => $dataProvider, 'searchModel' => $searchModel]);
- }
-
- /**
- * 获取携程接口请求日志文件,并解析
- * @param $date
- * @return array
- */
- protected function getFile($date)
- {
- $path = Yii::getAlias('@runtime') . '/logs/soap/receive/' . $date . '.log';
- if (file_exists($path)) {
- $str = file_get_contents($path);
- $pattern = '/(?P<date>[\d\-]*) (?P<time>[\d\:]*) (?P<action>\w*).*[\n\r]+((' .
- '(?P<ctrip_request>'.
- '.*\<Hotel\>(?P<ctrip_hotel_id>\d+)<\/Hotel\>' . //可订检查
- '\<Arrival\>(?P<ctrip_arrival>[\d\-]+)[^\>]*\<\/Arrival\>' .
- '\<Departure\>(?P<ctrip_departure>[\d\-]+)[^<]*\<\/Departure\>' .
- '\<Room\>(?P<ctrip_room_id>\d+)<\/Room\>' .
- '\<RoomNumber\>(?P<ctrip_number>\d+)<\/RoomNumber\>' .
- '.*\<RoomPrices\>(?P<ctrip_prices>.+)<\/RoomPrices\>' .
- '.*\<IsHoldRoom\>(?P<ctrip_hold>\w)<\/IsHoldRoom\>.*' .
- '))|(' .
- '\<RequestResponse\>(?P<spider_response>.*DomesticCheckRoomAvailResponse.*IsBookable\>(?P<spider_status>\w)\<\/IsBookable.*)\<\/RequestResponse\>' . //可订检查返回
- ')|(' .
- '(?P<ctrip_new_request>'.
- '.*<OrderID>(?P<ctrip_new_order_id>.*)<\/OrderID>' . //-----------新订
- '<InterFaceSendID>(?P<ctrip_new_interface_id>.*)<\/InterFaceSendID>' .
- '<Hotel>(?P<ctrip_new_hotel_id>.*)<\/Hotel>' .
- '.*\<HotelName\>(?P<ctrip_new_hotel_name>.*)<\/HotelName>' .
- '.*\<Arrival\>(?P<ctrip_new_arrival>[\d\-]+)[^<]*\<\/Arrival\>' .
- '\<Departure\>(?P<ctrip_new_departure>[^T]*)[^<]*<\/Departure\>' .
- '.*((<Notice>(?P<ctrip_new_notice>[^<]*)<\/Notice>)|(<Notice \/>))' . //备注中有换行 <Notice />
- '.*\<IsHoldRoom\>(?P<ctrip_new_hold>\w)<\/IsHoldRoom\>' .
- '.*\<IsFreeSale\>(?P<ctrip_new_free_sale>\w)<\/IsFreeSale\>' .
- '.*(?P<ctrip_new_guests>\<Guests\>.*<\/Guests\>)' .
- '.*\<Room\>(?P<ctrip_new_room_id>\d+)<\/Room\>' .
- '.*\<RoomName\>(?P<ctrip_new_room_name>.*)<\/RoomName\>' .
- '.*\<Quantity\>(?P<ctrip_new_number>\d+)<\/Quantity\>' .
- '.*\<RoomPrices\>(?P<ctrip_new_prices>.+)<\/RoomPrices\>.*' .
- '))|(' .
- '\<RequestResponse\>(?P<spider_new_response>.*DomesticSubmitNewHotelOrderResponse.*OrderStatus\>(?P<spider_new_status>.)\<\/OrderStatus.*' . //新订返回
- 'ReturnDescript\>(?P<spider_new_status_desc>.*)\<\/ReturnDescript.*)\<\/RequestResponse\>' .
- ')|(' .
- '(?P<ctrip_cancel_request>'.
- '.*<OrderID>(?P<ctrip_cancel_order_id>.*)<\/OrderID>' . //-----------取消订单
- '<OldOrderID>(?P<ctrip_cancel_old_hotel_id>.*)<\/OldOrderID>' .
- '.*<Hotel>(?P<ctrip_cancel_hotel_id>.*)<\/Hotel>' .
- '.*\<HotelName\>(?P<ctrip_cancel_hotel_name>.*)<\/HotelName>' .
- '.*\<Arrival\>(?P<ctrip_cancel_arrival>[\d\-]+)[^\>]*\<\/Arrival\>' .
- '.*\<Departure\>(?P<ctrip_cancel_departure>[\d\-]+)[^\>]*\<\/Departure\>' .
- '.*((<Notice>(?P<ctrip_cancel_notice>[^<]*)<\/Notice>)|(<Notice \/>))' . //备注中有换行 <Notice />
- '.*\<ClientName\>(?P<ctrip_cancel_guests>.+)<\/ClientName\>' .
- '.*\<Room\>(?P<ctrip_cancel_room_id>\d+)<\/Room\>' .
- '.*\<RoomName\>(?P<ctrip_cancel_room_name>.*)<\/RoomName\>' .
- '.*\<Quantity\>(?P<ctrip_cancel_number>\d+)<\/Quantity\>.*' .
- '))|(' .
- '\<RequestResponse\>(?P<spider_cancel_response>.*DomesticCancelhotelOrderResponse.*OrderStatus\>(?P<spider_cancel_status>.)\<\/OrderStatus.*' . //新订返回
- 'ReturnDescript\>(?P<spider_cancel_status_desc>.*)\<\/ReturnDescript.*)\<\/RequestResponse\>' .
- // ')|(' .
- // '.*DomesticGetOrderStatus.*<OrderID>(?P<ctrip_cancel_order_id>.*)<\/OrderID>' . //-----------订单状态查询
- // ')|(' .
- // '\<RequestResponse\>(?P<spider_status_response>.*DomesticCancelhotelOrderResponse.*OrderStatus\>(?P<spider_status_status>.)\<\/OrderStatus.*' . //新订返回
- // 'ReturnDescript\>(?P<spider_status_status_desc>.*)\<\/ReturnDescript.*)\<\/RequestResponse\>' .
- '))/i';
-
- $a = preg_match_all($pattern, $str, $match);
- $result = [];
- if (!empty($match)) {
- $attributes = SoapLog::ATTRIBUTES;
- foreach ($match['action'] as $key => $one) {
- if ($one !== '') {
- $result[$key] = [];
- foreach ($attributes as $item => $filter) {
- $result[$key][$item] = $match[$item][$key];
- if (trim($match[$item][$key]) !== '') {
- $result[$key][str_replace('new_', '', $item)] = $match[$item][$key];
- $result[$key][str_replace('cancel_', '', $item)] = $match[$item][$key];
- }
- }
- }
- }
- }
- return $result;
- } else
- return [];
- }
- }
|