1. 项目背景与核心价值
智慧药店药品信息管理系统是传统药店数字化转型的关键基础设施。随着医药零售行业信息化程度提升,单纯依赖人工记录药品进销存的方式已无法满足现代药店管理需求。这个毕业设计项目通过SpringBoot框架实现了药品全生命周期管理,包含采购、库存、销售、效期预警等核心功能模块。
我在实际药店管理系统开发中发现,这类系统需要特别关注三个核心痛点:一是药品批次和效期管理必须绝对精准,二是处方药销售需要严格的权限控制,三是系统需要与医保平台、电子处方平台等第三方系统无缝对接。这个毕业设计虽然规模较小,但完整覆盖了药店管理的基础业务场景。
2. 系统架构设计
2.1 技术选型分析
采用SpringBoot 2.7 + MyBatis Plus + Vue.js前后端分离架构。选择这套技术栈主要基于以下考虑:
- SpringBoot的自动配置特性适合快速搭建后台服务
- MyBatis Plus的代码生成器可快速产出药品基础CRUD接口
- Vue.js组件化开发便于构建复杂的药品表单界面
数据库选用MySQL 8.0,关键配置参数:
transaction_isolation = READ-COMMITTED innodb_buffer_pool_size = 1G # 药品数据缓存优化2.2 核心功能模块
系统包含6个核心模块:
- 药品档案管理:维护药品基础信息(批准文号、规格、厂家等)
- 库存管理:实现批次/效期双维度库存控制
- 采购管理:支持供应商比价和采购订单追踪
- 销售管理:区分处方药/OTC不同销售流程
- 报表统计:销售毛利、库存周转等经营分析
- 系统管理:角色权限、操作日志等基础功能
3. 关键业务实现
3.1 药品效期预警设计
效期管理是药店系统的核心功能,实现方案:
// 每日凌晨执行效期检查任务 @Scheduled(cron = "0 0 0 * * ?") public void checkExpiryAlert() { // 查询30天内将过期药品 List<DrugBatch> expiringSoon = drugBatchMapper.selectList( new QueryWrapper<DrugBatch>() .le("expiry_date", LocalDate.now().plusDays(30)) .eq("status", "NORMAL")); // 生成预警记录并通知相关人员 expiringSoon.forEach(batch -> { createAlertRecord(batch); sendWechatNotice(batch.getResponsiblePerson()); }); }3.2 处方药销售流程
处方药销售需要严格的四重校验:
- 执业药师账号登录验证
- 处方图片上传存档
- 药品库存可用量检查
- 销售记录关联处方编号
前端采用Vue.js实现多步骤表单:
const prescriptionSteps = [ { title: '药师认证', component: PharmacistAuth }, { title: '处方上传', component: PrescriptionUpload }, { title: '药品选择', component: DrugSelection }, { title: '交易确认', component: PaymentConfirm } ]4. 数据库设计要点
4.1 核心表结构
| 表名 | 关键字段 | 说明 |
|---|---|---|
| drug_info | drug_code, name, spec, manufacturer | 药品基础档案 |
| drug_batch | batch_no, drug_id, quantity, expiry_date | 批次库存信息 |
| purchase_order | supplier_id, total_amount, approval_status | 采购订单 |
| sales_record | member_id, prescription_no, payment_type | 销售记录 |
4.2 库存事务处理
采用乐观锁解决库存并发问题:
@Transactional public boolean reduceStock(Long batchId, int quantity) { DrugBatch batch = drugBatchMapper.selectById(batchId); if (batch.getQuantity() < quantity) { throw new BusinessException("库存不足"); } int updated = drugBatchMapper.update(null, new UpdateWrapper<DrugBatch>() .setSql("quantity = quantity - " + quantity) .eq("id", batchId) .eq("quantity", batch.getQuantity())); // 乐观锁条件 return updated > 0; }5. 毕业设计实现建议
5.1 论文撰写要点
- 需求分析章节:建议采用UML用例图展示药店各角色(药师、收银员、店长)的系统功能需求
- 系统设计章节:包含完整的E-R图和核心类图
- 测试方案:至少覆盖药品效期预警、处方药销售两个核心场景的测试用例
5.2 答辩PPT制作技巧
- 技术架构部分建议采用分层图示展示SpringBoot的架构优势
- 重点演示药品效期预警和处方药销售两个特色功能
- 准备1-2个典型业务场景的演示视频备用
6. 常见问题解决方案
6.1 药品编码问题
问题:不同厂家同一药品的编码不一致 解决方案:采用"国药准字+规格"作为唯一标识,建立药品别名表处理同药不同名情况
6.2 库存不同步问题
问题:销售时库存足够但实际扣减失败 处理方案:
- 前端增加库存预占机制
- 后台采用消息队列异步处理库存变更
- 定期执行库存校正任务
关键提示:药店系统开发必须特别注意药品GSP规范要求,所有数据修改都需要记录完整操作日志,这是药监检查的重点项目。
7. 扩展功能建议
- 对接医保系统:通过医保开放平台API实现医保结算
- 增加AI处方识别:集成OCR技术自动提取处方信息
- 会员健康档案:建立顾客用药记录和过敏史档案
在实际开发中,建议先确保基础功能的稳定性,再逐步扩展高级功能。药店系统对数据准确性要求极高,所有核心业务操作都需要设计完善的异常处理机制。