109 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package models
 | |
| 
 | |
| import (
 | |
| 	"time"
 | |
| 
 | |
| 	"gorm.io/gorm"
 | |
| )
 | |
| 
 | |
| /*
 | |
| 	和猪只、猪群本身相关的模型
 | |
| */
 | |
| 
 | |
| // PigBatchStatus 定义了猪批次所处的不同阶段或状态
 | |
| type PigBatchStatus string
 | |
| 
 | |
| const (
 | |
| 	BatchStatusWeaning   PigBatchStatus = "保育" // 从断奶到保育结束
 | |
| 	BatchStatusGrowing   PigBatchStatus = "生长" // 生长育肥阶段
 | |
| 	BatchStatusFinishing PigBatchStatus = "育肥" // 最后的育肥阶段
 | |
| 	BatchStatusForSale   PigBatchStatus = "待售" // 达到出栏标准
 | |
| 	BatchStatusSold      PigBatchStatus = "已出售"
 | |
| 	BatchStatusArchived  PigBatchStatus = "已归档" // 批次结束(如全群淘汰等)
 | |
| )
 | |
| 
 | |
| // PigBatchOriginType 定义了猪批次的来源
 | |
| type PigBatchOriginType string
 | |
| 
 | |
| const (
 | |
| 	OriginTypeSelfFarrowed PigBatchOriginType = "自繁"
 | |
| 	OriginTypePurchased    PigBatchOriginType = "外购"
 | |
| )
 | |
| 
 | |
| // PigBatch 是猪批次的核心模型,代表了一群被共同管理的猪
 | |
| type PigBatch struct {
 | |
| 	gorm.Model
 | |
| 	BatchNumber  string             `gorm:"size:50;not null;uniqueIndex;comment:批次编号,如 2024-W25-A01"`
 | |
| 	OriginType   PigBatchOriginType `gorm:"size:20;not null;comment:批次来源 (自繁, 外购)"`
 | |
| 	StartDate    time.Time          `gorm:"not null;comment:批次开始日期 (如转入日或购买日)"`
 | |
| 	EndDate      time.Time          `gorm:"not null;comment:批次结束日期 (全部淘汰或售出)"`
 | |
| 	InitialCount int                `gorm:"not null;comment:初始数量"`
 | |
| 	Status       PigBatchStatus     `gorm:"size:20;not null;index;comment:批次状态"`
 | |
| }
 | |
| 
 | |
| func (PigBatch) TableName() string {
 | |
| 	return "pig_batches"
 | |
| }
 | |
| 
 | |
| // IsActive 判断猪批次是否处于活跃状态
 | |
| func (pb PigBatch) IsActive() bool {
 | |
| 	return pb.Status != BatchStatusSold && pb.Status != BatchStatusArchived
 | |
| }
 | |
| 
 | |
| // LogChangeType 定义了猪批次数量变更的类型
 | |
| type LogChangeType string
 | |
| 
 | |
| const (
 | |
| 	ChangeTypeDeath       LogChangeType = "死亡"
 | |
| 	ChangeTypeCull        LogChangeType = "淘汰"
 | |
| 	ChangeTypeSale        LogChangeType = "销售"
 | |
| 	ChangeTypeBuy         LogChangeType = "购买"
 | |
| 	ChangeTypeTransferIn  LogChangeType = "转入"
 | |
| 	ChangeTypeTransferOut LogChangeType = "转出"
 | |
| 	ChangeTypeCorrection  LogChangeType = "盘点校正"
 | |
| )
 | |
| 
 | |
| // PigBatchLog 记录了猪批次数量或状态的每一次变更
 | |
| type PigBatchLog struct {
 | |
| 	gorm.Model
 | |
| 	PigBatchID  uint          `gorm:"not null;index;comment:关联的猪批次ID"`
 | |
| 	ChangeType  LogChangeType `gorm:"size:20;not null;comment:变更类型"`
 | |
| 	ChangeCount int           `gorm:"not null;comment:数量变化,负数表示减少"`
 | |
| 	Reason      string        `gorm:"size:255;comment:变更原因描述"`
 | |
| 	BeforeCount int           `gorm:"not null;comment:变更前总数"`
 | |
| 	AfterCount  int           `gorm:"not null;comment:变更后总数"`
 | |
| 	OperatorID  uint          `gorm:"comment:操作员ID"`
 | |
| 	HappenedAt  time.Time     `gorm:"primaryKey;comment:事件发生时间"`
 | |
| }
 | |
| 
 | |
| func (PigBatchLog) TableName() string {
 | |
| 	return "pig_batch_logs"
 | |
| }
 | |
| 
 | |
| // WeighingBatch 记录了一次批次称重的信息
 | |
| type WeighingBatch struct {
 | |
| 	gorm.Model
 | |
| 	WeighingTime time.Time `gorm:"primaryKey;comment:称重时间"`
 | |
| 	Description  string    `gorm:"size:255;comment:批次称重描述"`
 | |
| 	PigBatchID   uint      `gorm:"not null;index;comment:关联的猪批次ID"`
 | |
| }
 | |
| 
 | |
| func (WeighingBatch) TableName() string {
 | |
| 	return "weighing_batches"
 | |
| }
 | |
| 
 | |
| // WeighingRecord 记录了单次称重信息
 | |
| type WeighingRecord struct {
 | |
| 	gorm.Model
 | |
| 	Weight          float64   `gorm:"not null;comment:单只猪重量 (kg)"`
 | |
| 	WeighingBatchID uint      `gorm:"not null;index;comment:关联的批次称重ID"`
 | |
| 	PenID           uint      `gorm:"not null;index;comment:所在猪圈ID"`
 | |
| 	OperatorID      uint      `gorm:"not null;comment:操作员ID"`
 | |
| 	Remark          string    `gorm:"size:255;comment:备注"`
 | |
| 	WeighingTime    time.Time `gorm:"primaryKey;comment:称重时间"`
 | |
| }
 | |
| 
 | |
| func (WeighingRecord) TableName() string {
 | |
| 	return "weighing_records"
 | |
| }
 |