将GeneralDeviceService改成通用版, 随用随New
This commit is contained in:
		| @@ -17,18 +17,12 @@ type GeneralDeviceService struct { | ||||
| 	deviceRepo repository.DeviceRepository | ||||
| 	logger     *logs.Logger | ||||
|  | ||||
| 	deviceID uint // 区域主控的设备ID | ||||
|  | ||||
| 	// regionalController 是执行命令的区域主控, 所有的指令都会发往区域主控 | ||||
| 	regionalController *models.Device | ||||
|  | ||||
| 	comm transport.Communicator | ||||
| } | ||||
|  | ||||
| // NewGeneralDeviceService 创建一个通用设备服务 | ||||
| func NewGeneralDeviceService(deviceID uint, deviceRepo repository.DeviceRepository, logger *logs.Logger, comm transport.Communicator) *GeneralDeviceService { | ||||
| func NewGeneralDeviceService(deviceRepo repository.DeviceRepository, logger *logs.Logger, comm transport.Communicator) *GeneralDeviceService { | ||||
| 	return &GeneralDeviceService{ | ||||
| 		deviceID:   deviceID, | ||||
| 		deviceRepo: deviceRepo, | ||||
| 		logger:     logger, | ||||
| 		comm:       comm, | ||||
| @@ -38,8 +32,8 @@ func NewGeneralDeviceService(deviceID uint, deviceRepo repository.DeviceReposito | ||||
| func (g *GeneralDeviceService) Switch(device models.Device, action DeviceAction) error { | ||||
|  | ||||
| 	// 校验设备参数及生成指令 | ||||
| 	if *device.ParentID != g.deviceID { | ||||
| 		return fmt.Errorf("设备 %v(id=%v) 的上级区域主控是(id=%v), 不是当前区域主控(id=%v)下属设备, 无法执行指令", device.Name, device.ID, device.ParentID, g.deviceID) | ||||
| 	if *device.ParentID == 0 { | ||||
| 		return fmt.Errorf("设备 %v(id=%v) 的上级区域主控(id=%v) ID不合理, 无法执行指令", device.Name, device.ID, *device.ParentID) | ||||
| 	} | ||||
|  | ||||
| 	if !device.SelfCheck() { | ||||
| @@ -80,9 +74,9 @@ func (g *GeneralDeviceService) Switch(device models.Device, action DeviceAction) | ||||
| 	} | ||||
|  | ||||
| 	// 获取自身LoRa设备ID, 因为可能变更, 所以每次都现获取 | ||||
| 	thisDevice, err := g.deviceRepo.FindByID(g.deviceID) | ||||
| 	thisDevice, err := g.deviceRepo.FindByID(*device.ParentID) | ||||
| 	if err != nil { | ||||
| 		return fmt.Errorf("获取区域主控(id=%v)信息失败: %v", g.deviceID, err) | ||||
| 		return fmt.Errorf("获取区域主控(id=%v)信息失败: %v", *device.ParentID, err) | ||||
| 	} | ||||
| 	if !thisDevice.SelfCheck() { | ||||
| 		return fmt.Errorf("区域主控 %v(id=%v) 缺少必要信息, 无法发送指令", thisDevice.Name, thisDevice.ID) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user