Files
pig-farm-controller/internal/app/service/monitor_service.go

193 lines
10 KiB
Go
Raw Normal View History

2025-10-18 15:31:05 +08:00
package service
import (
"git.huangwc.com/pig/pig-farm-controller/internal/infra/models"
"git.huangwc.com/pig/pig-farm-controller/internal/infra/repository"
)
2025-10-19 20:24:01 +08:00
// MonitorService 定义了监控相关的业务逻辑服务接口
type MonitorService interface {
ListSensorData(opts repository.SensorDataListOptions, page, pageSize int) ([]models.SensorData, int64, error)
ListDeviceCommandLogs(opts repository.DeviceCommandLogListOptions, page, pageSize int) ([]models.DeviceCommandLog, int64, error)
2025-10-29 17:52:07 +08:00
ListPlanExecutionLogs(opts repository.PlanExecutionLogListOptions, page, pageSize int) ([]models.PlanExecutionLog, []models.Plan, int64, error)
2025-10-19 20:24:01 +08:00
ListTaskExecutionLogs(opts repository.TaskExecutionLogListOptions, page, pageSize int) ([]models.TaskExecutionLog, int64, error)
ListPendingCollections(opts repository.PendingCollectionListOptions, page, pageSize int) ([]models.PendingCollection, int64, error)
ListUserActionLogs(opts repository.UserActionLogListOptions, page, pageSize int) ([]models.UserActionLog, int64, error)
ListRawMaterialPurchases(opts repository.RawMaterialPurchaseListOptions, page, pageSize int) ([]models.RawMaterialPurchase, int64, error)
ListRawMaterialStockLogs(opts repository.RawMaterialStockLogListOptions, page, pageSize int) ([]models.RawMaterialStockLog, int64, error)
ListFeedUsageRecords(opts repository.FeedUsageRecordListOptions, page, pageSize int) ([]models.FeedUsageRecord, int64, error)
ListMedicationLogs(opts repository.MedicationLogListOptions, page, pageSize int) ([]models.MedicationLog, int64, error)
ListPigBatchLogs(opts repository.PigBatchLogListOptions, page, pageSize int) ([]models.PigBatchLog, int64, error)
ListWeighingBatches(opts repository.WeighingBatchListOptions, page, pageSize int) ([]models.WeighingBatch, int64, error)
ListWeighingRecords(opts repository.WeighingRecordListOptions, page, pageSize int) ([]models.WeighingRecord, int64, error)
ListPigTransferLogs(opts repository.PigTransferLogListOptions, page, pageSize int) ([]models.PigTransferLog, int64, error)
ListPigSickLogs(opts repository.PigSickLogListOptions, page, pageSize int) ([]models.PigSickLog, int64, error)
ListPigPurchases(opts repository.PigPurchaseListOptions, page, pageSize int) ([]models.PigPurchase, int64, error)
ListPigSales(opts repository.PigSaleListOptions, page, pageSize int) ([]models.PigSale, int64, error)
2025-10-25 14:36:24 +08:00
ListNotifications(opts repository.NotificationListOptions, page, pageSize int) ([]models.Notification, int64, error)
2025-10-19 20:24:01 +08:00
}
// monitorService 是 MonitorService 接口的具体实现
type monitorService struct {
2025-10-18 15:43:27 +08:00
sensorDataRepo repository.SensorDataRepository
deviceCommandLogRepo repository.DeviceCommandLogRepository
executionLogRepo repository.ExecutionLogRepository
2025-10-29 17:52:07 +08:00
planRepository repository.PlanRepository
2025-10-18 15:43:27 +08:00
pendingCollectionRepo repository.PendingCollectionRepository
2025-10-18 15:47:13 +08:00
userActionLogRepo repository.UserActionLogRepository
2025-10-18 15:58:31 +08:00
rawMaterialRepo repository.RawMaterialRepository
2025-10-19 13:47:37 +08:00
medicationRepo repository.MedicationLogRepository
2025-10-19 13:41:29 +08:00
pigBatchRepo repository.PigBatchRepository
2025-10-19 12:41:13 +08:00
pigBatchLogRepo repository.PigBatchLogRepository
2025-10-19 14:11:18 +08:00
pigTransferLogRepo repository.PigTransferLogRepository
2025-10-19 14:34:22 +08:00
pigSickLogRepo repository.PigSickLogRepository
2025-10-19 14:54:13 +08:00
pigTradeRepo repository.PigTradeRepository
2025-10-25 14:36:24 +08:00
notificationRepo repository.NotificationRepository
2025-10-18 15:31:05 +08:00
}
// NewMonitorService 创建一个新的 MonitorService 实例
2025-10-18 15:33:39 +08:00
func NewMonitorService(
sensorDataRepo repository.SensorDataRepository,
deviceCommandLogRepo repository.DeviceCommandLogRepository,
2025-10-18 15:36:32 +08:00
executionLogRepo repository.ExecutionLogRepository,
2025-10-29 17:52:07 +08:00
planRepository repository.PlanRepository,
2025-10-18 15:43:27 +08:00
pendingCollectionRepo repository.PendingCollectionRepository,
2025-10-18 15:47:13 +08:00
userActionLogRepo repository.UserActionLogRepository,
2025-10-18 15:58:31 +08:00
rawMaterialRepo repository.RawMaterialRepository,
2025-10-19 13:47:37 +08:00
medicationRepo repository.MedicationLogRepository,
2025-10-19 13:41:29 +08:00
pigBatchRepo repository.PigBatchRepository,
2025-10-19 12:41:13 +08:00
pigBatchLogRepo repository.PigBatchLogRepository,
2025-10-19 14:11:18 +08:00
pigTransferLogRepo repository.PigTransferLogRepository,
2025-10-19 14:34:22 +08:00
pigSickLogRepo repository.PigSickLogRepository,
2025-10-19 14:54:13 +08:00
pigTradeRepo repository.PigTradeRepository,
2025-10-25 14:36:24 +08:00
notificationRepo repository.NotificationRepository,
2025-10-19 20:24:01 +08:00
) MonitorService {
return &monitorService{
2025-10-18 15:43:27 +08:00
sensorDataRepo: sensorDataRepo,
deviceCommandLogRepo: deviceCommandLogRepo,
executionLogRepo: executionLogRepo,
2025-10-29 17:52:07 +08:00
planRepository: planRepository,
2025-10-18 15:43:27 +08:00
pendingCollectionRepo: pendingCollectionRepo,
2025-10-18 15:47:13 +08:00
userActionLogRepo: userActionLogRepo,
2025-10-18 15:58:31 +08:00
rawMaterialRepo: rawMaterialRepo,
2025-10-18 16:22:59 +08:00
medicationRepo: medicationRepo,
2025-10-19 13:41:29 +08:00
pigBatchRepo: pigBatchRepo,
2025-10-19 12:41:13 +08:00
pigBatchLogRepo: pigBatchLogRepo,
2025-10-19 14:11:18 +08:00
pigTransferLogRepo: pigTransferLogRepo,
2025-10-19 14:34:22 +08:00
pigSickLogRepo: pigSickLogRepo,
2025-10-19 14:54:13 +08:00
pigTradeRepo: pigTradeRepo,
2025-10-25 14:36:24 +08:00
notificationRepo: notificationRepo,
2025-10-18 15:31:05 +08:00
}
}
// ListSensorData 负责处理查询传感器数据列表的业务逻辑
2025-10-19 20:24:01 +08:00
func (s *monitorService) ListSensorData(opts repository.SensorDataListOptions, page, pageSize int) ([]models.SensorData, int64, error) {
2025-10-18 15:31:05 +08:00
return s.sensorDataRepo.List(opts, page, pageSize)
}
2025-10-18 15:33:39 +08:00
// ListDeviceCommandLogs 负责处理查询设备命令日志列表的业务逻辑
2025-10-19 20:24:01 +08:00
func (s *monitorService) ListDeviceCommandLogs(opts repository.DeviceCommandLogListOptions, page, pageSize int) ([]models.DeviceCommandLog, int64, error) {
2025-10-18 15:33:39 +08:00
return s.deviceCommandLogRepo.List(opts, page, pageSize)
}
2025-10-18 15:36:32 +08:00
// ListPlanExecutionLogs 负责处理查询计划执行日志列表的业务逻辑
2025-10-29 17:52:07 +08:00
func (s *monitorService) ListPlanExecutionLogs(opts repository.PlanExecutionLogListOptions, page, pageSize int) ([]models.PlanExecutionLog, []models.Plan, int64, error) {
planLogs, total, err := s.executionLogRepo.ListPlanExecutionLogs(opts, page, pageSize)
if err != nil {
return nil, nil, 0, err
}
planIds := []uint{}
for _, datum := range planLogs {
2025-10-29 19:07:00 +08:00
has := false
2025-10-29 17:52:07 +08:00
for _, id := range planIds {
if id == datum.PlanID {
2025-10-29 19:07:00 +08:00
has = true
2025-10-29 17:52:07 +08:00
break
}
2025-10-29 19:07:00 +08:00
}
if !has {
2025-10-29 17:52:07 +08:00
planIds = append(planIds, datum.PlanID)
}
}
plans, err := s.planRepository.GetPlansByIDs(planIds)
if err != nil {
return nil, nil, 0, err
}
return planLogs, plans, total, nil
2025-10-18 15:36:32 +08:00
}
2025-10-18 15:39:47 +08:00
// ListTaskExecutionLogs 负责处理查询任务执行日志列表的业务逻辑
2025-10-19 20:24:01 +08:00
func (s *monitorService) ListTaskExecutionLogs(opts repository.TaskExecutionLogListOptions, page, pageSize int) ([]models.TaskExecutionLog, int64, error) {
2025-10-18 15:39:47 +08:00
return s.executionLogRepo.ListTaskExecutionLogs(opts, page, pageSize)
}
2025-10-18 15:43:27 +08:00
// ListPendingCollections 负责处理查询待采集请求列表的业务逻辑
2025-10-19 20:24:01 +08:00
func (s *monitorService) ListPendingCollections(opts repository.PendingCollectionListOptions, page, pageSize int) ([]models.PendingCollection, int64, error) {
2025-10-18 15:43:27 +08:00
return s.pendingCollectionRepo.List(opts, page, pageSize)
}
2025-10-18 15:47:13 +08:00
// ListUserActionLogs 负责处理查询用户操作日志列表的业务逻辑
2025-10-19 20:24:01 +08:00
func (s *monitorService) ListUserActionLogs(opts repository.UserActionLogListOptions, page, pageSize int) ([]models.UserActionLog, int64, error) {
2025-10-18 15:47:13 +08:00
return s.userActionLogRepo.List(opts, page, pageSize)
}
2025-10-18 15:58:31 +08:00
// ListRawMaterialPurchases 负责处理查询原料采购记录列表的业务逻辑
2025-10-19 20:24:01 +08:00
func (s *monitorService) ListRawMaterialPurchases(opts repository.RawMaterialPurchaseListOptions, page, pageSize int) ([]models.RawMaterialPurchase, int64, error) {
2025-10-18 15:58:31 +08:00
return s.rawMaterialRepo.ListRawMaterialPurchases(opts, page, pageSize)
}
2025-10-18 16:04:54 +08:00
// ListRawMaterialStockLogs 负责处理查询原料库存日志列表的业务逻辑
2025-10-19 20:24:01 +08:00
func (s *monitorService) ListRawMaterialStockLogs(opts repository.RawMaterialStockLogListOptions, page, pageSize int) ([]models.RawMaterialStockLog, int64, error) {
2025-10-18 16:04:54 +08:00
return s.rawMaterialRepo.ListRawMaterialStockLogs(opts, page, pageSize)
}
2025-10-18 16:08:46 +08:00
// ListFeedUsageRecords 负责处理查询饲料使用记录列表的业务逻辑
2025-10-19 20:24:01 +08:00
func (s *monitorService) ListFeedUsageRecords(opts repository.FeedUsageRecordListOptions, page, pageSize int) ([]models.FeedUsageRecord, int64, error) {
2025-10-18 16:08:46 +08:00
return s.rawMaterialRepo.ListFeedUsageRecords(opts, page, pageSize)
}
2025-10-18 16:22:59 +08:00
// ListMedicationLogs 负责处理查询用药记录列表的业务逻辑
2025-10-19 20:24:01 +08:00
func (s *monitorService) ListMedicationLogs(opts repository.MedicationLogListOptions, page, pageSize int) ([]models.MedicationLog, int64, error) {
2025-10-18 16:22:59 +08:00
return s.medicationRepo.ListMedicationLogs(opts, page, pageSize)
}
2025-10-19 12:41:13 +08:00
// ListPigBatchLogs 负责处理查询猪批次日志列表的业务逻辑
2025-10-19 20:24:01 +08:00
func (s *monitorService) ListPigBatchLogs(opts repository.PigBatchLogListOptions, page, pageSize int) ([]models.PigBatchLog, int64, error) {
2025-10-19 12:41:13 +08:00
return s.pigBatchLogRepo.List(opts, page, pageSize)
}
2025-10-19 13:41:29 +08:00
// ListWeighingBatches 负责处理查询批次称重记录列表的业务逻辑
2025-10-19 20:24:01 +08:00
func (s *monitorService) ListWeighingBatches(opts repository.WeighingBatchListOptions, page, pageSize int) ([]models.WeighingBatch, int64, error) {
2025-10-19 13:41:29 +08:00
return s.pigBatchRepo.ListWeighingBatches(opts, page, pageSize)
}
2025-10-19 13:59:11 +08:00
// ListWeighingRecords 负责处理查询单次称重记录列表的业务逻辑
2025-10-19 20:24:01 +08:00
func (s *monitorService) ListWeighingRecords(opts repository.WeighingRecordListOptions, page, pageSize int) ([]models.WeighingRecord, int64, error) {
2025-10-19 13:59:11 +08:00
return s.pigBatchRepo.ListWeighingRecords(opts, page, pageSize)
}
2025-10-19 14:11:18 +08:00
// ListPigTransferLogs 负责处理查询猪只迁移日志列表的业务逻辑
2025-10-19 20:24:01 +08:00
func (s *monitorService) ListPigTransferLogs(opts repository.PigTransferLogListOptions, page, pageSize int) ([]models.PigTransferLog, int64, error) {
2025-10-19 14:11:18 +08:00
return s.pigTransferLogRepo.ListPigTransferLogs(opts, page, pageSize)
}
2025-10-19 14:34:22 +08:00
// ListPigSickLogs 负责处理查询病猪日志列表的业务逻辑
2025-10-19 20:24:01 +08:00
func (s *monitorService) ListPigSickLogs(opts repository.PigSickLogListOptions, page, pageSize int) ([]models.PigSickLog, int64, error) {
2025-10-19 14:34:22 +08:00
return s.pigSickLogRepo.ListPigSickLogs(opts, page, pageSize)
}
2025-10-19 14:54:13 +08:00
// ListPigPurchases 负责处理查询猪只采购记录列表的业务逻辑
2025-10-19 20:24:01 +08:00
func (s *monitorService) ListPigPurchases(opts repository.PigPurchaseListOptions, page, pageSize int) ([]models.PigPurchase, int64, error) {
2025-10-19 14:54:13 +08:00
return s.pigTradeRepo.ListPigPurchases(opts, page, pageSize)
}
2025-10-19 15:53:19 +08:00
// ListPigSales 负责处理查询猪只销售记录列表的业务逻辑
2025-10-19 20:24:01 +08:00
func (s *monitorService) ListPigSales(opts repository.PigSaleListOptions, page, pageSize int) ([]models.PigSale, int64, error) {
2025-10-19 15:53:19 +08:00
return s.pigTradeRepo.ListPigSales(opts, page, pageSize)
}
2025-10-25 14:36:24 +08:00
// ListNotifications 负责处理查询通知列表的业务逻辑
func (s *monitorService) ListNotifications(opts repository.NotificationListOptions, page, pageSize int) ([]models.Notification, int64, error) {
return s.notificationRepo.List(opts, page, pageSize)
}