ListPigTransferLogs
This commit is contained in:
@@ -7,6 +7,18 @@ import (
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// PigTransferLogListOptions 定义了查询猪只迁移日志时的可选参数
|
||||
type PigTransferLogListOptions struct {
|
||||
PigBatchID *uint
|
||||
PenID *uint
|
||||
TransferType *models.PigTransferType // 迁移类型
|
||||
OperatorID *uint
|
||||
CorrelationID *string
|
||||
StartTime *time.Time // 基于 transfer_time 字段
|
||||
EndTime *time.Time // 基于 transfer_time 字段
|
||||
OrderBy string // 例如 "transfer_time desc"
|
||||
}
|
||||
|
||||
// PigTransferLogRepository 定义了猪只迁移日志数据持久化的接口。
|
||||
type PigTransferLogRepository interface {
|
||||
// CreatePigTransferLog 在数据库中创建一条猪只迁移日志记录。
|
||||
@@ -14,6 +26,9 @@ type PigTransferLogRepository interface {
|
||||
|
||||
// GetLogsForPenSince 获取指定猪栏自特定时间点以来的所有迁移日志,按时间倒序排列。
|
||||
GetLogsForPenSince(tx *gorm.DB, penID uint, since time.Time) ([]*models.PigTransferLog, error)
|
||||
|
||||
// ListPigTransferLogs 支持分页和过滤的猪只迁移日志列表查询
|
||||
ListPigTransferLogs(opts PigTransferLogListOptions, page, pageSize int) ([]models.PigTransferLog, int64, error)
|
||||
}
|
||||
|
||||
// gormPigTransferLogRepository 是 PigTransferLogRepository 接口的 GORM 实现。
|
||||
@@ -37,3 +52,52 @@ func (r *gormPigTransferLogRepository) GetLogsForPenSince(tx *gorm.DB, penID uin
|
||||
err := tx.Where("pen_id = ? AND transfer_time >= ?", penID, since).Order("transfer_time DESC").Find(&logs).Error
|
||||
return logs, err
|
||||
}
|
||||
|
||||
// ListPigTransferLogs 实现了分页和过滤查询猪只迁移日志的功能
|
||||
func (r *gormPigTransferLogRepository) ListPigTransferLogs(opts PigTransferLogListOptions, page, pageSize int) ([]models.PigTransferLog, int64, error) {
|
||||
if page <= 0 || pageSize <= 0 {
|
||||
return nil, 0, ErrInvalidPagination
|
||||
}
|
||||
|
||||
var results []models.PigTransferLog
|
||||
var total int64
|
||||
|
||||
query := r.db.Model(&models.PigTransferLog{})
|
||||
|
||||
if opts.PigBatchID != nil {
|
||||
query = query.Where("pig_batch_id = ?", *opts.PigBatchID)
|
||||
}
|
||||
if opts.PenID != nil {
|
||||
query = query.Where("pen_id = ?", *opts.PenID)
|
||||
}
|
||||
if opts.TransferType != nil {
|
||||
query = query.Where("type = ?", *opts.TransferType)
|
||||
}
|
||||
if opts.OperatorID != nil {
|
||||
query = query.Where("operator_id = ?", *opts.OperatorID)
|
||||
}
|
||||
if opts.CorrelationID != nil {
|
||||
query = query.Where("correlation_id = ?", *opts.CorrelationID)
|
||||
}
|
||||
if opts.StartTime != nil {
|
||||
query = query.Where("transfer_time >= ?", *opts.StartTime)
|
||||
}
|
||||
if opts.EndTime != nil {
|
||||
query = query.Where("transfer_time <= ?", *opts.EndTime)
|
||||
}
|
||||
|
||||
if err := query.Count(&total).Error; err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
orderBy := "transfer_time DESC"
|
||||
if opts.OrderBy != "" {
|
||||
orderBy = opts.OrderBy
|
||||
}
|
||||
query = query.Order(orderBy)
|
||||
|
||||
offset := (page - 1) * pageSize
|
||||
err := query.Limit(pageSize).Offset(offset).Find(&results).Error
|
||||
|
||||
return results, total, err
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
)
|
||||
|
||||
// ErrInvalidPagination 表示分页参数无效
|
||||
var ErrInvalidPagination = errors.New("invalid pagination parameters: page and pageSize must be positive")
|
||||
var ErrInvalidPagination = errors.New("无效的分页参数:page和pageSize必须为大于0")
|
||||
|
||||
// SensorDataListOptions 定义了查询传感器数据列表时的可选参数
|
||||
type SensorDataListOptions struct {
|
||||
|
||||
Reference in New Issue
Block a user