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. 重点保留了高并发号源管理、异步订单处理等核心业务的关键实现细节,确保技术指引的完整性。
相关推荐
IT界的奇葩14 小时前
Claude Code agent teams
claude code
jiayong2320 小时前
Claude Code使用实战教程
claude code
烁烁闪闪烁烁2 天前
【weelinking系列Claude教程】 04 - Claude Code 安装与配置
人工智能·chatgpt·ai编程·claude·cursor·claude code·opencode
曦云沐2 天前
AI 编程助手三强争霸:OpenCode vs Claude Code vs Kimi Code CLI 深度对比
人工智能·claude code·kimi code·open code
26岁的学习随笔2 天前
【Claude Code】拆解 Claude Code 的 API 交互 —— 抓包看清每一个字节
llm·agent框架·claude code·prompt engineering·api分析
A洛3 天前
从零开始:OpenClaw 完整安装配置实战指南
ai·ai编程·claude code·openclaw·clawbot
A洛3 天前
OpenAI Codex CLI 完整速查表:命令、配置、MCP 一网打尽
人工智能·chatgpt·codex·claude code
鹓于5 天前
Claude code操作指南
claude code
小草cys5 天前
Claude Code for VSCode 最简安装
大模型·vs code·claude code