1. 生猪养殖信息化管理系统概述
作为一名长期深耕农业信息化领域的技术开发者,我最近完成了一套基于微信小程序的生猪养殖全流程管理系统。这套系统整合了PHP、Node.js、Vue和Uniapp等技术栈,专门为中小型养殖场设计,旨在解决传统养殖业普遍存在的记录混乱、数据孤岛和决策滞后等问题。
系统最核心的价值在于将养殖全周期的关键环节数字化。从生猪入栏建档到出栏销售,从饲料投喂到疫病防控,所有数据都能实时采集、集中管理和智能分析。根据我们实际部署的测试数据显示,使用这套系统后,养殖场平均可降低30%以上的记录错误率,疫病预警准确率达到85%,饲料浪费减少15%-20%。
2. 系统架构设计与技术选型
2.1 整体技术架构
系统采用前后端分离的微服务架构,主要分为四个技术层:
- 数据采集层:通过物联网设备(电子耳标、环境传感器等)和人工扫码录入两种方式采集数据,使用MQTT协议实时传输到Node.js服务
- 业务逻辑层:PHP 7.4+ThinkPHP 6.0处理核心业务逻辑,包括批次管理、免疫计划、饲料配方等
- 数据服务层:MySQL 8.0作为主数据库,Redis 6.2缓存高频访问数据(如实时监测数据)
- 表现层:Uniapp编译的微信小程序+基于Vue 3的后台管理系统
技术选型考量:PHP在传统企业系统开发中具有成熟的生态和稳定性,适合处理养殖业务中的复杂事务;Node.js则因其事件驱动特性,特别适合处理物联网设备产生的高并发实时数据流。
2.2 数据库设计要点
核心表结构设计遵循养殖业务的实际流程:
sql复制-- 生猪档案表示例
CREATE TABLE `swine` (
`id` varchar(20) NOT NULL COMMENT '电子耳标ID',
`batch_id` varchar(15) NOT NULL COMMENT '入栏批次',
`breed` varchar(30) NOT NULL COMMENT '品种',
`birth_date` date DEFAULT NULL COMMENT '出生日期',
`father_id` varchar(20) DEFAULT NULL COMMENT '父代耳标',
`mother_id` varchar(20) DEFAULT NULL COMMENT '母代耳标',
`current_weight` decimal(6,2) DEFAULT NULL COMMENT '当前体重(kg)',
`status` tinyint(1) DEFAULT '1' COMMENT '1在栏 2已出栏 3死亡',
PRIMARY KEY (`id`),
KEY `idx_batch` (`batch_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 生长记录表
CREATE TABLE `growth_record` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`swine_id` varchar(20) NOT NULL,
`record_date` datetime NOT NULL COMMENT '记录时间',
`weight` decimal(6,2) NOT NULL COMMENT '体重(kg)',
`temperature` decimal(3,1) DEFAULT NULL COMMENT '体温(℃)',
`feed_intake` decimal(5,2) DEFAULT NULL COMMENT '采食量(kg)',
`device_id` varchar(30) DEFAULT NULL COMMENT '采集设备ID',
PRIMARY KEY (`id`),
KEY `idx_swine` (`swine_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
数据库设计特别注意了以下几点:
- 电子耳标ID作为主键,确保每头生猪全生命周期数据可追溯
- 建立合理的索引策略,特别是对高频查询的批次、时间范围等字段
- 使用DECIMAL类型精确存储重量、温度等计量数据
- 设备ID字段记录数据来源,便于问题排查
3. 核心功能模块实现
3.1 养殖档案管理
档案管理采用"一猪一档"原则,每个电子耳标对应完整的生长档案。我们开发了以下关键功能:
- 批量入栏登记:支持Excel模板导入,自动解析品种、来源场、初始体重等信息
- 谱系管理:记录每头猪的父母代信息,为育种决策提供依据
- 免疫计划:根据品种和日龄自动生成免疫时间表,提前3天提醒养殖员
技术实现上,PHP后端采用分层架构:
- Controller层处理HTTP请求和参数验证
- Service层实现业务逻辑(如免疫计划生成算法)
- Repository层封装数据库操作
php复制// 免疫计划生成示例代码
public function generateVaccinePlan($swineId) {
$swine = $this->swineRepository->find($swineId);
$breed = $this->breedRepository->find($swine['breed']);
$plan = [];
foreach ($breed['vaccine_protocol'] as $protocol) {
$date = date('Y-m-d', strtotime($swine['entry_date'].' + '.$protocol['days_after_entry'].' days'));
$plan[] = [
'swine_id' => $swineId,
'vaccine_id' => $protocol['vaccine_id'],
'planned_date' => $date,
'actual_date' => null,
'status' => 'pending'
];
}
return $this->vaccinePlanRepository->batchInsert($plan);
}
3.2 智能生长监测
生长监测系统通过以下方式实现数据采集:
- 智能称重分栏:生猪走过通道时自动记录体重
- RFID耳标识别:5米范围内自动识别个体
- 环境传感器:采集温度、湿度、氨气浓度等数据
Node.js服务使用Socket.io实现实时数据传输:
javascript复制// Node.js实时数据处理服务
const io = require('socket.io')(3001);
const { saveGrowthData } = require('./models/growthModel');
io.on('connection', (socket) => {
console.log('Device connected:', socket.id);
socket.on('growth_data', async (data) => {
try {
const result = await saveGrowthData({
swine_id: data.tagId,
weight: data.weight,
temperature: data.temp,
device_id: socket.id,
record_date: new Date()
});
// 实时推送到前端
io.emit('update_growth', result);
} catch (err) {
console.error('Data save error:', err);
}
});
});
前端使用ECharts实现生长曲线可视化:
vue复制<template>
<div class="growth-chart">
<div ref="chart" style="width:100%;height:400px;"></div>
</div>
</template>
<script>
import * as echarts from 'echarts';
export default {
props: ['swineId'],
data() {
return {
chart: null
};
},
mounted() {
this.initChart();
this.loadData();
// 监听实时数据更新
this.$socket.on('update_growth', (data) => {
if(data.swine_id === this.swineId) {
this.updateChart(data);
}
});
},
methods: {
initChart() {
this.chart = echarts.init(this.$refs.chart);
this.chart.setOption({
tooltip: { trigger: 'axis' },
legend: { data: ['体重', '体温'] },
xAxis: { type: 'category', data: [] },
yAxis: [
{ name: '体重(kg)', type: 'value' },
{ name: '体温(℃)', type: 'value', min: 38, max: 41 }
],
series: [
{ name: '体重', type: 'line', data: [] },
{ name: '体温', type: 'line', yAxisIndex: 1, data: [] }
]
});
},
async loadData() {
const res = await this.$http.get(`/growth/${this.swineId}`);
this.chart.setOption({
xAxis: { data: res.data.map(item => item.record_date) },
series: [
{ data: res.data.map(item => item.weight) },
{ data: res.data.map(item => item.temperature) }
]
});
},
updateChart(newData) {
const option = this.chart.getOption();
option.xAxis[0].data.push(newData.record_date);
option.series[0].data.push(newData.weight);
option.series[1].data.push(newData.temperature);
this.chart.setOption(option);
}
}
};
</script>
3.3 饲料与药品管理
饲料管理实现了三大核心功能:
- 智能库存预警:当库存低于安全阈值时自动提醒
- 配方优化:根据生猪生长阶段自动推荐饲料配方
- 投喂计划:结合生长数据和库存情况生成每日投喂量
药品管理特别注意了以下方面:
- 药品有效期管理,临近过期自动预警
- 休药期计算,确保出栏前按规定停药
- 使用记录与生猪档案关联,实现全程追溯
4. 系统部署与性能优化
4.1 服务器配置建议
根据实际运营经验,推荐以下部署方案:
| 组件 | 配置要求 | 数量 | 备注 |
|---|---|---|---|
| Web服务器 | 4核8G内存,100G SSD | 2 | 负载均衡部署PHP和Node服务 |
| 数据库 | 8核16G内存,500G SSD | 1 | MySQL主从配置 |
| Redis缓存 | 2核4G内存 | 1 | 持久化开启 |
| 消息队列 | 2核4G内存 | 1 | RabbitMQ处理异步任务 |
4.2 关键性能优化措施
-
数据库优化:
- 使用连接池管理数据库连接
- 对大数据表进行水平分表(如按月份拆分生长记录)
- 建立适当的索引,避免全表扫描
-
缓存策略:
- 高频访问的生猪基本信息缓存24小时
- 生长统计数据缓存1小时
- 使用Redis的管道技术批量处理缓存更新
-
前端性能优化:
- Uniapp分包加载,减小初始包体积
- 图片使用CDN加速
- 列表数据虚拟滚动,避免渲染大量DOM节点
5. 常见问题与解决方案
在实际部署过程中,我们总结了以下典型问题及解决方法:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 电子耳标识别率低 | 1. RFID读写器功率不足 | 1. 更换更高功率的读写器(建议30dBm以上) |
| 2. 耳标安装位置不正确 | 2. 培训养殖员正确安装耳标(距耳根1-2cm处) | |
| 生长数据上传延迟 | 1. 网络信号不稳定 | 1. 养殖场部署工业级AP,确保5G/4G全覆盖 |
| 2. MQTT服务端配置不合理 | 2. 调整Node.js的MQTT broker的keepalive参数至60秒 | |
| 小程序加载缓慢 | 1. 未启用分包 | 1. 在uniapp配置中开启分包,单个包不超过2MB |
| 2. 图片未压缩 | 2. 使用tinypng等工具压缩图片,转换为webp格式 | |
| 多用户操作冲突 | 1. 未实现乐观锁机制 | 1. 在关键表添加version字段,更新时检查版本号 |
| 2. 长事务占用连接 | 2. 将复杂事务拆分为多个小事务,设置合理的事务超时时间 |
6. 项目演进方向
基于当前系统的运营数据和用户反馈,下一步我们计划重点开发以下功能:
-
AI健康监测:通过摄像头采集生猪行为视频,使用CNN模型识别异常行为(如咳嗽、跛行等),提前预警潜在疾病
-
区块链溯源:将关键养殖数据上链,为出栏生猪提供不可篡改的品质证明,提升产品溢价能力
-
智能决策系统:基于历史数据建立生长预测模型,为出栏时机、饲料配比等决策提供数据支持
这套系统在实际部署中已经帮助多个养殖场实现了数字化升级,特别在非洲猪瘟常态化防控背景下,电子化档案管理和全程追溯功能显得尤为重要。开发过程中最大的体会是:农业信息化项目必须深入一线了解实际业务流程,任何技术方案都要以解决实际问题为出发点,而不是单纯追求技术先进性。