package dto import ( "encoding/json" "time" "git.huangwc.com/pig/pig-farm-controller/internal/infra/models" ) // --- General --- // PaginationDTO 定义了分页信息的标准结构 type PaginationDTO struct { Total int64 `json:"total"` Page int `json:"page"` PageSize int `json:"pageSize"` } // --- SensorData --- // ListSensorDataRequest 定义了获取传感器数据列表的请求参数 type ListSensorDataRequest struct { Page int `form:"page,default=1"` PageSize int `form:"pageSize,default=10"` DeviceID *uint `form:"device_id"` SensorType *string `form:"sensor_type"` StartTime *time.Time `form:"start_time" time_format:"rfc3339"` EndTime *time.Time `form:"end_time" time_format:"rfc3339"` OrderBy string `form:"order_by"` } // SensorDataDTO 是用于API响应的传感器数据结构 type SensorDataDTO struct { Time time.Time `json:"time"` DeviceID uint `json:"device_id"` RegionalControllerID uint `json:"regional_controller_id"` SensorType models.SensorType `json:"sensor_type"` Data json.RawMessage `json:"data"` } // ListSensorDataResponse 是获取传感器数据列表的响应结构 type ListSensorDataResponse struct { List []SensorDataDTO `json:"list"` Pagination PaginationDTO `json:"pagination"` } // --- DeviceCommandLog --- // ListDeviceCommandLogRequest 定义了获取设备命令日志列表的请求参数 type ListDeviceCommandLogRequest struct { Page int `form:"page,default=1"` PageSize int `form:"pageSize,default=10"` DeviceID *uint `form:"device_id"` ReceivedSuccess *bool `form:"received_success"` StartTime *time.Time `form:"start_time" time_format:"rfc3339"` EndTime *time.Time `form:"end_time" time_format:"rfc3339"` OrderBy string `form:"order_by"` } // DeviceCommandLogDTO 是用于API响应的设备命令日志结构 type DeviceCommandLogDTO struct { MessageID string `json:"message_id"` DeviceID uint `json:"device_id"` SentAt time.Time `json:"sent_at"` AcknowledgedAt *time.Time `json:"acknowledged_at"` ReceivedSuccess bool `json:"received_success"` } // ListDeviceCommandLogResponse 是获取设备命令日志列表的响应结构 type ListDeviceCommandLogResponse struct { List []DeviceCommandLogDTO `json:"list"` Pagination PaginationDTO `json:"pagination"` } // --- PlanExecutionLog --- // ListPlanExecutionLogRequest 定义了获取计划执行日志列表的请求参数 type ListPlanExecutionLogRequest struct { Page int `form:"page,default=1"` PageSize int `form:"pageSize,default=10"` PlanID *uint `form:"plan_id"` Status *string `form:"status"` StartTime *time.Time `form:"start_time" time_format:"rfc3339"` EndTime *time.Time `form:"end_time" time_format:"rfc3339"` OrderBy string `form:"order_by"` } // PlanExecutionLogDTO 是用于API响应的计划执行日志结构 type PlanExecutionLogDTO struct { ID uint `json:"id"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` PlanID uint `json:"plan_id"` Status models.ExecutionStatus `json:"status"` StartedAt time.Time `json:"started_at"` EndedAt time.Time `json:"ended_at"` Error string `json:"error"` } // ListPlanExecutionLogResponse 是获取计划执行日志列表的响应结构 type ListPlanExecutionLogResponse struct { List []PlanExecutionLogDTO `json:"list"` Pagination PaginationDTO `json:"pagination"` } // --- TaskExecutionLog --- // ListTaskExecutionLogRequest 定义了获取任务执行日志列表的请求参数 type ListTaskExecutionLogRequest struct { Page int `form:"page,default=1"` PageSize int `form:"pageSize,default=10"` PlanExecutionLogID *uint `form:"plan_execution_log_id"` TaskID *int `form:"task_id"` Status *string `form:"status"` StartTime *time.Time `form:"start_time" time_format:"rfc3339"` EndTime *time.Time `form:"end_time" time_format:"rfc3339"` OrderBy string `form:"order_by"` } // TaskDTO 是用于API响应的简化版任务结构 type TaskDTO struct { ID uint `json:"id"` Name string `json:"name"` Description string `json:"description"` } // TaskExecutionLogDTO 是用于API响应的任务执行日志结构 type TaskExecutionLogDTO struct { ID uint `json:"id"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` PlanExecutionLogID uint `json:"plan_execution_log_id"` TaskID int `json:"task_id"` Task TaskDTO `json:"task"` // 嵌套的任务信息 Status models.ExecutionStatus `json:"status"` Output string `json:"output"` StartedAt time.Time `json:"started_at"` EndedAt time.Time `json:"ended_at"` } // ListTaskExecutionLogResponse 是获取任务执行日志列表的响应结构 type ListTaskExecutionLogResponse struct { List []TaskExecutionLogDTO `json:"list"` Pagination PaginationDTO `json:"pagination"` } // --- PendingCollection --- // ListPendingCollectionRequest 定义了获取待采集请求列表的请求参数 type ListPendingCollectionRequest struct { Page int `form:"page,default=1"` PageSize int `form:"pageSize,default=10"` DeviceID *uint `form:"device_id"` Status *string `form:"status"` StartTime *time.Time `form:"start_time" time_format:"rfc3339"` EndTime *time.Time `form:"end_time" time_format:"rfc3339"` OrderBy string `form:"order_by"` } // PendingCollectionDTO 是用于API响应的待采集请求结构 type PendingCollectionDTO struct { CorrelationID string `json:"correlation_id"` DeviceID uint `json:"device_id"` CommandMetadata models.UintArray `json:"command_metadata"` Status models.PendingCollectionStatus `json:"status"` FulfilledAt *time.Time `json:"fulfilled_at"` CreatedAt time.Time `json:"created_at"` } // ListPendingCollectionResponse 是获取待采集请求列表的响应结构 type ListPendingCollectionResponse struct { List []PendingCollectionDTO `json:"list"` Pagination PaginationDTO `json:"pagination"` } // --- UserActionLog --- // ListUserActionLogRequest 定义了获取用户操作日志列表的请求参数 type ListUserActionLogRequest struct { Page int `form:"page,default=1"` PageSize int `form:"pageSize,default=10"` UserID *uint `form:"user_id"` Username *string `form:"username"` ActionType *string `form:"action_type"` Status *string `form:"status"` StartTime *time.Time `form:"start_time" time_format:"rfc3339"` EndTime *time.Time `form:"end_time" time_format:"rfc3339"` OrderBy string `form:"order_by"` } // UserActionLogDTO 是用于API响应的用户操作日志结构 type UserActionLogDTO struct { ID uint `json:"id"` Time time.Time `json:"time"` UserID uint `json:"user_id"` Username string `json:"username"` SourceIP string `json:"source_ip"` ActionType string `json:"action_type"` TargetResource json.RawMessage `json:"target_resource"` Description string `json:"description"` Status models.AuditStatus `json:"status"` HTTPPath string `json:"http_path"` HTTPMethod string `json:"http_method"` ResultDetails string `json:"result_details"` } // ListUserActionLogResponse 是获取用户操作日志列表的响应结构 type ListUserActionLogResponse struct { List []UserActionLogDTO `json:"list"` Pagination PaginationDTO `json:"pagination"` } // --- RawMaterialPurchase --- // ListRawMaterialPurchaseRequest 定义了获取原料采购列表的请求参数 type ListRawMaterialPurchaseRequest struct { Page int `form:"page,default=1"` PageSize int `form:"pageSize,default=10"` RawMaterialID *uint `form:"raw_material_id"` Supplier *string `form:"supplier"` StartTime *time.Time `form:"start_time" time_format:"rfc3339"` EndTime *time.Time `form:"end_time" time_format:"rfc3339"` OrderBy string `form:"order_by"` } // RawMaterialDTO 是用于API响应的简化版原料结构 type RawMaterialDTO struct { ID uint `json:"id"` Name string `json:"name"` } // RawMaterialPurchaseDTO 是用于API响应的原料采购结构 type RawMaterialPurchaseDTO struct { ID uint `json:"id"` RawMaterialID uint `json:"raw_material_id"` RawMaterial RawMaterialDTO `json:"raw_material"` Supplier string `json:"supplier"` Amount float64 `json:"amount"` UnitPrice float64 `json:"unit_price"` TotalPrice float64 `json:"total_price"` PurchaseDate time.Time `json:"purchase_date"` CreatedAt time.Time `json:"created_at"` } // ListRawMaterialPurchaseResponse 是获取原料采购列表的响应结构 type ListRawMaterialPurchaseResponse struct { List []RawMaterialPurchaseDTO `json:"list"` Pagination PaginationDTO `json:"pagination"` } // --- RawMaterialStockLog --- // ListRawMaterialStockLogRequest 定义了获取原料库存日志列表的请求参数 type ListRawMaterialStockLogRequest struct { Page int `form:"page,default=1"` PageSize int `form:"pageSize,default=10"` RawMaterialID *uint `form:"raw_material_id"` SourceType *string `form:"source_type"` SourceID *uint `form:"source_id"` StartTime *time.Time `form:"start_time" time_format:"rfc3339"` EndTime *time.Time `form:"end_time" time_format:"rfc3339"` OrderBy string `form:"order_by"` } // RawMaterialStockLogDTO 是用于API响应的原料库存日志结构 type RawMaterialStockLogDTO struct { ID uint `json:"id"` RawMaterialID uint `json:"raw_material_id"` ChangeAmount float64 `json:"change_amount"` SourceType models.StockLogSourceType `json:"source_type"` SourceID uint `json:"source_id"` HappenedAt time.Time `json:"happened_at"` Remarks string `json:"remarks"` } // ListRawMaterialStockLogResponse 是获取原料库存日志列表的响应结构 type ListRawMaterialStockLogResponse struct { List []RawMaterialStockLogDTO `json:"list"` Pagination PaginationDTO `json:"pagination"` } // --- FeedUsageRecord --- // ListFeedUsageRecordRequest 定义了获取饲料使用记录列表的请求参数 type ListFeedUsageRecordRequest struct { Page int `form:"page,default=1"` PageSize int `form:"pageSize,default=10"` PenID *uint `form:"pen_id"` FeedFormulaID *uint `form:"feed_formula_id"` OperatorID *uint `form:"operator_id"` StartTime *time.Time `form:"start_time" time_format:"rfc3339"` EndTime *time.Time `form:"end_time" time_format:"rfc3339"` OrderBy string `form:"order_by"` } // PenDTO 是用于API响应的简化版猪栏结构 type PenDTO struct { ID uint `json:"id"` Name string `json:"name"` } // FeedFormulaDTO 是用于API响应的简化版饲料配方结构 type FeedFormulaDTO struct { ID uint `json:"id"` Name string `json:"name"` } // FeedUsageRecordDTO 是用于API响应的饲料使用记录结构 type FeedUsageRecordDTO struct { ID uint `json:"id"` PenID uint `json:"pen_id"` Pen PenDTO `json:"pen"` FeedFormulaID uint `json:"feed_formula_id"` FeedFormula FeedFormulaDTO `json:"feed_formula"` Amount float64 `json:"amount"` RecordedAt time.Time `json:"recorded_at"` OperatorID uint `json:"operator_id"` Remarks string `json:"remarks"` } // ListFeedUsageRecordResponse 是获取饲料使用记录列表的响应结构 type ListFeedUsageRecordResponse struct { List []FeedUsageRecordDTO `json:"list"` Pagination PaginationDTO `json:"pagination"` } // --- MedicationLog --- // ListMedicationLogRequest 定义了获取用药记录列表的请求参数 type ListMedicationLogRequest struct { Page int `form:"page,default=1"` PageSize int `form:"pageSize,default=10"` PigBatchID *uint `form:"pig_batch_id"` MedicationID *uint `form:"medication_id"` Reason *string `form:"reason"` OperatorID *uint `form:"operator_id"` StartTime *time.Time `form:"start_time" time_format:"rfc3339"` EndTime *time.Time `form:"end_time" time_format:"rfc3339"` OrderBy string `form:"order_by"` } // MedicationDTO 是用于API响应的简化版药品结构 type MedicationDTO struct { ID uint `json:"id"` Name string `json:"name"` } // MedicationLogDTO 是用于API响应的用药记录结构 type MedicationLogDTO struct { ID uint `json:"id"` PigBatchID uint `json:"pig_batch_id"` MedicationID uint `json:"medication_id"` Medication MedicationDTO `json:"medication"` DosageUsed float64 `json:"dosage_used"` TargetCount int `json:"target_count"` Reason models.MedicationReasonType `json:"reason"` Description string `json:"description"` OperatorID uint `json:"operator_id"` HappenedAt time.Time `json:"happened_at"` } // ListMedicationLogResponse 是获取用药记录列表的响应结构 type ListMedicationLogResponse struct { List []MedicationLogDTO `json:"list"` Pagination PaginationDTO `json:"pagination"` } // --- PigBatchLog --- // ListPigBatchLogRequest 定义了获取猪批次日志列表的请求参数 type ListPigBatchLogRequest struct { Page int `form:"page,default=1"` PageSize int `form:"pageSize,default=10"` PigBatchID *uint `form:"pig_batch_id"` ChangeType *string `form:"change_type"` OperatorID *uint `form:"operator_id"` StartTime *time.Time `form:"start_time" time_format:"rfc3339"` EndTime *time.Time `form:"end_time" time_format:"rfc3339"` OrderBy string `form:"order_by"` } // PigBatchLogDTO 是用于API响应的猪批次日志结构 type PigBatchLogDTO struct { ID uint `json:"id"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` PigBatchID uint `json:"pig_batch_id"` ChangeType models.LogChangeType `json:"change_type"` ChangeCount int `json:"change_count"` Reason string `json:"reason"` BeforeCount int `json:"before_count"` AfterCount int `json:"after_count"` OperatorID uint `json:"operator_id"` HappenedAt time.Time `json:"happened_at"` } // ListPigBatchLogResponse 是获取猪批次日志列表的响应结构 type ListPigBatchLogResponse struct { List []PigBatchLogDTO `json:"list"` Pagination PaginationDTO `json:"pagination"` } // --- WeighingBatch --- // ListWeighingBatchRequest 定义了获取批次称重记录列表的请求参数 type ListWeighingBatchRequest struct { Page int `form:"page,default=1"` PageSize int `form:"pageSize,default=10"` PigBatchID *uint `form:"pig_batch_id"` StartTime *time.Time `form:"start_time" time_format:"rfc3339"` EndTime *time.Time `form:"end_time" time_format:"rfc3339"` OrderBy string `form:"order_by"` } // WeighingBatchDTO 是用于API响应的批次称重记录结构 type WeighingBatchDTO struct { ID uint `json:"id"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` WeighingTime time.Time `json:"weighing_time"` Description string `json:"description"` PigBatchID uint `json:"pig_batch_id"` } // ListWeighingBatchResponse 是获取批次称重记录列表的响应结构 type ListWeighingBatchResponse struct { List []WeighingBatchDTO `json:"list"` Pagination PaginationDTO `json:"pagination"` } // --- WeighingRecord --- // ListWeighingRecordRequest 定义了获取单次称重记录列表的请求参数 type ListWeighingRecordRequest struct { Page int `form:"page,default=1"` PageSize int `form:"pageSize,default=10"` WeighingBatchID *uint `form:"weighing_batch_id"` PenID *uint `form:"pen_id"` OperatorID *uint `form:"operator_id"` StartTime *time.Time `form:"start_time" time_format:"rfc3339"` EndTime *time.Time `form:"end_time" time_format:"rfc3339"` OrderBy string `form:"order_by"` } // WeighingRecordDTO 是用于API响应的单次称重记录结构 type WeighingRecordDTO struct { ID uint `json:"id"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` Weight float64 `json:"weight"` WeighingBatchID uint `json:"weighing_batch_id"` PenID uint `json:"pen_id"` OperatorID uint `json:"operator_id"` Remark string `json:"remark"` WeighingTime time.Time `json:"weighing_time"` } // ListWeighingRecordResponse 是获取单次称重记录列表的响应结构 type ListWeighingRecordResponse struct { List []WeighingRecordDTO `json:"list"` Pagination PaginationDTO `json:"pagination"` } // --- PigTransferLog --- // ListPigTransferLogRequest 定义了获取猪只迁移日志列表的请求参数 type ListPigTransferLogRequest struct { Page int `form:"page,default=1"` PageSize int `form:"pageSize,default=10"` PigBatchID *uint `form:"pig_batch_id"` PenID *uint `form:"pen_id"` TransferType *string `form:"transfer_type"` OperatorID *uint `form:"operator_id"` CorrelationID *string `form:"correlation_id"` StartTime *time.Time `form:"start_time" time_format:"rfc3339"` EndTime *time.Time `form:"end_time" time_format:"rfc3339"` OrderBy string `form:"order_by"` } // PigTransferLogDTO 是用于API响应的猪只迁移日志结构 type PigTransferLogDTO struct { ID uint `json:"id"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` TransferTime time.Time `json:"transfer_time"` PigBatchID uint `json:"pig_batch_id"` PenID uint `json:"pen_id"` Quantity int `json:"quantity"` Type models.PigTransferType `json:"type"` CorrelationID string `json:"correlation_id"` OperatorID uint `json:"operator_id"` Remarks string `json:"remarks"` } // ListPigTransferLogResponse 是获取猪只迁移日志列表的响应结构 type ListPigTransferLogResponse struct { List []PigTransferLogDTO `json:"list"` Pagination PaginationDTO `json:"pagination"` }