还原改动, bmad真难用
This commit is contained in:
@@ -38,8 +38,7 @@ type deviceService struct {
|
||||
deviceRepo repository.DeviceRepository
|
||||
areaControllerRepo repository.AreaControllerRepository
|
||||
deviceTemplateRepo repository.DeviceTemplateRepository
|
||||
planRepo repository.PlanRepository // 新增计划仓库依赖
|
||||
deviceDomainSvc device.Service // 依赖领域服务
|
||||
deviceDomainSvc device.Service // 依赖领域服务
|
||||
}
|
||||
|
||||
// NewDeviceService 创建一个新的 DeviceService 实例。
|
||||
@@ -47,48 +46,16 @@ func NewDeviceService(
|
||||
deviceRepo repository.DeviceRepository,
|
||||
areaControllerRepo repository.AreaControllerRepository,
|
||||
deviceTemplateRepo repository.DeviceTemplateRepository,
|
||||
planRepo repository.PlanRepository,
|
||||
deviceDomainSvc device.Service,
|
||||
) DeviceService {
|
||||
return &deviceService{
|
||||
deviceRepo: deviceRepo,
|
||||
areaControllerRepo: areaControllerRepo,
|
||||
deviceTemplateRepo: deviceTemplateRepo,
|
||||
planRepo: planRepo,
|
||||
deviceDomainSvc: deviceDomainSvc,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *deviceService) isDeviceInUseByActivePlan(deviceID uint) (bool, error) {
|
||||
plans, err := s.planRepo.FindPlansWithPendingTasks()
|
||||
if err != nil {
|
||||
return false, fmt.Errorf("查询活动计划失败: %w", err)
|
||||
}
|
||||
|
||||
for _, plan := range plans {
|
||||
tasks, err := s.planRepo.FlattenPlanTasks(plan.ID)
|
||||
if err != nil {
|
||||
return false, fmt.Errorf("展开计划 %d 的任务失败: %w", plan.ID, err)
|
||||
}
|
||||
|
||||
for _, task := range tasks {
|
||||
// 假设任务参数中设备ID的键是 "device_id"
|
||||
var params map[string]interface{}
|
||||
if err := json.Unmarshal(task.Parameters, ¶ms); err != nil {
|
||||
// 无法解析参数,跳过此任务
|
||||
continue
|
||||
}
|
||||
|
||||
if paramDeviceID, ok := params["device_id"]; ok {
|
||||
if floatDeviceID, ok := paramDeviceID.(float64); ok && uint(floatDeviceID) == deviceID {
|
||||
return true, nil
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false, nil
|
||||
}
|
||||
|
||||
// --- Devices ---
|
||||
|
||||
func (s *deviceService) CreateDevice(req *dto.CreateDeviceRequest) (*dto.DeviceResponse, error) {
|
||||
@@ -182,13 +149,6 @@ func (s *deviceService) DeleteDevice(id string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// 检查设备是否被活动计划使用
|
||||
if inUse, err := s.isDeviceInUseByActivePlan(uint(idUint)); err != nil {
|
||||
return fmt.Errorf("检查设备是否被计划使用失败: %w", err)
|
||||
} else if inUse {
|
||||
return errors.New("设备正在被活动计划使用,无法删除")
|
||||
}
|
||||
|
||||
return s.deviceRepo.Delete(uint(idUint))
|
||||
}
|
||||
|
||||
@@ -303,15 +263,6 @@ func (s *deviceService) DeleteAreaController(id string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// 检查是否有设备正在使用此区域主控
|
||||
devices, err := s.deviceRepo.ListByAreaControllerID(uint(idUint))
|
||||
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return err
|
||||
}
|
||||
if len(devices) > 0 {
|
||||
return errors.New("区域主控正在被设备使用,无法删除")
|
||||
}
|
||||
|
||||
return s.areaControllerRepo.Delete(uint(idUint))
|
||||
}
|
||||
|
||||
@@ -418,14 +369,5 @@ func (s *deviceService) DeleteDeviceTemplate(id string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// 检查是否有设备正在使用此模板
|
||||
devices, err := s.deviceRepo.FindByDeviceTemplateID(uint(idUint))
|
||||
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return err
|
||||
}
|
||||
if len(devices) > 0 {
|
||||
return errors.New("设备模板正在被设备使用,无法删除")
|
||||
}
|
||||
|
||||
return s.deviceTemplateRepo.Delete(uint(idUint))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user