1. 项目背景与核心需求
中草药作为传统医学的重要组成部分,其信息管理一直面临着数据分散、标准不统一的问题。我在实际调研中发现,目前大多数中草药机构仍在使用Excel表格或简单的Access数据库进行管理,这导致以下几个痛点:
- 信息检索效率低下:当需要查询某种草药的生长特性或配伍禁忌时,往往需要翻阅多个文件
- 知识更新滞后:新的研究成果难以及时整合到现有系统中
- 培育管理粗放:缺乏对种植环境参数的智能化监测和记录
这个基于Web的中草药管理系统正是为了解决这些问题而设计。系统需要实现三大核心功能:
- 中草药全生命周期信息管理(从种植到临床应用)
- 智能化知识图谱构建(配伍禁忌、功效关联等)
- 培育环境监测与预警(温湿度、光照等参数)
提示:系统设计时要特别注意中草药数据的特殊性,比如同一药材在不同地区的别名、不同炮制方法下的药效差异等数据关联问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术选型与架构设计
2.1 后端技术栈选择
选择Spring Boot作为后端框架主要基于以下考虑:
- 快速开发特性:Spring Boot的自动配置可以快速搭建Web服务
- 生态完整性:与MySQL、Redis等组件的集成非常成熟
- 社区支持:遇到问题时容易找到解决方案
数据库选用MySQL 8.0,主要因为:
- 对JSON数据类型的良好支持(适合存储药材的复杂属性)
- 事务性能满足系统需求
- 与Spring Data JPA的完美配合
java复制// 典型的数据实体类示例
@Entity
@Table(name = "herbs")
public class Herb {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(columnDefinition = "JSON")
private String properties; // 存储药材的多维属性
// getters & setters
}
2.2 前端技术考量
采用Thymeleaf+Bootstrap的组合而非前后端分离架构,主要因为:
- 毕设项目时间有限,这种组合开发效率更高
- 管理系统类应用对交互复杂度要求不高
- 更符合传统Java Web技术栈的教学要求
2.3 系统架构设计
整体采用经典的三层架构:
- 表现层:处理HTTP请求和视图渲染
- 业务层:核心业务逻辑实现
- 数据访问层:数据库操作封装
code复制┌─────────────────┐
│ 表现层 │
│ (Controller) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 业务层 │
│ (Service) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 数据访问层 │
│ (Repository) │
└─────────────────┘
3. 核心功能实现细节
3.1 中草药知识图谱构建
知识图谱是本系统的创新点,我们通过以下方式实现:
-
数据建模:
- 实体:药材、功效、病症、配伍
- 关系:治疗、禁忌、增强、减弱
-
存储设计:
sql复制CREATE TABLE herb_relation (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
source_id BIGINT NOT NULL,
target_id BIGINT NOT NULL,
relation_type ENUM('COMPATIBLE','INCOMPATIBLE','ENHANCE','REDUCE'),
description TEXT,
FOREIGN KEY (source_id) REFERENCES herbs(id),
FOREIGN KEY (target_id) REFERENCES herbs(id)
);
- 智能推荐算法:
java复制public List<Herb> findCompatibleHerbs(Long herbId) {
return herbRelationRepository.findBySourceIdAndRelationType(
herbId, RelationType.COMPATIBLE)
.stream()
.map(HerbRelation::getTarget)
.collect(Collectors.toList());
}
3.2 培育管理模块
实现的核心功能包括:
-
环境监测数据采集:
- 通过REST API接收传感器数据
- 数据校验和异常检测
- 阈值预警机制
-
生长周期记录:
java复制public class GrowthRecord {
private LocalDate recordDate;
private Integer growthStage; // 1-播种 2-发芽 3-生长期...
private String observation;
private List<String> imageUrls;
}
- 数据可视化:
- 使用ECharts展示环境参数趋势
- 药材生长状态仪表盘
4. 关键问题与解决方案
4.1 复杂查询性能优化
在实现多条件组合查询时,遇到性能瓶颈。解决方案:
- 添加复合索引:
sql复制ALTER TABLE herbs ADD INDEX idx_properties_location (
(CAST(properties->'$.location' AS CHAR(20)))
);
- 使用缓存:
java复制@Cacheable(value = "herbCache", key = "#name.concat('-').concat(#location)")
public List<Herb> searchHerbs(String name, String location) {
// 数据库查询逻辑
}
4.2 数据导入导出
处理Excel数据导入时需要注意:
- 使用Apache POI处理Excel文件
- 批量插入优化:
java复制@Transactional
public void batchImport(List<Herb> herbs) {
int batchSize = 100;
for (int i = 0; i < herbs.size(); i += batchSize) {
List<Herb> batch = herbs.subList(i, Math.min(i + batchSize, herbs.size()));
herbRepository.saveAll(batch);
entityManager.flush();
entityManager.clear();
}
}
4.3 安全性考虑
- 防御XSS攻击:
java复制@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.headers()
.xssProtection()
.and()
.contentSecurityPolicy("script-src 'self'");
}
}
- SQL注入防护:
- 始终使用参数化查询
- 对用户输入进行严格校验
5. 系统部署与测试
5.1 环境配置建议
-
开发环境:
- JDK 17
- MySQL 8.0
- IntelliJ IDEA
-
生产环境:
- Tomcat 9+
- MySQL主从配置(可选)
- Nginx反向代理
5.2 测试要点
-
边界测试:
- 药材名称包含特殊字符(如"当归-酒炙")
- 超长文本字段处理
-
性能测试:
- JMeter模拟并发查询
- 大数据量导出测试
-
兼容性测试:
- 不同浏览器下的表现
- 移动端适配情况
6. 项目扩展方向
在实际开发过程中,我发现以下几个值得深入的方向:
- 移动端适配:开发微信小程序版本,方便田间记录
- 图像识别:通过拍照识别药材品种
- 区块链溯源:记录药材从种植到销售的全过程
- 智能预警:基于历史数据的病虫害预测
注意:毕设答辩时要准备技术选型的对比分析,比如为什么不用MongoDB存储非结构化数据,为什么选择传统架构而非微服务等问题的回答思路。
