'全部', 1 => '待入住', 2 => '已入住', 3 => '已取消', ]; // 列表 public function list() { $params = $this->request->param(); $params['sort_distance'] = !empty($params['sort_distance']) ? $params['sort_distance'] : 1; $params['sort_price'] = !empty($params['sort_price']) ? $params['sort_price'] : 1; $params['sort_days'] = !empty($params['sort_days']) ? $params['sort_days'] : 1; $field = ['id', 'name', 'image', 'price', 'original_price', 'days', 'night', 'lat', 'lng']; if (!empty($params['lng']) && !empty($params['lng'])) { $field[] = "(st_distance(point ({$params['lng']}, {$params['lat']}),point(lng,lat))*111195) as distance"; } $query = TravelModel::field($field); if (!empty($params['lng']) && !empty($params['lng'])) { if ($params['sort_distance'] == 1) { $query->order('distance asc'); } else { $query->order('distance desc'); } } if ($params['sort_price'] == 1) { $query->order('price asc'); } else { $query->order('price desc'); } if ($params['sort_days'] == 1) { $query->order('days asc'); } else { $query->order('days desc'); } $list = $query->where('status', 1) ->order('weigh desc') ->order('id desc') ->autopage() ->select(); foreach ($list as $k => $v) { // 计算距离 $list[$k]['distance'] = distance_ext($v['distance'] ?? -1); } return $this->success('success', $list); } // 详情 public function info() { $params = $this->request->param(); $query = TravelModel::where('id', $params['id']); $info = $query->where('status', 1)->find(); if (!$info) { return $this->error('信息不存在'); } return $this->success('success', $info); } public function order_page() { $params = $this->request->param(); if (empty($params['travel_id'])) { return $this->error('参数缺失'); } if (empty($params['num'])) { return $this->error('参数缺失'); } $model = new TravelModel(); $info = $model->getDetail( params: ['id' => $params['travel_id']], ); if (!$info) { return $this->error('信息有误'); } $pay_amount = bcmul($info['price'], $params['num'], 2); return $this->success('获取成功', [ 'info' => $info, 'order' => [ 'travel_id' => $params['travel_id'], 'pay_amount' => $pay_amount, ] ]); } public function apply() { $params = $this->request->param(); if (empty($params['travel_id'])) { return $this->error('参数缺失'); } if (empty($params['num'])) { return $this->error('参数缺失'); } if (empty($params['name'])) { return $this->error('参数缺失'); } if (empty($params['phone'])) { return $this->error('参数缺失'); } $user_id = $this->auth->id; $model = new TravelModel(); $info = $model->getDetail( params: ['id' => $params['travel_id']], ); if (!$info) { return $this->error('信息有误'); } // 开始报名 $data = [ 'travel_id' => $info['travel_id'], 'user_id' => $user_id, 'num' => $params['num'], 'name' => $params['name'], 'phone' => $params['phone'], 'order_no' => createUniqueNo('T', $user_id), 'pay_amount' => bcmul($info['price'], $params['num'], 2), 'status' => 1, 'create_time' => time() ]; if (!Db::name('travel_order')->insertGetId($data)) { return $this->error('订单创建失败'); } return $this->success('提交成功', [ 'order_no' => $data['order_no'], 'pay_amount' => $data['pay_amount'], 'order_type' => 'travel_order', ]); } // 订单详情 public function myApplyInfo() { $params = $this->request->param(); $user_id = $this->auth->id; $query = HotelOrderModel::with([ 'hotel' => function ($query) { $query->field(['id', 'name', 'image']); }, 'room' => function ($query) { $query->field(['id', 'name', 'image', 'space', 'floor', 'is_wifi', 'window', 'breakfast', 'people_num', 'bad']); } ])->where('id', $params['id'])->where('user_id', $user_id); $info = $query->find(); if ($info['status'] == 1) { if ($info['start_date'] > date('Y-m-d')) { $info['status_code'] = 1; $info['status_txt'] = '待入住'; } else { $info['status_code'] = 2; $info['status_txt'] = '已入住'; } } else { $info['status_code'] = 3; $info['status_txt'] = '已取消'; } return $this->success('获取成功', $info); } // 订单取消 public function applyCancel() { $params = $this->request->param(); $user_id = $this->auth->id; $order = HotelOrderModel::where('user_id', $user_id)->where('id', $params['order_id'])->where('status', 1)->find(); if (!$order) { return $this->error('订单不存在或已取消'); } if (time() > strtotime($order['start_date'] . ' 12:00:00')) { return $this->error('订单已入住,无法取消'); } if (!HotelOrderModel::where('user_id', $user_id)->where('id', $params['order_id'])->where('status', 1)->update(['status' => 0])) { return $this->error('操作失败'); } return $this->success('操作成功'); } }