【云岚到家-即刻体检】-day07-2-项目介绍及准备
【云岚到家-即刻体检】-day07-2-项目介绍及准备
- 1 项目介绍
- 1)项目简介
- 2)界面原型
- 3)实战目标
- 2 搭建实战环境
- 1)服务端
- 2)管理端前端工程
- 3)用户端前端工程
- 4)测试
- 3 熟悉项目代码
- 1)接口文档
- 2)登录接口
- 3) 套餐查询
1 项目介绍
1)项目简介
即刻体检是一个健康体检预约服务平台,其主要功能包含:套餐管理、订单管理、用户预约等功能。该项目分为管理端(PC)和用户端(H5)。管理端主要用于管理人员进行预约设置、订单信息管理,用户端主要用于用户查询套餐、预约下单、查询订单。
系统结构图如下:
业务流程:
体检预约详细流程:
2)界面原型
本次实战的核心是预约下单、支付流程,下边介绍与其相关核心功能的界面原型,以便于理解项目的核心业务流程。
- 套餐查询
用户首次进入用户端首页,如图展示以下模块:
点击“体检预约”查看热门套餐列表,如下图:
选择需要的体检套餐,点击查看套餐详情,如下图:
- 预约设置
管理端进行预约设置,填写预约人数。
- 用户端下单
在体检套餐界面,点击“立即预约”即可填写体检各项信息进行下单。
首先选择好套餐,填写预约信息:
点击“体检日期”需要选择可以预约的日期(即显示“充足”的日期):
填写完成,点击“支付并预约”即可完成下单:
点击“支付并预约”,如下图:
选择任意支付渠道后,会生成支付二维码,用户需扫码支付,如下图:
注意:这里是为了方便学习使用了扫码支付,实际项目使用的是H5支付。
用户扫码支付完成后,需要点击“支付完成”,后端查询支付结果进行确认:
支付结果被确认成功后,跳转到支付成功页面:
用户进入“我的订单”查询订单
点击订单名称查看订单详情
管理端进入订单管理查询订单:
3)实战目标
- 项目边界
作为教学实战项目仅提供与实战内容相关的前端及后端代码。
前端:
管理端:包括预约管理(支持导入方式进行预约设置、预约设置查询、预约设置)、订单管理(订单列表查询、订单详情查询、根据状态统计订单数量)。
用户端:套餐查询、预约下单、生成支付二维码、确认支付结果、我的订单列表查询、订单详情查询、订单取消。
后端:
实战前提供项目原始工程:包括套餐查询接口涉及的代码、所有接口文档。
实战完成评比后提供完整的代码。
- 实战目标
通过实战进一步提高下单支付业务的设计及开发能力,积累开发经验。
实战内容边界:
前端工程:无需开发。
后端工程:除了已提供的代码以外,剩余代码均需要开发,参考后边的实战章节内容进行分析、开发、测试。
2 搭建实战环境
1)服务端
即刻体检项目依赖家政项目的网关(jzo2o-gateway)、支付服务(jzo2o-trade)、公共服务(jzo2o-publics),具体如下:
下单支付依赖支付服务(jzo2o-trade)。
验证码依赖公共服务(jzo2o-publics)。
如下图:
下边部署后端服务:
首先创建体检项目的数据库jzo2o-health,从课程资料下的“即刻体检项目实战”目录获取jzo2o-health-init.sql,并导入数据库,导入后数据库结构如下图:
注意:不要手动修改表中的数据,以免影响实战。
数据库创建完成,下边导入Java工程.
首先创建Git远程仓库:jzo2o-health
从课程资料下的“即刻体检项目实战”目录获取jzo2o-health-01-0.zip,解压到自己的代码目录下。
将jzo2o-health目录上传到Git仓库:
进入jzo2o-health目录执行下边的命令:
git init
git add .
git commit -m "初始项目工程"
git remote add origin git仓库地址
git push -u origin "master"
使用IDEA打开jzo2o-health目录,熟悉代码。
下边在nacos创建配置jzo2o-health.yaml文件
进入nacos创建jzo2o-health.yaml
注意:选择namespace为“75a593f5-33e6-4c65-b2a0-18c403d20f63”的命名空间添加配置文件 。
jzo2o:jwt-key: customertoken-key:"1": customer"2": customer"3": customer"4": operationoperation-jwt-tool-key: operationcustomer-jwt-tool-key: customertrade:aliEnterpriseId: 2088241317544335wechatEnterpriseId: 1561414331job:refundOrderCount: 100overTimePayOrderCount: 100
xxl-job:port: 21600
2)管理端前端工程
下边部署管理端(前端),部署完成通过浏览器运行。
从课程资料下的“即刻体检项目实战”目录中获取前端代码压缩包project-jktj-admin-vue3-java.zip
,并解压到自己的代码目录中
首先需要配置网关地址:
修改~\``project-jktj-admin-vue3-java``\vite.config.ts
文件配置网关地址,如下图:
修改红框内的ip地址为本地局域网IP地址。
修改~\project-jktj-admin-vue3-java\src\config\proxy.ts
文件中的ip地址为本地局域网IP地址,如下图:
在根目录下使用cmd,执行部署命令:
npm run dev
如果直接运行上边的命令不行,通过下边命令操作:
1、删除node_modules目录
2、执行下边的命令
npm install
npm run dev
接下来浏览器中会自动打开管理端登录页面,如下图:
3)用户端前端工程
下边部署用户端(前端),部署完成通过浏览器运行。
从课程资料下的“即刻体检项目实战”目录中获取前端代码压缩包project-jktj-H5-uniapp-java.zip
,并解压到自己的代码目录中
首先需要配置网关地址,修改根目录下vite.config.js文件,如下图:
修改红框内的ip地址为本地局域网IP地址。
在根目录下使用cmd,执行部署命令:
cnpm run dev:h5
如果直接运行上边的命令不行,通过下边命令操作:
1、删除node_modules目录
2、执行下边的命令
npm install
cnpm run dev:h5
接下来需要浏览器中输入localhost:8000
手动打开用户端首页,如下图:
注意:为了适配手机大小,需要按“F12”打开开发者调试窗口,点击右侧红框,切换为手机页面适配,并可以切换不同尺寸手机
4)测试
启动jzo2o-gateway网关
启动jzo2o-publics公共服务
启动jzo2o-health体检服务
启动管理端(前端)
启动用户端(前端)
首先测试管理端:
进入登录页面,使用默认的账号和密码登录。
预期结果:登录成功进入下边的界面
测试用户端:
进入用户端,点击登录按钮进行登录
对18888888888发送验证码,验证码为123456
成功登录后
3 熟悉项目代码
1)接口文档
本项目初始工程代码包括了登录、套餐查询接口,下边熟悉项目已有的代码及设计。
首先阅读接口文档,根据接口文档内容去阅读代码。
接口文档地址:http://localhost:21500/health/doc.html#/home
2)登录接口
找到登录接口文档
找到对应的代码
- 管理员登录:
管理员进入前端登录界面
输入账号和密码:
账号:demo
密码:888itcast.CN764%…
在前端界面默认了demo账号和密码。
点击登录:
请求管理登录接口,执行下边的service方法。
- 用户登录
用户进入前端登录界面
首先获取验证码,请求publics服务( /publics/sms-code/send) 获取验证码。
请求下边的参数:
这里为了测试方便已将publics服务发送验证码改为固定发送123456。
点击“登录”请求普通用户登录接口,请求下边的service方法
执行流程是:
先校验验证码是否为空,校验验证码的正确性。
再判断手机号是否存在,如果不存在则自动注册。
最后生成令牌。
3) 套餐查询
我们查看用户端套餐查询相关接口。
找到接口文档:
找到对应的代码
获取所有套餐信息:
进入用户端首页,点击“体检预约”进入套餐查询界面
通过查阅代码,套餐信息来源setmeal表。
获取所有套餐接口将该表的所有记录全部查出。
根据id查询套餐信息:
点击“套餐名称”请求根据id查询套餐信息接口。
找到service方法
继续找到持久层方法
下边的方法通过两次一对多映射最终拿到套餐信息:
套餐下边的检查组信息
检查组下边的检查项目信息
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jzo2o.health.mapper.SetmealMapper"><select id="findDetail" resultMap="SetmealDetailMap">SELECTs.id AS id,s.name AS name,s.sex,s.age,s.price,s.img,s.remark,g.id AS group_id,g.name AS group_name,i.id AS item_id,i.name AS item_nameFROMsetmeal AS sLEFT JOIN setmeal_checkgroup ON setmeal_checkgroup.setmeal_id = s.idLEFT JOIN checkgroup AS g ON setmeal_checkgroup.checkgroup_id = g.idLEFT JOIN checkgroup_checkitem ON checkgroup_checkitem.checkgroup_id = g.idLEFT JOIN checkitem AS i ON checkgroup_checkitem.checkitem_id = i.idWHEREs.id = #{id}</select><!--手动的映射--><resultMap id="SetmealDetailMap" type="com.jzo2o.health.model.dto.response.SetmealDetailResDTO"><!--id映射主键字段--><id column="id" property="id"></id><!--result映射普通字段--><result column="name" property="name"></result><result column="sex" property="sex"></result><result column="age" property="age"></result><result column="price" property="price"></result><result column="img" property="img"></result><result column="remark" property="remark"></result><!--column 数据库中的字段名--><!--property 实体类中对应的属性 该关键字可以省略... --><!--ofType 是javaType中的单个对象类型--><collection property="checkGroupList" resultMap="CheckGroupDetailMap"></collection></resultMap><!--手动的映射--><resultMap id="CheckGroupDetailMap" type="com.jzo2o.health.model.dto.response.CheckGroupDetailResDTO"><!--id映射主键字段--><id column="group_id" property="id"></id><!--result映射普通字段--><result column="group_name" property="name"></result><!--column 数据库中的字段名--><!--property 实体类中对应的属性 该关键字可以省略... --><!--ofType 是javaType中的单个对象类型--><collection property="checkItemList" ofType="com.jzo2o.health.model.dto.response.CheckItemResDTO"><id column="item_id" property="id"></id><result column="item_name" property="name"></result></collection></resultMap>
</mapper>
通过代码找到对应的表,如下:
检查项:最细粒度的检查项目,如身高、体重。
检查组:多个检查项形成一个检查组,如视力色觉检查组包含裸视力(右)、裸视力(左)等等检查项。
套餐:多个检查组形成一个套餐,如入职体检套餐包含视力色觉检查组、血常规检查组等等。
检查项与检查组之间是多对多关系。
检查组和套餐之间是多对多关系。
相关文章:

