注册api
This commit is contained in:
2402
docs/docs.go
2402
docs/docs.go
File diff suppressed because it is too large
Load Diff
2402
docs/swagger.json
2402
docs/swagger.json
File diff suppressed because it is too large
Load Diff
1490
docs/swagger.yaml
1490
docs/swagger.yaml
File diff suppressed because it is too large
Load Diff
@@ -16,15 +16,14 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/pprof"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
_ "git.huangwc.com/pig/pig-farm-controller/docs" // 引入 swag 生成的 docs
|
_ "git.huangwc.com/pig/pig-farm-controller/docs" // 引入 swag 生成的 docs
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/app/controller/device"
|
"git.huangwc.com/pig/pig-farm-controller/internal/app/controller/device"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/app/controller/management"
|
"git.huangwc.com/pig/pig-farm-controller/internal/app/controller/management"
|
||||||
|
"git.huangwc.com/pig/pig-farm-controller/internal/app/controller/monitor"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/app/controller/plan"
|
"git.huangwc.com/pig/pig-farm-controller/internal/app/controller/plan"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/app/controller/user"
|
"git.huangwc.com/pig/pig-farm-controller/internal/app/controller/user"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/app/middleware"
|
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/app/service"
|
"git.huangwc.com/pig/pig-farm-controller/internal/app/service"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/app/webhook"
|
"git.huangwc.com/pig/pig-farm-controller/internal/app/webhook"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/domain/audit"
|
"git.huangwc.com/pig/pig-farm-controller/internal/domain/audit"
|
||||||
@@ -36,8 +35,6 @@ import (
|
|||||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/repository"
|
"git.huangwc.com/pig/pig-farm-controller/internal/infra/repository"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
swaggerFiles "github.com/swaggo/files"
|
|
||||||
ginSwagger "github.com/swaggo/gin-swagger"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// API 结构体定义了 HTTP 服务器及其依赖
|
// API 结构体定义了 HTTP 服务器及其依赖
|
||||||
@@ -54,6 +51,7 @@ type API struct {
|
|||||||
planController *plan.Controller // 计划控制器实例
|
planController *plan.Controller // 计划控制器实例
|
||||||
pigFarmController *management.PigFarmController // 猪场管理控制器实例
|
pigFarmController *management.PigFarmController // 猪场管理控制器实例
|
||||||
pigBatchController *management.PigBatchController // 猪群控制器实例
|
pigBatchController *management.PigBatchController // 猪群控制器实例
|
||||||
|
monitorController *monitor.Controller // 数据监控控制器实例
|
||||||
listenHandler webhook.ListenHandler // 设备上行事件监听器
|
listenHandler webhook.ListenHandler // 设备上行事件监听器
|
||||||
analysisTaskManager *task.AnalysisPlanTaskManager // 计划触发器管理器实例
|
analysisTaskManager *task.AnalysisPlanTaskManager // 计划触发器管理器实例
|
||||||
}
|
}
|
||||||
@@ -69,6 +67,7 @@ func NewAPI(cfg config.ServerConfig,
|
|||||||
planRepository repository.PlanRepository,
|
planRepository repository.PlanRepository,
|
||||||
pigFarmService service.PigFarmService,
|
pigFarmService service.PigFarmService,
|
||||||
pigBatchService service.PigBatchService,
|
pigBatchService service.PigBatchService,
|
||||||
|
monitorService service.MonitorService,
|
||||||
userActionLogRepository repository.UserActionLogRepository,
|
userActionLogRepository repository.UserActionLogRepository,
|
||||||
tokenService token.TokenService,
|
tokenService token.TokenService,
|
||||||
auditService audit.Service,
|
auditService audit.Service,
|
||||||
@@ -106,161 +105,14 @@ func NewAPI(cfg config.ServerConfig,
|
|||||||
pigFarmController: management.NewPigFarmController(logger, pigFarmService),
|
pigFarmController: management.NewPigFarmController(logger, pigFarmService),
|
||||||
// 在 NewAPI 中初始化猪群控制器
|
// 在 NewAPI 中初始化猪群控制器
|
||||||
pigBatchController: management.NewPigBatchController(logger, pigBatchService),
|
pigBatchController: management.NewPigBatchController(logger, pigBatchService),
|
||||||
|
// 在 NewAPI 中初始化数据监控控制器
|
||||||
|
monitorController: monitor.NewController(monitorService, logger),
|
||||||
}
|
}
|
||||||
|
|
||||||
api.setupRoutes() // 设置所有路由
|
api.setupRoutes() // 设置所有路由
|
||||||
return api
|
return api
|
||||||
}
|
}
|
||||||
|
|
||||||
// setupRoutes 设置所有 API 路由
|
|
||||||
// 在此方法中,使用已初始化的控制器实例将其路由注册到 Gin 引擎中。
|
|
||||||
func (a *API) setupRoutes() {
|
|
||||||
|
|
||||||
// --- Public Routes ---
|
|
||||||
// 这些路由不需要身份验证
|
|
||||||
|
|
||||||
// 用户注册和登录
|
|
||||||
a.engine.POST("/api/v1/users", a.userController.CreateUser) // 注册新用户
|
|
||||||
a.engine.POST("/api/v1/users/login", a.userController.Login) // 用户登录
|
|
||||||
a.logger.Info("公开接口注册成功:用户注册、登录")
|
|
||||||
|
|
||||||
// 注册 pprof 路由
|
|
||||||
pprofGroup := a.engine.Group("/debug/pprof")
|
|
||||||
{
|
|
||||||
pprofGroup.GET("/", gin.WrapF(pprof.Index)) // pprof 索引页
|
|
||||||
pprofGroup.GET("/cmdline", gin.WrapF(pprof.Cmdline)) // pprof 命令行参数
|
|
||||||
pprofGroup.GET("/profile", gin.WrapF(pprof.Profile)) // pprof CPU profile
|
|
||||||
pprofGroup.POST("/symbol", gin.WrapF(pprof.Symbol)) // pprof 符号查找 (POST)
|
|
||||||
pprofGroup.GET("/symbol", gin.WrapF(pprof.Symbol)) // pprof 符号查找 (GET)
|
|
||||||
pprofGroup.GET("/trace", gin.WrapF(pprof.Trace)) // pprof 跟踪
|
|
||||||
pprofGroup.GET("/allocs", gin.WrapH(pprof.Handler("allocs"))) // pprof 内存分配
|
|
||||||
pprofGroup.GET("/block", gin.WrapH(pprof.Handler("block"))) // pprof 阻塞
|
|
||||||
pprofGroup.GET("/goroutine", gin.WrapH(pprof.Handler("goroutine")))
|
|
||||||
pprofGroup.GET("/heap", gin.WrapH(pprof.Handler("heap"))) // pprof 堆内存
|
|
||||||
pprofGroup.GET("/mutex", gin.WrapH(pprof.Handler("mutex"))) // pprof 互斥锁
|
|
||||||
pprofGroup.GET("/threadcreate", gin.WrapH(pprof.Handler("threadcreate")))
|
|
||||||
}
|
|
||||||
a.logger.Info("pprof 接口注册成功")
|
|
||||||
|
|
||||||
// 上行事件监听路由
|
|
||||||
a.engine.POST("/upstream", gin.WrapH(a.listenHandler.Handler())) // 处理设备上行事件
|
|
||||||
a.logger.Info("上行事件监听接口注册成功")
|
|
||||||
|
|
||||||
// 添加 Swagger UI 路由, Swagger UI可在 /swagger/index.html 上找到
|
|
||||||
a.engine.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) // Swagger UI 接口
|
|
||||||
a.logger.Info("Swagger UI 接口注册成功")
|
|
||||||
|
|
||||||
// --- Authenticated Routes ---
|
|
||||||
// 所有在此注册的路由都需要通过 JWT 身份验证
|
|
||||||
authGroup := a.engine.Group("/api/v1")
|
|
||||||
authGroup.Use(middleware.AuthMiddleware(a.tokenService, a.userRepo)) // 1. 身份认证中间件
|
|
||||||
authGroup.Use(middleware.AuditLogMiddleware(a.auditService)) // 2. 审计日志中间件
|
|
||||||
{
|
|
||||||
// 用户相关路由组
|
|
||||||
userGroup := authGroup.Group("/users")
|
|
||||||
{
|
|
||||||
userGroup.GET("/:id/history", a.userController.ListUserHistory) // 获取用户操作历史
|
|
||||||
}
|
|
||||||
a.logger.Info("用户相关接口注册成功 (需要认证和审计)")
|
|
||||||
|
|
||||||
// 设备相关路由组
|
|
||||||
deviceGroup := authGroup.Group("/devices")
|
|
||||||
{
|
|
||||||
deviceGroup.POST("", a.deviceController.CreateDevice) // 创建设备
|
|
||||||
deviceGroup.GET("", a.deviceController.ListDevices) // 获取设备列表
|
|
||||||
deviceGroup.GET("/:id", a.deviceController.GetDevice) // 获取单个设备
|
|
||||||
deviceGroup.PUT("/:id", a.deviceController.UpdateDevice) // 更新设备
|
|
||||||
deviceGroup.DELETE("/:id", a.deviceController.DeleteDevice) // 删除设备
|
|
||||||
deviceGroup.POST("/manual-control/:id", a.deviceController.ManualControl) // 手动控制设备
|
|
||||||
}
|
|
||||||
a.logger.Info("设备相关接口注册成功 (需要认证和审计)")
|
|
||||||
|
|
||||||
// 区域主控相关路由组
|
|
||||||
areaControllerGroup := authGroup.Group("/area-controllers")
|
|
||||||
{
|
|
||||||
areaControllerGroup.POST("", a.deviceController.CreateAreaController) // 创建区域主控
|
|
||||||
areaControllerGroup.GET("", a.deviceController.ListAreaControllers) // 获取区域主控列表
|
|
||||||
areaControllerGroup.GET("/:id", a.deviceController.GetAreaController) // 获取单个区域主控
|
|
||||||
areaControllerGroup.PUT("/:id", a.deviceController.UpdateAreaController) // 更新区域主控
|
|
||||||
areaControllerGroup.DELETE("/:id", a.deviceController.DeleteAreaController) // 删除区域主控
|
|
||||||
}
|
|
||||||
a.logger.Info("区域主控相关接口注册成功 (需要认证和审计)")
|
|
||||||
|
|
||||||
// 设备模板相关路由组
|
|
||||||
deviceTemplateGroup := authGroup.Group("/device-templates")
|
|
||||||
{
|
|
||||||
deviceTemplateGroup.POST("", a.deviceController.CreateDeviceTemplate) // 创建设备模板
|
|
||||||
deviceTemplateGroup.GET("", a.deviceController.ListDeviceTemplates) // 获取设备模板列表
|
|
||||||
deviceTemplateGroup.GET("/:id", a.deviceController.GetDeviceTemplate) // 获取单个设备模板
|
|
||||||
deviceTemplateGroup.PUT("/:id", a.deviceController.UpdateDeviceTemplate) // 更新设备模板
|
|
||||||
deviceTemplateGroup.DELETE("/:id", a.deviceController.DeleteDeviceTemplate) // 删除设备模板
|
|
||||||
}
|
|
||||||
a.logger.Info("设备模板相关接口注册成功 (需要认证和审计)")
|
|
||||||
|
|
||||||
// 计划相关路由组
|
|
||||||
planGroup := authGroup.Group("/plans")
|
|
||||||
{
|
|
||||||
planGroup.POST("", a.planController.CreatePlan) // 创建计划
|
|
||||||
planGroup.GET("", a.planController.ListPlans) // 获取计划列表
|
|
||||||
planGroup.GET("/:id", a.planController.GetPlan) // 获取单个计划
|
|
||||||
planGroup.PUT("/:id", a.planController.UpdatePlan) // 更新计划
|
|
||||||
planGroup.DELETE("/:id", a.planController.DeletePlan) // 删除计划
|
|
||||||
planGroup.POST("/:id/start", a.planController.StartPlan) // 启动计划
|
|
||||||
planGroup.POST("/:id/stop", a.planController.StopPlan) // 停止计划
|
|
||||||
}
|
|
||||||
a.logger.Info("计划相关接口注册成功 (需要认证和审计)")
|
|
||||||
|
|
||||||
// 猪舍相关路由组
|
|
||||||
pigHouseGroup := authGroup.Group("/pig-houses")
|
|
||||||
{
|
|
||||||
pigHouseGroup.POST("", a.pigFarmController.CreatePigHouse) // 创建猪舍
|
|
||||||
pigHouseGroup.GET("", a.pigFarmController.ListPigHouses) // 获取猪舍列表
|
|
||||||
pigHouseGroup.GET("/:id", a.pigFarmController.GetPigHouse) // 获取单个猪舍
|
|
||||||
pigHouseGroup.PUT("/:id", a.pigFarmController.UpdatePigHouse) // 更新猪舍
|
|
||||||
pigHouseGroup.DELETE("/:id", a.pigFarmController.DeletePigHouse) // 删除猪舍
|
|
||||||
}
|
|
||||||
a.logger.Info("猪舍相关接口注册成功 (需要认证和审计)")
|
|
||||||
|
|
||||||
// 猪圈相关路由组
|
|
||||||
penGroup := authGroup.Group("/pens")
|
|
||||||
{
|
|
||||||
penGroup.POST("", a.pigFarmController.CreatePen) // 创建猪圈
|
|
||||||
penGroup.GET("", a.pigFarmController.ListPens) // 获取猪圈列表
|
|
||||||
penGroup.GET("/:id", a.pigFarmController.GetPen) // 获取单个猪圈
|
|
||||||
penGroup.PUT("/:id", a.pigFarmController.UpdatePen) // 更新猪圈
|
|
||||||
penGroup.DELETE("/:id", a.pigFarmController.DeletePen) // 删除猪圈
|
|
||||||
penGroup.PUT("/:id/status", a.pigFarmController.UpdatePenStatus) // 更新猪圈状态
|
|
||||||
}
|
|
||||||
a.logger.Info("猪圈相关接口注册成功 (需要认证和审计)")
|
|
||||||
|
|
||||||
// 猪群相关路由组
|
|
||||||
pigBatchGroup := authGroup.Group("/pig-batches")
|
|
||||||
{
|
|
||||||
pigBatchGroup.POST("", a.pigBatchController.CreatePigBatch) // 创建猪群
|
|
||||||
pigBatchGroup.GET("", a.pigBatchController.ListPigBatches) // 获取猪群列表
|
|
||||||
pigBatchGroup.GET("/:id", a.pigBatchController.GetPigBatch) // 获取单个猪群
|
|
||||||
pigBatchGroup.PUT("/:id", a.pigBatchController.UpdatePigBatch) // 更新猪群
|
|
||||||
pigBatchGroup.DELETE("/:id", a.pigBatchController.DeletePigBatch) // 删除猪群
|
|
||||||
pigBatchGroup.POST("/assign-pens/:id", a.pigBatchController.AssignEmptyPensToBatch) // 为猪群分配空栏
|
|
||||||
pigBatchGroup.POST("/reclassify-pen/:fromBatchID", a.pigBatchController.ReclassifyPenToNewBatch) // 将猪栏划拨到新群
|
|
||||||
penGroup.DELETE("/remove-pen/:penID/:batchID", a.pigBatchController.RemoveEmptyPenFromBatch) // 从猪群移除空栏
|
|
||||||
pigBatchGroup.POST("/move-pigs-into-pen/:id", a.pigBatchController.MovePigsIntoPen) // 将猪只从“虚拟库存”移入指定猪栏
|
|
||||||
pigBatchGroup.POST("/sell-pigs/:id", a.pigBatchController.SellPigs) // 处理卖猪业务
|
|
||||||
pigBatchGroup.POST("/buy-pigs/:id", a.pigBatchController.BuyPigs) // 处理买猪业务
|
|
||||||
pigBatchGroup.POST("/transfer-across-batches/:sourceBatchID", a.pigBatchController.TransferPigsAcrossBatches) // 跨猪群调栏
|
|
||||||
pigBatchGroup.POST("/transfer-within-batch/:id", a.pigBatchController.TransferPigsWithinBatch) // 群内调栏
|
|
||||||
pigBatchGroup.POST("/record-sick-pigs/:id", a.pigBatchController.RecordSickPigs) // 记录新增病猪事件
|
|
||||||
pigBatchGroup.POST("/record-sick-pig-recovery/:id", a.pigBatchController.RecordSickPigRecovery) // 记录病猪康复事件
|
|
||||||
pigBatchGroup.POST("/record-sick-pig-death/:id", a.pigBatchController.RecordSickPigDeath) // 记录病猪死亡事件
|
|
||||||
pigBatchGroup.POST("/record-sick-pig-cull/:id", a.pigBatchController.RecordSickPigCull) // 记录病猪淘汰事件
|
|
||||||
pigBatchGroup.POST("/record-death/:id", a.pigBatchController.RecordDeath) // 记录正常猪只死亡事件
|
|
||||||
pigBatchGroup.POST("/record-cull/:id", a.pigBatchController.RecordCull) // 记录正常猪只淘汰事件
|
|
||||||
}
|
|
||||||
a.logger.Info("猪群相关接口注册成功 (需要认证和审计)")
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Start 启动 HTTP 服务器
|
// Start 启动 HTTP 服务器
|
||||||
// 接收一个地址字符串 (例如 ":8080"),并在一个新的 goroutine 中启动服务器,
|
// 接收一个地址字符串 (例如 ":8080"),并在一个新的 goroutine 中启动服务器,
|
||||||
// 以便主线程可以继续执行其他任务(例如监听操作系统信号)。
|
// 以便主线程可以继续执行其他任务(例如监听操作系统信号)。
|
||||||
|
|||||||
181
internal/app/api/router.go
Normal file
181
internal/app/api/router.go
Normal file
@@ -0,0 +1,181 @@
|
|||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http/pprof"
|
||||||
|
|
||||||
|
"git.huangwc.com/pig/pig-farm-controller/internal/app/middleware"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
swaggerFiles "github.com/swaggo/files"
|
||||||
|
ginSwagger "github.com/swaggo/gin-swagger"
|
||||||
|
)
|
||||||
|
|
||||||
|
// setupRoutes 设置所有 API 路由
|
||||||
|
// 在此方法中,使用已初始化的控制器实例将其路由注册到 Gin 引擎中。
|
||||||
|
func (a *API) setupRoutes() {
|
||||||
|
|
||||||
|
// --- Public Routes ---
|
||||||
|
// 这些路由不需要身份验证
|
||||||
|
|
||||||
|
// 用户注册和登录
|
||||||
|
a.engine.POST("/api/v1/users", a.userController.CreateUser) // 注册新用户
|
||||||
|
a.engine.POST("/api/v1/users/login", a.userController.Login) // 用户登录
|
||||||
|
a.logger.Info("公开接口注册成功:用户注册、登录")
|
||||||
|
|
||||||
|
// 注册 pprof 路由
|
||||||
|
pprofGroup := a.engine.Group("/debug/pprof")
|
||||||
|
{
|
||||||
|
pprofGroup.GET("/", gin.WrapF(pprof.Index)) // pprof 索引页
|
||||||
|
pprofGroup.GET("/cmdline", gin.WrapF(pprof.Cmdline)) // pprof 命令行参数
|
||||||
|
pprofGroup.GET("/profile", gin.WrapF(pprof.Profile)) // pprof CPU profile
|
||||||
|
pprofGroup.POST("/symbol", gin.WrapF(pprof.Symbol)) // pprof 符号查找 (POST)
|
||||||
|
pprofGroup.GET("/symbol", gin.WrapF(pprof.Symbol)) // pprof 符号查找 (GET)
|
||||||
|
pprofGroup.GET("/trace", gin.WrapF(pprof.Trace)) // pprof 跟踪
|
||||||
|
pprofGroup.GET("/allocs", gin.WrapH(pprof.Handler("allocs"))) // pprof 内存分配
|
||||||
|
pprofGroup.GET("/block", gin.WrapH(pprof.Handler("block"))) // pprof 阻塞
|
||||||
|
pprofGroup.GET("/goroutine", gin.WrapH(pprof.Handler("goroutine")))
|
||||||
|
pprofGroup.GET("/heap", gin.WrapH(pprof.Handler("heap"))) // pprof 堆内存
|
||||||
|
pprofGroup.GET("/mutex", gin.WrapH(pprof.Handler("mutex"))) // pprof 互斥锁
|
||||||
|
pprofGroup.GET("/threadcreate", gin.WrapH(pprof.Handler("threadcreate")))
|
||||||
|
}
|
||||||
|
a.logger.Info("pprof 接口注册成功")
|
||||||
|
|
||||||
|
// 上行事件监听路由
|
||||||
|
a.engine.POST("/upstream", gin.WrapH(a.listenHandler.Handler())) // 处理设备上行事件
|
||||||
|
a.logger.Info("上行事件监听接口注册成功")
|
||||||
|
|
||||||
|
// 添加 Swagger UI 路由, Swagger UI可在 /swagger/index.html 上找到
|
||||||
|
a.engine.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) // Swagger UI 接口
|
||||||
|
a.logger.Info("Swagger UI 接口注册成功")
|
||||||
|
|
||||||
|
// --- Authenticated Routes ---
|
||||||
|
// 所有在此注册的路由都需要通过 JWT 身份验证
|
||||||
|
authGroup := a.engine.Group("/api/v1")
|
||||||
|
authGroup.Use(middleware.AuthMiddleware(a.tokenService, a.userRepo)) // 1. 身份认证中间件
|
||||||
|
authGroup.Use(middleware.AuditLogMiddleware(a.auditService)) // 2. 审计日志中间件
|
||||||
|
{
|
||||||
|
// 用户相关路由组
|
||||||
|
userGroup := authGroup.Group("/users")
|
||||||
|
{
|
||||||
|
userGroup.GET("/:id/history", a.userController.ListUserHistory) // 获取用户操作历史
|
||||||
|
}
|
||||||
|
a.logger.Info("用户相关接口注册成功 (需要认证和审计)")
|
||||||
|
|
||||||
|
// 设备相关路由组
|
||||||
|
deviceGroup := authGroup.Group("/devices")
|
||||||
|
{
|
||||||
|
deviceGroup.POST("", a.deviceController.CreateDevice) // 创建设备
|
||||||
|
deviceGroup.GET("", a.deviceController.ListDevices) // 获取设备列表
|
||||||
|
deviceGroup.GET("/:id", a.deviceController.GetDevice) // 获取单个设备
|
||||||
|
deviceGroup.PUT("/:id", a.deviceController.UpdateDevice) // 更新设备
|
||||||
|
deviceGroup.DELETE("/:id", a.deviceController.DeleteDevice) // 删除设备
|
||||||
|
deviceGroup.POST("/manual-control/:id", a.deviceController.ManualControl) // 手动控制设备
|
||||||
|
}
|
||||||
|
a.logger.Info("设备相关接口注册成功 (需要认证和审计)")
|
||||||
|
|
||||||
|
// 区域主控相关路由组
|
||||||
|
areaControllerGroup := authGroup.Group("/area-controllers")
|
||||||
|
{
|
||||||
|
areaControllerGroup.POST("", a.deviceController.CreateAreaController) // 创建区域主控
|
||||||
|
areaControllerGroup.GET("", a.deviceController.ListAreaControllers) // 获取区域主控列表
|
||||||
|
areaControllerGroup.GET("/:id", a.deviceController.GetAreaController) // 获取单个区域主控
|
||||||
|
areaControllerGroup.PUT("/:id", a.deviceController.UpdateAreaController) // 更新区域主控
|
||||||
|
areaControllerGroup.DELETE("/:id", a.deviceController.DeleteAreaController) // 删除区域主控
|
||||||
|
}
|
||||||
|
a.logger.Info("区域主控相关接口注册成功 (需要认证和审计)")
|
||||||
|
|
||||||
|
// 设备模板相关路由组
|
||||||
|
deviceTemplateGroup := authGroup.Group("/device-templates")
|
||||||
|
{
|
||||||
|
deviceTemplateGroup.POST("", a.deviceController.CreateDeviceTemplate) // 创建设备模板
|
||||||
|
deviceTemplateGroup.GET("", a.deviceController.ListDeviceTemplates) // 获取设备模板列表
|
||||||
|
deviceTemplateGroup.GET("/:id", a.deviceController.GetDeviceTemplate) // 获取单个设备模板
|
||||||
|
deviceTemplateGroup.PUT("/:id", a.deviceController.UpdateDeviceTemplate) // 更新设备模板
|
||||||
|
deviceTemplateGroup.DELETE("/:id", a.deviceController.DeleteDeviceTemplate) // 删除设备模板
|
||||||
|
}
|
||||||
|
a.logger.Info("设备模板相关接口注册成功 (需要认证和审计)")
|
||||||
|
|
||||||
|
// 计划相关路由组
|
||||||
|
planGroup := authGroup.Group("/plans")
|
||||||
|
{
|
||||||
|
planGroup.POST("", a.planController.CreatePlan) // 创建计划
|
||||||
|
planGroup.GET("", a.planController.ListPlans) // 获取计划列表
|
||||||
|
planGroup.GET("/:id", a.planController.GetPlan) // 获取单个计划
|
||||||
|
planGroup.PUT("/:id", a.planController.UpdatePlan) // 更新计划
|
||||||
|
planGroup.DELETE("/:id", a.planController.DeletePlan) // 删除计划
|
||||||
|
planGroup.POST("/:id/start", a.planController.StartPlan) // 启动计划
|
||||||
|
planGroup.POST("/:id/stop", a.planController.StopPlan) // 停止计划
|
||||||
|
}
|
||||||
|
a.logger.Info("计划相关接口注册成功 (需要认证和审计)")
|
||||||
|
|
||||||
|
// 猪舍相关路由组
|
||||||
|
pigHouseGroup := authGroup.Group("/pig-houses")
|
||||||
|
{
|
||||||
|
pigHouseGroup.POST("", a.pigFarmController.CreatePigHouse) // 创建猪舍
|
||||||
|
pigHouseGroup.GET("", a.pigFarmController.ListPigHouses) // 获取猪舍列表
|
||||||
|
pigHouseGroup.GET("/:id", a.pigFarmController.GetPigHouse) // 获取单个猪舍
|
||||||
|
pigHouseGroup.PUT("/:id", a.pigFarmController.UpdatePigHouse) // 更新猪舍
|
||||||
|
pigHouseGroup.DELETE("/:id", a.pigFarmController.DeletePigHouse) // 删除猪舍
|
||||||
|
}
|
||||||
|
a.logger.Info("猪舍相关接口注册成功 (需要认证和审计)")
|
||||||
|
|
||||||
|
// 猪圈相关路由组
|
||||||
|
penGroup := authGroup.Group("/pens")
|
||||||
|
{
|
||||||
|
penGroup.POST("", a.pigFarmController.CreatePen) // 创建猪圈
|
||||||
|
penGroup.GET("", a.pigFarmController.ListPens) // 获取猪圈列表
|
||||||
|
penGroup.GET("/:id", a.pigFarmController.GetPen) // 获取单个猪圈
|
||||||
|
penGroup.PUT("/:id", a.pigFarmController.UpdatePen) // 更新猪圈
|
||||||
|
penGroup.DELETE("/:id", a.pigFarmController.DeletePen) // 删除猪圈
|
||||||
|
penGroup.PUT("/:id/status", a.pigFarmController.UpdatePenStatus) // 更新猪圈状态
|
||||||
|
}
|
||||||
|
a.logger.Info("猪圈相关接口注册成功 (需要认证和审计)")
|
||||||
|
|
||||||
|
// 猪群相关路由组
|
||||||
|
pigBatchGroup := authGroup.Group("/pig-batches")
|
||||||
|
{
|
||||||
|
pigBatchGroup.POST("", a.pigBatchController.CreatePigBatch) // 创建猪群
|
||||||
|
pigBatchGroup.GET("", a.pigBatchController.ListPigBatches) // 获取猪群列表
|
||||||
|
pigBatchGroup.GET("/:id", a.pigBatchController.GetPigBatch) // 获取单个猪群
|
||||||
|
pigBatchGroup.PUT("/:id", a.pigBatchController.UpdatePigBatch) // 更新猪群
|
||||||
|
pigBatchGroup.DELETE("/:id", a.pigBatchController.DeletePigBatch) // 删除猪群
|
||||||
|
pigBatchGroup.POST("/assign-pens/:id", a.pigBatchController.AssignEmptyPensToBatch) // 为猪群分配空栏
|
||||||
|
pigBatchGroup.POST("/reclassify-pen/:fromBatchID", a.pigBatchController.ReclassifyPenToNewBatch) // 将猪栏划拨到新群
|
||||||
|
penGroup.DELETE("/remove-pen/:penID/:batchID", a.pigBatchController.RemoveEmptyPenFromBatch) // 从猪群移除空栏
|
||||||
|
pigBatchGroup.POST("/move-pigs-into-pen/:id", a.pigBatchController.MovePigsIntoPen) // 将猪只从“虚拟库存”移入指定猪栏
|
||||||
|
pigBatchGroup.POST("/sell-pigs/:id", a.pigBatchController.SellPigs) // 处理卖猪业务
|
||||||
|
pigBatchGroup.POST("/buy-pigs/:id", a.pigBatchController.BuyPigs) // 处理买猪业务
|
||||||
|
pigBatchGroup.POST("/transfer-across-batches/:sourceBatchID", a.pigBatchController.TransferPigsAcrossBatches) // 跨猪群调栏
|
||||||
|
pigBatchGroup.POST("/transfer-within-batch/:id", a.pigBatchController.TransferPigsWithinBatch) // 群内调栏
|
||||||
|
pigBatchGroup.POST("/record-sick-pigs/:id", a.pigBatchController.RecordSickPigs) // 记录新增病猪事件
|
||||||
|
pigBatchGroup.POST("/record-sick-pig-recovery/:id", a.pigBatchController.RecordSickPigRecovery) // 记录病猪康复事件
|
||||||
|
pigBatchGroup.POST("/record-sick-pig-death/:id", a.pigBatchController.RecordSickPigDeath) // 记录病猪死亡事件
|
||||||
|
pigBatchGroup.POST("/record-sick-pig-cull/:id", a.pigBatchController.RecordSickPigCull) // 记录病猪淘汰事件
|
||||||
|
pigBatchGroup.POST("/record-death/:id", a.pigBatchController.RecordDeath) // 记录正常猪只死亡事件
|
||||||
|
pigBatchGroup.POST("/record-cull/:id", a.pigBatchController.RecordCull) // 记录正常猪只淘汰事件
|
||||||
|
}
|
||||||
|
a.logger.Info("猪群相关接口注册成功 (需要认证和审计)")
|
||||||
|
|
||||||
|
// 数据监控相关路由组
|
||||||
|
monitorGroup := authGroup.Group("/monitor")
|
||||||
|
{
|
||||||
|
monitorGroup.GET("/sensor-data", a.monitorController.ListSensorData)
|
||||||
|
monitorGroup.GET("/device-command-logs", a.monitorController.ListDeviceCommandLogs)
|
||||||
|
monitorGroup.GET("/plan-execution-logs", a.monitorController.ListPlanExecutionLogs)
|
||||||
|
monitorGroup.GET("/task-execution-logs", a.monitorController.ListTaskExecutionLogs)
|
||||||
|
monitorGroup.GET("/pending-collections", a.monitorController.ListPendingCollections)
|
||||||
|
monitorGroup.GET("/user-action-logs", a.monitorController.ListUserActionLogs)
|
||||||
|
monitorGroup.GET("/raw-material-purchases", a.monitorController.ListRawMaterialPurchases)
|
||||||
|
monitorGroup.GET("/raw-material-stock-logs", a.monitorController.ListRawMaterialStockLogs)
|
||||||
|
monitorGroup.GET("/feed-usage-records", a.monitorController.ListFeedUsageRecords)
|
||||||
|
monitorGroup.GET("/medication-logs", a.monitorController.ListMedicationLogs)
|
||||||
|
monitorGroup.GET("/pig-batch-logs", a.monitorController.ListPigBatchLogs)
|
||||||
|
monitorGroup.GET("/weighing-batches", a.monitorController.ListWeighingBatches)
|
||||||
|
monitorGroup.GET("/weighing-records", a.monitorController.ListWeighingRecords)
|
||||||
|
monitorGroup.GET("/pig-transfer-logs", a.monitorController.ListPigTransferLogs)
|
||||||
|
monitorGroup.GET("/pig-sick-logs", a.monitorController.ListPigSickLogs)
|
||||||
|
monitorGroup.GET("/pig-purchases", a.monitorController.ListPigPurchases)
|
||||||
|
monitorGroup.GET("/pig-sales", a.monitorController.ListPigSales)
|
||||||
|
}
|
||||||
|
a.logger.Info("数据监控相关接口注册成功 (需要认证和审计)")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -14,12 +14,12 @@ import (
|
|||||||
|
|
||||||
// Controller 监控控制器,封装了所有与数据监控相关的业务逻辑
|
// Controller 监控控制器,封装了所有与数据监控相关的业务逻辑
|
||||||
type Controller struct {
|
type Controller struct {
|
||||||
monitorService *service.MonitorService
|
monitorService service.MonitorService
|
||||||
logger *logs.Logger
|
logger *logs.Logger
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewController 创建一个新的监控控制器实例
|
// NewController 创建一个新的监控控制器实例
|
||||||
func NewController(monitorService *service.MonitorService, logger *logs.Logger) *Controller {
|
func NewController(monitorService service.MonitorService, logger *logs.Logger) *Controller {
|
||||||
return &Controller{
|
return &Controller{
|
||||||
monitorService: monitorService,
|
monitorService: monitorService,
|
||||||
logger: logger,
|
logger: logger,
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ func AuthMiddleware(tokenService token.TokenService, userRepo repository.UserRep
|
|||||||
|
|
||||||
// 授权标头的格式应为 "Bearer <token>"
|
// 授权标头的格式应为 "Bearer <token>"
|
||||||
parts := strings.Split(authHeader, " ")
|
parts := strings.Split(authHeader, " ")
|
||||||
if len(parts) != 2 || parts[0] != "Bearer" {
|
if len(parts) != 2 || strings.ToLower(parts[0]) != "bearer" {
|
||||||
c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "授权标头格式不正确"})
|
c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "授权标头格式不正确"})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,8 +5,29 @@ import (
|
|||||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/repository"
|
"git.huangwc.com/pig/pig-farm-controller/internal/infra/repository"
|
||||||
)
|
)
|
||||||
|
|
||||||
// MonitorService 定义了监控相关的业务逻辑服务
|
// MonitorService 定义了监控相关的业务逻辑服务接口
|
||||||
type MonitorService struct {
|
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)
|
||||||
|
ListPlanExecutionLogs(opts repository.PlanExecutionLogListOptions, page, pageSize int) ([]models.PlanExecutionLog, int64, error)
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
|
||||||
|
// monitorService 是 MonitorService 接口的具体实现
|
||||||
|
type monitorService struct {
|
||||||
sensorDataRepo repository.SensorDataRepository
|
sensorDataRepo repository.SensorDataRepository
|
||||||
deviceCommandLogRepo repository.DeviceCommandLogRepository
|
deviceCommandLogRepo repository.DeviceCommandLogRepository
|
||||||
executionLogRepo repository.ExecutionLogRepository
|
executionLogRepo repository.ExecutionLogRepository
|
||||||
@@ -35,8 +56,8 @@ func NewMonitorService(
|
|||||||
pigTransferLogRepo repository.PigTransferLogRepository,
|
pigTransferLogRepo repository.PigTransferLogRepository,
|
||||||
pigSickLogRepo repository.PigSickLogRepository,
|
pigSickLogRepo repository.PigSickLogRepository,
|
||||||
pigTradeRepo repository.PigTradeRepository,
|
pigTradeRepo repository.PigTradeRepository,
|
||||||
) *MonitorService {
|
) MonitorService {
|
||||||
return &MonitorService{
|
return &monitorService{
|
||||||
sensorDataRepo: sensorDataRepo,
|
sensorDataRepo: sensorDataRepo,
|
||||||
deviceCommandLogRepo: deviceCommandLogRepo,
|
deviceCommandLogRepo: deviceCommandLogRepo,
|
||||||
executionLogRepo: executionLogRepo,
|
executionLogRepo: executionLogRepo,
|
||||||
@@ -53,86 +74,86 @@ func NewMonitorService(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ListSensorData 负责处理查询传感器数据列表的业务逻辑
|
// ListSensorData 负责处理查询传感器数据列表的业务逻辑
|
||||||
func (s *MonitorService) ListSensorData(opts repository.SensorDataListOptions, page, pageSize int) ([]models.SensorData, int64, error) {
|
func (s *monitorService) ListSensorData(opts repository.SensorDataListOptions, page, pageSize int) ([]models.SensorData, int64, error) {
|
||||||
return s.sensorDataRepo.List(opts, page, pageSize)
|
return s.sensorDataRepo.List(opts, page, pageSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListDeviceCommandLogs 负责处理查询设备命令日志列表的业务逻辑
|
// ListDeviceCommandLogs 负责处理查询设备命令日志列表的业务逻辑
|
||||||
func (s *MonitorService) ListDeviceCommandLogs(opts repository.DeviceCommandLogListOptions, page, pageSize int) ([]models.DeviceCommandLog, int64, error) {
|
func (s *monitorService) ListDeviceCommandLogs(opts repository.DeviceCommandLogListOptions, page, pageSize int) ([]models.DeviceCommandLog, int64, error) {
|
||||||
return s.deviceCommandLogRepo.List(opts, page, pageSize)
|
return s.deviceCommandLogRepo.List(opts, page, pageSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListPlanExecutionLogs 负责处理查询计划执行日志列表的业务逻辑
|
// ListPlanExecutionLogs 负责处理查询计划执行日志列表的业务逻辑
|
||||||
func (s *MonitorService) ListPlanExecutionLogs(opts repository.PlanExecutionLogListOptions, page, pageSize int) ([]models.PlanExecutionLog, int64, error) {
|
func (s *monitorService) ListPlanExecutionLogs(opts repository.PlanExecutionLogListOptions, page, pageSize int) ([]models.PlanExecutionLog, int64, error) {
|
||||||
return s.executionLogRepo.ListPlanExecutionLogs(opts, page, pageSize)
|
return s.executionLogRepo.ListPlanExecutionLogs(opts, page, pageSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListTaskExecutionLogs 负责处理查询任务执行日志列表的业务逻辑
|
// ListTaskExecutionLogs 负责处理查询任务执行日志列表的业务逻辑
|
||||||
func (s *MonitorService) ListTaskExecutionLogs(opts repository.TaskExecutionLogListOptions, page, pageSize int) ([]models.TaskExecutionLog, int64, error) {
|
func (s *monitorService) ListTaskExecutionLogs(opts repository.TaskExecutionLogListOptions, page, pageSize int) ([]models.TaskExecutionLog, int64, error) {
|
||||||
return s.executionLogRepo.ListTaskExecutionLogs(opts, page, pageSize)
|
return s.executionLogRepo.ListTaskExecutionLogs(opts, page, pageSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListPendingCollections 负责处理查询待采集请求列表的业务逻辑
|
// ListPendingCollections 负责处理查询待采集请求列表的业务逻辑
|
||||||
func (s *MonitorService) ListPendingCollections(opts repository.PendingCollectionListOptions, page, pageSize int) ([]models.PendingCollection, int64, error) {
|
func (s *monitorService) ListPendingCollections(opts repository.PendingCollectionListOptions, page, pageSize int) ([]models.PendingCollection, int64, error) {
|
||||||
return s.pendingCollectionRepo.List(opts, page, pageSize)
|
return s.pendingCollectionRepo.List(opts, page, pageSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListUserActionLogs 负责处理查询用户操作日志列表的业务逻辑
|
// ListUserActionLogs 负责处理查询用户操作日志列表的业务逻辑
|
||||||
func (s *MonitorService) ListUserActionLogs(opts repository.UserActionLogListOptions, page, pageSize int) ([]models.UserActionLog, int64, error) {
|
func (s *monitorService) ListUserActionLogs(opts repository.UserActionLogListOptions, page, pageSize int) ([]models.UserActionLog, int64, error) {
|
||||||
return s.userActionLogRepo.List(opts, page, pageSize)
|
return s.userActionLogRepo.List(opts, page, pageSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListRawMaterialPurchases 负责处理查询原料采购记录列表的业务逻辑
|
// ListRawMaterialPurchases 负责处理查询原料采购记录列表的业务逻辑
|
||||||
func (s *MonitorService) ListRawMaterialPurchases(opts repository.RawMaterialPurchaseListOptions, page, pageSize int) ([]models.RawMaterialPurchase, int64, error) {
|
func (s *monitorService) ListRawMaterialPurchases(opts repository.RawMaterialPurchaseListOptions, page, pageSize int) ([]models.RawMaterialPurchase, int64, error) {
|
||||||
return s.rawMaterialRepo.ListRawMaterialPurchases(opts, page, pageSize)
|
return s.rawMaterialRepo.ListRawMaterialPurchases(opts, page, pageSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListRawMaterialStockLogs 负责处理查询原料库存日志列表的业务逻辑
|
// ListRawMaterialStockLogs 负责处理查询原料库存日志列表的业务逻辑
|
||||||
func (s *MonitorService) ListRawMaterialStockLogs(opts repository.RawMaterialStockLogListOptions, page, pageSize int) ([]models.RawMaterialStockLog, int64, error) {
|
func (s *monitorService) ListRawMaterialStockLogs(opts repository.RawMaterialStockLogListOptions, page, pageSize int) ([]models.RawMaterialStockLog, int64, error) {
|
||||||
return s.rawMaterialRepo.ListRawMaterialStockLogs(opts, page, pageSize)
|
return s.rawMaterialRepo.ListRawMaterialStockLogs(opts, page, pageSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListFeedUsageRecords 负责处理查询饲料使用记录列表的业务逻辑
|
// ListFeedUsageRecords 负责处理查询饲料使用记录列表的业务逻辑
|
||||||
func (s *MonitorService) ListFeedUsageRecords(opts repository.FeedUsageRecordListOptions, page, pageSize int) ([]models.FeedUsageRecord, int64, error) {
|
func (s *monitorService) ListFeedUsageRecords(opts repository.FeedUsageRecordListOptions, page, pageSize int) ([]models.FeedUsageRecord, int64, error) {
|
||||||
return s.rawMaterialRepo.ListFeedUsageRecords(opts, page, pageSize)
|
return s.rawMaterialRepo.ListFeedUsageRecords(opts, page, pageSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListMedicationLogs 负责处理查询用药记录列表的业务逻辑
|
// ListMedicationLogs 负责处理查询用药记录列表的业务逻辑
|
||||||
func (s *MonitorService) ListMedicationLogs(opts repository.MedicationLogListOptions, page, pageSize int) ([]models.MedicationLog, int64, error) {
|
func (s *monitorService) ListMedicationLogs(opts repository.MedicationLogListOptions, page, pageSize int) ([]models.MedicationLog, int64, error) {
|
||||||
return s.medicationRepo.ListMedicationLogs(opts, page, pageSize)
|
return s.medicationRepo.ListMedicationLogs(opts, page, pageSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListPigBatchLogs 负责处理查询猪批次日志列表的业务逻辑
|
// ListPigBatchLogs 负责处理查询猪批次日志列表的业务逻辑
|
||||||
func (s *MonitorService) ListPigBatchLogs(opts repository.PigBatchLogListOptions, page, pageSize int) ([]models.PigBatchLog, int64, error) {
|
func (s *monitorService) ListPigBatchLogs(opts repository.PigBatchLogListOptions, page, pageSize int) ([]models.PigBatchLog, int64, error) {
|
||||||
return s.pigBatchLogRepo.List(opts, page, pageSize)
|
return s.pigBatchLogRepo.List(opts, page, pageSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListWeighingBatches 负责处理查询批次称重记录列表的业务逻辑
|
// ListWeighingBatches 负责处理查询批次称重记录列表的业务逻辑
|
||||||
func (s *MonitorService) ListWeighingBatches(opts repository.WeighingBatchListOptions, page, pageSize int) ([]models.WeighingBatch, int64, error) {
|
func (s *monitorService) ListWeighingBatches(opts repository.WeighingBatchListOptions, page, pageSize int) ([]models.WeighingBatch, int64, error) {
|
||||||
return s.pigBatchRepo.ListWeighingBatches(opts, page, pageSize)
|
return s.pigBatchRepo.ListWeighingBatches(opts, page, pageSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListWeighingRecords 负责处理查询单次称重记录列表的业务逻辑
|
// ListWeighingRecords 负责处理查询单次称重记录列表的业务逻辑
|
||||||
func (s *MonitorService) ListWeighingRecords(opts repository.WeighingRecordListOptions, page, pageSize int) ([]models.WeighingRecord, int64, error) {
|
func (s *monitorService) ListWeighingRecords(opts repository.WeighingRecordListOptions, page, pageSize int) ([]models.WeighingRecord, int64, error) {
|
||||||
return s.pigBatchRepo.ListWeighingRecords(opts, page, pageSize)
|
return s.pigBatchRepo.ListWeighingRecords(opts, page, pageSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListPigTransferLogs 负责处理查询猪只迁移日志列表的业务逻辑
|
// ListPigTransferLogs 负责处理查询猪只迁移日志列表的业务逻辑
|
||||||
func (s *MonitorService) ListPigTransferLogs(opts repository.PigTransferLogListOptions, page, pageSize int) ([]models.PigTransferLog, int64, error) {
|
func (s *monitorService) ListPigTransferLogs(opts repository.PigTransferLogListOptions, page, pageSize int) ([]models.PigTransferLog, int64, error) {
|
||||||
return s.pigTransferLogRepo.ListPigTransferLogs(opts, page, pageSize)
|
return s.pigTransferLogRepo.ListPigTransferLogs(opts, page, pageSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListPigSickLogs 负责处理查询病猪日志列表的业务逻辑
|
// ListPigSickLogs 负责处理查询病猪日志列表的业务逻辑
|
||||||
func (s *MonitorService) ListPigSickLogs(opts repository.PigSickLogListOptions, page, pageSize int) ([]models.PigSickLog, int64, error) {
|
func (s *monitorService) ListPigSickLogs(opts repository.PigSickLogListOptions, page, pageSize int) ([]models.PigSickLog, int64, error) {
|
||||||
return s.pigSickLogRepo.ListPigSickLogs(opts, page, pageSize)
|
return s.pigSickLogRepo.ListPigSickLogs(opts, page, pageSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListPigPurchases 负责处理查询猪只采购记录列表的业务逻辑
|
// ListPigPurchases 负责处理查询猪只采购记录列表的业务逻辑
|
||||||
func (s *MonitorService) ListPigPurchases(opts repository.PigPurchaseListOptions, page, pageSize int) ([]models.PigPurchase, int64, error) {
|
func (s *monitorService) ListPigPurchases(opts repository.PigPurchaseListOptions, page, pageSize int) ([]models.PigPurchase, int64, error) {
|
||||||
return s.pigTradeRepo.ListPigPurchases(opts, page, pageSize)
|
return s.pigTradeRepo.ListPigPurchases(opts, page, pageSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListPigSales 负责处理查询猪只销售记录列表的业务逻辑
|
// ListPigSales 负责处理查询猪只销售记录列表的业务逻辑
|
||||||
func (s *MonitorService) ListPigSales(opts repository.PigSaleListOptions, page, pageSize int) ([]models.PigSale, int64, error) {
|
func (s *monitorService) ListPigSales(opts repository.PigSaleListOptions, page, pageSize int) ([]models.PigSale, int64, error) {
|
||||||
return s.pigTradeRepo.ListPigSales(opts, page, pageSize)
|
return s.pigTradeRepo.ListPigSales(opts, page, pageSize)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,6 +84,7 @@ func NewApplication(configPath string) (*Application, error) {
|
|||||||
pigTradeRepo := repository.NewGormPigTradeRepository(storage.GetDB())
|
pigTradeRepo := repository.NewGormPigTradeRepository(storage.GetDB())
|
||||||
pigSickPigLogRepo := repository.NewGormPigSickLogRepository(storage.GetDB())
|
pigSickPigLogRepo := repository.NewGormPigSickLogRepository(storage.GetDB())
|
||||||
medicationLogRepo := repository.NewGormMedicationLogRepository(storage.GetDB())
|
medicationLogRepo := repository.NewGormMedicationLogRepository(storage.GetDB())
|
||||||
|
rawMaterialRepo := repository.NewGormRawMaterialRepository(storage.GetDB())
|
||||||
|
|
||||||
// 初始化事务管理器
|
// 初始化事务管理器
|
||||||
unitOfWork := repository.NewGormUnitOfWork(storage.GetDB(), logger)
|
unitOfWork := repository.NewGormUnitOfWork(storage.GetDB(), logger)
|
||||||
@@ -98,6 +99,20 @@ func NewApplication(configPath string) (*Application, error) {
|
|||||||
// --- 业务逻辑处理器初始化 ---
|
// --- 业务逻辑处理器初始化 ---
|
||||||
pigFarmService := service.NewPigFarmService(pigFarmRepo, pigPenRepo, pigBatchRepo, unitOfWork, logger)
|
pigFarmService := service.NewPigFarmService(pigFarmRepo, pigPenRepo, pigBatchRepo, unitOfWork, logger)
|
||||||
pigBatchService := service.NewPigBatchService(pigBatchDomain, logger)
|
pigBatchService := service.NewPigBatchService(pigBatchDomain, logger)
|
||||||
|
monitorService := service.NewMonitorService(
|
||||||
|
sensorDataRepo,
|
||||||
|
deviceCommandLogRepo,
|
||||||
|
executionLogRepo,
|
||||||
|
pendingCollectionRepo,
|
||||||
|
userActionLogRepo,
|
||||||
|
rawMaterialRepo,
|
||||||
|
medicationLogRepo,
|
||||||
|
pigBatchRepo,
|
||||||
|
pigBatchLogRepo,
|
||||||
|
pigTransferLogRepo,
|
||||||
|
pigSickPigLogRepo,
|
||||||
|
pigTradeRepo,
|
||||||
|
)
|
||||||
|
|
||||||
// 初始化审计服务
|
// 初始化审计服务
|
||||||
auditService := audit.NewService(userActionLogRepo, logger)
|
auditService := audit.NewService(userActionLogRepo, logger)
|
||||||
@@ -160,6 +175,7 @@ func NewApplication(configPath string) (*Application, error) {
|
|||||||
planRepo,
|
planRepo,
|
||||||
pigFarmService,
|
pigFarmService,
|
||||||
pigBatchService,
|
pigBatchService,
|
||||||
|
monitorService,
|
||||||
userActionLogRepo,
|
userActionLogRepo,
|
||||||
tokenService,
|
tokenService,
|
||||||
auditService,
|
auditService,
|
||||||
|
|||||||
Reference in New Issue
Block a user