Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

109 linhas
6.0 KiB

  1. <?php
  2. namespace backend\modules\hotel\controllers;
  3. use Yii;
  4. use backend\modules\hotel\models\SoapLog;
  5. class SoapLogController extends HotelController
  6. {
  7. public $data;
  8. public function actionIndex()
  9. {
  10. $searchModel = new SoapLog();
  11. $search = Yii::$app->request->queryParams;
  12. $search['date'] = isset($search['SoapLog']['date']) && $search['SoapLog']['date'] != ''?$search['SoapLog']['date']:date('Y-m-d');
  13. $dataProvider = $searchModel->search($search, $this->getFile($search['date']));
  14. return $this->render('index', ['dataProvider' => $dataProvider, 'searchModel' => $searchModel]);
  15. }
  16. /**
  17. * 获取携程接口请求日志文件,并解析
  18. * @param $date
  19. * @return array
  20. */
  21. protected function getFile($date)
  22. {
  23. $path = Yii::getAlias('@runtime') . '/logs/soap/receive/' . $date . '.log';
  24. if (file_exists($path)) {
  25. $str = file_get_contents($path);
  26. $pattern = '/(?P<date>[\d\-]*) (?P<time>[\d\:]*) (?P<action>\w*).*[\n\r]+((' .
  27. '(?P<ctrip_request>'.
  28. '.*\<Hotel\>(?P<ctrip_hotel_id>\d+)<\/Hotel\>' . //可订检查
  29. '\<Arrival\>(?P<ctrip_arrival>[\d\-]+)[^\>]*\<\/Arrival\>' .
  30. '\<Departure\>(?P<ctrip_departure>[\d\-]+)[^<]*\<\/Departure\>' .
  31. '\<Room\>(?P<ctrip_room_id>\d+)<\/Room\>' .
  32. '\<RoomNumber\>(?P<ctrip_number>\d+)<\/RoomNumber\>' .
  33. '.*\<RoomPrices\>(?P<ctrip_prices>.+)<\/RoomPrices\>' .
  34. '.*\<IsHoldRoom\>(?P<ctrip_hold>\w)<\/IsHoldRoom\>.*' .
  35. '))|(' .
  36. '\<RequestResponse\>(?P<spider_response>.*DomesticCheckRoomAvailResponse.*IsBookable\>(?P<spider_status>\w)\<\/IsBookable.*)\<\/RequestResponse\>' . //可订检查返回
  37. ')|(' .
  38. '(?P<ctrip_new_request>'.
  39. '.*<OrderID>(?P<ctrip_new_order_id>.*)<\/OrderID>' . //-----------新订
  40. '<InterFaceSendID>(?P<ctrip_new_interface_id>.*)<\/InterFaceSendID>' .
  41. '<Hotel>(?P<ctrip_new_hotel_id>.*)<\/Hotel>' .
  42. '.*\<HotelName\>(?P<ctrip_new_hotel_name>.*)<\/HotelName>' .
  43. '.*\<Arrival\>(?P<ctrip_new_arrival>[\d\-]+)[^<]*\<\/Arrival\>' .
  44. '\<Departure\>(?P<ctrip_new_departure>[^T]*)[^<]*<\/Departure\>' .
  45. '.*((<Notice>(?P<ctrip_new_notice>[^<]*)<\/Notice>)|(<Notice \/>))' . //备注中有换行 <Notice />
  46. '.*\<IsHoldRoom\>(?P<ctrip_new_hold>\w)<\/IsHoldRoom\>' .
  47. '.*\<IsFreeSale\>(?P<ctrip_new_free_sale>\w)<\/IsFreeSale\>' .
  48. '.*(?P<ctrip_new_guests>\<Guests\>.*<\/Guests\>)' .
  49. '.*\<Room\>(?P<ctrip_new_room_id>\d+)<\/Room\>' .
  50. '.*\<RoomName\>(?P<ctrip_new_room_name>.*)<\/RoomName\>' .
  51. '.*\<Quantity\>(?P<ctrip_new_number>\d+)<\/Quantity\>' .
  52. '.*\<RoomPrices\>(?P<ctrip_new_prices>.+)<\/RoomPrices\>.*' .
  53. '))|(' .
  54. '\<RequestResponse\>(?P<spider_new_response>.*DomesticSubmitNewHotelOrderResponse.*OrderStatus\>(?P<spider_new_status>.)\<\/OrderStatus.*' . //新订返回
  55. 'ReturnDescript\>(?P<spider_new_status_desc>.*)\<\/ReturnDescript.*)\<\/RequestResponse\>' .
  56. ')|(' .
  57. '(?P<ctrip_cancel_request>'.
  58. '.*<OrderID>(?P<ctrip_cancel_order_id>.*)<\/OrderID>' . //-----------取消订单
  59. '<OldOrderID>(?P<ctrip_cancel_old_hotel_id>.*)<\/OldOrderID>' .
  60. '.*<Hotel>(?P<ctrip_cancel_hotel_id>.*)<\/Hotel>' .
  61. '.*\<HotelName\>(?P<ctrip_cancel_hotel_name>.*)<\/HotelName>' .
  62. '.*\<Arrival\>(?P<ctrip_cancel_arrival>[\d\-]+)[^\>]*\<\/Arrival\>' .
  63. '.*\<Departure\>(?P<ctrip_cancel_departure>[\d\-]+)[^\>]*\<\/Departure\>' .
  64. '.*((<Notice>(?P<ctrip_cancel_notice>[^<]*)<\/Notice>)|(<Notice \/>))' . //备注中有换行 <Notice />
  65. '.*\<ClientName\>(?P<ctrip_cancel_guests>.+)<\/ClientName\>' .
  66. '.*\<Room\>(?P<ctrip_cancel_room_id>\d+)<\/Room\>' .
  67. '.*\<RoomName\>(?P<ctrip_cancel_room_name>.*)<\/RoomName\>' .
  68. '.*\<Quantity\>(?P<ctrip_cancel_number>\d+)<\/Quantity\>.*' .
  69. '))|(' .
  70. '\<RequestResponse\>(?P<spider_cancel_response>.*DomesticCancelhotelOrderResponse.*OrderStatus\>(?P<spider_cancel_status>.)\<\/OrderStatus.*' . //新订返回
  71. 'ReturnDescript\>(?P<spider_cancel_status_desc>.*)\<\/ReturnDescript.*)\<\/RequestResponse\>' .
  72. // ')|(' .
  73. // '.*DomesticGetOrderStatus.*<OrderID>(?P<ctrip_cancel_order_id>.*)<\/OrderID>' . //-----------订单状态查询
  74. // ')|(' .
  75. // '\<RequestResponse\>(?P<spider_status_response>.*DomesticCancelhotelOrderResponse.*OrderStatus\>(?P<spider_status_status>.)\<\/OrderStatus.*' . //新订返回
  76. // 'ReturnDescript\>(?P<spider_status_status_desc>.*)\<\/ReturnDescript.*)\<\/RequestResponse\>' .
  77. '))/i';
  78. $a = preg_match_all($pattern, $str, $match);
  79. $result = [];
  80. if (!empty($match)) {
  81. $attributes = SoapLog::ATTRIBUTES;
  82. foreach ($match['action'] as $key => $one) {
  83. if ($one !== '') {
  84. $result[$key] = [];
  85. foreach ($attributes as $item => $filter) {
  86. $result[$key][$item] = $match[$item][$key];
  87. if (trim($match[$item][$key]) !== '') {
  88. $result[$key][str_replace('new_', '', $item)] = $match[$item][$key];
  89. $result[$key][str_replace('cancel_', '', $item)] = $match[$item][$key];
  90. }
  91. }
  92. }
  93. }
  94. }
  95. return $result;
  96. } else
  97. return [];
  98. }
  99. }