【云岚到家-即刻体检】-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设置的用户密码即可(输入无反应是正…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
