diff --git a/backstage/application/api/controllers/api/Dishes.php b/backstage/application/api/controllers/api/Dishes.php index 7461aeb..6e682c5 100644 --- a/backstage/application/api/controllers/api/Dishes.php +++ b/backstage/application/api/controllers/api/Dishes.php @@ -173,6 +173,7 @@ class Dishes extends REST_Controller $meal_date = $this->get_meal_date($meal_dates[$dining_hall_id], $date_id); } + $data['deliver_place_meal_list'] = $meal_date->deliver_place_list; $is_birth = $this->common->is_birth_date($user, $date_id); if($is_birth) { //生日餐 @@ -228,6 +229,9 @@ class Dishes extends REST_Controller $total = $this->common->get_cart_total_price($this->user, $type); $cart_total_price = $total['total_price']; $cart_total_num = $total['total_num']; + // 当前date_id的购物车,围餐房间号id + $cart_info = $this->common->get_cart_total_price($this->user, $type, $date_id); + $data['deliver_place_data'] = $cart_info['deliver_place_data']; $data['order'] = array('num' => $cart_total_num, 'price' => $cart_total_price, 'status' => $status); $data['dining_hall_id'] = $dining_hall_id; @@ -1041,6 +1045,7 @@ class Dishes extends REST_Controller $date_dishes_id = $this->input->post('date_dish_id'); $num = $this->input->post('num'); $date_dishes_ids = stripslashes($this->input->post('date_dish_ids')); + $deliver_place_id = intval($this->input->post('deliver_place_id')) ?: null; // 限制订餐时间 order/add 也有判断 $companyInfo = $this->Common_model->sql_get_one("select * from tb_company where id=".$this->user->company_id); @@ -1186,7 +1191,7 @@ class Dishes extends REST_Controller $type = $this->get_type($dishes_info->dish_type); //$date = $this->Common_model->get_date_by_date_id($dishes_info->date_id); - $result = $this->update_cart_single_dishes($dishes_info, $type, $v->num); + $result = $this->update_cart_single_dishes($dishes_info, $type, $v->num, $deliver_place_id); if ($result['status'] != 1) { $result['data'] = $data; $this->response($result, REST_Controller::HTTP_OK); @@ -1226,7 +1231,7 @@ class Dishes extends REST_Controller } } - private function update_cart_single_dishes($dishes_info, $type, $num) + private function update_cart_single_dishes($dishes_info, $type, $num, $deliver_place_id = '') { //print_r($dishes_info); $cart_dishes = $this->Cart_model->get_cart_dishes($this->user->id, $dishes_info->id); @@ -1241,11 +1246,26 @@ class Dishes extends REST_Controller } + // 围餐的判断: + if($deliver_place_id == ''){ + // 如果mealtype=6,且deliver_place_id=空,就返回错误 + $mealTypeInfo = $this->Common_model->sql_get_one("select c.mealtype from tb_date_dish a, tb_date b, tb_meal_type c where a.date_id=b.id and b.dc_type=c.id and a.id=".$dishes_info->id); + if ($mealTypeInfo['mealtype'] == 6) { + return array( + 'status' => 0, + 'message' => '请选择围餐房间', + ); + } + } + if (count($cart_dishes) > 0) { $cart_dishes = $cart_dishes[0]; if ($num > 0) { $t_data = array("id" => $cart_dishes->id, "uid" => $this->user->id, "date_dish_id" => $dishes_info->id, "num" => $num, "price" => $dish_price, "type" => $type, "expire_time" => time() + $cart_expire_time); + if($deliver_place_id != ''){ + $t_data['deliver_place_id'] = $deliver_place_id; + } $r = $this->Cart_model->replace_cart($t_data); if (!$r) { @@ -1266,7 +1286,9 @@ class Dishes extends REST_Controller } else if ($num > 0) { $t_data = array("uid" => $this->user->id, "date_dish_id" => $dishes_info->id, "num" => $num, "price" => $dish_price, "type" => $type, "expire_time" => time() + $cart_expire_time); - + if($deliver_place_id != ''){ + $t_data['deliver_place_id'] = $deliver_place_id; + } $r = $this->Cart_model->insert_cart($t_data); if ($r > 0) { // $cart_id = $r; @@ -1356,11 +1378,13 @@ class Dishes extends REST_Controller $date_text = $month . '月' . $day . '日' . '(周' . cnWeek($date) . ')'; $dc_type_info = $this->Common_model->get_meal_type_by_id($cd->dc_type); + $result[$cd->dining_hall_id]['data'][$cd->dc_date]['date_name'] = $date_text; $result[$cd->dining_hall_id]['data'][$cd->dc_date]['data'][$cd->dc_type]['type'] = $cd->type; $result[$cd->dining_hall_id]['data'][$cd->dc_date]['data'][$cd->dc_type]['date_id'] = $cd->date_id; $result[$cd->dining_hall_id]['data'][$cd->dc_date]['data'][$cd->dc_type]['meal_name'] = $dc_type_info->name; $result[$cd->dining_hall_id]['data'][$cd->dc_date]['data'][$cd->dc_type]['notes'] = $dc_type_info->notes; + $result[$cd->dining_hall_id]['data'][$cd->dc_date]['data'][$cd->dc_type]['mealtype'] = $dc_type_info->mealtype; $dishes = $this->Dishes_model->get_dishes_by_dishes_id($cd->dish_id); $cd->dish_name = $dishes->dish_name; $result[$cd->dining_hall_id]['data'][$cd->dc_date]['data'][$cd->dc_type]['data'][] = $cd; @@ -1385,6 +1409,20 @@ class Dishes extends REST_Controller foreach ($v2['data'] as &$v3) { // print_r($v3); + if($v3['mealtype'] == 6){ + $v3Data = json_decode(json_encode($v3['data']), 1); + // 围餐展示房间信息 + $cart_deliver_place_ids = array_column($v3Data, 'deliver_place_id'); + // 去重 + $cart_deliver_place_ids = array_unique($cart_deliver_place_ids); + if(count($cart_deliver_place_ids) == 1 && !empty($cart_deliver_place_ids[0])){ + $v3['deliver_place_id'] = $cart_deliver_place_ids[0]; + $v3['deliver_place_name'] = $this->Common_model->sql_get_one("select name from tb_order_deliver_place where enabled=1 and id=".$cart_deliver_place_ids[0])['name']; + }else{ + $v3['deliver_place_id'] = null; + $v3['deliver_place_name'] = null; + } + } $total = $this->common->get_cart_total_price($this->user, $v3['type'], $v3['date_id']); @@ -1713,4 +1751,26 @@ class Dishes extends REST_Controller ) ), REST_Controller::HTTP_OK); } + + public function updateCartDeliverPlaceId_post(){ + $user_id = $this->user->id; + $date_id = $this->input->post('date_id'); + $deliver_place_id = $this->input->post('deliver_place_id'); + + $res = $this->Cart_model->update_cart_by_uid_and_date_id($date_id, $user_id, $deliver_place_id); + if($res){ + $this->response(array( + 'status' => 1, + 'message' => 'ok', + 'data' => array() + ), REST_Controller::HTTP_OK); + + }else{ + $this->response(array( + 'status' => 0, + 'message' => '更新失败', + 'data' => array() + ), REST_Controller::HTTP_OK); + } + } } diff --git a/backstage/application/api/controllers/api/Order.php b/backstage/application/api/controllers/api/Order.php index bb81c36..067f57a 100644 --- a/backstage/application/api/controllers/api/Order.php +++ b/backstage/application/api/controllers/api/Order.php @@ -169,6 +169,44 @@ class Order extends REST_Controller } } + // 判断围餐,mealtype=6,deliver_place_id不能为空 + $dateInfo = $this->Dishes_model->get_date_info_by_date_id($k); + if($dateInfo['mealtype'] == 6){ + $date = $dateInfo['dc_date']; + $dc_type_name = $dateInfo['dc_type_name']; + foreach ($d as $cart_k => $cart_v) { + if(empty($cart_v->deliver_place_id)){ + // 找出$k(date_id)对应的日期和餐次 + $dateInfo = $this->Dishes_model->get_date_info_by_date_id($k); + + $this->response(array( + 'status' => 0, + 'message' => "请先选择【{$date} {$dc_type_name}】的围餐房间", + 'data' => $data + ), REST_Controller::HTTP_OK); + } + } + $deliver_place_ids = json_decode(json_encode($d), 1); + // 获取deliver_place_id + $deliver_place_ids = array_column($deliver_place_ids, 'deliver_place_id'); + $deliver_place_ids = array_unique($deliver_place_ids); + if(count($deliver_place_ids) != 1){ + $this->response(array( + 'status' => 0, + 'message' => "请先选择【{$date} {$dc_type_name}】的围餐房间。", + 'data' => $data + ), REST_Controller::HTTP_OK); + } + // 再判断当前date_id,deliver_place_id是否已经被占用 + $check_deliver_place_id = $this->Common_model->sql_get_one("select * from tb_order where date_id = {$k} and deliver_place_id = {$deliver_place_ids[0]} and state_id in (3,6)"); + if($check_deliver_place_id){ + $this->response(array( + 'status' => 0, + 'message' => "【{$date} {$dc_type_name}】的围餐房间已被占用,请重新选择。", + 'data' => $data + ), REST_Controller::HTTP_OK); + } + } } $this->load->model('User_model', '', TRUE); @@ -378,6 +416,13 @@ class Order extends REST_Controller // print_r($order); // exit; + // 设置围餐的信息 + $dateInfo = $this->Dishes_model->get_date_info_by_date_id($k); + if($dateInfo['mealtype'] == 6) { + // 获取房间号 + $order['deliver_place_id'] = $d[0]->deliver_place_id; + } + $t_total_price += $total['total_price']; $t_total_num += $total['total_num']; diff --git a/backstage/application/api/libraries/Common.php b/backstage/application/api/libraries/Common.php index 89849be..5c9bb2f 100644 --- a/backstage/application/api/libraries/Common.php +++ b/backstage/application/api/libraries/Common.php @@ -289,11 +289,19 @@ class Common $total_price = 0; $cart_dishes_sort = $this->sort_cart_dishes_by_date_id($cart_dishes); - + // 围餐房间id + $deliver_place_ids = []; foreach ($cart_dishes_sort as $k => $cd) { $fee = 0; $date = $this->_CI->Common_model->get_date_by_date_id($k); + if($date_id){ + foreach ($cd as $v) { + // 传了date_id,就是当前date_id的购物车内容 + $deliver_place_ids[] = $v->deliver_place_id; + } + } + if ($type == DISHES_TYPE_COMMON) { $fee = $this->get_fee($type, $date); } @@ -314,9 +322,31 @@ class Common $cart_total_num += $v->num; } } - $total_price += $fee; + $total_price += $fee; } - return array("total_price" => $total_price, "total_num" => $cart_total_num); + + if($date_id){ + // 去重,如果存在空值,或者数量不等于1,就不不返回,让它重新选择房间号,update房间号到tb_cart.deliver_place_id + $deliver_place_ids = array_unique($deliver_place_ids); + if(count($deliver_place_ids) == 1 && $deliver_place_ids[0] != '') { + $deliver_place_id = $deliver_place_ids[0]; + $deliver_place_name = $this->_CI->Common_model->sql_get_one("select * from tb_order_deliver_place where id = '{$deliver_place_id}' and enabled = 1"); + if($deliver_place_name){ + $deliver_place_data = $date_id."_".$deliver_place_id."_".$deliver_place_name['name']; + // 判断当前的围餐房间号是否被占用 + // 已被占用,再次遍历$cart_dishes_sort,将deliver_place_id置空 + $order_has_deliver_place_id = $this->_CI->Common_model->sql_get_one("select * from tb_order where date_id='{$date_id}' and deliver_place_id = '{$deliver_place_id}' and state_id in (3,6) "); + if($order_has_deliver_place_id){ + // 当前房间号已被占用 + $deliver_place_data = ''; + } + }else{ + $deliver_place_data = ''; + } + } + } + + return array("total_price" => $total_price, "total_num" => $cart_total_num, 'deliver_place_data' => $deliver_place_data); } else { return array("total_price" => 0, "total_num" => 0); } @@ -507,7 +537,6 @@ class Common if ($order) { $orderid = $order->id; $order_detail = $this->_CI->Order_model->get_order_detail_by_order_id($orderid, base_url(), ''); - $take_code = $order->take_food_code; //$take_qrcode = base_url($order->qrcode_path); diff --git a/backstage/application/api/models/Cart_model.php b/backstage/application/api/models/Cart_model.php index ae97e38..559e528 100644 --- a/backstage/application/api/models/Cart_model.php +++ b/backstage/application/api/models/Cart_model.php @@ -50,9 +50,9 @@ class Cart_model extends CI_Model if ($cart_id != 0) { $where .= " and a.id = {$cart_id}"; } - $query = $this->db->query("select a.*, b.date_id, b.dish_id, c.dining_hall_id, c.dc_type, d.dish_type, c.dc_date, b.max_num, b.total_max_num, b.book_num - from tb_cart a, tb_date_dish b, tb_date c, tb_dish d - where a.date_dish_id = b.id and b.date_id = c.id and b.dish_id = d.id and a.uid = {$uid} {$where} and d.enabled = 1 order by c.dc_date asc, c.dc_type asc"); + $query = $this->db->query("select a.*, b.date_id, b.dish_id, c.dining_hall_id, c.dc_type, d.dish_type, c.dc_date, b.max_num, b.total_max_num, b.book_num, e.mealtype + from tb_cart a, tb_date_dish b, tb_date c, tb_dish d, tb_meal_type e + where a.date_dish_id = b.id and b.date_id = c.id and b.dish_id = d.id and c.dc_type=e.id and a.uid = {$uid} {$where} and d.enabled = 1 order by c.dc_date asc, c.dc_type asc"); return $query->result(); } @@ -160,4 +160,19 @@ class Cart_model extends CI_Model $query = $this->db->query("select sum(price*num) total_price from tb_shopping_cart a where uid = {$uid} {$where}"); return $query->row(); } + + public function update_cart_by_uid_and_date_id($date_id, $uid, $deliver_place_id){ +// $this->db->where_in('date_dish_id', $this->db->select('id')->get_where('tb_date_dish', array('date_id' => $date_id))->result_array()); +// $this->db->set('deliver_place_id', $deliver_place_id); +// $this->db->where('uid', $uid); +// return $this->db->update('tb_cart'); + + $date_dish_ids = $this->db->select('id')->get_where('tb_date_dish', ['date_id' => $date_id])->result_array(); + $date_dish_ids = array_column($date_dish_ids, 'id'); + + return $this->db->where_in('date_dish_id', $date_dish_ids) + ->where('uid', $uid) + ->set('deliver_place_id', $deliver_place_id) + ->update('tb_cart'); + } } \ No newline at end of file diff --git a/backstage/application/api/models/Common_model.php b/backstage/application/api/models/Common_model.php index ec90304..81a4788 100644 --- a/backstage/application/api/models/Common_model.php +++ b/backstage/application/api/models/Common_model.php @@ -138,13 +138,17 @@ class Common_model extends CI_Model } $where = str_replace('for_dc_type', 'dc_type', $where); - $sql = "SELECT a.* from tb_date a, tb_meal_type c where a.dc_type = c.id and dc_date >= '".date("Y-m-d")."' {$where} order by a.dc_date asc, c.idx desc, a.dc_type asc"; + $sql = "SELECT a.*, c.mealtype from tb_date a, tb_meal_type c where a.dc_type = c.id and dc_date >= '".date("Y-m-d")."' {$where} order by a.dc_date asc, c.idx desc, a.dc_type asc"; $dates = $this->db->query($sql)->result(); + // 获取vip围餐所有的房间号 + $deliver_place_list = $this->db->query("select * from tb_order_deliver_place where enabled=1 and dining_hall_id='".$user->dining_hall_id."'")->result_array(); + $deliver_place_ids = array_column($deliver_place_list, "id"); + $dates2 = array(); $nowtime = time(); - foreach($dates as $item) { + foreach($dates as $index => $item) { $dc_type = $item->dc_type; $dc_date = $item->dc_date; $rule = $rulesInfo[$dc_type]; @@ -154,6 +158,48 @@ class Common_model extends CI_Model $time1 = $dc_date." ".$rule['time']; + // vip围餐修改,如果是围餐类型 且 用户积分账户余额==0,则不显示 (vip围餐:tb_meal_type.mealtype=6) + if($item->mealtype == 6){ + if(!isset($user->jf) || $user->jf <=0){ + // 没有积分账户,或者账户积分<=0,则不能订vip围餐 + continue; + } + // 查找当前date_id 可预定的房间列表 + $date_id = $item->id; + // 所有房间列表的id,用,分隔的字符串 + $deliver_place_ids_str = join(",", $deliver_place_ids); + // 所有房间列表的占用情况情况 + $deliver_place_arr = array(); + // 获取当前date_id 已经被占用的房间列表 + $get_deliver_place_list = array(); + if(!empty($deliver_place_ids_str)){ + $get_deliver_place_list = $this->db->query("select * from tb_order where date_id='{$date_id}' and state_id in (3,6) and deliver_place_id in ({$deliver_place_ids_str})")->result_array(); + } + // 如果含有已经被占用的房间,则判断房间是否已经被占用 +// if(!empty($get_deliver_place_list)){ +// foreach ($get_deliver_place_list as $deliver_place_item){ +// $is_occupy = in_array($deliver_place_item['deliver_place_id'], $deliver_place_ids) ? 1 : 0; +// $deliver_place_arr[] = array( +// 'id' => $deliver_place_item['deliver_place_id'], +// 'name' => $deliver_place_item['deliver_place_name'], +// 'is_occupy' => $is_occupy // 是否占用 +// ); +// } +// }else{ + // 如果没有被占用的房间,则显示所有房间且设置未占用 + foreach ($deliver_place_list as $deliver_place_item){ + $get_deliver_place_ids = array_column($get_deliver_place_list, "deliver_place_id"); + $is_occupy = in_array($deliver_place_item['id'], $get_deliver_place_ids) ? 1 : 0; + $deliver_place_arr[] = array( + 'id' => $deliver_place_item['id'], + 'name' => $deliver_place_item['name'], + 'is_occupy' => $is_occupy // 是否占用 + ); + } +// } + $item->deliver_place_list = $deliver_place_arr; + } + if(strtotime($time1) - $relative_day*86400 > $nowtime) { $dates2[] = $item; } diff --git a/backstage/application/api/models/Dishes_model.php b/backstage/application/api/models/Dishes_model.php index 671318c..7814ac4 100644 --- a/backstage/application/api/models/Dishes_model.php +++ b/backstage/application/api/models/Dishes_model.php @@ -296,4 +296,9 @@ class Dishes_model extends CI_Model return true; } + public function get_date_info_by_date_id($date_id) + { + $query = $this->db->query("select a.*, b.name as dc_type_name, b.mealtype from tb_date a,tb_meal_type b where a.dc_type=b.id and a.id = {$date_id}"); + return $query->row_array(); + } } \ No newline at end of file diff --git a/m/confirmOrder.html b/m/confirmOrder.html index 563ccfe..0c7f137 100644 --- a/m/confirmOrder.html +++ b/m/confirmOrder.html @@ -8,6 +8,7 @@ +
diff --git a/m/css/main.css b/m/css/main.css index 4214af2..b19fb83 100644 --- a/m/css/main.css +++ b/m/css/main.css @@ -5653,3 +5653,47 @@ input[name='custom_recharge'].custom_recharge { font-size: 0.65rem; display: none; } + +/*vip围餐样式*/ +.popup-deliver-place{ + width: 90%; + margin: 5%; + height: auto; + border-radius: 0.5rem; +} +.deliver-place-close{ + position: absolute; + right: 0.6rem; + top: -0.3rem; + font-size: 1.2rem; + color: #000; + margin: 0; +} + +.deliver-place-close a{ + color: #ef4437; +} +.flex-row{ + flex-direction: row; +} +.flex-wrap{ + flex-wrap: wrap; +} +.deliver-place-bg-btn-color{ + background-color: #f6f6f6; + color: #000; + border: 2px solid #fff; + font-size: 0.65rem; +} +.deliver-place-bg-btn-color.active{ + border: 2px solid #ef4437; + color: #ef4437; +} +.deliver-place-bg-btn-color.disabled{ + background-color: #f6f6f6; + color: #ccc; + border: 2px solid #f6f6f6; +} +.py-3{padding-top:0.75rem;padding-bottom:0.75rem;} +.font-bold{font-weight: bold;} +.pr-2{padding-right: 0.5rem;} \ No newline at end of file diff --git a/m/index2.html b/m/index2.html index 95ca1e3..1419ad8 100644 --- a/m/index2.html +++ b/m/index2.html @@ -63,6 +63,10 @@ + + + +围餐房间:'+deliver_place_name+'
备注: