1. 项目概述
医药管理系统与网上药品商城系统是当前医疗健康领域数字化转型的重要应用。这个基于SpringBoot框架开发的系统(版本127)旨在为医药行业提供一体化的管理解决方案,同时满足消费者在线购药需求。我在实际开发这类系统时发现,医药行业的特殊性决定了系统设计必须兼顾严格的合规性和便捷的用户体验。
2. 系统架构设计
2.1 技术栈选型
核心采用SpringBoot 2.7.x框架,主要基于以下考虑:
- 自动配置特性简化了医药行业复杂业务场景的配置工作
- 内嵌Tomcat服务器便于快速部署
- 完善的健康检查机制对医药系统尤为重要
数据库选用MySQL 8.0,因其:
- 完善的ACID事务支持,确保药品库存和订单数据一致性
- JSON数据类型便于存储药品的复杂属性
- 良好的分区性能应对药品销售数据分析需求
前端采用Vue3+Element Plus组合:
- 响应式设计适配多终端购药场景
- 丰富的UI组件满足后台管理复杂表单需求
- 类型系统保障医药数据展示的准确性
2.2 微服务划分
系统采用领域驱动设计,划分为以下微服务:
- 药品基础服务:管理10+药品属性字段
- 库存服务:实时跟踪各药房库存
- 处方服务:处理电子处方审核流程
- 订单服务:管理订单全生命周期
- 支付服务:对接多种支付渠道
- 物流服务:整合第三方配送
3. 核心功能实现
3.1 药品信息管理
采用JPA实现药品CRUD操作时,特别注意:
@Entity public class Medicine { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(length = 50, nullable = false) private String name; // 药品通用名 @Enumerated(EnumType.STRING) private MedicineType type; // Rx处方药/OTC非处方药 @Column(precision = 10, scale = 2) private BigDecimal price; // GMP认证信息等15+专业字段 }3.2 处方审核流程
处方审核状态机实现要点:
public class PrescriptionService { @Transactional public void review(Long prescriptionId, ReviewAction action) { Prescription prescription = repository.findById(prescriptionId) .orElseThrow(() -> new BusinessException("处方不存在")); switch (action) { case APPROVE: if (prescription.getStatus() != Status.SUBMITTED) { throw new IllegalStateException("非法状态转换"); } prescription.setStatus(Status.APPROVED); break; // 其他状态转换... } } }4. 安全与合规设计
4.1 数据加密方案
对敏感医疗数据采用分层加密:
- 传输层:强制HTTPS+国密SM2
- 存储层:字段级AES-256加密
- 日志层:敏感信息脱敏处理
4.2 权限控制模型
基于RBAC扩展医疗专属权限:
CREATE TABLE role_permission ( role_id INT NOT NULL, permission_code VARCHAR(50) NOT NULL, -- 药品分类级权限控制 medicine_category VARCHAR(20), PRIMARY KEY (role_id, permission_code) );5. 高并发场景优化
5.1 库存扣减方案
采用Redis+Lua实现原子操作:
-- KEYS[1]: 药品库存key -- ARGV[1]: 扣减数量 local stock = tonumber(redis.call('GET', KEYS[1])) if stock >= tonumber(ARGV[1]) then return redis.call('DECRBY', KEYS[1], ARGV[1]) else return -1 end5.2 订单分库策略
按地区分片订单数据:
- 华北区:order_db_1
- 华东区:order_db_2
- 华南区:order_db_3 使用ShardingSphere实现路由逻辑
6. 运维监控体系
6.1 健康检查端点
扩展SpringBoot Actuator:
management.endpoint.health.show-details=always management.endpoints.web.exposure.include=* management.health.db.enabled=true management.health.redis.enabled=true6.2 日志收集方案
采用ELK栈处理日志:
- Logstash配置Grok解析医药业务日志
- Elasticsearch建立药品相关索引
- Kibana展示销售趋势仪表盘
7. 开发实践建议
- 药品图片存储:使用MinIO对象存储,设置CDN加速
- 处方PDF生成:Apache PDFBox优于iText,内存管理更优
- 缓存策略:药品基础信息缓存24小时,价格缓存5分钟
- 接口文档:Swagger需隐藏药品进价等敏感字段
特别注意:医药系统开发必须预留药监接口对接能力,包括:
- 药品追溯码验证
- 不良反应上报
- 电子处方备案
实际部署时,建议采用Docker Compose编排:
version: '3.8' services: app: image: medical-system:1.2.7 environment: - SPRING_PROFILES_ACTIVE=prod depends_on: - redis - mysql我在多个医药系统项目中总结的关键点:
- 药品分类必须符合最新版药典标准
- 处方药销售流程要完整记录审核轨迹
- 促销活动需避免处方药折扣
- 定期与医保系统对账
- 冷门药品搜索需加强同义词处理