_endOrder(); } /** * 将已支付的,并且结束时间到期的订单结束掉 */ private function _endOrder(){ $date = date('Y-m-d'); $hours = date('H'); if($hours > 13){ $orderModel = new OrderModel(); $orderModel->upInfo(['status'=>1,'end_date'=>['elt',$date]],['status'=>3]); }else{ $orderModel = new OrderModel(); $orderModel->upInfo(['status'=>1,'end_date'=>['lt',$date]],['status'=>3]); } } /** * 通过条件获取房间类型的分页 */ public function getRoomPageByCondition(){ $param_list = [ 'page'=>'number', 'pageSize'=>'number', ]; HelperService::diffParam($param_list,$this->post); $where = []; //判断可选项 hotel_id if(isset($this->post['hotel_id']) && is_numeric($this->post['hotel_id'])){ $where['hotel_id'] = $this->post['hotel_id']; } //判断可选项 room_name if(isset($this->post['room_name']) && is_string($this->post['room_name'])){ $where['room_name'] = ['like',"%{$this->post['room_name']}%"]; } //判断可选项 status if(isset($this->post['status']) && is_numeric($this->post['status'])){ $where['status'] = $this->post['status']; } $page = $this->post['page']>1?$this->post['page']:1; $pageSize = $this->post['pageSize']>2?$this->post['pageSize']:2; $roomModel = new RoomModel(); $roomList = $roomModel->getPage($where,'sort desc,room_id desc',$page,$pageSize); //取出list部分 $list = $roomList['list']; $hotelModel = new HotelModel(); //获取当前所有的正常运行的hotel $hotel_list = $hotelModel->getList(['status'=>0],'',1000); $hotel_list = $this->toArray($hotel_list); $hotel_list = array_column($hotel_list,'hotel_name','hotel_id'); foreach($list as &$item){ $item['hotel_name'] = $hotel_list[$item['hotel_id']]; $item['room_imgs'] = $item['room_imgs']?json_decode($item['room_imgs'],true):$item['room_imgs']; $item['base_info'] = $item['base_info']?json_decode($item['base_info'],true):$item['base_info']; $item['base_attr'] = $item['base_attr']?json_decode($item['base_attr'],true):$item['base_attr']; $item['base_other'] = $item['base_other']?json_decode($item['base_other'],true):$item['base_other']; } $roomList['list'] = $list; $this->returnJson($roomList); } /** * 获取房间信息,通过room_id */ public function getRoomInfoByRoomId(){ $param_list = [ 'room_id'=>'number', ]; HelperService::diffParam($param_list,$this->post); $roomModel = new RoomModel(); $roomInfo = $roomModel->getOne(['room_id'=>$this->post['room_id']]); $roomInfo['room_imgs'] = $roomInfo['room_imgs']?json_decode($roomInfo['room_imgs'],true):$roomInfo['room_imgs']; $roomInfo['base_info'] = $roomInfo['base_info']?json_decode($roomInfo['base_info'],true):$roomInfo['base_info']; $roomInfo['base_attr'] = $roomInfo['base_attr']?json_decode($roomInfo['base_attr'],true):$roomInfo['base_attr']; $roomInfo['base_other'] = $roomInfo['base_other']?json_decode($roomInfo['base_other'],true):$roomInfo['base_other']; $hotelModel = new HotelModel(); //获取当前所有的正常运行的hotel $hotel_list = $hotelModel->getList(['status'=>0],'',1000); $hotel_list = $this->toArray($hotel_list); $hotel_list = array_column($hotel_list,'hotel_name','hotel_id'); $roomInfo['hotel_name'] = $hotel_list[$roomInfo['hotel_id']]; $this->returnJson($roomInfo); } /** * 保存房间信息 */ public function saveRoom(){ $param_list = [ 'hotel_id'=>'number', 'room_name'=>'string', 'room_price'=>'number', 'total_number'=>'number', 'room_imgs'=>'array', 'base_info'=>'array', 'base_attr'=>'array', 'base_other'=>'array', ]; HelperService::diffParam($param_list,$this->post); $data = [ 'hotel_id'=>$this->post['hotel_id'], 'room_name'=>$this->post['room_name'], 'room_price'=>$this->post['room_price'], 'total_number'=>$this->post['total_number'], 'room_imgs'=>json_encode($this->post['room_imgs']), 'base_info'=>json_encode($this->post['base_info']), 'base_attr'=>json_encode($this->post['base_attr']), 'base_other'=>json_encode($this->post['base_other']) ]; $roomModel = new RoomModel(); if(isset($this->post['room_id']) && is_numeric($this->post['room_id'])){ //修改 $where = [ 'room_id'=>$this->post['room_id'] ]; $row = $roomModel->upInfo($where,$data); $this->returnJson(['row'=>$row]); } //添加 $id = $roomModel->addInfo($data); $this->returnJson(['id'=>$id]); } /** * 修改房间状态或者修改房间排序字段 */ public function updateRoomField(){ $param_list = [ 'room_id'=>'number', ]; HelperService::diffParam($param_list,$this->post); $data = []; if(isset($this->post['status']) && is_numeric($this->post['status'])){ $data['status'] = $this->post['status']; } if(isset($this->post['sort']) && is_numeric($this->post['sort'])){ $data['sort'] = $this->post['sort']; } if(empty($data)){ $this->returnJson('you must give me status or sort,but you do not',4001,'error'); } $roomModel = new RoomModel(); $row = $roomModel->upInfo(['room_id'=>$this->post['room_id']],$data); $this->returnJson(['row'=>$row]); } /** * 通过条件获取酒店的列表 */ public function getHotelPageByCondition(){ $param_list = [ 'page'=>'number', 'pageSize'=>'number', ]; HelperService::diffParam($param_list,$this->post); $page = $this->post['page']>1?$this->post['page']:1; $pageSize = $this->post['pageSize']>2?$this->post['pageSize']:2; $where = []; if(isset($this->post['name'])){ $where['hotel_name'] = ['like',"%{$this->post['name']}%"]; } $hotelModel = new HotelModel(); $hotelPage = $hotelModel->getPage($where,'',$page,$pageSize); $this->returnJson($hotelPage); } /** * 通过条件获取订单分页信息 */ public function getOrderPageByCondition(){ $param_list = [ 'page'=>'number', 'pageSize'=>'number', ]; HelperService::diffParam($param_list,$this->post); $where = []; if(isset($this->post['order_no']) && is_string($this->post['order_no'])){ $where['order_no'] = ['like','%'.$this->post['order_no']."%"]; } if(isset($this->post['start_date']) && is_string($this->post['start_date'])){ $where['start_date'] = $this->post['start_date']; } if(isset($this->post['end_date']) && is_string($this->post['end_date'])){ $where['end_date'] = $this->post['end_date']; } if(isset($this->post['add_time']) && is_string($this->post['add_time'])){ $where['add_time'] = ['between',$this->post['add_time'],$this->post['add_time']+86400]; } if(isset($this->post['hotel_id']) && is_string($this->post['hotel_id'])){ $where['hotel_id'] = $this->post['hotel_id']; } if(isset($this->post['user_id']) && is_numeric($this->post['user_id'])){ $where['user_id'] = $this->post['user_id']; } if(isset($this->post['room_id']) && is_numeric($this->post['room_id'])){ $where['room_id'] = $this->post['room_id']; } $where['status'] = ['neq',6]; if(isset($this->post['status']) && is_numeric($this->post['status'])){ $where['status'] = $this->post['status']; } if(isset($this->post['status_show']) && is_string($this->post['status_show'])){ $where['status_show'] = $this->post['status_show']; } $page = $this->post['page']>1?$this->post['page']:1; $pageSize = $this->post['pageSize']>2?$this->post['pageSize']:2; if($pageSize>=100){ $this->returnJson([],400,'pageSize must lt 100'); } $orderModel = new OrderModel(); $orderPage = $orderModel->getPage($where,"order_id desc",$page,$pageSize); $this->returnJson($orderPage); } /** * 通过条件获取订单信息 */ public function getUserOrderByType(){ $param_list = [ 'user_id'=>'number', 'status'=>'int' ]; HelperService::diffParam($param_list,$this->post); if(!in_array($this->post['status'],[0,1,2,3,5,10])){ $this->returnJson([],400,'status is error'); } $params = []; $params['user_id'] = $this->post['user_id']; if($this->post['status']!=10){ $params['status'] = $this->post['status']; } $OrderModel = new OrderModel(); $Order = $OrderModel->getList($params,'start_date desc'); $roomModel = new RoomModel(); foreach($Order as &$orderItem){ $room_id = $orderItem['room_id']; $room = $roomModel->getOne(['room_id'=>$room_id]); !empty($room['room_imgs'])?$room['room_imgs'] = json_decode($room['room_imgs']):''; !empty($room['base_info'])?$room['base_info'] = json_decode($room['base_info']):''; !empty($room['base_attr'])?$room['base_attr'] = json_decode($room['base_attr']):''; !empty($room['base_other'])?$room['base_other'] = json_decode($room['base_other']):''; $orderItem['roomInfo'] = $room; } $this->returnJson($Order); } /** * 添加订单信息 */ public function addOrder(){ $param_list = [ 'user_id'=>'number', 'hotel_id'=>'number', 'room_id'=>'number', 'total_room_num'=>'number', 'arrive_time'=>'string', 'start_date'=>'string', 'end_date'=>'string' ]; HelperService::diffParam($param_list,$this->post); $roomModel = new RoomModel(); $row = $roomModel->getOne(['room_id'=>$this->post['room_id']]); $price_single = $row['room_price']; $diff_date = (strtotime($this->post['end_date']) - strtotime($this->post['start_date']))/86400; $order_no = $this->createOrderNum(); $data = [ 'order_no'=>$order_no, 'user_id'=>$this->post['user_id'], 'hotel_id'=>$this->post['hotel_id'], 'room_id'=>$this->post['room_id'], 'total_price'=>$price_single*($this->post['total_room_num'])*$diff_date, 'total_room_num'=>$this->post['total_room_num'], 'status'=>0, 'arrive_time'=>$this->post['arrive_time'], 'start_date'=>$this->post['start_date'], 'end_date'=>$this->post['end_date'], 'add_time'=>time(), 'note'=>isset($this->post['note'])?$this->post['note']:null, 'detail'=>isset($this->post['detail'])?$this->post['detail']:null, ]; $orderModel = new OrderModel(); $order_id=$orderModel->addInfo($data); $this->returnJson(['order_no'=>$order_no,'order_id'=>$order_id]); } /** * 后台修改订单状态 */ public function backUpdateOrderStatus(){ $param_list = [ 'status'=>'number', 'order_id'=>'number', ]; HelperService::diffParam($param_list,$this->post); $orderModel = new OrderModel(); $where = [ 'order_id'=>$this->post['order_id'], ]; $data = [ 'status'=>$this->post['status'], ]; if(isset($this->post['back_note'])){ $data['back_note'] = $this->post['back_note']; } $row = $orderModel->upInfo($where,$data); $this->returnJson(['row'=>$row]); } /** * 后台修改订单状态 */ public function UpdateOrderStatusShow(){ $param_list = [ 'status_show'=>'number', 'order_id'=>'number', ]; HelperService::diffParam($param_list,$this->post); $orderModel = new OrderModel(); $where = [ 'order_id'=>$this->post['order_id'], ]; $data = [ 'status_show'=>$this->post['status_show'], ]; if(isset($this->post['back_note'])){ $data['back_note'] = $this->post['back_note']; } $row = $orderModel->upInfo($where,$data); $this->returnJson(['row'=>$row]); } /** * 前台修改订单状态 */ public function frontUpdateOrderStatus(){ $param_list = [ 'status'=>'number', 'order_no'=>'number', ]; HelperService::diffParam($param_list,$this->post); $orderModel = new OrderModel(); $where = [ 'order_no'=>$this->post['order_no'], ]; $data = [ 'status'=>$this->post['status'], ]; if(isset($this->post['note'])){ $data['note'] = $this->post['note']; } $row = $orderModel->upInfo($where,$data); $this->returnJson(['row'=>$row]); } /** * 获取酒店信息,根据酒店id */ public function getHotelInfoById(){ $param_list = [ 'hotel_id'=>'number', ]; HelperService::diffParam($param_list,$this->post); $hotelModel = new HotelModel(); $res = $hotelModel->getOne(['hotel_id'=>$this->post['hotel_id']]); $this->returnJson($res); } /** * 根据订单id获取订单信息 */ public function getOrderInfoById(){ $param_list = [ 'order_id'=>'number' ]; HelperService::diffParam($param_list,$this->post); $orderModel = new OrderModel(); $order = $orderModel->getOne(['order_id'=>$this->post['order_id']]); $this->returnJson($order); } /** * 根据订单id获取订单信息 */ public function getOrderInfoByOrderNo(){ $param_list = [ 'order_no'=>'string' ]; HelperService::diffParam($param_list,$this->post); if(strlen($this->post['order_no']) > 16){ $this->returnJson([],400,'order_no is error'); } $orderModel = new OrderModel(); $order = $orderModel->getOne(['order_no'=>$this->post['order_no']]); $this->returnJson($order); } /** * 获取房间剩余数量的列表 */ public function getHotelRemainRoom(){ $param_list = [ 'hotel_id'=>'int', 'room_id'=>'int', 'start_date'=>'date' ]; HelperService::diffParam($param_list,$this->post); //获取当前房间的信息 $RoomModel = new RoomModel(); $RoomInfo = $RoomModel->getRoomInfo($this->post['hotel_id'],$this->post['room_id']); if(empty($RoomInfo)){ $this->returnJson([],400,"don't find this room info"); } unset($RoomInfo['room_imgs'],$RoomInfo['base_info'], $RoomInfo['base_attr'],$RoomInfo['base_other']); $start_date = strtotime($this->post['start_date']); $remainNum = []; $orderModel = new OrderModel(); for($date=$start_date;$date<$start_date+10*86400;$date+=86400){ $dateYmd = date('Y-m-d',$date); $remain = $RoomInfo['total_number'] - $orderModel->getOrderNumByDate($this->post['hotel_id'],$this->post['room_id'],$dateYmd); $remainNum[] = [ 'date'=>$dateYmd, 'remain'=>$remain<0?0:$remain]; } $this->returnJson(['roomInfo'=>$RoomInfo,'remainInfo'=>$remainNum]); } /** * 获取该酒店可预约的房间列表 */ public function getReservedRoomList(){ $param_list = [ 'hotel_id'=>'number', 'start_date'=>'date',//格式,必须YYYY-mm-dd 'end_date'=>'date', ]; HelperService::diffParam($param_list,$this->post); $start_time = strtotime($this->post['start_date']);//2017-06-25 $end_time = strtotime($this->post['end_date']);//2017-06-26 //判断时间间隔是否超过2个月,让sql调用过于频繁保护机制 if($end_time - $start_time > 86400*30){ $this->returnJson('Sorry, the time interval should not exceed one months',503,'error'); } if($end_time - $start_time < 86400){ $this->returnJson('Sorry, the interval is less than one day',503,'error'); } $roomModel = new RoomModel(); //返回的数组 $return_arr = []; for($time = $start_time;$time<$end_time; $time+=86400){ $date = date('Y-m-d',$time); $roomList = $roomModel->getReservedRoomList($this->post['hotel_id'],$date); //分析这段时间房间的情况 $return_arr = $this->_analysis($return_arr,$roomList); } $this->returnJson($return_arr); } /** * 分析房间数据 * @param $return_arr * @param $roomList */ private function _analysis($return_arr,$roomList){ foreach($roomList as $item){ //如果房间信息存在,并且房间信息已经于之前发现超限了,那么不再重新赋值 (step1) if(isset($return_arr[$item['room_id']]) && ($item['sum_num'] <= $return_arr[$item['room_id']]['sum_num'])){ continue; } //为了简化程序,不再判断当前情况下,本次的房间信息是否超限的判断,直接赋值,丢给下次循环(step1)判断 $item['room_imgs'] = json_decode($item['room_imgs']); $return_arr[$item['room_id']] = $item; } return $return_arr; } /** * 当前日期前一天的 */ public function getHotelOrderDayNum(){ $end_date = isset($this->post['end_date'])?strtotime(intval($this->post['end_date'])):strtotime(date('Y-m-d')); $start_date = isset($this->post['end_date'])?strtotime(intval($this->post['end_date'])):$end_date-7*86400; if($start_date > $end_date){ $this->returnJson([]); } if($end_date - $start_date > 20*86400){ $start_date = $end_date - 20*86400; } $backData = []; $orderModel = new OrderModel(); $hotelModel = new HotelModel(); $hotel = $hotelModel->where(['status'=>0])->select(); for($date = $start_date;$date<$end_date;$date+=86400){ //确保数据完整性,每个补充0 foreach($hotel as $hotel_item){ $backData[$hotel_item['hotel_id']][date('Y-m-d',$date)] = 0; } $orderGroup = $orderModel->field('hotel_id,count(order_id) as num')->where(['pay_time'=>['between',[$date,$date+86399]]]) ->group('hotel_id')->select(); //覆盖上面对等的值 foreach($orderGroup as $group){ $backData[$group['hotel_id']][date('Y-m-d',$date)] = intval($group['num']); } } $this->returnJson($backData); } /** * 待处理订单数目 */ public function getToDoOrder(){ $orderModel = new OrderModel(); $order = $orderModel->field('hotel_id,count(order_id) as num')->where(['status'=>1])->group('hotel_id')->select(); $this->returnJson($order); } }