# xjws **Repository Path**: moist-master/xjws ## Basic Information - **Project Name**: xjws - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-02-20 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 点餐系统php后台 ## 1. 项目使用技术 1. laravel 6 2. nginx 3. mysql5.6 4. rabbitmq ## 2. 服务器信息 ### 1. 账户密码 2. git地址 ```url http://server.southmeteor.com:8099 ``` 账户 huzhiqiang 密码 12345678 3. 禅道 ```url http://server.southmeteor.com:8001 ``` 4. 服务器 ``` http://xjfood.cd.southmeteor.com:801/docs/# ``` 账户 huzhiqiang 密码 nfrx12345678 5. 原型图 ``` https://lanhuapp.com/web/#/item/project/board?pid=b2b1b5b1-e143-46c2-8768-09b1d32a3ce4&teamId=13bc6302-a970-45f1-b66c-f05b9ef4c2c6 ``` 6. ws在线调试地址 ``` http://server.southmeteor.com:8888/admin/ ``` ### 1. 测试服务器信息 ## 3. 代码相关 1. 代码地址 ## 4. 功能模块 1. 用户信息设计 魏琦 2. 商家信息设计 魏琦 3. 后台管理系统和后台商家的商品信息添加 魏琦 4. 后台管理系统的权限设计 初步完成 5. 登录系统 token 初步完成 6. 支付系统 7. 文件系统 初步完成 8. 队列系统 9. 项目部署测试 10. h5 页面展示 ## 4. 原型图地址 1. https://tte1fy.axshare.com h5原型图 2. https://bh0gh6.axshare.com 充值原型图 3. https://yp2iuo.axshare.com 商家后台原型图 登录 订单管理 4. https://1u3to8.axshare.com 商家入驻原型图 ## 5. 后台配置说明 JWT_TOKEN_EXPIRE 用户登录后token的有效时间(秒) USER_PHONE_REGISTER_EXPIRE_TIME 用户手机注册短信验证码有效时间(秒) ## 6. 代码问题 1. 建表时的时间记录语句 ``` $table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP')); $table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP')); ``` 其实可以用如下代码 ``` $table->timestamps(); ``` 2. 数据库手机号字段最好用string,考虑一下11位手机号如果使用string类型建表和bigint建表他们分别占用多少空间? 3. 营业时间周一到周日 还有时间段是怎么设计的?思路应该是我们设计这个营业时间段 商家可以随意的设置周一到周日他们的营业时间 那么设计这个有什么用?肯定是要用户在浏览页面的时候 后台自动的把非营业时间段的商家过滤掉 让用户看不到 所以我们设计表的目的是 1. 让系统有这个功能 2. 更重要的是 我们在实现过滤非营业时间段的功能的时候简单不要太复杂 4. business表中的business_food_id是什么意思 5. business表中的状态应该加上注释 这样大家才知道状态是什么 6. 销量的设计是不是应该用程序来统计出来这个商家卖出商品的条数的记录而不是用销量字段来表示? 7. food表为什么下面有一个business_food表 不是应该在food中直接设立外键吗 8. controller中的注释 controller中的注释queryParam bodyparam有啥不同? 9. 注释不够全,这个项目中梳理出来有三个端 用户 商家 后台管理系统 那你写的接口应该在文档说明属于哪个系统 10. 接口开发的时候建议先写通一个流程 可以先写通 商户提交资料->后台审核->商户添加商品->用户商品遍历->用户购买商品(这个可以不管 添加一条假记录即可)->用户再查看商家信息 商家中的销量增加 ## 各基础功能的部署说明 ### 1. 文件上传模块 1. 采用统一文件上传接口 2. 文件上传接口中有文件上传的各个存储位置的字段 比如一个文件可以上传到阿里云 本地 腾讯云 那么这条数据就会把这些地址都存储起来 3. 所有文件上传都记录上传用户 考虑到上传的用户属性不同 所以在文件系统中有用户上传的用户id号 也有用户的类型字段 比如商家 用户 后台管理员三个类型 4. 本地文件上传的部署和访问配置 1. laravel 本地文件存储在storage里面 用过larave的cgi访问不了 因为laravel的访问目录是public 2. 这个时候需要做一个软连接到public即可 所以会执行命令 ``` php artisan storage:link ``` ### 2. 用户表分类 1. 整个系统分为 病人1,商家2,医院后台3 三类用户 2. 在登录的时候,这三类用户分别调用不同的登录接口登录 这个登录接口也会在token中写入这些类别 key为user_type 3. 在登录之后以后的会话中中间件会把这些类别写入request中 ## 原型图中交流中注意点 ### 1. 餐券设计 1. 餐券分为abc三类餐券 每个餐券有不同的抵扣金额 2. 每个病人只有每类餐券只能有一张 比如只能有一张A餐券 再发A餐券就不行了 3. 商家有个开关 可以去选择屏蔽用户使用餐券任何餐券 4. 餐券只能发给病人使用 ## 各功能对应的api地址 ### 1. h5 #### 1. 用户登录 功能要求:输入手机号 点击发送验证码 发送验证码后登录或者注册 目前需要修改的问题:只有一个发送验证码的接口 只有一个登录或注册的接口 api地址: api/auth 的group里面 #### 2. 首页商家列表展示接口 魏琦 功能要求: 1. 展示商家列表 2. 关键词搜索(未确定搜索哪些关键词 暂定 商家名称和食物名称) 3. 热门商家展示 (未确定什么是热门商家) 4. 展示商家是否可以接受优惠券 5. 展示商家已有的累计销量 通过数据库来统计 api地址: 占时还没有设计 #### 3. h5点餐功能 功能要求: 1. 单个商家信息展示 2. 点餐 通过所有三级分类展示食品 3. 购物车功能 添加商品 计算购物车 #### 4. 订单系统 功能要求: 1. 订单提交 需要用户输入地址或读取用户默认地址 2. 订单中有备注 订单中包括抵扣券 3. 订单中包括配送信息和未配送信息 4. 取消订单 (是不是所有时候都能取消订单) #### 5. 用户个人中心 功能要求: 1. 代金券展示 2. 收藏展示 也就是说要有收藏功能 (是收藏店铺) #### 6. 订单列表展示 功能要求: 订单列表表示 展示订单情况 #### 7. 餐品详情是啥 #### 8. 收藏列表 功能和上面是重复的 #### 9. 地址管理 #### 10. 消息中心 #### 11. 代金券展示 #### 12. 账户信息 ˙后台用户管理 胡智强 #### 13. 充值不做了 #### 14. 商家登录和后台登录 #### 15. 商家入驻和后台审批 功能要求: 商家注册账户 在账户内提交商家入驻申请 ## 消息推送 #### 0. 使用场景 1. 用户有订单激活的状态,比如用户有提交订单 但是订单还没有完成,这时候 系统会不断的推送订单订单状态给用户,请用户注意查收。订单完成后方可断开链接 2. 商家从登录开始就要链接,保证一直处于激活状态接受订单消息,如果前端觉得有必要 也可以结合ajax来获取商家信息一起使用,但是请求不能过于频繁,保证至少间隔1分钟以上 3. 前端使用场景 1. 用户端激活一个订单或多个订单开始,接受系统推送消息 2. 用户端在接受订单消息之后,发送确认消息,确认各种不同的消息字段如下有说明 3. 商家端在登录之后连入ws接受推送消息 4. 在接受推送消息之后,调用接口修改相应数据,再发送确认消息 4. 特别注意 前端主要是接受并确认消息,各种情况的消息发送由后端完成 5. ws测试地址 ``` ws://182.148.222.203:42346 ``` #### 1. 消息推送交互流程 1. 前端向后端建立ws链接 2. 后端返回成功建建立链接信息 3. 前端向后端发送token 4. 后端通过token和前端建立ws会话 开始向前端推送消息 5. 前端等待接收后端推送的消息 并且选择确认消息 这时候后端就不会再推送这一条消息给前端 6. 前端想断开连接直接断开连接即可 无需发送任何断开连接的消息 7. 前端如果因为任何情况断开连接后要重新连接都需要重复第1 2 3 4步 #### 2. 消息格式 1. 消息格式说明 消息使用字典类型,拼装好后使用json格式传输.消息分为请求格式和响应格式。后端每隔10秒向前端推送消息(如果有消息) 2. 消息字段说明: 1. type 消息的类型 比如 1. 表示想建立会话 3. 正常的消息交互 2. msg_code 预定义好的消息 1. 1 用户下单 通知商家接单 2. 2 用户退单 通知商家退单消息 3. 3 商家接单 通知用户接单消息 4. 4 商家拒收订单 通知用户商家拒收订单 5. 5 商家开始运送 通知用户商家开始运送 6. 6 商家完成订单 通知用户商家完成订单 7. 200 会话建立成功 8. 400 会话建立失败 token过期或系统错误 重新请求连接 9. 201 请求建立会话 10. 401 用户token在后台无法解析 请联系管理员查看错误 11. 501 会话建立失败 数据库出错 请联系管理员 12. 7 商家已经同意用户的退单申请 13. 8 商家已经拒绝用户的退单申请 14. 502 客户端发送的确认消息没有id号 无法确认 15. 202 消息确认成功 3. token 用户登录的时候返回的令牌 4. msg: 请求报文: 如果想发送的消息没有预定义好 那么就写在这里面 响应报文: 包含通知订单的具体情况和订单查询接口基本一致,前端无需再次请求订单接口获取推送的具体订单信息 3. 请求消息格式(前端给后端的消息) > 前端推送消息只有两种情况 1. 建立会话 2. 确认收到的消息 ``` token: xxxxx (必须 令牌信息,通过登录接口获取 类型:string) type: 1 (必须 消息类型: 1. 为这个token建立会话 之后有关于这个用户的消息推送会通过ws推送到这个链接上面 3. 确认已经收到推送的消息) msg_code: 1 (必须 预定义消息类型 -1:收到消息类型错误 前端无法识别 1,2,3,4,5,6 确认收到下面定义好的消息服务端无需再重复推送 类型:int) id: 1 (可选 如果type为3的时候 必须填 确认消息的id号,这一条id所对应的消息以后不会再发送) ``` 4. 响应消息格式(后端推送前端消息) ``` type: 2 (消息类型: 2. 关闭websocket会话 3. 正常消息通知 类型:int) msg_code: 1 (预定义消息类型 -1:消息类型错误 后台无法识别 0非预定义消息 1,2,3,4,5,6下面定义好的消息类型 类型:int) msg: xxx (如果msg_code为0 那么这个就是预定义的消息类型) id: 1(该消息的id号) ``` 5. 每隔30秒会发送一条固定数据,表示链接存活 数据格式 ``` {"type":"@heart@"} ``` 5. 示例 1. 前端请求示例 (请求建立会话) ``` {"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoi5Luj5LujIiwiaWQiOjIxLCJwaG9uZSI6IjE3MzgxNTg4ODE0IiwibGF0IjoxNTgyMDAwNTQ0LCJleHAiOjE1ODI4NjQ1NDQsInVzZXJfdHlwZSI6MX0.HG7mNJ8CZ7BnAS_dmElI9ARysHM0aKdGPe3gT8wRXnk","type":1,"msg_code":201} ```