【云岚到家-即刻体检】-day07-2-项目介绍及准备
【云岚到家-即刻体检】-day07-2-项目介绍及准备 1 项目介绍1)项目简介2)界面原型3)实战目标 2 搭建实战环境1)服务端2)管理端前端工程3)用户端前端工程4)测试 3 熟悉项目代码1)接口文…...

SpringCloud Alibaba之Nacos服务注册和配置中心
(学习笔记)nacos-server版本:2.2.3 总体介绍: 1、Nacos介绍 官网:Nacos官网| Nacos 配置中心 | Nacos 下载| Nacos 官方社区 | Nacos 官网 Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字…...

面试官:讲一讲Spring MVC源码解析
好看的皮囊千篇一律、有趣的灵魂万里挑一 文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。…...
815. 公交路线(24.9.17)
题目 给你一个数组 routes,表示一系列公交线路。其中每个 routes[i] 表示一条公交线路,第 i 辆公交车将会在上面循环行驶。例如,路线 routes[0][1,5,7] 表示第 0 辆公交车会一直按序列 1->5->7->1->5->7->1->... 这样的…...
Rust: Warp RESTful API 如何得到客户端IP?
在使用 Rust 的 Warp 框架来创建 RESTful API 时,如果你想要获取客户端的 IP 地址,通常需要在处理 HTTP 请求的函数中查看请求的头部或者底层连接的信息。不过,Warp 本身并不直接提供一个简便的 API 来直接获取客户端的 IP 地址,因…...

