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. 重点保留了高并发号源管理、异步订单处理等核心业务的关键实现细节,确保技术指引的完整性。
相关推荐
门豪杰3 小时前
Claude Code 斜杠命令实践指南
claude·claudecode·claude code
超b小哥5 小时前
【超详细】Claude Code Ubuntu平台完整部署指南
linux·人工智能·ubuntu·ai·claude code
老黑16 小时前
开源工具 AIDA:给 AI 辅助开发加一个数据采集层,让 AI 从错误中自动学习(Glama 3A 认证)
前端·react.js·ai·nodejs·cursor·vibe coding·claude code
irpywp17 小时前
HolyClaude:一行命令,随时随地运行 Claude Code
开源·github·claude code
oscar9991 天前
探秘Claude Code的“.claude”目录:那些藏在背后的配置与记忆
memory·配置·rule·claude code·sikil
oscar9991 天前
打开Claude Code的黑匣子:一次会话中,上下文窗口里到底发生了什么?
context·claude code
xufengzhu1 天前
Claude Code Hooks 报错异常处理:解决 Windows 环境下的 jq 命令缺失问题
人工智能·windows·claude code
小码农叔叔1 天前
【AI智能体】Claude Code 高级编程技巧实战项目详解
claude code·claude code 使用·claude code 详解·claude code 实战·claude code 配置
唐骁虎2 天前
Claude Code 全景架构指南——三大核心支柱及四大关键扩展组件
ai·架构·ai编程·claude code
云道轩2 天前
告诉 Claude Code 在项目中遵循特定的编程模式/设计模式和技术栈约束
设计模式·ai·agent·claude code