
温馨提示本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片1. 项目背景与意义随着中医药事业的快速发展传统中医诊所面临患者信息管理分散、处方记录纸质化、复诊跟踪困难等痛点。传统的人工挂号、手写病历和纸质处方不仅效率低下还容易出现信息丢失、数据难以统计等问题。建设一套面向中医诊所的信息管理系统能够将患者档案、辨证论治记录、中药处方、复诊随访等核心业务数字化帮助诊所提升运营效率、规范诊疗流程并为后续的数据分析和科研积累提供基础。本系统基于 Java Spring Boot 框架开发采用前后端分离架构后端提供 RESTful API前端通过 Web 页面进行交互。系统覆盖诊所日常诊疗的核心环节包括患者管理、医生排班、挂号预约、病历记录、中药处方开具、收费结算和统计分析等模块具有较强的实用性和可扩展性。2. 系统技术栈本系统采用成熟稳定的 Java 生态技术栈兼顾开发效率与运行性能具体如下层次技术选型说明后端框架Spring Boot 2.7快速构建独立运行的 Web 服务简化配置持久层框架MyBatis-Plus简化 CRUD 操作内置分页与条件构造器数据库MySQL 8.0存储患者、医生、处方等业务数据权限认证Spring Security JWT实现登录认证与接口权限控制接口文档Knife4jSwagger 增强自动生成在线接口文档便于前后端联调前端框架Vue 3 Element Plus构建管理后台界面组件丰富、开发高效构建工具Maven管理项目依赖与构建打包缓存Spring Data Redis缓存热点数据如医生排班信息3. 系统核心功能模块系统围绕中医诊所日常业务划分为以下核心功能模块患者管理维护患者基本信息、过敏史、既往病史支持按姓名、手机号快速检索。医生管理管理医生档案、职称、擅长领域和排班信息。挂号预约支持线上预约与现场挂号自动校验号源余量。病历管理记录四诊信息望闻问切、辨证分型、治则治法。处方管理开具中药处方支持药材明细、剂量、用法用量录入自动计算金额。收费结算对接处方与诊疗项目生成收费单并记录支付状态。统计分析按日、按月统计就诊人次、处方量、营收等核心指标。4. 数据库设计系统核心数据表包括患者表、医生表、挂号表、病历表、处方表、处方明细表和收费表。下面给出患者表和处方明细表的核心结构设计。-- 患者信息表 CREATE TABLE patient ( id BIGINT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL COMMENT 患者姓名, gender TINYINT COMMENT 性别 0-女 1-男, phone VARCHAR(20) COMMENT 手机号, birth_date DATE COMMENT 出生日期, allergy_history VARCHAR(255) COMMENT 过敏史, medical_history TEXT COMMENT 既往病史, created_time DATETIME DEFAULT CURRENT_TIMESTAMP, updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); -- 处方明细表 CREATE TABLE prescription_item ( id BIGINT PRIMARY KEY AUTO_INCREMENT, prescription_id BIGINT NOT NULL COMMENT 处方主表ID, herb_name VARCHAR(50) NOT NULL COMMENT 药材名称, dosage DECIMAL(8,2) COMMENT 剂量克, unit VARCHAR(20) COMMENT 单位, price DECIMAL(8,2) COMMENT 单价, amount DECIMAL(8,2) COMMENT 金额小计, remark VARCHAR(255) COMMENT 备注如先煎、后下 );5. 核心代码实现下面选取系统中最具代表性的几个核心代码片段进行说明包括实体类、挂号接口、处方开具和 JWT 认证过滤器。5.1 患者实体类Data TableName(patient) public class Patient { TableId(type IdType.AUTO) private Long id; private String name; private Integer gender; private String phone; private LocalDate birthDate; private String allergyHistory; private String medicalHistory; private LocalDateTime createdTime; private LocalDateTime updatedTime; }5.2 挂号预约接口RestController RequestMapping(/api/registration) public class RegistrationController { Resource private RegistrationService registrationService; PostMapping(/appoint) public ResultLong appoint(RequestBody RegistrationDTO dto) { // 校验号源余量若已满则返回业务异常 Long registrationId registrationService.createAppointment(dto); return Result.success(registrationId); } }5.3 处方开具服务Service public class PrescriptionServiceImpl implements PrescriptionService { Resource private PrescriptionMapper prescriptionMapper; Resource private PrescriptionItemMapper itemMapper; Override Transactional(rollbackFor Exception.class) public Long createPrescription(PrescriptionDTO dto) { // 1. 保存处方主表 Prescription prescription new Prescription(); prescription.setPatientId(dto.getPatientId()); prescription.setDoctorId(dto.getDoctorId()); prescription.setDiagnosis(dto.getDiagnosis()); prescription.setTotalAmount(dto.getItems().stream() .map(PrescriptionItemDTO::getAmount) .reduce(BigDecimal.ZERO, BigDecimal::add)); prescriptionMapper.insert(prescription); // 2. 保存处方明细 for (PrescriptionItemDTO itemDTO : dto.getItems()) { PrescriptionItem item new PrescriptionItem(); item.setPrescriptionId(prescription.getId()); item.setHerbName(itemDTO.getHerbName()); item.setDosage(itemDTO.getDosage()); item.setUnit(itemDTO.getUnit()); item.setPrice(itemDTO.getPrice()); item.setAmount(itemDTO.getAmount()); item.setRemark(itemDTO.getRemark()); itemMapper.insert(item); } return prescription.getId(); } }5.4 JWT 认证过滤器Component public class JwtAuthenticationFilter extends OncePerRequestFilter { Resource private JwtTokenProvider tokenProvider; Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { String token resolveToken(request); if (token ! null tokenProvider.validateToken(token)) { String username tokenProvider.getUsername(token); // 将用户信息放入 SecurityContext供后续接口鉴权使用 UsernamePasswordAuthenticationToken authentication new UsernamePasswordAuthenticationToken(username, null, new ArrayList()); SecurityContextHolder.getContext().setAuthentication(authentication); } chain.doFilter(request, response); } private String resolveToken(HttpServletRequest request) { String bearer request.getHeader(Authorization); if (bearer ! null bearer.startsWith(Bearer )) { return bearer.substring(7); } return null; } }6. 系统架构与部署系统采用经典的前后端分离架构。前端 Vue 应用通过 Nginx 部署后端 Spring Boot 服务以 Jar 包形式运行数据库使用 MySQL缓存使用 Redis。前后端通过 RESTful API 通信接口统一返回 Result 包装对象包含状态码、消息和数据三部分便于前端统一处理异常。在部署层面后端服务可通过 Docker 容器化部署配合 Docker Compose 一键编排 MySQL、Redis 和应用服务降低环境搭建成本。生产环境建议启用 HTTPS并将 JWT 密钥、数据库密码等敏感配置放入环境变量或配置中心管理。7. 总结与展望本文围绕基于 Java Spring Boot 的中医诊所信息管理系统介绍了项目的背景意义、技术选型、核心功能模块、数据库设计以及关键代码实现。该系统能够有效提升中医诊所的数字化管理水平规范诊疗流程减少人工差错。后续可在现有基础上进一步扩展智能辨证辅助、中药库存管理、电子病历共享、移动端患者服务等能力并结合大数据分析为诊所运营决策提供更深入的支持。