0代码开发医疗挂号小程序

0代码开发医疗挂号小程序

使用Claude code +IDEA(全程0编码,全靠AI)

gitee地址:https://gitee.com/LtAo857/hos

语雀地址:开发文档








项目概述

医疗预约挂号系统 - 一个全栈医院预约挂号平台,包含三个核心模块:

  • backend:Spring Boot REST API(Java 17)
  • admin:Vue 3 管理后台
  • hos_uniapp:UniApp 移动端小程序

运行应用

后端(Spring Boot)

bash 复制代码
cd backend
mvn spring-boot:run                    # 启动开发服务器(端口 8080)
mvn clean package                      # 打包生成 JAR 文件
mvn compile -DskipTests                # 编译代码(跳过测试)
mvn test                               # 运行测试用例

前置条件:必须先启动 MySQL、Redis、RabbitMQ

  • MySQL 数据库:hos(数据库表结构见 sql/hos.sql
  • Redis:localhost:6379
  • RabbitMQ:配置信息在 application.yml

管理前端(Vue 3)

bash 复制代码
cd admin
npm run dev                            # 启动开发服务器(端口 5173)
npm run build                          # 生产环境打包
npm run preview                        # 预览生产打包结果

开发服务器会将 /api 请求代理到 http://localhost:8080

移动端应用(UniApp)

在 HBuilderX 中打开 hos_uniapp 目录,或使用 UniApp 命令行工具。该应用可编译为微信小程序、H5 或原生应用。

系统架构

后端架构

包结构

  • controller:REST API 接口层
  • service:业务逻辑层
  • mapper:MyBatis-Plus 数据访问层
  • entity:数据库实体类
  • dto:请求数据传输对象
  • vo:响应视图对象
  • config:Spring 配置类(Redis、RabbitMQ 等)
  • mq:RabbitMQ 消费者
  • task:定时任务
  • exception:自定义异常及异常处理器

核心技术栈

  • Spring Boot 3.1.5 + Java 17
  • MyBatis-Plus 3.5.5(自带自动 CRUD 的 ORM 框架)
  • Redis(号源缓存 + Lua 脚本)
  • RabbitMQ(异步订单处理)
  • Druid 数据库连接池
  • SpringDoc OpenAPI(Swagger UI 访问地址:/swagger-ui.html

核心业务逻辑

号源管理(高并发场景)

  • 号源缓存于 Redis,Key 格式:medical:stock:{scheduleId}
  • 扣减号源使用 Lua 脚本(RedisConfig.stockDeductScript())保证原子性操作
  • 通过 Redis 原子递减操作防止超卖
  • 定时任务(StockSyncTask)每 60 秒将 Redis 号源同步至 MySQL
  • 订单取消时,号源会释放回 Redis

订单处理(异步流程)

  1. 用户提交订单 → Redis 原子扣减号源
  2. 订单发送至 RabbitMQ 队列(medical.order.queue
  3. OrderConsumer 异步将订单写入 MySQL
  4. 采用手动确认模式防止消息丢失
  5. 支付超时时间:900 秒(15 分钟)

数据流向

复制代码
客户端请求 → Controller → Service → Redis(号源校验)
                                      ↓
                                  RabbitMQ → OrderConsumer → MySQL

前端架构

管理后台(Vue 3)

  • Vue Router 实现路由导航
  • Pinia 进行状态管理
  • Element Plus UI 组件库
  • Axios 处理 HTTP 请求(配置在 src/utils/request.js
  • 视图按功能模块组织:科室、医生、排班、订单

UniApp 移动端

  • 页面包括:登录、首页、科室、医生、排班、订单、支付、个人中心
  • 底部 Tab 导航:首页、我的订单、个人中心
  • 数据存储:使用 uni.setStorageSync() 存储 token、userId、username、phone、realName、isRealAuth
  • API 调用封装在 utils/api.jsutils/request.js

数据库表结构

主要数据表:

  • medical_user:用户账户表
  • medical_department:医院科室表(树形结构,含 parent_id 字段)
  • medical_doctor:医生信息表
  • medical_schedule:医生排班表(日期 + 时间段)
  • medical_stock:预约号源库存表(关联排班表)
  • medical_order:预约订单表
  • medical_payment:支付记录表
  • medical_patient:患者信息表(实名认证)

开发规范

后端服务层

服务层遵循标准 Spring 开发模式:

  • @Service + @RequiredArgsConstructor(Lombok 构造器注入)
  • 事务方法添加 @Transactional(rollbackFor = Exception.class)
  • 业务逻辑错误抛出 BusinessException
  • 使用 LambdaQueryWrapper 进行 MyBatis-Plus 查询

示例代码模板:

java 复制代码
@Service
@RequiredArgsConstructor
public class XxxServiceImpl implements XxxService {
    private final XxxMapper mapper;
    private final RedisTemplate<String, Object> redisTemplate;

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void someMethod() {
        // 业务逻辑实现
    }
}

Redis 操作规范

号源操作必须 使用 Lua 脚本(定义在 RedisConfig 中)保证原子性:

  • stockDeductScript:原子递减操作,返回 1(成功)或 0(库存不足)
  • stockReleaseScript:订单取消时的原子递增操作

禁止使用分离的 GET + DECR 操作处理号源 - 这会导致并发问题。

RabbitMQ 消息处理

消费者使用手动确认模式:

  • 处理成功时调用 channel.basicAck()
  • 处理失败时调用 channel.basicNack(deliveryTag, false, true)(重新入队)
  • 必须使用 try-catch 包裹处理逻辑,防止消息丢失

前端 API 调用规范

UniApp 端在 utils/api.js 中集中定义 API:

  • 所有请求通过 utils/request.js 拦截器处理
  • 请求头自动添加 Token
  • 错误处理逻辑集中管理
  • 存储键值:token、userId、username、phone、realName、isRealAuth

配置说明

后端配置(application.yml

关键配置项:

  • 服务器端口:8080(默认)
  • 数据库:jdbc:mysql://localhost:3306/hos
  • Redis:localhost:6379
  • RabbitMQ:手动确认模式,prefetch=1
  • MyBatis-Plus:自动生成 ID,开启逻辑删除
  • 自定义配置项:
    • medical.order.payment-timeout:900 秒
    • medical.stock.sync-interval:60000ms(1 分钟)
    • medical.aes.secret-key:AES 加密密钥

API 文档

SpringDoc OpenAPI 访问地址:

  • Swagger UI:http://localhost:8080/swagger-ui.html
  • API 文档 JSON:http://localhost:8080/v3/api-docs

重要注意事项

  • 号源同步:高并发场景下以 Redis 为数据基准,每 60 秒通过定时任务同步至 MySQL
  • 订单创建:必须通过 RabbitMQ 异步处理,禁止在请求链路中直接写入 MySQL
  • 支付超时:未支付订单 15 分钟后自动取消(由定时任务处理)
  • 登出行为 :UniApp 端登出需清空 6 个存储键,并通过 uni.reLaunch() 跳转到登录页
  • 科室结构 :基于 parent_id 的树形结构,使用 getDepartmentTree() 获取层级数据
  • 实名认证:创建预约订单时必须完成实名认证(校验 isRealAuth 标识)

总结

  1. 该文档完整翻译了医疗预约挂号系统的开发指引,涵盖项目运行、架构设计、核心业务逻辑、开发规范等核心内容;
  2. 保持了原文档的结构和技术细节准确性,同时将所有英文内容转换为符合中文技术文档习惯的表述;
  3. 重点保留了高并发号源管理、异步订单处理等核心业务的关键实现细节,确保技术指引的完整性。
相关推荐
进击的编程阿伟4 小时前
Claude code 安装使用教程
claude code
oscar9999 小时前
Claude Code与OpenCode的全方位对比
claude code·opencode
神码小Z11 小时前
让AI自己打开网页、点按钮、截图并识别内容——Claude Code这个插件我天天在用
claude code
何中应11 小时前
Claude Code报错
ai·ai编程·claude code
Sestid13 小时前
前端开发Claude Code使用指南
状态模式·ai编程·claude code
Rubin智造社14 小时前
04月20日AI每日参考:华为AI眼镜今日发布,Meta裁员8000人押注AI文件格式
人工智能·claude code·ai硬件·华为ai眼镜·meta裁员·cerebras ipo·字节跳动seedance
codeRichLife15 小时前
Claude Code常用命令
ai编程·claude code
江湖人称小鱼哥1 天前
Obsidian-Graphify-让你的笔记库自己长出知识图谱
笔记·知识图谱·obsidian·claude code·graphify·卡帕西
92year1 天前
AI编程一个月烧了多少钱?用CodeBurn一条命令算清楚
ai编程·开发工具·cursor·claude code·token优化
Hoper.J2 天前
聊聊 Claude Code v2.1.111:Opus 4.7,Auto 模式开放,新的思考等级 xhigh,以及“限免3次”的 ultrareview
claude·claude code·opus 4.7