1. 项目背景与核心需求
中医药店管理系统是传统医药行业数字化转型的关键载体。这个基于SpringBoot的系统需要解决三个核心痛点:药材库存的动态追踪、处方管理的合规性、以及问诊流程的标准化。
在药材管理方面,系统需要处理超过200种中药材的特殊属性,包括:
- 药材的产地溯源要求(如道地药材标记)
- 不同药材的计量单位差异(克/两/钱)
- 配伍禁忌的自动校验
- 保质期与存储条件管理
处方管理模块面临的最大挑战是符合《中医药法》对电子处方的规范要求。系统需要实现:
- 医师电子签名验真
- 处方修改留痕
- 配伍禁忌实时提醒
- 每张处方的独立编码追溯
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计
2.1 整体技术栈选型
采用SpringBoot 2.7.x + MyBatis-Plus 3.5.1的组合,主要考虑因素包括:
- MyBatis-Plus的ActiveRecord模式简化药材CRUD操作
- 其内置的分页插件(PageHelper)完美适配药材库存查询
- 与SpringBoot的事务管理无缝集成
数据库选择MySQL 8.0,关键配置如下:
yaml复制spring:
datasource:
url: jdbc:mysql://localhost:3306/tcm_store?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 加密后的密码
driver-class-name: com.mysql.cj.jdbc.Driver
2.2 核心模块划分
系统采用六边形架构设计,核心模块包括:
- 药材基础服务模块
- 药材信息管理
- 库存预警
- 采购计划生成
- 处方业务模块
- 电子处方开具
- 配伍校验
- 煎药流程跟踪
- 问诊辅助模块
- 症状知识库
- 体质辨识
- 经典方剂推荐
3. 关键实现细节
3.1 药材库存的并发控制
采用乐观锁解决库存更新冲突问题:
java复制@Transactional
public boolean reduceStock(Long herbId, Integer quantity) {
TcmHerb herb = herbMapper.selectById(herbId);
if(herb.getStock() < quantity) {
throw new BusinessException("库存不足");
}
herb.setStock(herb.getStock() - quantity);
herb.setVersion(herb.getVersion()); // 乐观锁版本号
return herbMapper.updateById(herb) > 0;
}
3.2 配伍禁忌校验算法
基于HanLP分词实现药材配伍检测:
java复制public List<String> checkCompatibility(String prescriptionText) {
List<String> herbs = HanLP.extractKeywords(prescriptionText, 10);
return herbMapper.selectIncompatibleHerbs(herbs);
}
3.3 电子处方PDF生成
使用Flying Saucer将HTML转为合规PDF:
java复制public byte[] generatePdf(PrescriptionDTO dto) {
String html = ThymeleafEngine.render("prescription", dto);
return new ITextRenderer().renderHtml(html).getPDF();
}
4. 部署与监控方案
4.1 多环境部署策略
采用Jenkins Pipeline实现分级部署:
groovy复制pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn clean package -DskipTests'
}
}
stage('Deploy') {
when {
branch 'master'
}
steps {
sshPublisher(
transfers: [
sshTransfer(
execCommand: 'docker-compose -f /opt/tcm/docker-compose.prod.yml up -d'
)
]
)
}
}
}
}
4.2 健康监控配置
SpringBoot Admin的监控关键指标:
properties复制# 应用监控配置
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
5. 典型问题解决方案
5.1 药材名称模糊查询优化
采用MySQL全文索引+Elasticsearch双方案:
sql复制ALTER TABLE tcm_herb ADD FULLTEXT INDEX ft_idx_name(name);
5.2 处方打印格式错乱
使用CSS打印样式控制分页:
css复制@media print {
.page-break {
page-break-after: always;
}
}
5.3 高并发下的性能瓶颈
通过Redisson实现分布式锁:
java复制@GetMapping("/herb/{id}")
public HerbVO getHerbDetail(@PathVariable Long id) {
RLock lock = redissonClient.getLock("herb:" + id);
try {
lock.lock();
return herbService.getDetail(id);
} finally {
lock.unlock();
}
}
6. 安全防护措施
6.1 处方数据加密
采用国密SM4算法加密敏感字段:
java复制public String encrypt(String plainText) {
SM4Engine engine = new SM4Engine();
return engine.encrypt(plainText, SECRET_KEY);
}
6.2 操作日志审计
基于Spring AOP实现操作留痕:
java复制@AfterReturning("execution(* com.tcm..service.*.*(..))")
public void logOperation(JoinPoint jp) {
AuditLog log = new AuditLog();
log.setOperation(jp.getSignature().getName());
logMapper.insert(log);
}
7. 项目演进方向
下一步计划引入:
- 智能问诊机器人(基于中医知识图谱)
- 药材区块链溯源系统
- 移动端扫码验方功能
- 与医保系统的对接方案
在系统扩展过程中,需要特别注意药材数据标准的统一性。我们建立了药材主数据管理系统,采用《中国药典》2020版的标准命名规范,通过数据清洗工具将历史数据中的"别名"映射为标准名称
