【云岚到家-即刻体检】-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设置的用户密码即可(输入无反应是正…...
别再只用电容了!从π型RC到电子滤波,手把手教你选对硬件滤波方案(附电路图)
硬件滤波方案实战指南:从基础RC到电子滤波的工程决策 在嵌入式系统和电源设计中,噪声抑制是每个工程师必须面对的挑战。想象一下,你精心设计的传感器电路因为电源噪声导致数据跳变,或者音频放大器传出令人不快的嗡嗡声——这些问题…...
如何写 Skill
核心概念 Skill 是一个自包含的模块,用来给 Claude/Cascade 注入特定领域的知识、工作流和工具。本质上就是一个"新手入职指南",让通用 AI 变成某个领域的专家。 目录结构 skill-name/ ├── SKILL.md # 必须,核心文件 └…...
嵌入式C++轻量级生命体基类:面向OOP的零开销实体抽象
1. 项目概述life_entity是一个面向嵌入式系统与游戏逻辑建模场景设计的轻量级 C 基类,其核心定位并非通用游戏引擎组件,而是为资源受限环境(如 Cortex-M3/M4 微控制器运行 FreeRTOS 或裸机实时调度器)中实现可继承、可多态、可生命…...
【Java外部函数性能优化黄金法则】:20年JVM专家亲授JNI/FFM调优的7大致命误区与3步极速修复方案
第一章:Java外部函数优化的演进脉络与性能本质Java平台对外部函数调用(Foreign Function & Memory API,即JEP 454/464/471/472)的演进,标志着JVM从“纯Java世界”迈向系统级互操作的新纪元。其性能本质并非单纯降低…...
数组运算18题:从递归求和解到Kadane算法
1. 数组运算进阶指南:18道经典题目深度解析数组作为最基本的数据结构,在编程面试和实际开发中无处不在。掌握数组的各种运算技巧不仅能帮助你在面试中脱颖而出,更能提升日常编码的效率和质量。本文将深入解析18个经典的数组运算题目ÿ…...
Bypass Paywalls Clean:智能内容解锁工具的终极使用指南
Bypass Paywalls Clean:智能内容解锁工具的终极使用指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在数字化信息时代,学术研究者、新闻从业者和知识工作者…...
从 14 万美元支付事故看:AI 写的代码过了所有测试,为什么活不过生产?
我审计过的一家科技公司,曾因一段 AI 生成的异步支付处理代码,遭遇了一场灾难性的生产事故。这段代码完美通过了所有自动化检查、单元测试与集成测试,标注着「All checks passed」被顺利合并到生产环境,最终却触发了竞态条件与重复…...
GitHub功能多元拓展,korb工具革新REWE购物流程
【导语:GitHub提供了涵盖AI代码创作、开发者工作流、应用程序安全等多方面的丰富功能,同时推出不同规模和用例的解决方案。而korb命令行工具则为REWE超市购物带来新体验,可实现自动化购物流程。】GitHub:功能全面的开发者平台GitH…...
一文了解嵌入式硬件通信核心:串口/CAN/以太网,底层逻辑居然全一样!
做嵌入式、工控、硬件通信开发久了,总会有一个突然顿悟的瞬间:串口、以太网、CAN、TCP、USB、蓝牙、Modbus……这些看似毫无关联、应用场景天差地别的通信方式,扒开底层逻辑才发现,居然是同一个模子刻出来的。看透这一点后&#x…...
保姆级避坑指南:在Ubuntu 22.04上为ROS2 Humble编译OpenCV 4.2.0和cv_bridge
深度解析:Ubuntu 22.04下ROS2 Humble与OpenCV 4.2.0的精准版本匹配实战 当视觉SLAM遇上ROS2生态,版本依赖就像一场精密的外科手术。本文将带你穿透ORB-SLAM3等视觉算法与ROS2 Humble环境整合时的核心痛点——特别是OpenCV 4.2.0与cv_bridge的版本锁定机…...