添加选择登录ssh终端
吼吼,这次成了一个小的瑞士军刀了 … … 一次性功能齐全,虽然只支持win10及以上...
【基于 Delphi 的人才管理系统】
基于 Delphi 的人才管理系统可以帮助企业或组织管理员工的信息,包括招聘、培训、绩效评估等方面。这种系统通常包括员工档案管理、职位发布、应聘者跟踪、培训计划安排等功能。下面是一个简化的人才管理系统设计方案及其代码示例。 系统设计概览 员工档案管理&…...

GetMaterialApp组件的用法
文章目录 1. 知识回顾2. 使用方法2.1 源码分析2.2 常用属性 3. 示例代码4. 内容总结 我们在上一章回中介绍了"Get包简介"相关的内容,本章回中将介绍GetMaterialApp组件.闲话休提,让我们一起Talk Flutter吧。 1. 知识回顾 我们在上一章回中已经…...
ubuntu安装mysql 8.0忘记root初始密码,如何重新修改密码
1、停止mysql服务 $ service mysql stop 2、修改my.cnf文件 # 修改my.cnf文件,在文件新增 skip-grant-tables,在启动mysql时不启动grant-tables,授权表 $ sudo vim /etc/mysql/my.cnf [mysqld] skip-grant-tables 3、启动mysql服务 servic…...
Vue3项目开发——新闻发布管理系统(七)
文章目录 九、新闻分类管理模块设计开发1、新闻分类主页面设计2、封装页面组件3、改造页面4、新闻分类表格渲染4.1封装API,获取新闻分类数据4.2 表格动态渲染4.3表格增加 loading 效果5、实现新闻分类添加和编辑功能5.1 点击显示弹层5.2封装弹层组件 CateEdit5.3 准备弹层表单…...

