1. 项目背景与核心价值
家猪智能饲养管理系统是当前畜牧业数字化转型的典型应用场景。随着规模化养殖比例提升,传统人工记录、经验判断的饲养方式已无法满足现代化猪场的管理需求。这个毕设项目采用SSM(Spring+SpringMVC+MyBatis)与Vue.js技术栈,实现了从饲料投喂、环境监测到健康管理的全流程数字化管控。
我在实际开发中发现,这类系统需要重点解决三个行业痛点:一是养殖场环境数据(温湿度、氨气浓度等)的实时采集与异常预警;二是不同生长阶段猪只的精准饲喂算法;三是疫病早期识别与生物安全防控。系统通过物联网设备采集数据,后端用SSM框架处理业务逻辑,前端用Vue实现可视化看板,形成闭环管理。
2. 技术架构设计解析
2.1 后端SSM框架选型考量
选择SSM而非Spring Boot主要基于教学目的考虑:MyBatis需要手动编写SQL的特点更适合展示学生数据库操作能力,而Spring MVC的配置过程能更好体现对框架原理的理解。实际开发中我们采用分层架构:
- DAO层:MyBatis配置了动态SQL处理不同条件的饲料消耗查询
xml复制<select id="selectFeedByCondition" parameterType="map" resultType="FeedRecord">
SELECT * FROM feed_record
<where>
<if test="pigstyId != null">AND pigsty_id = #{pigstyId}</if>
<if test="startDate != null">AND feed_time >= #{startDate}</if>
</where>
ORDER BY feed_time DESC
</select>
- Service层:使用Spring事务管理确保饲料库存更新与投喂记录的一致性
java复制@Transactional
public void processFeeding(PigFeedingVO vo) {
feedRecordMapper.insert(vo);
inventoryMapper.reduce(vo.getFeedType(), vo.getAmount());
}
2.2 前端Vue技术方案
采用Vue CLI 4.x搭建项目,主要功能模块包括:
- ECharts可视化:展示猪舍环境数据曲线
- Element UI表格:分页展示猪只生长指标
- WebSocket:实时接收报警通知
特别优化了大数据量场景下的性能:
javascript复制// 使用虚拟滚动优化种猪档案列表
<el-table
:data="pigData"
style="width: 100%"
height="500"
row-key="id"
:row-height="60"
:virtual-scroll="true">
3. 核心功能实现细节
3.1 智能饲喂算法实现
根据猪只品种、体重、生长阶段计算每日投喂量:
java复制public BigDecimal calculateDailyFeed(PigInfo pig) {
// 基础公式:体重(kg) × 系数 × 阶段系数
BigDecimal base = pig.getWeight().multiply(BASE_RATIO);
// 季节调整:冬季增加5%投喂量
if (SeasonUtil.isWinter()) {
base = base.multiply(new BigDecimal("1.05"));
}
return base.setScale(2, RoundingMode.HALF_UP);
}
3.2 环境监控预警模块
通过Modbus协议接收传感器数据,采用滑动窗口算法检测异常:
python复制# 伪代码示例
def check_temperature(values):
window_size = 6
threshold = 2.0
for i in range(len(values) - window_size):
window = values[i:i+window_size]
std_dev = np.std(window)
if std_dev > threshold:
send_alert('温度剧烈波动')
4. 数据库设计要点
4.1 关键表结构设计
| 表名 | 字段 | 说明 |
|---|---|---|
| pig_info | pig_id, ear_tag, breed, birth_date | 猪只档案表 |
| feed_record | record_id, pigsty_id, feed_type, amount | 饲喂记录表 |
| environment | record_id, pigsty_id, temp, humidity | 环境监测表 |
4.2 索引优化实践
在频繁查询的字段上建立复合索引:
sql复制CREATE INDEX idx_feed_search ON feed_record (pigsty_id, feed_time DESC);
5. 开发中的典型问题与解决方案
5.1 前后端日期格式问题
前端传回的日期字符串与后端LocalDateTime转换异常:
java复制// 解决方案:自定义Jackson反序列化器
@Bean
public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {
return builder -> {
builder.serializers(new LocalDateSerializer(DateTimeFormatter.ISO_DATE));
builder.deserializers(new LocalDateDeserializer(DateTimeFormatter.ISO_DATE));
};
}
5.2 大文件导出内存溢出
导出Excel报表时发生OOM:
java复制// 改用SXSSFWorkbook流式导出
try (SXSSFWorkbook workbook = new SXSSFWorkbook(100)) {
Sheet sheet = workbook.createSheet();
// 分批写入数据...
}
6. 项目部署注意事项
- Nginx配置要点:
nginx复制location /api {
proxy_pass http://backend;
proxy_set_header X-Real-IP $remote_addr;
}
location / {
root /usr/share/nginx/html;
try_files $uri $uri/ /index.html;
}
- MySQL性能调优:
ini复制[mysqld]
innodb_buffer_pool_size=1G
innodb_log_file_size=256M
7. 扩展功能建议
- 移动端适配:通过Vant UI实现微信小程序版本
- AI应用:集成OpenCV实现猪只行为分析
- 区块链溯源:使用Hyperledger Fabric记录饲料供应链
实际开发中我发现,环境传感器数据的采样频率设置很关键。初期我们采用每分钟采集一次,导致数据库快速增长。后来调整为:
- 正常范围:每5分钟存储一次
- 超出阈值:立即存储并启动1分钟高频采集
这种自适应采样策略使数据量减少68%,同时不影响异常监测效果。
