
一、項目背景與意義隨著現代農業向集約化、智能化方向發展傳統粗放式的畜牧養殖管理模式已難以滿足現代畜牧業對生產效率、成本控制和食品安全追溯的高要求。開發一套基于信息技術的畜牧養殖管理系統對于提升養殖場管理水平、降低運營風險、保障產品質量安全具有重要的現實意義。本系統旨在利用 Spring Boot 框架的快速開發優勢結合現代 Web 技術構建一個集養殖檔案管理、飼料與藥品管理、生長監測、疾病預警、成本核算于一體的綜合性管理平臺為中小型養殖場提供數字化管理解決方案。二、技術棧選型系統采用前后端分離架構后端基于 Spring Boot 框架前端采用 Vue.js具體技術棧如下后端核心Spring Boot 2.7.x、Spring MVC、Spring Data JPA安全與權限Spring Security、JWTJSON 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) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 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) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 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) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 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 JpaRepositoryLivestock, Long { // 根據耳標號查詢 Livestock findByEarTag(String earTag); // 查詢指定批次的所有牲畜 Listlt;Livestockgt; findByBatchId(Long batchId); // 查詢健康狀況異常的牲畜 Listlt;Livestockgt; findByHealthStatusNot(HealthStatus healthStatus); // 復雜查詢統計某時間段內入欄的牲畜數量按品種分組 Query(SELECT l.breed, COUNT(l) FROM Livestock l WHERE l.entryDate BETWEEN :startDate AND :endDate GROUP BY l.breed) Listlt;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 ResponseEntitylt;Livestockgt; createLivestock(RequestBody Valid LivestockCreateRequest request) { Livestock saved livestockService.createLivestock(request); return ResponseEntity.status(HttpStatus.CREATED).body(saved); } GetMapping(/{earTag}) Operation(summary 根據耳標號查詢牲畜詳情) public ResponseEntitylt;LivestockDetailDTOgt; getByEarTag(PathVariable String earTag) { LivestockDetailDTO detail livestockService.getLivestockDetailByEarTag(earTag); return ResponseEntity.ok(detail); } PostMapping(/{livestockId}/feed) Operation(summary 記錄飼料投喂) public ResponseEntitylt;FeedRecordgt; 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 ResponseEntitylt;BatchSummaryDTOgt; 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 的畜牧養殖管理系統涵蓋了項目背景、技術棧選型、核心功能模塊、數據庫設計以及關鍵代碼示例。該系統通過信息化手段能夠有效管理養殖過程中的關鍵數據提升管理效率降低養殖風險并為科學決策提供數據支持。開發者可基于此架構和代碼示例進行擴展集成物聯網設備、大數據分析或移動端應用構建更智能的現代化養殖管理平臺。