ICMP
目录 1. 帧格式2. ICMPv4消息类型(Type = 0,Code = 0)回送应答 /(Type = 8,Code = 0)回送请求(Type = 3)目标不可达(Type = 5,Code = 1)重定向(Type = 11)ICMP超时(Type = 12)参数3. ICMPv6消息类型回见TCP/IP 对ICMP协议作介绍 ICMP(Internet Control Messag…...
Unity-Transform类-旋转
角度度相关 相对世界坐标角度 print(this.transform.eulerAngles); 相对父对象角度 print(this.transform.localEulerAngles); 注意:设置角度和设置位置一样 不能单独设置xyz 要一起设置 如果我们希望改变的 角度 是面板上显示的内容 那是改…...
如何使用 Vue 3 的 Composition API
Vue 3 引入了 Composition API,它提供了一种更灵活的方式来组织和重用逻辑。与 Vue 2 的 Options API 相比,Composition API 允许你将组件的逻辑按功能组织到函数中,而不是将它们分散到组件选项对象中。以下是如何在 Vue 3 中使用 Compositio…...

Mamba环境配置教程【自用】
1. 新建一个Conda虚拟环境 conda create -n mamba python3.102. 进入该环境 conda activate mamba3. 安装torch(建议2.3.1版本)以及相应的 torchvison、torchaudio 直接进入pytorch离线包下载网址,在里面寻找对应的pytorch以及torchvison、…...
2021 年 6 月青少年软编等考 C 语言二级真题解析
目录 T1. 数字放大思路分析 T2. 统一文件名思路分析 T3. 内部元素之和思路分析 T4. 整数排序思路分析 T5. 计算好数思路分析 T1. 数字放大 给定一个整数序列以及放大倍数 x x x,将序列中每个整数放大 x x x 倍后输出。 时间限制:1 s 内存限制&#x…...
2024网络安全、应用软件系统开发决赛技术文件
用软件系统开发技术方案 一、竞赛项目 2024 年全国电子信息行业第二届职工技能竞赛四川省应用 软件系统开发选拔赛分理论比赛和实际操作两个部分。理论比赛 成绩占30%,实际操作成绩占70%。 二、理论比赛 1、理论比赛范围 ①计算机系统基础知识: …...
CSP-J初赛每日题目2(答案)
二进制数 00100100和 00010100 的和是( )。 A.00101000 B.01100111 C.01000100 D.00111000 正确答案: D \color{green}{正确答案: D} 正确答案:D 解析: \color{red}{解析:} 解析: 00100100 36 \color{r…...
为什么Node.js不适合CPU密集型应用?
Node.js不适合CPU密集型应用的原因主要基于其设计理念和核心特性,具体可以归纳为以下几点: 单线程模型 Node.js采用单线程模型来处理用户请求和异步I/O操作。虽然这种模型在处理高并发I/O密集型任务时非常高效,因为它避免了传统多线程模型中的…...
数模原理精解【12】
文章目录 广义线性模型多元回归中的 R 2 R^2 R2(也称为决定系数)一、定义二、性质三、计算四、例子五、例题 偏相关系数一、定义二、计算三、性质四、例子 多元回归相关定义性质假设检验定义计算性质检验方法例子和例题例子例题例子 参考文献 广义线性模…...
steamdeck执行exe文件
命令行安装: sudo pacman xxxx //"xxxx"为软件名 ,或者搜索“arch linux 软件安装命令” 安装wine及wineZGUI 命令行输入: sudo pacman -S wine 后面需要输入密码,deck设置的用户密码即可(输入无反应是正…...

stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...