From cce27975a142595cbd6d8054ef5a9aa14bc59844 Mon Sep 17 00:00:00 2001 From: Break Date: Thu, 4 Jun 2026 10:34:58 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=85=B3=E9=94=AE=E8=AF=8D?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/model/dto/device_dto.go | 1 + internal/service/device/service.go | 3 +++ internal/store/postgres/device_store.go | 3 +++ 3 files changed, 7 insertions(+) diff --git a/internal/model/dto/device_dto.go b/internal/model/dto/device_dto.go index be11eec..1c3ccd3 100644 --- a/internal/model/dto/device_dto.go +++ b/internal/model/dto/device_dto.go @@ -19,6 +19,7 @@ type ListDeviceRequest struct { CreatedAtStart *time.Time `json:"created_at_start" query:"created_at_start" description:"创建时间起始"` CreatedAtEnd *time.Time `json:"created_at_end" query:"created_at_end" description:"创建时间结束"` HasActivePackage *bool `json:"has_active_package" query:"has_active_package" description:"是否有生效中的套餐(true:有生效中主套餐, false:无生效中主套餐)"` + Keyword string `json:"keyword" query:"keyword" validate:"omitempty,max=100" maxLength:"100" description:"关键字搜索,匹配虚拟号或IMEI(模糊查询,与virtual_no/imei独立)"` } type DeviceResponse struct { diff --git a/internal/service/device/service.go b/internal/service/device/service.go index b92393f..387cfea 100644 --- a/internal/service/device/service.go +++ b/internal/service/device/service.go @@ -90,6 +90,9 @@ func (s *Service) List(ctx context.Context, req *dto.ListDeviceRequest) (*dto.Li if req.IMEI != "" { filters["imei"] = req.IMEI } + if req.Keyword != "" { + filters["keyword"] = req.Keyword + } if req.DeviceName != "" { filters["device_name"] = req.DeviceName } diff --git a/internal/store/postgres/device_store.go b/internal/store/postgres/device_store.go index 16bced1..3653af7 100644 --- a/internal/store/postgres/device_store.go +++ b/internal/store/postgres/device_store.go @@ -134,6 +134,9 @@ func (s *DeviceStore) applyDeviceFilters(query *gorm.DB, filters map[string]any) if imei, ok := filters["imei"].(string); ok && imei != "" { query = query.Where("imei LIKE ?", "%"+imei+"%") } + if keyword, ok := filters["keyword"].(string); ok && keyword != "" { + query = query.Where("virtual_no LIKE ? OR imei LIKE ?", "%"+keyword+"%", "%"+keyword+"%") + } if virtualNoStart, ok := filters["virtual_no_start"].(string); ok && virtualNoStart != "" { query = query.Where("virtual_no >= ?", virtualNoStart) }