From 516bb92a16c41b9ff00dec1599eed9fcd5092e1c Mon Sep 17 00:00:00 2001 From: huang Date: Wed, 15 Apr 2026 11:16:36 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=88=A0=E9=99=A4=20enterprise=5Fd?= =?UTF-8?q?evice=20service=20=E4=B8=AD=E6=97=A0=E8=B7=AF=E7=94=B1=E6=8E=A5?= =?UTF-8?q?=E5=85=A5=E7=9A=84=E6=AD=BB=E4=BB=A3=E7=A0=81=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ListDevicesForEnterprise、GetDeviceDetail、SuspendCard、ResumeCard、validateCardOperation 均无对应路由和 Handler 调用,且 SuspendCard/ResumeCard 仅修改本地 DB 未调 Gateway,存在错误实现风险。统一使用 iot_card stop_resume_service 处理停复机。 Co-authored-by: Sisyphus --- internal/service/enterprise_device/service.go | 211 ------------------ 1 file changed, 211 deletions(-) diff --git a/internal/service/enterprise_device/service.go b/internal/service/enterprise_device/service.go index 34c1df5..7a7cd2a 100644 --- a/internal/service/enterprise_device/service.go +++ b/internal/service/enterprise_device/service.go @@ -391,214 +391,3 @@ func (s *Service) ListDevices(ctx context.Context, enterpriseID uint, req *dto.E Total: total, }, nil } - -// ListDevicesForEnterprise 查询企业授权设备列表(H5企业用户) -func (s *Service) ListDevicesForEnterprise(ctx context.Context, req *dto.EnterpriseDeviceListReq) (*dto.EnterpriseDeviceListResp, error) { - enterpriseID := middleware.GetEnterpriseIDFromContext(ctx) - if enterpriseID == 0 { - return nil, errors.New(errors.CodeUnauthorized, "未授权访问") - } - - opts := postgres.DeviceAuthListOptions{ - EnterpriseID: &enterpriseID, - IncludeRevoked: false, - Page: req.Page, - PageSize: req.PageSize, - } - - auths, total, err := s.enterpriseDeviceAuthStore.ListByEnterprise(ctx, opts) - if err != nil { - return nil, errors.Wrap(errors.CodeInternalError, err, "查询授权记录失败") - } - - if len(auths) == 0 { - return &dto.EnterpriseDeviceListResp{ - List: make([]dto.EnterpriseDeviceItem, 0), - Total: 0, - }, nil - } - - deviceIDs := make([]uint, 0, len(auths)) - authMap := make(map[uint]*model.EnterpriseDeviceAuthorization) - for _, auth := range auths { - deviceIDs = append(deviceIDs, auth.DeviceID) - authMap[auth.DeviceID] = auth - } - - var devices []model.Device - query := s.db.WithContext(ctx).Where("id IN ?", deviceIDs) - if req.VirtualNo != "" { - query = query.Where("virtual_no LIKE ?", "%"+req.VirtualNo+"%") - } - if err := query.Find(&devices).Error; err != nil { - return nil, errors.Wrap(errors.CodeInternalError, err, "查询设备信息失败") - } - - var bindings []model.DeviceSimBinding - if err := s.db.WithContext(ctx). - Where("device_id IN ? AND bind_status = 1", deviceIDs). - Find(&bindings).Error; err != nil { - return nil, errors.Wrap(errors.CodeInternalError, err, "查询设备绑定卡失败") - } - - cardCountMap := make(map[uint]int) - for _, binding := range bindings { - cardCountMap[binding.DeviceID]++ - } - - items := make([]dto.EnterpriseDeviceItem, 0, len(devices)) - for _, device := range devices { - auth := authMap[device.ID] - items = append(items, dto.EnterpriseDeviceItem{ - DeviceID: device.ID, - VirtualNo: device.VirtualNo, - DeviceName: device.DeviceName, - DeviceModel: device.DeviceModel, - CardCount: cardCountMap[device.ID], - AuthorizedAt: auth.AuthorizedAt, - }) - } - - return &dto.EnterpriseDeviceListResp{ - List: items, - Total: total, - }, nil -} - -// GetDeviceDetail 获取设备详情(H5企业用户) -func (s *Service) GetDeviceDetail(ctx context.Context, deviceID uint) (*dto.EnterpriseDeviceDetailResp, error) { - enterpriseID := middleware.GetEnterpriseIDFromContext(ctx) - if enterpriseID == 0 { - return nil, errors.New(errors.CodeUnauthorized, "未授权访问") - } - - auth, err := s.enterpriseDeviceAuthStore.GetByDeviceID(ctx, deviceID) - if err != nil || auth.EnterpriseID != enterpriseID || auth.RevokedAt != nil { - return nil, errors.New(errors.CodeDeviceNotAuthorized, "设备未授权给此企业") - } - - var device model.Device - if err := s.db.WithContext(ctx).Where("id = ?", deviceID).First(&device).Error; err != nil { - return nil, errors.Wrap(errors.CodeInternalError, err, "查询设备信息失败") - } - - var bindings []model.DeviceSimBinding - if err := s.db.WithContext(ctx). - Where("device_id = ? AND bind_status = 1", deviceID). - Find(&bindings).Error; err != nil { - return nil, errors.Wrap(errors.CodeInternalError, err, "查询设备绑定卡失败") - } - - cardIDs := make([]uint, 0, len(bindings)) - for _, binding := range bindings { - cardIDs = append(cardIDs, binding.IotCardID) - } - - var cards []model.IotCard - cardInfos := make([]dto.DeviceCardInfo, 0) - if len(cardIDs) > 0 { - if err := s.db.WithContext(ctx).Where("id IN ?", cardIDs).Find(&cards).Error; err != nil { - return nil, errors.Wrap(errors.CodeInternalError, err, "查询卡信息失败") - } - - carrierIDs := make([]uint, 0, len(cards)) - for _, card := range cards { - carrierIDs = append(carrierIDs, card.CarrierID) - } - - var carriers []model.Carrier - carrierMap := make(map[uint]string) - if len(carrierIDs) > 0 { - if err := s.db.WithContext(ctx).Where("id IN ?", carrierIDs).Find(&carriers).Error; err == nil { - for _, carrier := range carriers { - carrierMap[carrier.ID] = carrier.CarrierName - } - } - } - - for _, card := range cards { - cardInfos = append(cardInfos, dto.DeviceCardInfo{ - CardID: card.ID, - ICCID: card.ICCID, - MSISDN: card.MSISDN, - CarrierName: carrierMap[card.CarrierID], - NetworkStatus: card.NetworkStatus, - NetworkStatusName: constants.GetNetworkStatusName(card.NetworkStatus), - }) - } - } - - return &dto.EnterpriseDeviceDetailResp{ - Device: dto.EnterpriseDeviceInfo{ - DeviceID: device.ID, - VirtualNo: device.VirtualNo, - DeviceName: device.DeviceName, - DeviceModel: device.DeviceModel, - DeviceType: device.DeviceType, - AuthorizedAt: auth.AuthorizedAt, - }, - Cards: cardInfos, - }, nil -} - -func (s *Service) SuspendCard(ctx context.Context, deviceID, cardID uint, req *dto.DeviceCardOperationReq) (*dto.DeviceCardOperationResp, error) { - if err := s.validateCardOperation(ctx, deviceID, cardID); err != nil { - return nil, err - } - - if err := s.db.WithContext(ctx).Model(&model.IotCard{}). - Where("id = ?", cardID). - Update("network_status", 0).Error; err != nil { - return nil, errors.Wrap(errors.CodeInternalError, err, "停机操作失败") - } - - return &dto.DeviceCardOperationResp{ - Success: true, - Message: "停机成功", - }, nil -} - -func (s *Service) ResumeCard(ctx context.Context, deviceID, cardID uint, req *dto.DeviceCardOperationReq) (*dto.DeviceCardOperationResp, error) { - if err := s.validateCardOperation(ctx, deviceID, cardID); err != nil { - return nil, err - } - - if err := s.db.WithContext(ctx).Model(&model.IotCard{}). - Where("id = ?", cardID). - Update("network_status", 1).Error; err != nil { - return nil, errors.Wrap(errors.CodeInternalError, err, "复机操作失败") - } - - return &dto.DeviceCardOperationResp{ - Success: true, - Message: "复机成功", - }, nil -} - -func (s *Service) validateCardOperation(ctx context.Context, deviceID, cardID uint) error { - enterpriseID := middleware.GetEnterpriseIDFromContext(ctx) - if enterpriseID == 0 { - return errors.New(errors.CodeUnauthorized, "未授权访问") - } - - auth, err := s.enterpriseDeviceAuthStore.GetByDeviceID(ctx, deviceID) - if err != nil || auth.EnterpriseID != enterpriseID || auth.RevokedAt != nil { - return errors.New(errors.CodeDeviceNotAuthorized, "设备未授权给此企业") - } - - var binding model.DeviceSimBinding - if err := s.db.WithContext(ctx). - Where("device_id = ? AND iot_card_id = ? AND bind_status = 1", deviceID, cardID). - First(&binding).Error; err != nil { - return errors.New(errors.CodeForbidden, "卡不属于该设备") - } - - var cardAuth model.EnterpriseCardAuthorization - if err := s.db.WithContext(ctx). - Where("enterprise_id = ? AND card_id = ? AND device_auth_id IS NOT NULL AND revoked_at IS NULL", enterpriseID, cardID). - First(&cardAuth).Error; err != nil { - return errors.New(errors.CodeForbidden, "无权操作此卡") - } - - return nil -}