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. 重点保留了高并发号源管理、异步订单处理等核心业务的关键实现细节,确保技术指引的完整性。
相关推荐
JavaGuide10 天前
Claude Opus 4.6 真的用不起了!我换成了国产 M2.5,实测真香!!
java·spring·ai·claude code
独断万古他化12 天前
【AI开发工具】Claude Code:安装配置与使用指南(Windows/macOS)
ai·claude code
被制作时长两年半的个人练习生12 天前
claude code for vscode 配置 qwen3.5
ide·vscode·claude code·qwen3.5
becatjd12 天前
VScode的claude code插件报错command ‘claude-vscode.editor.openLast‘ not found
ide·vscode·编辑器·claude·anthropic·claude code
优秀是不可能的12 天前
Claude Code VSCode 扩展 Windows 打开出现 “claude-vscode.editor.openLast”
ide·windows·vscode·claude code
Lxinccode14 天前
AI编程(3) / claude code[3] : 更新apiKey
java·数据库·ai编程·claude code
香芋Yu15 天前
【从零构建AI Code终端系统】10 -- Agent Team:从指令驱动到“任务自治”的组织飞跃
code·multi agent·claude code·team·subagents
其美杰布-富贵-李15 天前
Claude Code 使用指南
笔记·vibecoding·claude code
YoungHong199216 天前
在AI工具中免费使用 GLM-5/DeepSeek-R1-0528等国产模型
claude·claudecode·claude code·glm4.7·kimi2.5