# banquet **Repository Path**: dot2-com/banquet ## Basic Information - **Project Name**: banquet - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-03-26 - **Last Updated**: 2022-04-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README - [业务流程](#业务流程) - [小程序端](#小程序端) - [用户登录](#用户登录) - [点餐下单](#点餐下单) - [定制预约](#定制预约) - [厨师认证](#厨师认证) - [设置空闲时间](#设置空闲时间) - [后台](#后台) - [厨师认证通过](#厨师认证通过) - [用户列表](#用户列表) - [根据时间查询空闲厨师](#根据时间查询空闲厨师) - [套餐增删改查](#套餐增删改查) - [订单列表和编辑订单状态](#订单列表和编辑订单状态) - [查看私人定制预约列表](#查看私人定制预约列表) - [编辑私人定制预约状态和处理结果](#编辑私人定制预约状态和处理结果) - [接口](#接口) - [用户](#用户) - [获取验证码](#获取验证码) - [手机验证码登录](#手机验证码登录) - [文件上传接口(需要认证)](#文件上传接口需要认证) - [个人信息](#个人信息) - [用户列表](#用户列表-1) - [添加厨师(小程序端认证厨师)](#添加厨师小程序端认证厨师) - [厨师列表](#厨师列表) - [删除厨师信息](#删除厨师信息) - [获取厨师自己的认证信息](#获取厨师自己的认证信息) - [审核厨师](#审核厨师) - [编辑(添加)空闲时间](#编辑添加空闲时间) - [查看指定时间空闲的厨师](#查看指定时间空闲的厨师) - [菜单](#菜单) - [添加套餐](#添加套餐) - [套餐列表](#套餐列表) - [套餐详情](#套餐详情) - [编辑套餐](#编辑套餐) - [删除套餐](#删除套餐) - [订单](#订单) - [添加订单](#添加订单) - [订单分类列表](#订单分类列表) - [编辑订单](#编辑订单) - [删除订单](#删除订单) - [预约](#预约) - [私人定制预约](#私人定制预约) - [预约列表](#预约列表) - [管理员处理预约](#管理员处理预约) - [删除预约](#删除预约) # 业务流程 ## 小程序端 #### 用户登录 1. 输入手机号,点击获取验证码 2. 后端发送验证码到用户手机 3. 用户提交手机号+验证码到后端 4. 后端判断验证码正确就返回 token,并保存手机号到用户表(如果存在则忽略) 5. 错误则返回错误信息 #### 点餐下单 1. 前端首页点击套餐列表,进入具体套餐页面 2. 获取用户地址和手机号,输入姓名,(此时顺便保存姓名到用户表中) 3. 前端向后端发送请求创建订单 4. 后端返回下单情况,并通知管理员 #### 定制预约 1. 点击首页 私人定制 2. 跳转到表单页面填写个人联系方式,提交后端 3. 提示等待官方服务人员联系 #### 厨师认证 1. 输入基本信息,上传图片等 2. 提交保存 3. 返回处理结果 #### 设置空闲时间 1. 在 我的 页面 设置空闲时间 ### 后台 #### 厨师认证通过 #### 用户列表 #### 根据时间查询空闲厨师 #### 套餐增删改查 #### 订单列表和编辑订单状态 #### 查看私人定制预约列表 #### 编辑私人定制预约状态和处理结果 # 接口 - 接口返回的格式统一为下面的格式,请求正常,状态码统一为 200。 如果请求需要认证的接口,可能会返回 400 或 401 错误,直接跳转到登录界面重新登录即可 ```json { "code": 0, // 非0表示出错 "msg": "success", // code 非 0 时,此处包含具体错误信息,比如字段不合法,缺少字段,服务端处理出错等 "data": "" // 没出错,就会包含具体的数据,可以是任意类型数据,视具体接口而定 } ``` ## 用户 ### 获取验证码 - Request `POST /login/phone/code` ```json { "phone": "13788888888" } ``` - Response ```json { "code": 0, // 0 表示发送成功,失败请直接把msg字段的值提示给用户 "msg": "success", "data": null } ``` ### 手机验证码登录 - Request `POST /login/phone` ```json { "phone": "13788888888", "code": "123456" // 手机收到的验证码 } ``` - Response ```json { "code": 0, "msg": "success", "data": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhYWEiLCJjb21wYW55Ijoibm94dWUiLCJleHAiOjE2NDYzOTgxMjZ9.v1Lo8blmD-zIzt7seQhmx2uxyNO-H9M6_uZLN3LVo3A" } ``` ### 后台管理登录 - Request `POST /login` ```json { "phone": "13788888888", "password": "123456" // 密码 } ``` - Response ```json { "code": 0, "msg": "success", "data": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhYWEiLCJjb21wYW55Ijoibm94dWUiLCJleHAiOjE2NDYzOTgxMjZ9.v1Lo8blmD-zIzt7seQhmx2uxyNO-H9M6_uZLN3LVo3A" } ``` - **请求需要认证的接口,通过 bearer 认证方式把 token 带在头信息中即可** ### 文件上传接口(需要认证) - Request `POST /api/upload` 和普通表单上传一样,指定 `multipart/form-data` 类型即可,name=file - Response ```json { "code": 0, "msg": "success", "data": { "src": "/images/202202/f175289c-3847-47ae-bec5-4664e63daf6d.png", // 图片相对路径 "alt": "2.png", "is_image": true } } ``` > 备注:图片访问方式,图片 url 地址+相对路径 ### 图片访问 路径 `"http://127.0.0.1:8080/static"+url` 例如:`http://127.0.0.1:8080/static/images/202203/13116e82-b142-455f-bb15-8241f56d99c6-1.jpg` ### 个人信息 - Request `GET /users/me` - Response ```json { "code": 0, "msg": "success", "data": { "id":1, "name":"用户姓名,默认为null", "phone": "13788883545", "is_auth": true, // 是否是认证厨师 "pic": "1.jpg" // 头像相对地址 "address": "地址", "is_cook": true, // 是否是厨师 } } ``` ### 用户列表 - Request `GET /users` - Response ```json { "code": 0, "msg": "success", "data": [ // 包含多个用户信息 { "id": 1, "nickname": "昵称,暂时为空", "name":"姓名,默认为null", "phone": "137****3545", "is_admin": false, // 是否是管理员 "is_auth": true, // 是否认证厨师 "pic": "1.jpg" // 头像相对地址 "address": "地址", "cook_status": 0, // 厨师审核状态,0 未提交, 1 待审核, 2 通过审核, 3 审核未通过 "created_at": "2020/10/1 11:22:33", // 注册时间 } ] } ``` ### 返回菜系列表 - Request `GET /cooks/food_types` - Response ```json { "code": 0, "msg": "success", "data": "湘菜|粤菜|川菜|东北菜|西北菜|江浙菜|清真菜|素食|火锅|小吃" } ``` ### 返回服务说明信息 - Request `GET /cooks/service` - Response ```json { "code": 0, "msg": "success", "data": "服务信息。。。。。。。" } ``` ### 添加厨师(小程序端认证厨师) - Request `POST /cooks` ```json { "name": "姓名", "phone": "手机号", // 注:前端界面上为了提高体验,可以自动把个人信息中的手机号填进去 "sex": 1, //数字类型,可选,默认为 0 未知, 1 男,2 女 "marry_status": 1, // 数字类型,可选, 婚姻状态:0 未知,1 未婚,2 已婚 "origin_address": "户籍所在地(可选)", "address": "常驻地址(可选)", "photo": "真人照片", // 上传文件后返回的相对路径 "identify_card1": "身份证正面", // 上传文件后返回的相对路径 "identify_card2": "身份证反面", // 上传文件后返回的相对路径 "residence_permit": "居住证", // 上传文件后返回的相对路径 "description": "履历信息", // 可选,默认为空 "foods": '[{"pic":"1.png"},{"pic":"2.png"}]' // 可选,厨师擅长的食物列表,组装成json数组,如果没有,传 null "food_types":"粤菜|湘菜|川菜", "created_at":"创建日期", } ``` - Response ```json { "code": 0, "msg": "success", "data": null } ``` ### 厨师列表 非管理员获取会隐藏敏感信息 - Request `GET /cooks` - Response ```json { "code": 0, "msg": "success", "data": [ // 包含多个厨师信息 { "id": 1, // 厨师信息编号 "user_id": 2, // 用户编号 "name": "姓名", "sex": 1, "photo": "1.jpg", "description": "四川xxx酒店大厨", "cook_status": 1, // 1 待审核, 2 通过审核, 3 审核未通过 "foods": "[{'pic':'1.png'},{'pic':'2.png'}]" // 如果为空 则是null } ] } ``` ### 删除厨师信息 - Request `DELETE /cooks/:id` - Response ```json { "code": 0, "msg": "success", "data": null } ``` ### 获取厨师自己的认证信息 可以通过 个人信息返回的 cook_status 字段来判断是否提交过,从而决定是否要获取认证信息 - Request `GET /cooks/me` - Response - 提交过认证信息 ```json { "code": 0, "msg": "success", "data": { "id": 1, "user_id": 2, "name": "姓名", "phone": "手机号", "sex": 1, // 0 未知, 1 男,2 女 "marry_status": 0, // 婚姻状态:0 未知,1 未婚,2 已婚 "origin_address": "户籍所在地", "address": "常驻地址", "photo": "真人照片", "identify_card1": "身份证正面", "identify_card2": "身份证反面", "residence_permit": "居住证", "description": "履历描述", "foods": "", // 默认为空,食物列表,json数组,例如: [{'pic':'1.png'},{'pic':'2.png'}] "msg": "审核未通过的提示信息", "created_at": "提交的时间" } } ``` - 未提交过认证资料 ```json { "code": 404, "msg": "未提交过认证资料", "data": null } ``` ### 审核厨师 - Request `POST /cooks/:id/check` ```json { "status": 1, // 厨师审核状态 2 通过审核, 3 审核未通过 "msg": "" // 如果通过,可以不提供这个字段;未通过,则给出具体未通过的原因提示 } ``` - Response ```json { "code": 0, "msg": "success", "data": 1 // 受影响的行数 } ``` ### 编辑(添加)空闲时间 - Request `POST /cooks/:id/spare_time` // 编辑 id 所指定的厨师空闲时间,id 是用户编号 ```json [ // 可以包含多段时间,时间使用 24 小时制 { "start_time": "8:20", // 时间格式只能是 时:分 "end_time": "12:30" }, { "start_time": "13:20", "end_time": "15:30" } ] ``` - Response ```json { "code": 0, "msg": "success", "data": null } ``` ### 获取厨师空闲时间 - Request `GET /cooks/:id/spare_time` id:用户编号 - Response ```json { "code": 0, "msg": "success", "data": [ // 可以包含多段时间,时间使用 24 小时制 { "start_time": "8:20", // 时间格式只能是 时:分 "end_time": "12:30" }, { "start_time": "13:20", "end_time": "15:30" } ] } ``` ### 查看指定时间空闲的厨师 - Request `GET /cooks/spare_time?time=11:12` - Response ```json { "code": 0, "msg": "success", "data": [ // 包含多个厨师信息 { "id": 1, // 厨师信息编号 "user_id": 2, // 用户编号 "name": "姓名", "sex": 1, "photo": "1.jpg", "description": "四川xxx酒店大厨", "foods": "[{'pic':'1.png'},{'pic':'2.png'}]", "spare_times": [ // 一个或多个时间段 { "start_time": 100, // 从0点开始所经过的分钟数 "end_time": 200 // 从0点开始所经过的分钟数 } ] } ] } ``` ## 菜单 ### 添加套餐 - Request `POST /menus` ```json { "name": "套餐名", "pic": "图片", "price": 300, // 价格,单位:角 "description": "套餐详情页", "rank": 0 // 套餐排序,越大越靠前 } ``` - Response ```json { "code": 0, "msg": "success", "data": 1 // 返回添加后的套餐编号 } ``` ### 套餐列表 - Request `GET /menus` - Response ```json { "code": 0, "msg": "success", "data": [ // 包含多个菜单信息 { "id": 1, // 套餐编号 "name": "套餐名", "pic": "图片", "price": 300, // 价格,单位:分 "rank": 0 } ] } ``` ### 套餐详情 - Request `GET /menus/:id` - Response ```json { "code": 0, "msg": "success", "data": { "id": 2, "name": "哈哈哈", "pic": "/images/202203/a6be7180-6d11-473d-9f30-665188de83a9-1.jpg", "price": 4444, // 返回的价格单位是 分 "description": "套餐详情信息" // 套餐描述信息,富文本编辑器生成的html代码 } } ``` ### 编辑套餐 - Request `POST /menus/:id` ```json { "name": "套餐名", "pic": "图片", "price": 300, // 价格,单位:角 "description": "套餐详情", "rank": 1 // 优先级,越大越靠前 } ``` - Response ```json { "code": 0, "msg": "success", "data": 1 // 编辑的套餐编号 } ``` ### 删除套餐 - Request `DELETE /menus/:id` - Response ```json { "code": 0, "msg": "success", "data": null } ``` ## 订单 ### 添加订单 - Request `POST /orders` ```json { "menu_id": 1, // 套餐编号 "username": "联系人姓名", "address": "地址", "phone": "手机号" } ``` - Response ```json { "code": 0, "msg": "success", "data": 1 // 返回订单id } ``` ### 订单分类列表 - Request `GET /orders` - Response ```json { "code": 0, "msg": "success", "data": [ // 包含多个菜单信息 { "id": 1, // 订单编号 "name": "套餐名", "address": "地址", "status": 0, // 订单状态,-1 已取消,0 已下单,1 已接单,10 已完成 "pic": "图片", "price": 300, // 价格,单位:角 "rank": 0, "created_at": "2020/11/11 11:11:11" // 下单时间 } ] } ``` ### 编辑订单 修改订单不同状态,管理员才可以修改成接单和完成状态 订单状态,-1, 已取消,0 已下单,1 已接单,10 已完成 - Request `POST /orders/:id/status ```json { "status": 1 //可以是上面的任意状态 } ``` - Response ```json { "code": 0, "msg": "success", "data": 1 // 返回受影响行数 } ``` ### 删除订单 - Request `DELETE /orders/:id - Response ```json { "code": 0, "msg": "success", "data": 1 // 返回受影响行数 } ``` ## 预约 ### 私人定制预约 - Request `POST /reservations` ```json { "phone": "手机号", "name": "姓名", "address": "地址", "datetime": "就餐日期", "number_of_people": 15 // 就餐人数 } ``` - Response ```json { "code": 0, "msg": "success", "data": 1 // 返回预约id } ``` ### 预约列表 - Request `GET /reservations` - Response ```json { "code": 0, "msg": "success", "data": [ // 包含多个预约信息 { "id": 1, "phone": "手机号", "name": "姓名", "address": "地址", "datetime": "就餐日期", "number_of_people": 15, // 就餐人数 "status": 1, // 预约状态,0 未处理,已处理 "msg": "处理记录信息" } ] } ``` ### 管理员处理预约 - Request `POST /reservations/:id` ```json { "status": 1, "msg": "处理记录信息" } ``` - Response ```json { "code": 0, "msg": "success", "data": 1 } ``` ### 删除预约 - Request `DELETE /reservations/:id - Response ```json { "code": 0, "msg": "success", "data": 1 // 受影响的行数 } ``` https://magnetikonline.github.io/markdown-toc-generate/