package parking import ( "errors" "server/dao" "server/global" "server/model/parking/request" ) type deviceService struct{} func NewDeviceService() *deviceService { return &deviceService{} } // CreateDevice 创建设备 func (s *deviceService) CreateDevice(req request.DeviceCreate) error { // 检查设备编码是否已存在 var existingDevice dao.Device result := global.GVA_DB.Where("device_code = ?", req.DeviceCode).First(&existingDevice) if result.RowsAffected > 0 { return errors.New("设备编码已存在") } device := dao.Device{ DeviceCode: req.DeviceCode, DeviceName: req.DeviceName, DeviceType: req.DeviceType, IPAddress: req.IPAddress, Port: req.Port, Status: "offline", // 初始状态为离线 Description: req.Description, } return global.GVA_DB.Create(&device).Error } // UpdateDevice 更新设备 func (s *deviceService) UpdateDevice(req request.DeviceUpdate) error { var device dao.Device result := global.GVA_DB.First(&device, req.ID) if result.RowsAffected == 0 { return errors.New("设备不存在") } // 检查设备编码是否被其他设备使用 var existingDevice dao.Device result = global.GVA_DB.Where("device_code = ? AND id != ?", req.DeviceCode, req.ID).First(&existingDevice) if result.RowsAffected > 0 { return errors.New("设备编码已被其他设备使用") } device.DeviceCode = req.DeviceCode device.DeviceName = req.DeviceName device.DeviceType = req.DeviceType device.IPAddress = req.IPAddress device.Port = req.Port device.Description = req.Description return global.GVA_DB.Save(&device).Error } // GetDeviceByID 根据ID获取设备 func (s *deviceService) GetDeviceByID(id uint) (dao.Device, error) { var device dao.Device result := global.GVA_DB.First(&device, id) if result.RowsAffected == 0 { return dao.Device{}, errors.New("设备不存在") } return device, nil } // GetDeviceByCode 根据编码获取设备 func (s *deviceService) GetDeviceByCode(code string) (dao.Device, error) { var device dao.Device result := global.GVA_DB.Where("device_code = ?", code).First(&device) if result.RowsAffected == 0 { return dao.Device{}, errors.New("设备不存在") } return device, nil } // ListDevices 获取设备列表 func (s *deviceService) ListDevices(req request.DeviceQuery) (int64, []dao.Device, error) { var devices []dao.Device var total int64 query := global.GVA_DB.Model(&dao.Device{}) if req.DeviceCode != "" { query = query.Where("device_code LIKE ?", "%"+req.DeviceCode+"%") } if req.DeviceName != "" { query = query.Where("device_name LIKE ?", "%"+req.DeviceName+"%") } if req.DeviceType != "" { query = query.Where("device_type = ?", req.DeviceType) } if req.Status != "" { query = query.Where("status = ?", req.Status) } // 计算总数 query.Count(&total) // 分页查询 offset := (req.Page - 1) * req.PageSize result := query.Offset(offset).Limit(req.PageSize).Find(&devices) if result.Error != nil { return 0, nil, result.Error } return total, devices, nil } // DeleteDevice 删除设备 func (s *deviceService) DeleteDevice(id uint) error { result := global.GVA_DB.Delete(&dao.Device{}, id) if result.RowsAffected == 0 { return errors.New("设备不存在") } return result.Error } // UpdateDeviceStatus 更新设备状态 func (s *deviceService) UpdateDeviceStatus(id uint, status string) error { var device dao.Device result := global.GVA_DB.First(&device, id) if result.RowsAffected == 0 { return errors.New("设备不存在") } device.Status = status return global.GVA_DB.Save(&device).Error }