三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

基于Spring Boot的畜牧养殖管理系统设计与实现

基于Spring Boot的畜牧养殖管理系统设计与实现

一、项目背景与意义

随着现代农业向集约化、智能化方向发展,传统粗放式的畜牧养殖管理模式已难以满足现代畜牧业对生产效率、成本控制和食品安全追溯的高要求。开发一套基于信息技术的畜牧养殖管理系统,对于提升养殖场管理水平、降低运营风险、保障产品质量安全具有重要的现实意义。

本系统旨在利用 Spring Boot 框架的快速开发优势,结合现代 Web 技术,构建一个集养殖档案管理、饲料与药品管理、生长监测、疾病预警、成本核算于一体的综合性管理平台,为中小型养殖场提供数字化管理解决方案。

二、技术栈选型

系统采用前后端分离架构,后端基于 Spring Boot 框架,前端采用 Vue.js,具体技术栈如下:

  • 后端核心:Spring Boot 2.7.x、Spring MVC、Spring Data JPA
  • 安全与权限:Spring Security、JWT(JSON Web Token)
  • 数据持久层:MySQL 8.0、Hibernate、Druid 连接池
  • 前端框架:Vue 3、Element Plus、Axios
  • 构建与部署:Maven、Docker、Nginx
  • 其他工具:Lombok、MapStruct、Swagger/OpenAPI 3(用于接口文档)

三、系统核心功能模块设计

1. 养殖档案管理

  • 牲畜信息录入:记录牲畜的品种、耳标号、入栏日期、来源、初始体重等。
  • 生长周期跟踪:按阶段记录体重、体长等生长指标,生成生长曲线。
  • 谱系管理:记录父本、母本信息,用于育种分析和遗传管理。

2. 饲料与药品管理

  • 库存管理:记录饲料、药品、疫苗的入库、出库、库存预警。
  • 投喂/用药计划:制定每日/每周的饲料投喂计划和药品使用计划。
  • 成本关联:将消耗的饲料、药品成本自动关联到对应的养殖批次。

3. 健康监测与疾病预警

  • 日常巡检记录:记录牲畜的精神状态、食欲、粪便等健康指标。
  • 疾病登记与治疗:记录疾病症状、诊断结果、用药方案及治疗结果。
  • 预警规则:基于预设规则(如连续两天食欲下降)自动触发预警通知。

4. 环境监控集成

  • 数据接入:支持接入物联网传感器数据(如温度、湿度、氨气浓度)。
  • 阈值告警:当环境数据超出设定范围时,通过系统消息或短信通知管理员。

5. 统计分析与报表

  • 成本利润分析:按批次、品种统计饲料、药品、人工等成本及出栏收益。
  • 生产性能报表:生成日均增重、料肉比、成活率等关键生产指标报表。
  • 数据可视化:通过图表展示历史趋势,辅助经营决策。

四、数据库核心表结构设计

以下为部分核心实体及其关键字段:

-- 牲畜信息表 CREATE TABLE `livestock` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `ear_tag` varchar(50) NOT NULL COMMENT '耳标号', `breed` varchar(50) DEFAULT NULL COMMENT '品种', `birth_date` date DEFAULT NULL COMMENT '出生日期', `entry_date` date NOT NULL COMMENT '入栏日期', `initial_weight` decimal(10,2) DEFAULT NULL COMMENT '入栏体重(kg)', `current_weight` decimal(10,2) DEFAULT NULL COMMENT '当前体重(kg)', `health_status` varchar(20) DEFAULT 'HEALTHY' COMMENT '健康状态', `pen_id` bigint DEFAULT NULL COMMENT '所属栏舍ID', `batch_id` bigint DEFAULT NULL COMMENT '所属批次ID', PRIMARY KEY (`id`), UNIQUE KEY `uk_ear_tag` (`ear_tag`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='牲畜信息表'; -- 饲料投喂记录表 CREATE TABLE feed_record ( id bigint NOT NULL AUTO_INCREMENT, livestock_id bigint NOT NULL COMMENT '牲畜ID', feed_type_id bigint NOT NULL COMMENT '饲料类型ID', feed_amount decimal(10,2) NOT NULL COMMENT '投喂量(kg)', feed_time datetime NOT NULL COMMENT '投喂时间', operator varchar(50) DEFAULT NULL COMMENT '操作员', PRIMARY KEY (id), KEY idx_livestock (livestock_id), KEY idx_feed_time (feed_time) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='饲料投喂记录表'; -- 药品使用记录表 CREATE TABLE medication_record ( id bigint NOT NULL AUTO_INCREMENT, livestock_id bigint NOT NULL COMMENT '牲畜ID', drug_id bigint NOT NULL COMMENT '药品ID', dose varchar(100) NOT NULL COMMENT '用量', usage varchar(500) DEFAULT NULL COMMENT '用法', record_time datetime NOT NULL COMMENT '记录时间', disease_note varchar(500) DEFAULT NULL COMMENT '病症说明', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='药品使用记录表';

五、Spring Boot 后端核心代码示例

1. 实体类 (Entity)

import lombok.Data; import javax.persistence.*; import java.time.LocalDate; import java.time.LocalDateTime; @Entity @Table(name = "livestock") @Data public class Livestock { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "ear_tag", nullable = false, unique = true, length = 50) private String earTag; // 耳标号 @Column(length = 50) private String breed; // 品种 private LocalDate birthDate; // 出生日期 @Column(nullable = false) private LocalDate entryDate; // 入栏日期 @Column(precision = 10, scale = 2) private BigDecimal initialWeight; // 入栏体重 @Column(precision = 10, scale = 2) private BigDecimal currentWeight; // 当前体重 @Enumerated(EnumType.STRING) @Column(length = 20) private HealthStatus healthStatus = HealthStatus.HEALTHY; // 健康状态 @ManyToOne @JoinColumn(name = "pen_id") private Pen pen; // 所属栏舍 @ManyToOne @JoinColumn(name = "batch_id") private Batch batch; // 所属批次 // 枚举:健康状态 public enum HealthStatus { HEALTHY, // 健康 SUSPECTED, // 疑似患病 SICK, // 患病 RECOVERING // 恢复中 } }

2. 数据访问层 (Repository)

import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import java.time.LocalDate; import java.util.List; public interface LivestockRepository extends JpaRepository<Livestock, Long> { // 根据耳标号查询 Livestock findByEarTag(String earTag); // 查询指定批次的所有牲畜 List&lt;Livestock&gt; findByBatchId(Long batchId); // 查询健康状况异常的牲畜 List&lt;Livestock&gt; findByHealthStatusNot(HealthStatus healthStatus); // 复杂查询:统计某时间段内入栏的牲畜数量(按品种分组) @Query("SELECT l.breed, COUNT(l) FROM Livestock l " + "WHERE l.entryDate BETWEEN :startDate AND :endDate " + "GROUP BY l.breed") List&lt;Object[]&gt; countLivestockByBreedAndEntryDateRange( @Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate); }

3. 服务层 (Service)

import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.time.LocalDate; @Service @Transactional public class LivestockService { private final LivestockRepository livestockRepository; private final FeedRecordRepository feedRecordRepository; public LivestockService(LivestockRepository livestockRepository, FeedRecordRepository feedRecordRepository) { this.livestockRepository = livestockRepository; this.feedRecordRepository = feedRecordRepository; } /** 记录一次饲料投喂,并更新牲畜的累计采食量(简化逻辑) */ public FeedRecord recordFeeding(Long livestockId, Long feedTypeId, BigDecimal amount, String operator) { Livestock livestock = livestockRepository.findById(livestockId) .orElseThrow(() -> new EntityNotFoundException("牲畜不存在")); FeedRecord record = new FeedRecord(); record.setLivestock(livestock); record.setFeedTypeId(feedTypeId); record.setFeedAmount(amount); record.setFeedTime(LocalDateTime.now()); record.setOperator(operator); // 此处可扩展:更新牲畜的日采食量统计 return feedRecordRepository.save(record); } /** 根据耳标号查询牲畜的完整档案(包含投喂、用药记录) */ public LivestockDetailDTO getLivestockDetailByEarTag(String earTag) { Livestock livestock = livestockRepository.findByEarTag(earTag); if (livestock == null) { throw new EntityNotFoundException("未找到耳标号为 " + earTag + " 的牲畜"); } LivestockDetailDTO dto = new LivestockDetailDTO(); // 使用 MapStruct 或手动映射实体到 DTO dto.setBasicInfo(livestock); dto.setFeedRecords(feedRecordRepository.findByLivestockId(livestock.getId())); dto.setMedicationRecords(medicationRecordRepository.findByLivestockId(livestock.getId())); return dto; } }

4. RESTful 控制器 (Controller)

import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api/livestock") @Tag(name = "牲畜管理", description = "牲畜信息的增删改查及相关操作") public class LivestockController { private final LivestockService livestockService; public LivestockController(LivestockService livestockService) { this.livestockService = livestockService; } @PostMapping @Operation(summary = "新增牲畜") public ResponseEntity&lt;Livestock&gt; createLivestock(@RequestBody @Valid LivestockCreateRequest request) { Livestock saved = livestockService.createLivestock(request); return ResponseEntity.status(HttpStatus.CREATED).body(saved); } @GetMapping("/{earTag}") @Operation(summary = "根据耳标号查询牲畜详情") public ResponseEntity&lt;LivestockDetailDTO&gt; getByEarTag(@PathVariable String earTag) { LivestockDetailDTO detail = livestockService.getLivestockDetailByEarTag(earTag); return ResponseEntity.ok(detail); } @PostMapping("/{livestockId}/feed") @Operation(summary = "记录饲料投喂") public ResponseEntity&lt;FeedRecord&gt; recordFeeding(@PathVariable Long livestockId, @RequestBody @Valid FeedRecordRequest request) { FeedRecord record = livestockService.recordFeeding(livestockId, request.getFeedTypeId(), request.getAmount(), request.getOperator()); return ResponseEntity.ok(record); } @GetMapping("/batch/{batchId}/summary") @Operation(summary = "获取批次养殖摘要") public ResponseEntity&lt;BatchSummaryDTO&gt; getBatchSummary(@PathVariable Long batchId) { BatchSummaryDTO summary = livestockService.generateBatchSummary(batchId); return ResponseEntity.ok(summary); } }

六、系统实现关键点与总结

1. 关键技术实现

  • JPA 复杂查询与投影:利用@Query注解和 DTO 投影优化统计查询性能。
  • 事务管理:在服务层使用@Transactional确保业务操作(如入库、出库)的原子性。
  • 统一异常处理:通过@ControllerAdvice和自定义异常实现全局异常处理与友好错误提示。
  • 数据校验:结合 JSR-303 注解(如@NotNull,@Size)与 Spring Validation 进行请求参数校验。
  • API 文档:集成 SpringDoc OpenAPI 3 自动生成交互式 API 文档。

2. 总结

本文设计并实现了一个基于 Spring Boot 的畜牧养殖管理系统,涵盖了项目背景、技术栈选型、核心功能模块、数据库设计以及关键代码示例。该系统通过信息化手段,能够有效管理养殖过程中的关键数据,提升管理效率,降低养殖风险,并为科学决策提供数据支持。开发者可基于此架构和代码示例进行扩展,集成物联网设备、大数据分析或移动端应用,构建更智能的现代化养殖管理平台。

← 返回列表