__ROOT__ . '/addon/store/shop/view/public/css', 'ADDON_STORE_JS' => __ROOT__ . '/addon/store/shop/view/public/js', 'ADDON_STORE_IMG' => __ROOT__ . '/addon/store/shop/view/public/img', ]; /** * 预约看板 * @return mixed */ public function index() { $this->assign('reserve_state', ( new ReserveModel )->reserve_state); $data = $this->getReserveByWeek(); $this->assign('data', $data[ 'data' ]); $store_model = new StoreModel(); $store_list = $store_model->getStoreList([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 1 ] ])[ 'data' ] ?? []; $this->assign('store_list', $store_list); return $this->fetch('reserve/index', [], $this->replace); } /** * 获取一周内的时间段 * @param $length * @return array */ public function getWeekDay($length = 0) { $first_day = mktime(0, 0, 0, date("m"), date("d") - date("w") + 1, date("Y")); $first_day = strtotime($length . ' week', $first_day); $week = [ '周日', '周一', '周二', '周三', '周四', '周五', '周六' ]; $data = []; for ($i = 0; $i < 7; $i++) { $time = strtotime("+ {$i} day", $first_day); array_push($data, [ 'start' => $time, 'end' => strtotime(date('Y-m-d 23:59:59', $time)), 'date' => date('m/d', $time), 'w' => date('w', $time), 'week' => $week[ date('w', $time) ], 'currday' => date('Y-m-d', $time) == date('Y-m-d') ? 1 : 0 ]); } return success(0, '', $data); } public function getMonthDays() { if (request()->isAjax()) { $reserve_model = new ReserveModel(); $year = input('year', ''); $month = input('month', ''); $days_data = $reserve_model->getMonthDays($year, $month)[ 'data' ]; return success(0, '', $days_data); } } public function getReserveByWeek() { $reserve_model = new ReserveModel(); $length = input('length', 0); $data = $this->getWeekDay($length)[ 'data' ]; foreach ($data as $wk => $w_item) { $field = 'noy.reserve_id,noy.reserve_state,noy.reserve_time,nm.nickname,noy.reserve_item'; $list = $reserve_model->getReservePageList([ [ 'noy.site_id', '=', $this->site_id ], [ 'noy.reserve_time', 'between', [ $w_item[ 'start' ], $w_item[ 'end' ] ] ] ], 1, PAGE_LIST_ROWS, 'noy.create_time desc', $field); $data[ $wk ][ 'data' ] = $list[ 'data' ]; } return success(0, '', $data); } /** * 获取预约周数据 * @return array */ public function getReserveWeekData() { if (request()->isAjax()) { $reserve_model = new ReserveModel(); $week_offset = input('week_offset', 0); $days_data = $reserve_model->getWeekDays($week_offset)[ 'data' ]; $res = $reserve_model->getReserveDataByDays([ 'days_data' => $days_data, 'query_num' => 4, 'site_id' => $this->site_id, ]); return $res; } } /** * 获取预约月数据 * @return array */ public function getYuYueMonthData() { if (request()->isAjax()) { $reserve_model = new ReserveModel(); $year = input('year', date('Y')); $month = input('year', date('m')); $days_data = $reserve_model->getMonthDays($year, $month)[ 'data' ]; $res = $reserve_model->getReserveDataByDays([ 'days_data' => $days_data, 'query_num' => 3, 'site_id' => $this->site_id, ]); return $res; } } /** * 添加预约 * @return mixed */ public function addReserve() { $reserve_model = new ReserveModel(); if (request()->isAjax()) { return $reserve_model->addReserve([ 'site_id' => $this->site_id, 'app_module' => $this->app_module, 'member_id' => input('member_id'), 'goods' => json_decode(input('goods'), true), 'store_id' => input('store_id'), 'date' => input('date'), 'time' => input('time'), 'remark' => input('remark', ''), 'source' => 'store' ]); } $service_model = new GoodsModel(); $condition = [ [ 'g.site_id', '=', $this->site_id ], [ 'g.goods_state', '=', 1 ], [ 'g.goods_class', '=', 4 ] ]; $service = $service_model->getGoodsList($condition, 'g.goods_id,g.sku_id,g.goods_name,g.price,sku.service_length', 'g.create_time desc' , 0, 'g', [ [ 'goods_sku sku', 'sku.goods_id=g.goods_id', 'inner' ] ]); $this->assign('service', $service[ 'data' ]); $store_model = new StoreModel(); $store_list = $store_model->getStoreList([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 1 ] ])[ 'data' ] ?? []; $this->assign('store_list', $store_list); $config = $reserve_model->getReserveConfig($this->site_id, $store_list[ 0 ][ 'store_id' ]); $this->assign('config', $config[ 'data' ][ 'value' ]); $user_model = new User(); $user_list = $user_model->getUserList([ [ 'site_id', '=', $this->site_id ], [ 'app_module', '=', 'servicer' ], [ 'status', '=', 1 ] ])[ 'data' ] ?? []; $this->assign('user_list', $user_list); return $this->fetch('reserve/add_reserve', [], $this->replace); } /** * 修改预约 * @return mixed|void */ public function updateReserve() { $model = new ReserveModel(); if (request()->isAjax()) { $reserve_id = input('reserve_id', 0); return $model->editReserve([ 'site_id' => $this->site_id, 'app_module' => $this->app_module, 'reserve_id' => $reserve_id, 'store_id' => input('store_id'), 'goods' => json_decode(input('goods'), true), 'date' => input('date'), 'time' => input('time'), 'remark' => input('remark', '') ]); } else { $reserve_id = input('id', 0); // 查询预约信息 $info = $model->getReserveInfo([ [ 'reserve_id', '=', $reserve_id ], [ 'oy.site_id', '=', $this->site_id ] ], 'oy.*, nm.headimg, nm.nickname, nm.mobile, os.store_name', 'oy', [ [ 'member nm', 'oy.member_id = nm.member_id', 'left' ], [ 'store os', 'oy.store_id = os.store_id', 'left' ] ])[ 'data' ]; if (empty($info)) { $this->error('未获取到预约信息'); return; } $info[ 'item' ] = $model->getReserveItemList([ [ 'oyi.reserve_id', '=', $reserve_id ], ], 'g.goods_name,sku.service_length,g.goods_id,g.sku_id,g.price,ys.username,oyi.reserve_user_id', 'reserve_item_id desc', 'oyi', [ [ 'goods g', 'g.sku_id = oyi.reserve_goods_sku_id', 'right' ], [ 'goods_sku sku', 'sku.sku_id = oyi.reserve_goods_sku_id', 'right' ], [ 'user ys', 'oyi.reserve_user_id = ys.uid', 'left' ] ])[ 'data' ]; $this->assign('info', $info); // 查询预约配置 $config = $model->getReserveConfig($this->site_id, $info[ 'store_id' ]); $this->assign('config', $config[ 'data' ][ 'value' ]); // 查询可预约服务 $service_model = new GoodsModel(); $condition = [ [ 'g.site_id', '=', $this->site_id ], [ 'g.goods_state', '=', 1 ], [ 'g.goods_class', '=', 4 ] ]; $service = $service_model->getGoodsList($condition, 'g.goods_id,g.sku_id,g.goods_name,g.price,sku.service_length', 'g.create_time desc' , 0, 'g', [ [ 'goods_sku sku', 'sku.goods_id=g.goods_id', 'inner' ] ]); $this->assign('service', $service[ 'data' ]); $store_model = new StoreModel(); $store_list = $store_model->getStoreList([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 1 ] ])[ 'data' ] ?? []; $this->assign('store_list', $store_list); $user_model = new User(); $user_list = $user_model->getUserList([ [ 'site_id', '=', $this->site_id ], [ 'app_module', '=', 'servicer' ], [ 'status', '=', 1 ] ])[ 'data' ] ?? []; $this->assign('user_list', $user_list); return $this->fetch('reserve/add_reserve', [], $this->replace); } } /** * 预约列表 */ public function lists() { $reserve_model = new ReserveModel(); if (request()->isAjax()) { $page = input('page', 1); $page_size = input('page_size', PAGE_LIST_ROWS); $search_text = input('search_text', ''); $reserve_state = input('reserve_state', 'all'); $start = input('start_time', 0); $end = input('end_time', 0); $store_id = !empty(input('store_id', 0)) ? input('store_id', 0) : $this->store_id; $condition = [ [ 'noy.site_id', '=', $this->site_id ] ]; if ($reserve_state != 'all') { $condition[] = [ 'noy.reserve_state', '=', $reserve_state ]; } if (!empty($search_text)) { $condition[] = [ 'nm.mobile|nm.nickname', 'like', '%' . $search_text . '%' ]; } if (!empty($store_id)) { $condition[] = [ 'noy.store_id', 'in', $store_id ]; } if ($start && $end) { $condition[] = [ 'noy.reserve_time', 'between', [ $start, $end ] ]; } else { if ($start && !$end) { $condition[] = [ 'noy.reserve_time', '>=', $start ]; } else { if (!$start && $end) { $condition[] = [ 'noy.reserve_time', '<=', $end ]; } } } $field = 'noy.store_id, noy.member_id, noy.remark, noy.reserve_id, noy.reserve_name, noy.reserve_state_name, noy.reserve_state, noy.reserve_time, noy.reserve_item, noy.create_time, noy.source, nm.headimg, nm.nickname, nm.mobile, os.store_name'; $result = $reserve_model->getReservePageList($condition, $page, $page_size, 'noy.create_time desc', $field); return $result; } else { $this->assign('reserve_state', $reserve_model->reserve_state); $start_time = input('start_time', ''); $end_time = input('end_time', ''); $this->assign('start_time', $start_time); $this->assign('end_time', $end_time); $store_model = new StoreModel(); $store_list = $store_model->getStoreList([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 1 ] ])[ 'data' ] ?? []; $this->assign('store_list', $store_list); return $this->fetch('reserve/lists', [], $this->replace); } } public function servicerList() { if (request()->isAjax()) { $store_id = !empty(input('store_id', 0)) ? input('store_id', 0) : $this->store_id; $condition = [ [ 'u.site_id', '=', $this->site_id ], ]; $condition[] = [ 'ug.store_id', '=', $store_id ]; $user_model = new UserGroup(); $result = $user_model->getUserList($condition, 'u.username,u.status,u.uid,u.group_name', 'u.uid desc', 'ug', [ [ 'user u', 'ug.uid=u.uid', 'left' ] ]); return $result; } } /** * 预约设置 * @return mixed */ public function getConfig() { if (request()->isAjax()) { $model = new ReserveModel(); $store_id = input('store_id', 0); $config = $model->getReserveConfig($this->site_id, $store_id); return $config; } } /** * 确认预约 * @return array */ public function confirm() { if (request()->isAjax()) { $reserve_id = input('reserve_id', 0); $reserve_model = new ReserveModel(); return $reserve_model->confirmReserve($reserve_id, $this->site_id); } } /** * 取消预约 * @return array */ public function cancel() { if (request()->isAjax()) { $reserve_id = input('reserve_id', 0); $reserve_model = new ReserveModel(); return $reserve_model->cancelReserve($reserve_id, $this->site_id); } } /** * 删除预约 * @return array */ public function deleteReserve() { if (request()->isAjax()) { $reserve_id = input('reserve_id', 0); $reserve_model = new ReserveModel(); return $reserve_model->deleteReserve($reserve_id, $this->site_id); } } /** * 确认到店 * @return array */ public function confirmToStore() { if (request()->isAjax()) { $reserve_id = input('reserve_id', 0); $reserve_model = new ReserveModel(); return $reserve_model->confirmToStore($reserve_id, $this->site_id); } } /** * 确认完成 * @return array */ public function complete() { if (request()->isAjax()) { $reserve_id = input('reserve_id', 0); $reserve_model = new ReserveModel(); return $reserve_model->confirmComplete($reserve_id, $this->site_id); } } /** * 预约详情 * @return mixed|void */ public function detail() { $reserve_id = input('id', 0); $model = new ReserveModel(); $info = $model->getReserveInfo([ [ 'reserve_id', '=', $reserve_id ], [ 'oy.site_id', '=', $this->site_id ] ], 'oy.*, nm.headimg, nm.nickname, nm.mobile,os.store_name', 'oy', [ [ 'member nm', 'oy.member_id = nm.member_id', 'left' ], [ 'store os', 'oy.store_id = os.store_id', 'left' ] ])[ 'data' ]; if (empty($info)) { $this->error('未获取到预约信息'); return; } $info[ 'item' ] = $model->getReserveItemList([ [ 'oyi.reserve_id', '=', $reserve_id ] ], 'g.goods_name,sku.service_length,g.goods_id,g.sku_id,g.price,ys.username,oyi.reserve_user_id', 'reserve_item_id desc', 'oyi', [ [ 'goods g', 'g.sku_id = oyi.reserve_goods_sku_id', 'right' ], [ 'goods_sku sku', 'sku.sku_id = oyi.reserve_goods_sku_id', 'right' ], [ 'user ys', 'oyi.reserve_user_id = ys.uid', 'left' ] ])[ 'data' ]; $this->assign('info', $info); return $this->fetch('reserve/detail', [], $this->replace); } }