[
'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);
}
}
}
?>