拆分device.Service接口
This commit is contained in:
@@ -56,17 +56,9 @@ func (l *loraListener) HandleInstruction(upstreamCtx context.Context, sourceAddr
|
|||||||
case *proto.Instruction_CollectResult:
|
case *proto.Instruction_CollectResult:
|
||||||
return l.handleCollectResult(ctx, sourceAddr, p.CollectResult)
|
return l.handleCollectResult(ctx, sourceAddr, p.CollectResult)
|
||||||
|
|
||||||
case *proto.Instruction_OtaUpgradeStatus:
|
|
||||||
return l.handleOtaStatus(ctx, sourceAddr, p.OtaUpgradeStatus)
|
|
||||||
|
|
||||||
case *proto.Instruction_Pong:
|
case *proto.Instruction_Pong:
|
||||||
return l.handlePong(ctx, sourceAddr, p.Pong)
|
return l.handlePong(ctx, sourceAddr, p.Pong)
|
||||||
|
|
||||||
case *proto.Instruction_LogUploadRequest:
|
|
||||||
logger.Infow("收到设备日志上传请求,暂未实现处理逻辑", "来源地址", sourceAddr, "日志条数", len(p.LogUploadRequest.Entries))
|
|
||||||
// TODO: 在这里实现设备日志的处理逻辑
|
|
||||||
return nil
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
logger.Warnw("收到一个当前未处理的上行指令类型", "来源地址", sourceAddr, "类型", fmt.Sprintf("%T", p))
|
logger.Warnw("收到一个当前未处理的上行指令类型", "来源地址", sourceAddr, "类型", fmt.Sprintf("%T", p))
|
||||||
return nil
|
return nil
|
||||||
@@ -277,37 +269,6 @@ func (l *loraListener) recordSensorData(ctx context.Context, areaControllerID ui
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// handleOtaStatus 处理设备上报的OTA升级状态。
|
|
||||||
func (l *loraListener) handleOtaStatus(ctx context.Context, sourceAddr string, status *proto.OtaUpgradeStatus) error {
|
|
||||||
reqCtx, logger := logs.Trace(ctx, l.selfCtx, "handleOtaStatus")
|
|
||||||
logger.Infow("开始处理OTA升级状态",
|
|
||||||
"来源地址", sourceAddr,
|
|
||||||
"状态码", status.StatusCode,
|
|
||||||
"当前版本", status.CurrentFirmwareVersion,
|
|
||||||
)
|
|
||||||
|
|
||||||
// 1. 查找区域主控
|
|
||||||
areaController, err := l.areaControllerRepo.FindByNetworkID(reqCtx, sourceAddr)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("处理OTA状态失败:无法找到区域主控: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 2. 更新固件版本号
|
|
||||||
// 我们信任设备上报的版本号,无论成功失败都进行更新
|
|
||||||
if status.CurrentFirmwareVersion != "" {
|
|
||||||
err = l.areaControllerRepo.UpdateFirmwareVersion(reqCtx, areaController.ID, status.CurrentFirmwareVersion)
|
|
||||||
if err != nil {
|
|
||||||
logger.Errorw("更新区域主控固件版本号失败", "主控ID", areaController.ID, "error", err)
|
|
||||||
return fmt.Errorf("更新固件版本号失败: %w", err)
|
|
||||||
}
|
|
||||||
logger.Infow("成功更新区域主控固件版本号", "主控ID", areaController.ID, "新版本", status.CurrentFirmwareVersion)
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: 后续可以在这里增加逻辑,比如记录一条操作日志,或者发送一个通知
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// handlePong 处理设备上报的Pong响应或主动心跳。
|
// handlePong 处理设备上报的Pong响应或主动心跳。
|
||||||
func (l *loraListener) handlePong(ctx context.Context, sourceAddr string, pong *proto.Pong) error {
|
func (l *loraListener) handlePong(ctx context.Context, sourceAddr string, pong *proto.Pong) error {
|
||||||
reqCtx, logger := logs.Trace(ctx, l.selfCtx, "handlePong")
|
reqCtx, logger := logs.Trace(ctx, l.selfCtx, "handlePong")
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ type deviceService struct {
|
|||||||
deviceRepo repository.DeviceRepository
|
deviceRepo repository.DeviceRepository
|
||||||
areaControllerRepo repository.AreaControllerRepository
|
areaControllerRepo repository.AreaControllerRepository
|
||||||
deviceTemplateRepo repository.DeviceTemplateRepository
|
deviceTemplateRepo repository.DeviceTemplateRepository
|
||||||
deviceDomainSvc device.Service
|
deviceDomainSvc device.DeviceOperator
|
||||||
thresholdAlarmService ThresholdAlarmService
|
thresholdAlarmService ThresholdAlarmService
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,7 +63,7 @@ func NewDeviceService(
|
|||||||
deviceRepo repository.DeviceRepository,
|
deviceRepo repository.DeviceRepository,
|
||||||
areaControllerRepo repository.AreaControllerRepository,
|
areaControllerRepo repository.AreaControllerRepository,
|
||||||
deviceTemplateRepo repository.DeviceTemplateRepository,
|
deviceTemplateRepo repository.DeviceTemplateRepository,
|
||||||
deviceDomainSvc device.Service,
|
deviceDomainSvc device.DeviceOperator,
|
||||||
thresholdAlarmService ThresholdAlarmService,
|
thresholdAlarmService ThresholdAlarmService,
|
||||||
) DeviceService {
|
) DeviceService {
|
||||||
return &deviceService{
|
return &deviceService{
|
||||||
|
|||||||
@@ -140,7 +140,8 @@ type DomainServices struct {
|
|||||||
pigTradeManager pig.PigTradeManager
|
pigTradeManager pig.PigTradeManager
|
||||||
pigSickManager pig.SickPigManager
|
pigSickManager pig.SickPigManager
|
||||||
pigBatchDomain pig.PigBatchService
|
pigBatchDomain pig.PigBatchService
|
||||||
generalDeviceService device.Service
|
deviceOperator device.DeviceOperator
|
||||||
|
deviceCommunicator device.DeviceCommunicator
|
||||||
taskFactory plan.TaskFactory
|
taskFactory plan.TaskFactory
|
||||||
planExecutionManager plan.ExecutionManager
|
planExecutionManager plan.ExecutionManager
|
||||||
analysisPlanTaskManager plan.AnalysisPlanTaskManager
|
analysisPlanTaskManager plan.AnalysisPlanTaskManager
|
||||||
@@ -200,6 +201,7 @@ func initDomainServices(ctx context.Context, cfg *config.Config, infra *Infrastr
|
|||||||
infra.repos.alarmRepo,
|
infra.repos.alarmRepo,
|
||||||
infra.repos.areaControllerRepo,
|
infra.repos.areaControllerRepo,
|
||||||
generalDeviceService,
|
generalDeviceService,
|
||||||
|
generalDeviceService,
|
||||||
notifyService,
|
notifyService,
|
||||||
alarmService,
|
alarmService,
|
||||||
)
|
)
|
||||||
@@ -217,7 +219,6 @@ func initDomainServices(ctx context.Context, cfg *config.Config, infra *Infrastr
|
|||||||
infra.repos.planRepo,
|
infra.repos.planRepo,
|
||||||
analysisPlanTaskManager,
|
analysisPlanTaskManager,
|
||||||
taskFactory,
|
taskFactory,
|
||||||
generalDeviceService,
|
|
||||||
time.Duration(cfg.Task.Interval)*time.Second,
|
time.Duration(cfg.Task.Interval)*time.Second,
|
||||||
cfg.Task.NumWorkers,
|
cfg.Task.NumWorkers,
|
||||||
)
|
)
|
||||||
@@ -259,7 +260,8 @@ func initDomainServices(ctx context.Context, cfg *config.Config, infra *Infrastr
|
|||||||
pigTradeManager: pigTradeManager,
|
pigTradeManager: pigTradeManager,
|
||||||
pigSickManager: pigSickManager,
|
pigSickManager: pigSickManager,
|
||||||
pigBatchDomain: pigBatchDomain,
|
pigBatchDomain: pigBatchDomain,
|
||||||
generalDeviceService: generalDeviceService,
|
deviceOperator: generalDeviceService,
|
||||||
|
deviceCommunicator: generalDeviceService,
|
||||||
analysisPlanTaskManager: analysisPlanTaskManager,
|
analysisPlanTaskManager: analysisPlanTaskManager,
|
||||||
taskFactory: taskFactory,
|
taskFactory: taskFactory,
|
||||||
planExecutionManager: planExecutionManager,
|
planExecutionManager: planExecutionManager,
|
||||||
@@ -328,7 +330,7 @@ func initAppServices(ctx context.Context, infra *Infrastructure, domainServices
|
|||||||
infra.repos.deviceRepo,
|
infra.repos.deviceRepo,
|
||||||
infra.repos.areaControllerRepo,
|
infra.repos.areaControllerRepo,
|
||||||
infra.repos.deviceTemplateRepo,
|
infra.repos.deviceTemplateRepo,
|
||||||
domainServices.generalDeviceService,
|
domainServices.deviceOperator,
|
||||||
thresholdAlarmService,
|
thresholdAlarmService,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -42,17 +42,21 @@ func WithoutTracking() SendOption {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Service 抽象了一组方法用于控制设备行为
|
// DeviceOperator 提供了对单个或多个设备进行具体操作的接口,
|
||||||
type Service interface {
|
// 如开关、触发采集等。它通常用于响应用户的直接指令或执行具体的业务任务。
|
||||||
|
type DeviceOperator interface {
|
||||||
// Switch 用于切换指定设备的状态, 比如启动和停止
|
// Switch 用于切换指定设备的状态, 比如启动和停止。
|
||||||
Switch(ctx context.Context, device *models.Device, action DeviceAction) error
|
Switch(ctx context.Context, device *models.Device, action DeviceAction) error
|
||||||
|
|
||||||
// Collect 用于发起对指定区域主控下的多个设备的批量采集请求。
|
// Collect 用于发起对指定区域主控下的多个设备的批量采集请求。
|
||||||
Collect(ctx context.Context, areaControllerID uint32, devicesToCollect []*models.Device) error
|
Collect(ctx context.Context, areaControllerID uint32, devicesToCollect []*models.Device) error
|
||||||
|
}
|
||||||
|
|
||||||
// Send 是一个通用的发送方法,用于将一个标准的指令载荷发送到指定的区域主控。
|
// DeviceCommunicator 抽象了与设备进行底层通信的能力。
|
||||||
// 它负责将载荷包装成顶层指令、序列化、调用底层发送器,并默认记录下行命令日志。
|
// 它负责将一个标准的指令载荷发送到指定的区域主控。
|
||||||
|
type DeviceCommunicator interface {
|
||||||
|
// Send 是一个通用的发送方法,它负责将载荷包装、序列化、
|
||||||
|
// 调用底层发送器,并默认记录下行命令日志。
|
||||||
Send(ctx context.Context, areaControllerID uint32, payload proto.InstructionPayload, opts ...SendOption) error
|
Send(ctx context.Context, areaControllerID uint32, payload proto.InstructionPayload, opts ...SendOption) error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ func NewGeneralDeviceService(
|
|||||||
deviceCommandLogRepo repository.DeviceCommandLogRepository,
|
deviceCommandLogRepo repository.DeviceCommandLogRepository,
|
||||||
pendingCollectionRepo repository.PendingCollectionRepository,
|
pendingCollectionRepo repository.PendingCollectionRepository,
|
||||||
comm transport.Communicator,
|
comm transport.Communicator,
|
||||||
) Service {
|
) *GeneralDeviceService {
|
||||||
return &GeneralDeviceService{
|
return &GeneralDeviceService{
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
deviceRepo: deviceRepo,
|
deviceRepo: deviceRepo,
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/domain/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"
|
||||||
@@ -95,7 +94,6 @@ type planExecutionManagerImpl struct {
|
|||||||
taskFactory TaskFactory
|
taskFactory TaskFactory
|
||||||
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
|
||||||
@@ -112,7 +110,6 @@ func NewPlanExecutionManager(
|
|||||||
planRepo repository.PlanRepository,
|
planRepo repository.PlanRepository,
|
||||||
analysisPlanTaskManager AnalysisPlanTaskManager,
|
analysisPlanTaskManager AnalysisPlanTaskManager,
|
||||||
taskFactory TaskFactory,
|
taskFactory TaskFactory,
|
||||||
deviceService device.Service,
|
|
||||||
interval time.Duration,
|
interval time.Duration,
|
||||||
numWorkers int,
|
numWorkers int,
|
||||||
) ExecutionManager {
|
) ExecutionManager {
|
||||||
@@ -125,7 +122,6 @@ func NewPlanExecutionManager(
|
|||||||
planRepo: planRepo,
|
planRepo: planRepo,
|
||||||
analysisPlanTaskManager: analysisPlanTaskManager,
|
analysisPlanTaskManager: analysisPlanTaskManager,
|
||||||
taskFactory: taskFactory,
|
taskFactory: taskFactory,
|
||||||
deviceService: deviceService,
|
|
||||||
pollingInterval: interval,
|
pollingInterval: interval,
|
||||||
workers: numWorkers,
|
workers: numWorkers,
|
||||||
progressTracker: NewProgressTracker(),
|
progressTracker: NewProgressTracker(),
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ type FullCollectionTask struct {
|
|||||||
ctx context.Context
|
ctx context.Context
|
||||||
log *models.TaskExecutionLog
|
log *models.TaskExecutionLog
|
||||||
deviceRepo repository.DeviceRepository
|
deviceRepo repository.DeviceRepository
|
||||||
deviceService device.Service
|
deviceService device.DeviceOperator
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewFullCollectionTask 创建一个全量采集任务实例
|
// NewFullCollectionTask 创建一个全量采集任务实例
|
||||||
@@ -24,7 +24,7 @@ func NewFullCollectionTask(
|
|||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
log *models.TaskExecutionLog,
|
log *models.TaskExecutionLog,
|
||||||
deviceRepo repository.DeviceRepository,
|
deviceRepo repository.DeviceRepository,
|
||||||
deviceService device.Service,
|
deviceService device.DeviceOperator,
|
||||||
) plan.Task {
|
) plan.Task {
|
||||||
return &FullCollectionTask{
|
return &FullCollectionTask{
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ type HeartbeatTask struct {
|
|||||||
ctx context.Context
|
ctx context.Context
|
||||||
log *models.TaskExecutionLog
|
log *models.TaskExecutionLog
|
||||||
areaControllerRepo repository.AreaControllerRepository
|
areaControllerRepo repository.AreaControllerRepository
|
||||||
deviceService device.Service
|
deviceService device.DeviceCommunicator
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewHeartbeatTask 创建一个心跳检测任务实例
|
// NewHeartbeatTask 创建一个心跳检测任务实例
|
||||||
@@ -25,7 +25,7 @@ func NewHeartbeatTask(
|
|||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
log *models.TaskExecutionLog,
|
log *models.TaskExecutionLog,
|
||||||
areaControllerRepo repository.AreaControllerRepository,
|
areaControllerRepo repository.AreaControllerRepository,
|
||||||
deviceService device.Service,
|
deviceService device.DeviceCommunicator,
|
||||||
) plan.Task {
|
) plan.Task {
|
||||||
return &HeartbeatTask{
|
return &HeartbeatTask{
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ type ReleaseFeedWeightTask struct {
|
|||||||
releaseWeight float32
|
releaseWeight float32
|
||||||
mixingTankDeviceID uint32
|
mixingTankDeviceID uint32
|
||||||
|
|
||||||
feedPort device.Service
|
feedPort device.DeviceOperator
|
||||||
|
|
||||||
// onceParse 保证解析参数只执行一次
|
// onceParse 保证解析参数只执行一次
|
||||||
onceParse sync.Once
|
onceParse sync.Once
|
||||||
@@ -44,7 +44,7 @@ func NewReleaseFeedWeightTask(
|
|||||||
claimedLog *models.TaskExecutionLog,
|
claimedLog *models.TaskExecutionLog,
|
||||||
sensorDataRepo repository.SensorDataRepository,
|
sensorDataRepo repository.SensorDataRepository,
|
||||||
deviceRepo repository.DeviceRepository,
|
deviceRepo repository.DeviceRepository,
|
||||||
deviceService device.Service,
|
deviceService device.DeviceOperator,
|
||||||
) plan.Task {
|
) plan.Task {
|
||||||
return &ReleaseFeedWeightTask{
|
return &ReleaseFeedWeightTask{
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
|
|||||||
@@ -29,7 +29,8 @@ type taskFactory struct {
|
|||||||
alarmRepo repository.AlarmRepository
|
alarmRepo repository.AlarmRepository
|
||||||
areaControllerRepo repository.AreaControllerRepository
|
areaControllerRepo repository.AreaControllerRepository
|
||||||
|
|
||||||
deviceService device.Service
|
deviceOperator device.DeviceOperator
|
||||||
|
deviceCommunicator device.DeviceCommunicator
|
||||||
notificationService notify.Service
|
notificationService notify.Service
|
||||||
alarmService alarm.AlarmService
|
alarmService alarm.AlarmService
|
||||||
}
|
}
|
||||||
@@ -40,7 +41,8 @@ func NewTaskFactory(
|
|||||||
deviceRepo repository.DeviceRepository,
|
deviceRepo repository.DeviceRepository,
|
||||||
alarmRepo repository.AlarmRepository,
|
alarmRepo repository.AlarmRepository,
|
||||||
areaControllerRepo repository.AreaControllerRepository,
|
areaControllerRepo repository.AreaControllerRepository,
|
||||||
deviceService device.Service,
|
deviceOperator device.DeviceOperator,
|
||||||
|
deviceCommunicator device.DeviceCommunicator,
|
||||||
notifyService notify.Service,
|
notifyService notify.Service,
|
||||||
alarmService alarm.AlarmService,
|
alarmService alarm.AlarmService,
|
||||||
) plan.TaskFactory {
|
) plan.TaskFactory {
|
||||||
@@ -50,7 +52,8 @@ func NewTaskFactory(
|
|||||||
deviceRepo: deviceRepo,
|
deviceRepo: deviceRepo,
|
||||||
alarmRepo: alarmRepo,
|
alarmRepo: alarmRepo,
|
||||||
areaControllerRepo: areaControllerRepo,
|
areaControllerRepo: areaControllerRepo,
|
||||||
deviceService: deviceService,
|
deviceOperator: deviceOperator,
|
||||||
|
deviceCommunicator: deviceCommunicator,
|
||||||
notificationService: notifyService,
|
notificationService: notifyService,
|
||||||
alarmService: alarmService,
|
alarmService: alarmService,
|
||||||
}
|
}
|
||||||
@@ -63,11 +66,11 @@ func (t *taskFactory) Production(ctx context.Context, claimedLog *models.TaskExe
|
|||||||
case models.TaskTypeWaiting:
|
case models.TaskTypeWaiting:
|
||||||
return NewDelayTask(logs.AddCompName(baseCtx, CompNameDelayTask), claimedLog)
|
return NewDelayTask(logs.AddCompName(baseCtx, CompNameDelayTask), claimedLog)
|
||||||
case models.TaskTypeReleaseFeedWeight:
|
case models.TaskTypeReleaseFeedWeight:
|
||||||
return NewReleaseFeedWeightTask(logs.AddCompName(baseCtx, CompNameReleaseFeedWeight), claimedLog, t.sensorDataRepo, t.deviceRepo, t.deviceService)
|
return NewReleaseFeedWeightTask(logs.AddCompName(baseCtx, CompNameReleaseFeedWeight), claimedLog, t.sensorDataRepo, t.deviceRepo, t.deviceOperator)
|
||||||
case models.TaskTypeFullCollection:
|
case models.TaskTypeFullCollection:
|
||||||
return NewFullCollectionTask(logs.AddCompName(baseCtx, CompNameFullCollectionTask), claimedLog, t.deviceRepo, t.deviceService)
|
return NewFullCollectionTask(logs.AddCompName(baseCtx, CompNameFullCollectionTask), claimedLog, t.deviceRepo, t.deviceOperator)
|
||||||
case models.TaskTypeHeartbeat:
|
case models.TaskTypeHeartbeat:
|
||||||
return NewHeartbeatTask(logs.AddCompName(baseCtx, CompNameHeartbeatTask), claimedLog, t.areaControllerRepo, t.deviceService)
|
return NewHeartbeatTask(logs.AddCompName(baseCtx, CompNameHeartbeatTask), claimedLog, t.areaControllerRepo, t.deviceCommunicator)
|
||||||
case models.TaskTypeAlarmNotification:
|
case models.TaskTypeAlarmNotification:
|
||||||
return NewAlarmNotificationTask(logs.AddCompName(baseCtx, CompNameAlarmNotification), claimedLog, t.notificationService, t.alarmRepo)
|
return NewAlarmNotificationTask(logs.AddCompName(baseCtx, CompNameAlarmNotification), claimedLog, t.notificationService, t.alarmRepo)
|
||||||
case models.TaskTypeDeviceThresholdCheck:
|
case models.TaskTypeDeviceThresholdCheck:
|
||||||
@@ -96,12 +99,12 @@ func (t *taskFactory) CreateTaskFromModel(ctx context.Context, taskModel *models
|
|||||||
tempLog,
|
tempLog,
|
||||||
t.sensorDataRepo,
|
t.sensorDataRepo,
|
||||||
t.deviceRepo,
|
t.deviceRepo,
|
||||||
t.deviceService,
|
t.deviceOperator,
|
||||||
), nil
|
), nil
|
||||||
case models.TaskTypeFullCollection:
|
case models.TaskTypeFullCollection:
|
||||||
return NewFullCollectionTask(logs.AddCompName(baseCtx, CompNameFullCollectionTask), tempLog, t.deviceRepo, t.deviceService), nil
|
return NewFullCollectionTask(logs.AddCompName(baseCtx, CompNameFullCollectionTask), tempLog, t.deviceRepo, t.deviceOperator), nil
|
||||||
case models.TaskTypeHeartbeat:
|
case models.TaskTypeHeartbeat:
|
||||||
return NewHeartbeatTask(logs.AddCompName(baseCtx, CompNameHeartbeatTask), tempLog, t.areaControllerRepo, t.deviceService), nil
|
return NewHeartbeatTask(logs.AddCompName(baseCtx, CompNameHeartbeatTask), tempLog, t.areaControllerRepo, t.deviceCommunicator), nil
|
||||||
case models.TaskTypeAlarmNotification:
|
case models.TaskTypeAlarmNotification:
|
||||||
return NewAlarmNotificationTask(logs.AddCompName(baseCtx, CompNameAlarmNotification), tempLog, t.notificationService, t.alarmRepo), nil
|
return NewAlarmNotificationTask(logs.AddCompName(baseCtx, CompNameAlarmNotification), tempLog, t.notificationService, t.alarmRepo), nil
|
||||||
case models.TaskTypeDeviceThresholdCheck:
|
case models.TaskTypeDeviceThresholdCheck:
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ design/archive/2025-11-10-exceeding-threshold-alarm/index.md
|
|||||||
design/archive/2025-11-29-recipe-management/index.md
|
design/archive/2025-11-29-recipe-management/index.md
|
||||||
design/ota-upgrade-and-log-monitoring/index.md
|
design/ota-upgrade-and-log-monitoring/index.md
|
||||||
design/ota-upgrade-and-log-monitoring/lora_refactoring_plan.md
|
design/ota-upgrade-and-log-monitoring/lora_refactoring_plan.md
|
||||||
|
design/ota-upgrade-and-log-monitoring/ota_upgrade_solution.md
|
||||||
docs/docs.go
|
docs/docs.go
|
||||||
docs/swagger.json
|
docs/swagger.json
|
||||||
docs/swagger.yaml
|
docs/swagger.yaml
|
||||||
@@ -146,6 +147,9 @@ internal/domain/task/heartbeat_task.go
|
|||||||
internal/domain/task/refresh_notification_task.go
|
internal/domain/task/refresh_notification_task.go
|
||||||
internal/domain/task/release_feed_weight_task.go
|
internal/domain/task/release_feed_weight_task.go
|
||||||
internal/domain/task/task.go
|
internal/domain/task/task.go
|
||||||
|
internal/infra/ai/ai.go
|
||||||
|
internal/infra/ai/gemini.go
|
||||||
|
internal/infra/ai/no_ai.go
|
||||||
internal/infra/config/config.go
|
internal/infra/config/config.go
|
||||||
internal/infra/database/postgres.go
|
internal/infra/database/postgres.go
|
||||||
internal/infra/database/seeder.go
|
internal/infra/database/seeder.go
|
||||||
|
|||||||
Reference in New Issue
Block a user