|
- <?php
-
- namespace backend\modules\hotel\controllers;
-
- //use backend\modules\api\models\OperaHotelBaseRoom;
- use backend\modules\api\models\DictType;
- use backend\modules\hotel\models\BaseImg;
- use backend\modules\hotel\models\CtripHotelPrice;
- use backend\modules\hotel\models\OperaHotelBaseRoom;
- use backend\modules\hotel\models\OperaHotelGift;
- use backend\modules\hotel\models\OperaHotelLog;
- use backend\modules\hotel\models\OperaSort;
- use backend\modules\hotel\models\OrderMain;
- use backend\modules\hotel\models\RunHotel;
- use common\util\UploadPic;
- use Yii;
- use backend\modules\hotel\models\OperaHotel;
- use backend\modules\hotel\models\RunHotelDistrib;
- use yii\db\Exception;
- use yii\helpers\ArrayHelper;
- use yii\helpers\Url;
- use yii\imagine\BaseImage;
- use yii\imagine\Image;
- use yii\web\Controller;
- use backend\modules\hotel\models\Report;
- use backend\modules\hotel\models\RunHotelSubRoom;
- use backend\modules\hotel\models\OperaHotelRoom;
- use backend\modules\hotel\models\RoomRelation;
- use backend\modules\hotel\models\HotelRelation;
- use backend\modules\hotel\models\OrderHtExceptionList;
- use backend\modules\hotel\models\OrderChannelInfo;
- use common\components\zOfficeWechat;
- use backend\modules\zzcs\models\BaseAreaView;
- use yii\helpers\Json;
- use yii\web\NotFoundHttpException;
- use yii\web\UploadedFile;
-
-
- /**
- * Default controller for the `Hotel` module
- */
- class HotelController extends BaseController
- {
- // public $layout = "@backend/modules/motorcade/views/layouts/iframe_new";
- public $layout = '@backend/modules/zzcs/views/layouts/zzcs';
- public $enableCsrfValidation = false;
-
- public function actions()
- {
- return [
- 'upload' => [
- 'class' => 'kucha\ueditor\UEditorAction',
- 'config' => [
- 'imagePathFormat' => '/upload/hotel/{yyyy}{mm}{dd}/{time}{rand:6}',
- ],
- ]
- ];
- }
-
- /**
- * 酒店列表
- */
- public function actionIndex()
- {
- $this->layout = "@backend/modules/motorcade/views/layouts/iframe_new";
- $hotel = new OperaHotel();
- $hotel->HOTEL_STATUS = 1;
- $dataProvider = $hotel->getHotelist(Yii::$app->request->queryParams);
-
- return $this->render('index', [
- 'model' => $hotel,
- 'dataProvider' => $dataProvider,
- ]);
- }
-
- /**
- * @Author wanglg
- * @Desc添加酒店
- * @return string|\yii\web\Response
- */
- public function actionAddHotel()
- {
- $hotel = new OperaHotel(['scenario' => 'addHotel']);
- $base_room = new OperaHotelBaseRoom();
- $gift = new OperaHotelGift();
- $star_level = DictType::findAll(['PARENT_ID' => 30]);
- $data['base_room'][] = $base_room;
- $data['hotel'] = $hotel;
- $data['star_level'] = $star_level;
- $data['gift'][] = $gift;
-
- if(Yii::$app->request->isPost) {
- $request = Yii::$app->request->post();
-
- // 添加酒店缩略图begin
- @$hotel_thumb_img_url = $_FILES['OperaHotel']['name']['HOTEL_IMAGE'];
- if($hotel_thumb_img_url && $hotel_thumb_img_url != '' && $hotel_thumb_img_url != Yii::$app->params['motorcadeDefaultImage']) {
- $hotel_imags_arr = UploadedFile::getInstance($hotel, "HOTEL_IMAGE");
- $hotel_img_path = Yii::$app->basePath . '/web' . Yii::$app->params['hotelImagePath'];
- $hotel_img_name = OperaHotelBaseRoom::getImgName($hotel_img_path, '.' . $hotel_imags_arr->extension);
- $hotel_imags_arr->saveAs($hotel_img_path . $hotel_img_name);
- $hotel_thum = Image::thumbnail($hotel_img_path . $hotel_img_name, 370, 370);
- $hotel_thum->save($hotel_img_path . 'hotel_thumb_' . $hotel_img_name);
- $request['OperaHotel']['HOTEL_IMAGE'] = 'http://' . CS1_DOMAIN . Yii::$app->params['hotelImagePath'] . 'hotel_thumb_' . $hotel_img_name;
- $img_path = $hotel_img_path . 'hotel_thumb_' . $hotel_img_name;
- UploadPic::cutPic($img_path, $img_path . '.370x326.' . $hotel_imags_arr->extension, '370', '326');//生成官网展示图片 从中间剪切
- UploadPic::cutPic($img_path, $img_path . '.180x180.' . $hotel_imags_arr->extension, '180', '180');//生成小图 从中间剪切
- }
- // 添加酒店缩略图end
-
- $hotel_lable_str = '';
- if(!empty($request['hotel_label'])) {
- foreach ($request['hotel_label'] as $h_lable) {
- // 将标签用 , 隔开
- $hotel_lable_str .= $h_lable . ',';
- }
- }
-
- // 设置酒店标签
- $request['OperaHotel']['HOTEL_LABEL'] = trim($hotel_lable_str, ',');
-
- $sale_lable_str = '';
- if(!empty($request['sale_label'])) {
- foreach ($request['sale_label'] as $s_lable) {
- // 将标签用 , 隔开
- $sale_lable_str .= $s_lable . ',';
- }
- }
- // 售卖标签
- $request['OperaHotel']['SALE_LABEL'] = trim($sale_lable_str, ',');
-
- // 处理地区ID 1. 北京 18. 天津 791.上海 2237. 重庆
- if($request['OperaHotel']['province'] == 1 || $request['OperaHotel']['province'] == 18 || $request['OperaHotel']['province'] == 791 || $request['OperaHotel']['province'] == 2237) {
- $request['OperaHotel']['AREA_ID'] = $request['OperaHotel']['city'];
- } else {
- $request['OperaHotel']['AREA_ID'] = $request['OperaHotel']['country'];
- }
- unset($request['OperaHotel']['province']);
- unset($request['OperaHotel']['city']);
- unset($request['OperaHotel']['country']);
- $transaction = Yii::$app->db->beginTransaction();
- $request['OperaHotel']['PRINCIPAL'] = Yii::$app->user->id;
- // 插入基础房型
- try {
- $link_arr = array_values($request['OperaHotelBaseRoom']);
- if($hotel->load($request['OperaHotel'], '') && $hotel->validate()) {
- // 酒店信息保存
- if(!$hotel->save()) {
- throw new \Exception();
- }
- $opera_hotel_id = $hotel->HOTEL_ID;
- Yii::$app->session->set('new_hotel_id', $opera_hotel_id);
- } else {
- throw new \Exception();
- }
-
- // 添加礼盒信息
- foreach ($request['OperaHotelGift'] as $itme => $value) {
- $gift_model = empty($value['ID']) ? new OperaHotelGift(): OperaHotelGift::findOne($value['ID']);
- $value['HOTEL_ID'] = $opera_hotel_id;
- if($gift_model->load($value, '') && $gift_model->validate()) {
- if(!$gift_model->save()) {
- throw new \Exception('保存礼盒信息失败');
- }
- }
- }
-
- $room_type_all = '';
- $i = 0;
- // 添加基础房型
- foreach ($link_arr as $key => $value) {
- $i++;
- $link_arr[$key]['HOTEL_ID'] = $opera_hotel_id;
- $base_room_list = new OperaHotelBaseRoom();
- /******************图片上传BEGIN*********************/
- @$img_url = $_FILES['OperaHotelBaseRoom']['name'][$key]['ROOM_IMG'];
- if($img_url && $img_url != '' && $img_url != Yii::$app->params['motorcadeDefaultImage']) {
- $base_room_list->ROOM_IMG = UploadedFile::getInstance($base_room_list, "[$key]ROOM_IMG");
- $base_path = Yii::$app->basePath . '/web' . Yii::$app->params['hotelImagePath'];
- $img_name = OperaHotelBaseRoom::getImgName($base_path, '.' . $base_room_list->ROOM_IMG->extension);
- $base_room_list->ROOM_IMG->saveAs($base_path . $img_name);
- $thum_image = Image::thumbnail($base_path . $img_name, OperaHotelBaseRoom::ROOM_PIC_WIDTH, OperaHotelBaseRoom::ROOM_PIC_HEIGHT);
- $thum_image->save($base_path . 'thumb_' . $img_name); // 图片上传
- // 保存路径至数据库中
- $base_room_list->ROOM_IMG = 'http://' . CS1_DOMAIN . Yii::$app->params['hotelImagePath'] . 'thumb_' . $img_name;
- }
-
- /******************图片上传END*********************/
- $link_arr[$key]['BED_TYPE'] = implode(',', $value['BED_TYPE']);
- if(!($base_room_list->load($link_arr[$key], '') && $base_room_list->validate())) {
- throw new \Exception();
- }
-
- // 添加基础房型
- if(!$base_room_list->save()) {
- throw new \Exception();
- }
-
- $base_room_id = $base_room_list->MAIN_ID;
- $new_opera_sort = new OperaSort();
- $opera_sort_arr = array('hotel_id' => $opera_hotel_id, 'base_room_id' => $base_room_id, 'seq' => $i);
-
- if($new_opera_sort->load($opera_sort_arr, '') && $new_opera_sort->validate()) {
- if(!$new_opera_sort->save()) {
- throw new \Exception();
- }
- } else {
- throw new \Exception();
- }
-
- $room_type_all .= $base_room_id . ',';
- }
-
- $room_type_all = trim($room_type_all, ',');
- $uhotel = OperaHotel::findOne($opera_hotel_id);
- $uhotel->ROOM_TYPE_ALL = $room_type_all;
- $uhotel->ROOM_TYPE_SALE = $room_type_all;
- if(!$uhotel->update()) {
- throw new \Exception();
- }
-
- $transaction->commit();
- Yii::$app->session->setFlash('success', "添加成功!");
-
- return json_encode(array('code' => 0, 'msg' => 'success'));
- // return $this -> redirect('/hotel/hotel/index');
- } catch (\Exception $e) {
- Yii::$app->session->setFlash('error', "添加失败!");
- $transaction->rollBack();
- }
- }
-
- return $this->render('base', ['view' => 'addHotel', 'data' => $data]);
- }
-
- /**
- * 更新酒店信息
- */
- public function actionUpdateHotel($hotel_id)
- {
- $hotel = OperaHotel::findOne($hotel_id);
- $hotel->setScenario('addHotel');
- $base_room = new OperaHotelBaseRoom();
- $base_rooms = $base_room->getHotelBaseRoom($hotel_id);
- $gift = OperaHotelGift::findAll(['HOTEL_ID' => $hotel_id, 'CANCEL_FLAG' => 0]);
- $hotel_imgs = BaseImg::findAll(['PRODUCT_ID' => $hotel_id, 'IMG_TYPE' => 25, 'CANCEL_FLAG' => 0]);
- $str_hotel_imgs = '';
- foreach ($hotel_imgs as $item => $img) {
- $str_hotel_imgs .= $img['IMG_URL'] . ',';
- }
- $str_hotel_imgs = trim($str_hotel_imgs, ',');
- $paths = empty($hotel->HOTEL_IMAGE) ? ['/resource/img/default-thumbnail.png']: explode('||', $hotel->HOTEL_IMAGE);
- $area_id = $hotel->AREA_ID;
- // 基础房型
- empty($base_rooms) ? $data['base_room'][] = new OperaHotelBaseRoom(): $data['base_room'] = $base_rooms;
- // 礼盒信息
- empty($gift) ? $data['gift'][] = new OperaHotelGift(): $data['gift'] = $gift;
- $data['imgs'] = $paths;
- $data['hotel'] = $hotel;
- $data['json_imgs'] = $str_hotel_imgs;
- $data['op'] = 'modify';
-
- if(Yii::$app->request->isPost) {
- $request = Yii::$app->request->post();
-
- @$hotel_thumb_img_url = $_FILES['OperaHotel']['name']['HOTEL_IMAGE'];
- if($hotel_thumb_img_url && $hotel_thumb_img_url != '' && $hotel_thumb_img_url != Yii::$app->params['motorcadeDefaultImage']) // 上传不为空再上传图片
- {
- $hotel_imags_arr = UploadedFile::getInstance($hotel, "HOTEL_IMAGE");
- $hotel_img_path = Yii::$app->basePath . '/web' . Yii::$app->params['hotelImagePath'];
- $hotel_img_name = OperaHotelBaseRoom::getImgName($hotel_img_path, '.' . $hotel_imags_arr->extension);
- $hotel_imags_arr->saveAs($hotel_img_path . $hotel_img_name);
- $hotel_thum = Image::thumbnail($hotel_img_path . $hotel_img_name, 370, 370);
- $hotel_thum->save($hotel_img_path . 'hotel_thumb_' . $hotel_img_name);
- $request['OperaHotel']['HOTEL_IMAGE'] = 'http://' . CS1_DOMAIN . Yii::$app->params['hotelImagePath'] . 'hotel_thumb_' . $hotel_img_name;
- $img_path = $hotel_img_path . 'hotel_thumb_' . $hotel_img_name;
- UploadPic::cutPic($img_path, $img_path . '.370x326.' . $hotel_imags_arr->extension, '370', '326');//生成官网展示图片 从中间剪切
- UploadPic::cutPic($img_path, $img_path . '.180x180.' . $hotel_imags_arr->extension, '180', '180');//生成小图 从中间剪切
- }
-
- // 设置对象的Area_id
- empty($request['OperaHotel']['country']) ? $request['OperaHotel']['AREA_ID'] = $request['OperaHotel']['city']: $request['OperaHotel']['AREA_ID'] = $request['OperaHotel']['country'];
- $hotel_lable_str = '';
- if(!empty($request['hotel_label'])) {
- foreach ($request['hotel_label'] as $h_lable) {
- // 将标签用 , 隔开
- $hotel_lable_str .= $h_lable . ',';
- }
- }
-
- // 设置酒店标签
- $request['OperaHotel']['HOTEL_LABEL'] = trim($hotel_lable_str, ',');
-
- $sale_lable_str = '';
- if(!empty($request['sale_label'])) {
- foreach ($request['sale_label'] as $s_lable) {
- // 将标签用 , 隔开
- $sale_lable_str .= $s_lable . ',';
- }
- }
- $request['OperaHotel']['SALE_LABEL'] = trim($sale_lable_str, ',');
- // 经纬度
- unset($request['OperaHotel']['province']);
- unset($request['OperaHotel']['city']);
- unset($request['OperaHotel']['country']);
- $hotel->base_room = $request['OperaHotelBaseRoom'];
- $transaction = Yii::$app->db->beginTransaction();
- try {
- if($hotel->load($request) && $hotel->validate()) {
- if(!$hotel->save()) {
- throw new \Exception('修改酒店失败');
- }
- } else {
- throw new \Exception('修改酒店失败');
- }
-
- // 修改、添加礼盒信息
- foreach ($request['OperaHotelGift'] as $itme => $value) {
- $gift_model = empty($value['ID']) ? new OperaHotelGift(): OperaHotelGift::findOne($value['ID']);
- $value['HOTEL_ID'] = $hotel_id;
- if($gift_model->load($value, '') && $gift_model->validate()) {
- if(!$gift_model->save()) {
- throw new \Exception('保存礼盒信息失败');
- }
- }
- }
-
- // 修改基础房型信息
- $room_type_all = '';
- $i = 0;
- foreach ($request['OperaHotelBaseRoom'] as $key => $value) {
- $i++;
- $base_room = (isset($value['MAIN_ID']) && OperaHotelBaseRoom::findOne($value['MAIN_ID']) != null) ? OperaHotelBaseRoom::findOne($value['MAIN_ID']): new OperaHotelBaseRoom();
- $value['BED_TYPE'] = implode(',', $value['BED_TYPE']);
- /******************图片上传BEGIN*********************/
- @$img_url = $_FILES['OperaHotelBaseRoom']['name'][$key]['ROOM_IMG'];
- if($img_url && $img_url != '' && $img_url != Yii::$app->params['motorcadeDefaultImage']) {
- $base_room->ROOM_IMG = UploadedFile::getInstance($base_room, "[$key]ROOM_IMG");
- $base_path = Yii::$app->basePath . '/web' . Yii::$app->params['hotelImagePath'];
- $img_name = OperaHotelBaseRoom::getImgName($base_path, '.' . $base_room->ROOM_IMG->extension);
- $base_room->ROOM_IMG->saveAs($base_path . $img_name);
- $thum_image = Image::thumbnail($base_path . $img_name, OperaHotelBaseRoom::ROOM_PIC_WIDTH, OperaHotelBaseRoom::ROOM_PIC_HEIGHT);
- $thum_image->save($base_path . 'thumb_' . $img_name); // 图片上传
- // 保存路径至数据库中
- $base_room->ROOM_IMG = 'http://' . CS1_DOMAIN . Yii::$app->params['hotelImagePath'] . 'thumb_' . $img_name;
- }
-
- /******************图片上传END*********************/
- $base_room->HOTEL_ID = $hotel_id;
- $base_room->BASE_ROOM_NAME = $value['BASE_ROOM_NAME'];
- $rs = $base_room->load($value, '');
- if($rs && $base_room->validate()) {
- if(!$base_room->save()) {
- throw new \Exception('修改基础房型');
- }
- // 房型直连修改
- $room_relation = RoomRelation::findOne(['ChannelId' => Yii::$app->params['ali']['supplier_id'], 'RoomId' => $base_room->MAIN_ID]);
- if(!empty($room_relation)){
- Yii::$app->runAction('hotel/ali/room-update', ['params' => ['hotel_id' => $hotel_id, 'parent_room_type'=>$base_room->MAIN_ID]]);
- }
- }
-
- $opera_sort_arr = array('hotel_id' => $hotel_id, 'base_room_id' => $base_room->MAIN_ID, 'seq' => $i);
- $opera_sort = (isset($base_room['MAIN_ID']) && OperaSort::findOne(['base_room_id' => $base_room['MAIN_ID'], 'hotel_id' => $hotel_id]) != null) ? OperaSort::findOne(['base_room_id' => $base_room['MAIN_ID'], 'hotel_id' => $hotel_id]): new OperaSort();
-
- if($opera_sort->load($opera_sort_arr, '') && $opera_sort->validate()) {
- if(!$opera_sort->save()) {
- throw new \Exception('修改排序');
- }
- }
-
- $room_type_all .= $base_room->MAIN_ID . ',';
- }
-
- $room_type_all = trim($room_type_all, ',');
-
- if($room_type_all != $hotel->ROOM_TYPE_ALL || $room_type_all != $hotel->ROOM_TYPE_SALE) {
- $hotel->ROOM_TYPE_ALL = $room_type_all;
- $hotel->ROOM_TYPE_SALE = $room_type_all;
- if(!$hotel->update()) {
- throw new \Exception();
- }
- }
-
- $transaction->commit();
- Yii::$app->session->setFlash('success', "修改成功!");
- $already_connenct = HotelRelation::findOne(['HotelId' => $hotel_id, 'ChannelId' => Yii::$app->params['ali']['relation_supplier_id']]);
- if(!empty($already_connenct)) {
- Yii::$app->runAction('hotel/ali/add-hotel', ['hotel_id' => $hotel_id]);
- }
- return json_encode(array('code' => 0, 'msg' => 'success'));
- } catch (\Exception $e) {
- Yii::$app->session->setFlash('error', "修改失败!");
- $transaction->rollBack();
-
- return json_encode(array('code' => 1, 'msg' => 'error', 'hotel_id' => $hotel_id));
- }
- }
- // 根据地区编号判断AREA_LEVE
- $area = BaseAreaView::findOne(['AREA_ID' => $area_id]);
-
- if($area->AREA_LEVEL == 3) {
- $hotel->country = $area_id;
- $parent_area = $area->PARENT_AREA_ID_LIST;
- $parent_area = trim($parent_area, '{}');
- $parent_arr = explode('}{', $parent_area);
- $hotel->province = $parent_arr[0];
- $hotel->city = $parent_arr[1];
- } else {
- $hotel->country = 0;
- $hotel->city = $area_id;
- $parent_area = $area->PARENT_AREA_ID_LIST;
- $parent_area = trim($parent_area, '{}');
- $hotel->province = $parent_area;
- }
-
- return $this->render('base', ['view' => 'addHotel', 'data' => $data, 'op' => 'modify']);
- }
-
- /**
- * @Author wanglg
- * @Desc 酒店大图多图上传
- * @return string
- */
- public function actionUploadeMulity()
- {
- $hotel_id = empty(Yii::$app->request->get('hotel_id')) ? Yii::$app->session->get('new_hotel_id'): Yii::$app->request->get('hotel_id');
-
- if(empty($hotel_id) || empty($_FILES['file'])) {
- return '缺少必要信息';
- }
- // 上传文件之前查询文件是否存在
- $keys = array('name', 'type', 'tmp_name', 'error', 'size');
- $imgSeq = BaseImg::find()->select(['MAX(SEQ_ID) as seq'])->where(['IMG_TYPE' => 25, 'PRODUCT_ID' => $hotel_id])->asArray()->one();
- $files_arr = array();
- for ($i = 0; $i < count($_FILES['file']['name']); $i++) {
- $file = array_column($_FILES['file'], $i);
- $files_arr[$i] = array_combine($keys, $file);
- }
-
- $tran = Yii::$app->db->beginTransaction();
- foreach ($files_arr as $key => $file) {
- $newModel = new BaseImg();
- $name = $file['name']; // 获取文件名称
- $imgType = strtolower(substr(strrchr($name, '.'), 1)); // 获取文件后缀
- $hotel_img_path = Yii::$app->basePath . '/web' . Yii::$app->params['hotelImagePath']; // 图片路径
- $hotel_img_name = OperaHotelBaseRoom::getImgName($hotel_img_path, '.' . $imgType); // 生成文件名称
- $uploadfile = $hotel_img_path . $hotel_img_name; // 组合上传路径
- list($orgWidth, $orgHeight) = getimagesize($file['tmp_name']);
- $typeArr = array("jpg", "png", "gif");
- if(!in_array($imgType, $typeArr)) {
- return '请检查上传文件格式';
- }
-
- // 图片等比缩放
- $newImg = imagecreatetruecolor(750, 340);
-
- switch ($imgType) {
- case 'jpg':
- $img = imagecreatefromjpeg($file['tmp_name']);
- break;
-
- case 'png':
- $img = imagecreatefrompng($file['tmp_name']);
- break;
-
- case 'gif':
- $img = imagecreatefromgif($file['tmp_name']);
- break;
-
- default:
- // return json_encode(array('code' => 2, 'msg' => '创建图片失败'));
- return '创建图片失败';
- }
-
- imagecopyresized($newImg, $img, 0, 0, 0, 0, 750, 340, $orgWidth, $orgHeight);
- // 组合创建文件的函数名称
- $createImgFunName = 'image' . (($imgType == 'jpg') ? 'jpeg': $imgType);
- $createImgFunName($newImg, $uploadfile);
- imagedestroy($newImg);
- imagedestroy($img);
-
- $imgSeq['seq']++;
- $insert_arr = array('SEQ_ID' => $imgSeq['seq'], 'IMG_TYPE' => 25, 'PRODUCT_ID' => $hotel_id, 'IMG_URL' => 'http://' . CS1_DOMAIN . Yii::$app->params['hotelImagePath'] . $hotel_img_name, 'IMG_NAME' => $name);
- // 保存数据再base_img表中
- if($newModel->load($insert_arr, '') && $newModel->validate()) {
- if(!$newModel->save()) {
- $tran->rollBack();
-
- return '上传失败';
- }
- }
- }
-
- // 记录操作日志信息
- $log_model = new OperaHotelLog();
- $log_model->LOG_TYPE = 1;
- $log_model->HOTEL_ID = $hotel_id;
- $log_model->LOG_DESC = '图片上传:上传图片数量' . count($files_arr);
- $log_model->save();
- $tran->commit();
-
- return '上传成功';
- }
-
- /**
- * @Author wanglg
- * @Desc 酒店图片删除(多图上传)
- * @return bool|string
- */
-
- public function actionDelHotelImg()
- {
- $request = Yii::$app->request->post();
- $model = BaseImg::findOne(['IMG_URL' => $request['src'], 'PRODUCT_ID' => $request['hotel_id'], 'CANCEL_FLAG' => 0, 'IMG_TYPE' => 25]);
- if(!empty($model)) {
- $model->CANCEL_FLAG = 1;
- if(!$model->save()) {
- return false;
- }
- }
- $name = pathinfo($request['src'])['basename'];
- $path = Yii::$app->basePath . '/web' . Yii::$app->params['hotelImagePath'] . $name;
- unlink($path);
- $log_model = new OperaHotelLog();
- $log_model->LOG_TYPE = 1;
- $log_model->HOTEL_ID = $request['hotel_id'];
- $log_model->LOG_DESC = '删除图片:图片路径:' . $request['src'];
- $log_model->save();
-
- return true;
- }
-
- /**
- * User:Steven
- * Desc:发送消息到企业微信
- * @return bool
- */
- public function actionSendMsg()
- {
- $data = file_get_contents("php://input");
- $arr = json_decode($data, true);
- zOfficeWechat::sendMsg($arr);
-
- return true;
- }
-
- // 省市联动
- public function actionProvincecity()
- {
- $area_id = $area_id = isset($_REQUEST['area_id']) ? $_REQUEST['area_id']: "0"; //默认为0
- if(empty($area_id)) {
- $area_id = "0";
- }
- $obj = new Report();
- $data = $obj->getProvinceCity($area_id);
- echo json_encode($data);
- }
-
- public function beforeAction($action)
- {
- $obj = new Report();
- $supp = $obj->getSuppList();
- $sale = $obj->getSaleList();
- $hotel = $obj->getHotelList();
- $this->view->params['supp'] = $supp;
- array_unshift($sale, ['id' => '0', 'sale_org_name' => '请选择']);
- $this->view->params['sale'] = $sale;
- array_unshift($hotel, ['hotel_id' => '0', 'hotel_name' => '请选择']);
- $this->view->params['hotel'] = $hotel;
-
- return parent::beforeAction($action);
- }
-
- /**
- * User:Steven
- * Desc: 酒店价格预警 渠道的分销价(零售价)低于酒店的结算价时进行报警提醒酒店的运营负责人
- */
- public function actionPriceWarning()
- {
- $query = OperaHotel::find()
- ->innerJoinWith("hotelRelation b", false)
- ->leftJoin('base_user c', 'a.PRINCIPAL=c.ID')
- ->from('opera_hotel a')->where(['a.CANCEL_FLAG' => 0, 'a.HOTEL_STATUS' => 1]);
- $query->select(['a.HOTEL_ID', 'a.HOTEL_NAME', 'a.SUPPLIER_ID', 'a.ROOM_TYPE_SALE', 'a.PRINCIPAL', 'c.USER_NAME']);
- $res = $query->asArray()->all();
- foreach ($res as $val) {
- $rs = array();
- $base_room_arr = explode(',', $val['ROOM_TYPE_SALE']);
- foreach ($base_room_arr as $base_room) {
- //先查询当前酒店当前房型的所有子房型
- $sub_room = OperaHotelRoom::find()->innerJoinWith('roomRelation b')->from('opera_hotel_room a')
- ->where(['a.HOTEL_ID' => $val['HOTEL_ID'], 'a.PARENT_ROOM_TYPE' => $base_room, 'b.ChannelId' => Yii::$app->params['ctrip']['relation_supplier_id'], 'a.CANCEL_FLAG' => 0]);
- $sub_room->select(['a.ROOM_TYPE', 'a.ROOM_NAME', 'a.INNER_IDENTIFY']);
- $sub_room = $sub_room->asArray()->all();
-
- foreach ($sub_room as $s_r) {
- $run_hotel_sub_room = RunHotelSubRoom::find()->joinWith('operaHotelRoom b')->from('run_hotel_sub_room a')
- ->where(['a.HOTEL_ID' => $val['HOTEL_ID'], 'a.BASE_ROOM_TYPE' => $base_room, 'a.ROOM_TYPE' => $s_r['ROOM_TYPE'], 'a.IS_ONSALE' => 1]);
- $run_hotel_sub_room->select(['a.HOTEL_ID', 'a.BASE_ROOM_TYPE', 'a.ROOM_TYPE', 'a.RUN_DATE', 'a.BASE_PRICE_BUYOUT', 'a.BASE_PRICE_RESERVE',
- 'a.BASE_PRICE_INQUIRY', 'b.ROOM_NAME', 'b.INNER_IDENTIFY', 'a.IS_ONSALE', 'a.RUN_STATUS']);
- $run_hotel_sub_room->andFilterWhere([
- 'between', 'RUN_DATE', date('Y-m-d', time()), date('Y-m-d', strtotime("+30 days")),
- ]);
- $rs[] = $run_hotel_sub_room->asArray()->all();
- }
- }
- foreach ($rs as $value) {
- $date_str = '';
- $room_name = '';
- $res_dis = '';
- foreach ($value as $item) {
- //获取该房型下渠道为携程某段日期的房态、房量等信息
- $room_name = $item['ROOM_NAME'] . $item['INNER_IDENTIFY'];
- $run_hotel_distrib = RunHotelDistrib::find()
- ->joinWith('baseSupplier b')->joinWith('baseSupplierSale c')
- ->leftJoin('opera_room_distrib d', 'd.DISTRIB_ID=a.DISTRIB_ID and d.ROOM_ID=' . $item['operaHotelRoom']['ID'])
- ->from('run_hotel_distrib a')
- ->where(['a.HOTEL_ID' => $item['HOTEL_ID'], 'a.BASE_ROOM_TYPE' => $item['BASE_ROOM_TYPE'], 'a.ROOM_TYPE' => $item['ROOM_TYPE'], 'a.RUN_DATE' => $item['RUN_DATE'], 'c.PARENT_TYPE' => 25, 'a.DISTRIB_ID' => Yii::$app->params['ctrip']['supplier_id']]);
- $run_hotel_distrib->select(['a.DISTRIB_ID', 'a.PROD_PRICE', 'a.CUS_PRICE', 'c.SALE_TYPE', 'b.SUPPLIER_NAME', 'a.RUN_STATUS', 'd.AUTHORITY_STATUS']);
- $res_dis = $run_hotel_distrib->asArray()->all();
- $price = $item['BASE_PRICE_BUYOUT'] > 0 ? $item['BASE_PRICE_BUYOUT']: ($item['BASE_PRICE_RESERVE'] > 0 ? $item['BASE_PRICE_RESERVE']: ($item['BASE_PRICE_INQUIRY'] > 0 ? $item['BASE_PRICE_INQUIRY']: 0));
-
- //(分销177、直营312、代理277)
- $distribe_price = $res_dis[0]['SALE_TYPE'] == 177 ? $res_dis[0]['PROD_PRICE']: $res_dis[0]['CUS_PRICE'];
- if($item['IS_ONSALE'] == 1 && $item['RUN_STATUS'] == 1 && $res_dis[0]['RUN_STATUS'] != 329 && $res_dis[0]['AUTHORITY_STATUS'] == 1 && $distribe_price != '' && $price > $distribe_price + 0.1) {
- //检查是否直连
- $user = $val['USER_NAME'];
- $date_str .= $item['RUN_DATE'] . "【$distribe_price" . "/" . $price . "】\n";
-
- }
- }
- if($date_str != '') {
- $msg = '酒店名称:' . $val['HOTEL_NAME'] . "\n房型名称:" . $room_name . "\n渠道商名称:" . $res_dis[0]['SUPPLIER_NAME'] . "\n异常日期:日期(渠道结算/酒店结算)\n" . $date_str . "\n原因:渠道分销价(或零售价)小于酒店结算价";
- $arr = array(
- "agentid" => 1000002,
- "title" => '酒店价格预警:',
- "msg" => $msg,
- "touser" => $user,
- );
- zOfficeWechat::sendMsg($arr);
- }
- }
-
- }
- }
-
- /**
- * User:Steven
- * Desc:(携程直连)添加需要特殊处理的订单
- */
- public function actionAddExceptionOrder()
- {
- $exception_order = new OrderHtExceptionList();
- $exception_order->status = 1;
- if($exception_order->load(Yii::$app->request->post())) {
- $transaction = Yii::$app->db->beginTransaction();
- try {
- if(!$exception_order->save()) {
- throw new \Exception();
- }
- $transaction->commit();
-
- return "<script>alert('添加成功!')</script>";
- } catch (\Exception $e) {
- $transaction->rollBack();
-
- return "<script>alert('添加失败!')</script>";
- }
- }
- $data['exceptionOrder'] = $exception_order;
-
- return $this->render('base', ['view' => 'addExceptionOrder', 'data' => $data]);
- }
-
- /**
- * User:Steven
- * Desc:(携程直连)我们系统下单失败,但是不希望客人改订,需要在新订失败后返回状态码为1(待确认)
- */
- public function actionUpdateOrderLost()
- {
- $flag = false;
- $orderChannelInfo = new OrderChannelInfo(['scenario' => 'error_order']);
- if(Yii::$app->request->post()) {
- $param = Yii::$app->request->post('OrderChannelInfo');
- $outside_order_id = trim($param['channel_order_id']);
- $order_id = trim($param['ORDER_ID']);
- $effect_count = OrderChannelInfo::updateAll([
- 'ORDER_ID' => $order_id,
- ], "CANCEL_FLAG=0 and channel_order_id=$outside_order_id");
- OrderMain::updateAll([
- 'DOCKING_TYPE' => 556,
- 'CHANNEL_ORDER_STATUS' => 550,
- ], "ORDER_ID=$order_id or PARENT_ORDER_ID=$order_id");
- $flag = true;
- }
-
- $data['orderChannelInfo'] = $orderChannelInfo;
- $data['flag'] = $flag;
-
- return $this->render('base', ['view' => 'updateOrderLost', 'data' => $data]);
- }
-
- /**
- * User:Steven
- * Desc:部分酒店基础房型库存预警
- *
- */
- public function actionRoomCountWarning()
- {
- $run_hotel = new RunHotel();
- $room_arr = array(
- 9797,//上海花园饭店 高级房
- 150077,//上海花园饭店 豪华房
- /* 100324,//舟山希尔顿 海景房
- 150024, //舟山希尔顿 湖景房*/ //合并房型已拆分
- 100074,//舟山希尔顿 豪华湖景大床房
- 100075, //舟山希尔顿 豪华湖景双床房
- 150101,//昆山皇冠假日酒店 皇冠高级房
- 150152,//昆山皇冠假日酒店 皇冠豪华房
- 150088,//浦西万怡 豪华房
- 9752, //舟山希尔顿 湖景双床房
- 100073,//舟山希尔顿 湖景大床房
- 150139,//舟山希尔顿 海景大床房
- 150140,//舟山希尔顿 海景双床房
- 9931,//上海虹桥元一希尔顿酒店 希尔顿客房(双床)(双早)
- 150468,//千岛湖滨江希尔顿度假酒店 希尔顿客房大床
- 150469,//千岛湖滨江希尔顿度假酒店 希尔顿客房双床
-
- );
- foreach ($room_arr as $base_room_id) {
- $res = $run_hotel->getRunHotelCount($base_room_id);
- $date_str = '';
- foreach ($res as $item) {
- if($item['buyout'] < 5) {
- $date_str .= $item['run_date'] . "【买断余量:" . $item['buyout'] . "】\n";
- }
- }
- $user = $item['USER_NAME'];
- if($date_str != '') {
- $msg = '酒店名称:' . $item['hotel_name'] . "\n基础房型名称:" . $item['base_room_name'] . "\n" . $date_str . "\n原因:该房型基础房型买断库存数量小于5,请及时关注。";
- $arr = array(
- "agentid" => 1000002,
- "title" => '酒店基础房型买断库存预警:',
- "msg" => $msg,
- "touser" => $user,
- );
- zOfficeWechat::sendMsg($arr);
- }
- }
- }
-
- /**
- * User:Steven
- * Desc:(徐安)上海花园饭店 合并房型及拆分房型已售数量统计
- * @return string
- */
- public function actionRoomSaledCount()
- {
- $runHotel = new RunHotel();
- $res = $runHotel->getRoomSaledCount();
-
- return $this->render('base', ['view' => 'roomSaledCount', 'data' => $res]);
- }
-
- /**
- * User:Steven
- * Desc:按发单维度订单数据统计 需要按照发单人统计订单,服务于客服的绩效分析
- */
- public function actionGetTemOrder()
- {
- $order_main = new OrderMain();
- $res = $order_main->getTemOrder();
-
- return $this->render('base', ['view' => 'temOrderAnalysis', 'data' => $res]);
- }
-
-
- /**
- * User:Steven
- * Desc:酒店房型排序
- * @return string
- */
- public function actionHotelRoomOrder()
- {
- $operaSort = new OperaSort();
- $hotel_list = $operaSort->getDirectHotel();
- if(Yii::$app->request->isPost || Yii::$app->request->isGet) {
- $HOTEL_ID = is_null(Yii::$app->request->post('HOTEL_ID')) ? Yii::$app->request->get('HOTEL_ID'): Yii::$app->request->post('HOTEL_ID');
- }
- is_null($HOTEL_ID) ? $HOTEL_ID = $hotel_list[0]['HOTEL_ID']: $HOTEL_ID;
- $baseRoomData = $operaSort->getBaseRoomData($HOTEL_ID);
- $roomData = $operaSort->getRoomData($HOTEL_ID);
- foreach ($baseRoomData as $item) {
- $arr[$item['parent_room_type']] = array(
- 'hotel_id' => $item['hotel_id'],
- 'parent_room_name' => $item['base_room_name'],
- 'seq' => $item['seq'],
- );
- }
- foreach ($roomData as $value) {
- $arr[$value['parent_room_type']]['list'][$value['room_type']] = array(
- 'room_name' => $value['room_name'],
- 'inner_identify' => $value['inner_identify'],
- 'seq' => $value['seq'],
- );
- }
- $data['roomData'] = $arr;
- $data['hotel_list'] = $hotel_list;
-
- return $this->render('base', ['view' => 'hotelRoomOrder', 'data' => $data]);
- }
-
- /**
- * 更新房型顺序
- */
- public function actionUpdateRoomOrder()
- {
- if(Yii::$app->request->isPost) {
- $request = Yii::$app->request->post();
- if($request['type'] == 1) {//修改基础房型
- OperaSort::updateAll(['seq' => $request['seq']],
- ['hotel_id' => $request['hotel_id'], 'base_room_id' => $request['parent_roon_type'], 'room_id' => 0, 'channel_id' => 0]);
- } elseif($request['type'] == 2) { //修改子房型
- OperaSort::updateAll(['seq' => $request['seq']],
- ['hotel_id' => $request['hotel_id'], 'base_room_id' => $request['parent_roon_type'], 'room_id' => $request['room_type'], 'channel_id' => 0]);
- }
- }
-
- }
-
- /**
- * 生成房型排序
- * @return bool
- */
- /*public function actionCreate()
- {
- $res = OperaHotelBaseRoom::find()->select(['HOTEL_ID', 'MAIN_ID'])->where([])->orderBy(['HOTEL_ID' => SORT_ASC, 'MAIN_ID' => SORT_DESC])->asArray()->all();
- foreach ($res as $item) {
- $arr[$item['HOTEL_ID']][] = $item['MAIN_ID'];
- }
- foreach ($arr as $key => $val) {
- $i = 0;
- foreach ($val as $v) {
- $i++;
- $model = new OperaSort();
- $model->base_room_id = $v;
- $model->channel_id = 0;
- $model->hotel_id = $key;
- $model->room_id = 0;
- $model->seq = $i;
- $rs=$model->save();
- }
- }
-
- $res = OperaHotelRoom::find()->select(['HOTEL_ID', 'PARENT_ROOM_TYPE', 'ROOM_TYPE'])
- ->orderBy(['HOTEL_ID' => SORT_ASC, 'PARENT_ROOM_TYPE' => SORT_ASC, 'ROOM_TYPE' => SORT_ASC])
- ->asArray()->all();
- foreach ($res as $item) {
- $arr[$item['HOTEL_ID']][$item['PARENT_ROOM_TYPE']][] = $item['ROOM_TYPE'];
- }
-
- foreach ($arr as $key => $value) {
- foreach ($value as $k => $v) {
- $i = 0;
- foreach ($v as $v1) {
- $i++;
- $model = new OperaSort();
- $model->base_room_id = $k;
- $model->channel_id = 0;
- $model->hotel_id = $key;
- $model->room_id = $v1;
- $model->seq = $i;
- $rs = $model->save();
- }
-
- }
- }
- return true;
- }*/
-
- /**
- * User: wanglg
- *
- * 前端选择省市联动返回数据
- *
- * @params integer $pid 父ID
- *
- * @return mixed
- */
- public function actionAreaView()
- {
- if(Yii::$app->request->isAjax) {
- $baseArea = BaseAreaView::getBaseArea(Yii::$app->request->post('pid'));
-
- return Json::encode($baseArea);
- } else {
- throw new NotFoundHttpException('页面未找到!');
- }
- }
-
- public function action_province()
- {
- $id = $_REQUEST['id'];
- $baseArea = BaseAreaView::findOne(['AREA_ID' => $id]);
- $model = new OperaHotel();
- if($baseArea != null) {
- //选择省
- if($baseArea->PARENT_AREA_ID == 0) {
- $pid['id1'] = 0;
- $pid['id2'] = $id;
- $tmp = BaseAreaView::findOne(['PARENT_AREA_ID' => $id]);
- if($tmp != null) {
- $pid['id3'] = $tmp->AREA_ID;
- } else {
- $pid['id3'] = '';
- }
- $model->province = $id;
- }
- //选择市
- if($baseArea->PARENT_AREA_ID != 0 && $baseArea->AREA_LEVEL == 2) {
- $pid['id1'] = 0;
- $pid['id2'] = $baseArea->PARENT_AREA_ID;
- $pid['id3'] = $baseArea->AREA_ID;
- $model->province = $baseArea->PARENT_AREA_ID;
- $model->city = $id;
- }
- }
-
- return $this->renderPartial('_province', ['model' => $model, 'pid' => $pid]);
- }
-
- /**
- * Author:Steven
- * Desc:获取酒店内存中的数据
- */
- public function actionGetMem()
- {
- $this->layout = "@backend/modules/motorcade/views/layouts/iframe_new";
- $cache = Yii::$app->cacheCS;
- $cache->encrypt = false;
- $newOrder = $cache->get('hotel_newOrder');
-
- return $this->render('base', ['view' => 'hotelMemData', 'data' => $newOrder]);
- }
-
- /**
- * @Author wanglg
- * @Desc 比较内存中的订单状态与数据库订单状态是否一致,不一致手动清除缓存中的订单
- * @return string
- */
- public function actionDiffOrder()
- {
- $cache = Yii::$app->cacheCS;
- $cache->encrypt = false;
- $newOrder = $cache->get('hotel_newOrder');
- $order_arr = array();
- foreach ($newOrder as $key => $supplier) {
- foreach ($supplier as $order) {
- if($order['order_id'] == '1942584' || $order['order_id'] == '1914846') {
- continue;
- }
- $order_id = $order['order_id'];
- $status = $order['type'];
- $order_info = OrderMain::findOne(['CANCEL_FLAG' => 0, 'ORDER_PROD_TYPE' => 25, 'ORDER_ID' => $order_id]);
- if($status != $order_info->ORDER_STATUS && !empty($order_info)) {
- $order_arr[] = $order_id;
- }
- }
- }
-
- if(!empty($order_arr)) {
- $orders = implode(',', $order_arr);
- zOfficeWechat::sendMsg([
- 'agentid' => zOfficeWechat::SEND_HOTEL,
- "title" => '【缓存订单状态不一致通知】检查缓存订单:',
- "msg" => "订单列表:\n" . $orders,
- "touser" => 'wanglg',]);
-
- return 1;
- }
-
- return false;
- }
-
- /**
- * Author:Steven
- * Desc:移除内存中个别订单
- * @param $order_id
- * @return string
- */
- public function actionRemoveMem($order_id)
- {
- OrderMain::resetMemcache($order_id);
-
- return \GuzzleHttp\json_encode(['code' => 0]);
- }
-
- public function actionSetOrderSupp($id)
- {
- $cache = Yii::$app->cacheCS;
- $cache->encrypt = false;
- $newOrder = $cache->get('hotel_newOrder');
- $order_arr = array();
- foreach ($newOrder as $key => $supplier) {
- $tmp[$id] = $supplier;
- $cache->set('hotel_newOrder', $tmp, 0, 0);
- }
-
-
- }
- }
-
- ?>
|