GeneralDeviceService 改为全局唯一使用靠注入
This commit is contained in:
@@ -53,8 +53,6 @@ func NewAPI(cfg config.ServerConfig,
|
|||||||
userRepo repository.UserRepository,
|
userRepo repository.UserRepository,
|
||||||
deviceRepository repository.DeviceRepository,
|
deviceRepository repository.DeviceRepository,
|
||||||
planRepository repository.PlanRepository,
|
planRepository repository.PlanRepository,
|
||||||
sensorDataRepository repository.SensorDataRepository,
|
|
||||||
executionLogRepository repository.ExecutionLogRepository,
|
|
||||||
tokenService token.TokenService,
|
tokenService token.TokenService,
|
||||||
listenHandler transport.ListenHandler,
|
listenHandler transport.ListenHandler,
|
||||||
analysisTaskManager *task.AnalysisPlanTaskManager) *API {
|
analysisTaskManager *task.AnalysisPlanTaskManager) *API {
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import (
|
|||||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/logs"
|
"git.huangwc.com/pig/pig-farm-controller/internal/infra/logs"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/models"
|
"git.huangwc.com/pig/pig-farm-controller/internal/infra/models"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/repository"
|
"git.huangwc.com/pig/pig-farm-controller/internal/infra/repository"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/transport"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// ReleaseFeedWeightTaskParams 定义了 ReleaseFeedWeightTask 的参数结构
|
// ReleaseFeedWeightTaskParams 定义了 ReleaseFeedWeightTask 的参数结构
|
||||||
@@ -21,17 +20,14 @@ type ReleaseFeedWeightTaskParams struct {
|
|||||||
|
|
||||||
// ReleaseFeedWeightTask 是一个控制下料口释放指定重量的任务
|
// ReleaseFeedWeightTask 是一个控制下料口释放指定重量的任务
|
||||||
type ReleaseFeedWeightTask struct {
|
type ReleaseFeedWeightTask struct {
|
||||||
deviceRepo repository.DeviceRepository
|
deviceRepo repository.DeviceRepository
|
||||||
sensorDataRepo repository.SensorDataRepository
|
sensorDataRepo repository.SensorDataRepository
|
||||||
deviceCommandLogRepo repository.DeviceCommandLogRepository
|
claimedLog *models.TaskExecutionLog
|
||||||
pendingCollectionRepo repository.PendingCollectionRepository
|
|
||||||
claimedLog *models.TaskExecutionLog
|
|
||||||
|
|
||||||
feedPortDevice *models.Device // 下料口基本信息
|
feedPortDevice *models.Device
|
||||||
releaseWeight float64 // 需要释放的重量
|
releaseWeight float64
|
||||||
mixingTankDeviceID uint // 搅拌罐称重传感器ID
|
mixingTankDeviceID uint
|
||||||
|
|
||||||
comm transport.Communicator
|
|
||||||
feedPort device.Service
|
feedPort device.Service
|
||||||
|
|
||||||
logger *logs.Logger
|
logger *logs.Logger
|
||||||
@@ -40,21 +36,17 @@ type ReleaseFeedWeightTask struct {
|
|||||||
// NewReleaseFeedWeightTask 创建一个新的 ReleaseFeedWeightTask 实例
|
// NewReleaseFeedWeightTask 创建一个新的 ReleaseFeedWeightTask 实例
|
||||||
func NewReleaseFeedWeightTask(
|
func NewReleaseFeedWeightTask(
|
||||||
claimedLog *models.TaskExecutionLog,
|
claimedLog *models.TaskExecutionLog,
|
||||||
deviceRepo repository.DeviceRepository,
|
|
||||||
sensorDataRepo repository.SensorDataRepository,
|
sensorDataRepo repository.SensorDataRepository,
|
||||||
deviceCommandLogRepo repository.DeviceCommandLogRepository,
|
deviceRepo repository.DeviceRepository,
|
||||||
pendingCollectionRepo repository.PendingCollectionRepository,
|
deviceService device.Service,
|
||||||
comm transport.Communicator,
|
|
||||||
logger *logs.Logger,
|
logger *logs.Logger,
|
||||||
) Task {
|
) Task {
|
||||||
return &ReleaseFeedWeightTask{
|
return &ReleaseFeedWeightTask{
|
||||||
claimedLog: claimedLog,
|
claimedLog: claimedLog,
|
||||||
deviceRepo: deviceRepo,
|
deviceRepo: deviceRepo,
|
||||||
sensorDataRepo: sensorDataRepo,
|
sensorDataRepo: sensorDataRepo,
|
||||||
deviceCommandLogRepo: deviceCommandLogRepo,
|
feedPort: deviceService, // 直接注入
|
||||||
pendingCollectionRepo: pendingCollectionRepo,
|
logger: logger,
|
||||||
comm: comm,
|
|
||||||
logger: logger,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,7 +144,6 @@ func (r *ReleaseFeedWeightTask) parseParameters() error {
|
|||||||
|
|
||||||
r.releaseWeight = params.ReleaseWeight
|
r.releaseWeight = params.ReleaseWeight
|
||||||
r.mixingTankDeviceID = params.MixingTankDeviceID
|
r.mixingTankDeviceID = params.MixingTankDeviceID
|
||||||
r.feedPort = device.NewGeneralDeviceService(r.deviceRepo, r.deviceCommandLogRepo, r.pendingCollectionRepo, r.logger, r.comm)
|
|
||||||
r.feedPortDevice, err = r.deviceRepo.FindByID(params.FeedPortDeviceID)
|
r.feedPortDevice, err = r.deviceRepo.FindByID(params.FeedPortDeviceID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.logger.Errorf("任务 %v: 获取设备信息失败: %v", r.claimedLog.TaskID, err)
|
r.logger.Errorf("任务 %v: 获取设备信息失败: %v", r.claimedLog.TaskID, err)
|
||||||
|
|||||||
@@ -6,10 +6,10 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"git.huangwc.com/pig/pig-farm-controller/internal/app/service/device"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/logs"
|
"git.huangwc.com/pig/pig-farm-controller/internal/infra/logs"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/models"
|
"git.huangwc.com/pig/pig-farm-controller/internal/infra/models"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/repository"
|
"git.huangwc.com/pig/pig-farm-controller/internal/infra/repository"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/transport"
|
|
||||||
"github.com/panjf2000/ants/v2"
|
"github.com/panjf2000/ants/v2"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
@@ -83,12 +83,10 @@ type Scheduler struct {
|
|||||||
executionLogRepo repository.ExecutionLogRepository
|
executionLogRepo repository.ExecutionLogRepository
|
||||||
deviceRepo repository.DeviceRepository
|
deviceRepo repository.DeviceRepository
|
||||||
sensorDataRepo repository.SensorDataRepository
|
sensorDataRepo repository.SensorDataRepository
|
||||||
deviceCommandLogRepo repository.DeviceCommandLogRepository
|
|
||||||
pendingCollectionRepo repository.PendingCollectionRepository
|
|
||||||
planRepo repository.PlanRepository
|
planRepo repository.PlanRepository
|
||||||
comm transport.Communicator
|
|
||||||
analysisPlanTaskManager *AnalysisPlanTaskManager
|
analysisPlanTaskManager *AnalysisPlanTaskManager
|
||||||
progressTracker *ProgressTracker
|
progressTracker *ProgressTracker
|
||||||
|
deviceService device.Service
|
||||||
|
|
||||||
pool *ants.Pool // 使用 ants 协程池来管理并发
|
pool *ants.Pool // 使用 ants 协程池来管理并发
|
||||||
wg sync.WaitGroup
|
wg sync.WaitGroup
|
||||||
@@ -102,11 +100,9 @@ func NewScheduler(
|
|||||||
deviceRepo repository.DeviceRepository,
|
deviceRepo repository.DeviceRepository,
|
||||||
sensorDataRepo repository.SensorDataRepository,
|
sensorDataRepo repository.SensorDataRepository,
|
||||||
planRepo repository.PlanRepository,
|
planRepo repository.PlanRepository,
|
||||||
comm transport.Communicator,
|
|
||||||
analysisPlanTaskManager *AnalysisPlanTaskManager,
|
analysisPlanTaskManager *AnalysisPlanTaskManager,
|
||||||
logger *logs.Logger,
|
logger *logs.Logger,
|
||||||
deviceCommandLogRepo repository.DeviceCommandLogRepository,
|
deviceService device.Service,
|
||||||
pendingCollectionRepo repository.PendingCollectionRepository,
|
|
||||||
interval time.Duration,
|
interval time.Duration,
|
||||||
numWorkers int,
|
numWorkers int,
|
||||||
) *Scheduler {
|
) *Scheduler {
|
||||||
@@ -116,11 +112,9 @@ func NewScheduler(
|
|||||||
deviceRepo: deviceRepo,
|
deviceRepo: deviceRepo,
|
||||||
sensorDataRepo: sensorDataRepo,
|
sensorDataRepo: sensorDataRepo,
|
||||||
planRepo: planRepo,
|
planRepo: planRepo,
|
||||||
comm: comm,
|
|
||||||
analysisPlanTaskManager: analysisPlanTaskManager,
|
analysisPlanTaskManager: analysisPlanTaskManager,
|
||||||
logger: logger,
|
logger: logger,
|
||||||
deviceCommandLogRepo: deviceCommandLogRepo,
|
deviceService: deviceService,
|
||||||
pendingCollectionRepo: pendingCollectionRepo,
|
|
||||||
pollingInterval: interval,
|
pollingInterval: interval,
|
||||||
workers: numWorkers,
|
workers: numWorkers,
|
||||||
progressTracker: NewProgressTracker(),
|
progressTracker: NewProgressTracker(),
|
||||||
@@ -296,7 +290,7 @@ func (s *Scheduler) taskFactory(claimedLog *models.TaskExecutionLog) Task {
|
|||||||
case models.TaskTypeWaiting:
|
case models.TaskTypeWaiting:
|
||||||
return NewDelayTask(s.logger, claimedLog)
|
return NewDelayTask(s.logger, claimedLog)
|
||||||
case models.TaskTypeReleaseFeedWeight:
|
case models.TaskTypeReleaseFeedWeight:
|
||||||
return NewReleaseFeedWeightTask(claimedLog, s.deviceRepo, s.sensorDataRepo, s.deviceCommandLogRepo, s.pendingCollectionRepo, s.comm, s.logger)
|
return NewReleaseFeedWeightTask(claimedLog, s.sensorDataRepo, s.deviceRepo, s.deviceService, s.logger)
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// TODO 这里直接panic合适吗? 不过这个场景确实不该出现任何异常的任务类型
|
// TODO 这里直接panic合适吗? 不过这个场景确实不该出现任何异常的任务类型
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/app/api"
|
"git.huangwc.com/pig/pig-farm-controller/internal/app/api"
|
||||||
|
"git.huangwc.com/pig/pig-farm-controller/internal/app/service/device"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/app/service/task"
|
"git.huangwc.com/pig/pig-farm-controller/internal/app/service/task"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/app/service/token"
|
"git.huangwc.com/pig/pig-farm-controller/internal/app/service/token"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/app/service/transport"
|
"git.huangwc.com/pig/pig-farm-controller/internal/app/service/transport"
|
||||||
@@ -89,6 +90,15 @@ func NewApplication(configPath string) (*Application, error) {
|
|||||||
// 初始化设备通信器 (纯粹的通信客户端)
|
// 初始化设备通信器 (纯粹的通信客户端)
|
||||||
comm := lora.NewChirpStackTransport(cfg.ChirpStack, logger)
|
comm := lora.NewChirpStackTransport(cfg.ChirpStack, logger)
|
||||||
|
|
||||||
|
// 初始化通用设备服务
|
||||||
|
generalDeviceService := device.NewGeneralDeviceService(
|
||||||
|
deviceRepo,
|
||||||
|
deviceCommandLogRepo,
|
||||||
|
pendingCollectionRepo,
|
||||||
|
logger,
|
||||||
|
comm,
|
||||||
|
)
|
||||||
|
|
||||||
// 初始化任务执行器
|
// 初始化任务执行器
|
||||||
executor := task.NewScheduler(
|
executor := task.NewScheduler(
|
||||||
pendingTaskRepo,
|
pendingTaskRepo,
|
||||||
@@ -96,26 +106,32 @@ func NewApplication(configPath string) (*Application, error) {
|
|||||||
deviceRepo,
|
deviceRepo,
|
||||||
sensorDataRepo,
|
sensorDataRepo,
|
||||||
planRepo,
|
planRepo,
|
||||||
comm,
|
|
||||||
analysisPlanTaskManager,
|
analysisPlanTaskManager,
|
||||||
logger,
|
logger,
|
||||||
deviceCommandLogRepo,
|
generalDeviceService,
|
||||||
pendingCollectionRepo,
|
|
||||||
time.Duration(cfg.Task.Interval)*time.Second,
|
time.Duration(cfg.Task.Interval)*time.Second,
|
||||||
cfg.Task.NumWorkers,
|
cfg.Task.NumWorkers,
|
||||||
)
|
)
|
||||||
|
|
||||||
// 初始化 API 服务器
|
// 初始化 API 服务器
|
||||||
apiServer := api.NewAPI(cfg.Server, logger, userRepo, deviceRepo, planRepo, sensorDataRepo, executionLogRepo, tokenService, listenHandler, analysisPlanTaskManager)
|
apiServer := api.NewAPI(
|
||||||
|
cfg.Server,
|
||||||
|
logger,
|
||||||
|
userRepo,
|
||||||
|
deviceRepo,
|
||||||
|
planRepo,
|
||||||
|
tokenService,
|
||||||
|
listenHandler,
|
||||||
|
analysisPlanTaskManager,
|
||||||
|
)
|
||||||
|
|
||||||
// 组装 Application 对象
|
// 组装 Application 对象
|
||||||
app := &Application{
|
app := &Application{
|
||||||
Config: cfg,
|
Config: cfg,
|
||||||
Logger: logger,
|
Logger: logger,
|
||||||
Storage: storage,
|
Storage: storage,
|
||||||
Executor: executor,
|
Executor: executor,
|
||||||
API: apiServer,
|
API: apiServer,
|
||||||
// 填充新增的字段
|
|
||||||
planRepo: planRepo,
|
planRepo: planRepo,
|
||||||
pendingTaskRepo: pendingTaskRepo,
|
pendingTaskRepo: pendingTaskRepo,
|
||||||
executionLogRepo: executionLogRepo,
|
executionLogRepo: executionLogRepo,
|
||||||
|
|||||||
Reference in New Issue
Block a user