1. 项目概述:智能药箱管理系统设计与实现
作为一名从事Java全栈开发十余年的技术老兵,我近期完成了一个基于SpringBoot的智能药箱管理系统。这个系统专为医药零售门店、社区药房等场景设计,实现了药品进销存全流程数字化管理。系统采用当前主流的技术栈:SpringBoot 2.7 + Vue 3 + MyBatis-Plus + MySQL 8.0,前后端分离架构,支持多终端访问。
在实际开发过程中,我发现医药管理系统有几个关键痛点:药品效期管理混乱、库存预警不及时、销售数据分析困难。这个项目正是针对这些痛点,提供了完整的解决方案。系统包含六大核心模块:药品基础管理、采购入库、销售出库、库存预警、数据统计和系统管理,后面我会详细解析每个模块的设计思路和实现细节。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计
2.1 整体架构设计
系统采用经典的三层架构设计,分为表示层、业务逻辑层和数据访问层。这种分层设计使得系统各模块职责清晰,耦合度低,便于后期维护和扩展。
表示层使用Vue 3 + Element Plus实现响应式前端界面,通过Axios与后端交互。业务逻辑层基于SpringBoot实现核心业务处理,数据访问层采用MyBatis-Plus简化数据库操作。特别值得一提的是,我们使用了Spring Security + JWT实现安全的认证授权机制,确保系统数据安全。
2.2 数据库设计
数据库设计是系统的核心之一。我们遵循第三范式设计了20余张表,主要包含以下几类:
- 基础信息表:药品信息表(drug_info)、供应商表(supplier)、客户表(customer)等
- 业务表:采购单表(purchase_order)、销售单表(sale_order)、库存表(stock)等
- 系统表:用户表(sys_user)、角色表(sys_role)、菜单表(sys_menu)等
以药品信息表为例,关键字段设计如下:
sql复制CREATE TABLE `drug_info` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`drug_code` varchar(32) NOT NULL COMMENT '药品编码',
`drug_name` varchar(100) NOT NULL COMMENT '药品名称',
`spec` varchar(50) NOT NULL COMMENT '规格',
`unit` varchar(10) NOT NULL COMMENT '单位',
`manufacturer` varchar(100) DEFAULT NULL COMMENT '生产厂家',
`approval_number` varchar(50) DEFAULT NULL COMMENT '批准文号',
`drug_type` tinyint DEFAULT NULL COMMENT '药品类型(1:处方药 2:非处方药)',
`price` decimal(10,2) DEFAULT NULL COMMENT '零售价',
`cost_price` decimal(10,2) DEFAULT NULL COMMENT '成本价',
`status` tinyint DEFAULT '1' COMMENT '状态(0:停用 1:启用)',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_drug_code` (`drug_code`),
KEY `idx_drug_name` (`drug_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='药品信息表';
2.3 技术选型考量
在技术选型上,我们做了以下考量:
- SpringBoot:简化配置,快速开发,内置Tomcat便于部署
- Vue 3:响应式编程,组件化开发
