[ '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 ""; } catch (\Exception $e) { $transaction->rollBack(); return ""; } } $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); } } } ?>