feat(设备列表): 新增 has_active_package 查询条件
- DTO ListDeviceRequest 增加 HasActivePackage *bool 字段(query/json: has_active_package) - Service List 方法将 HasActivePackage 透传至 filters["has_active_package"] - Store applyDeviceFilters 新增 applyHasActivePackageFilter: true → EXISTS 子查询(生效中主套餐) false → NOT EXISTS 子查询 均限制 master_usage_id IS NULL、deleted_at IS NULL,状态使用 constants.PackageUsageStatusActive Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -177,9 +177,27 @@ func (s *DeviceStore) applyDeviceFilters(query *gorm.DB, filters map[string]any)
|
||||
if seriesID, ok := filters["series_id"].(uint); ok && seriesID > 0 {
|
||||
query = query.Where("series_id = ?", seriesID)
|
||||
}
|
||||
if hasActive, ok := filters["has_active_package"].(bool); ok {
|
||||
query = s.applyHasActivePackageFilter(query, hasActive)
|
||||
}
|
||||
return query
|
||||
}
|
||||
|
||||
// applyHasActivePackageFilter 按"是否有生效中主套餐"过滤设备。
|
||||
// true: 设备在 tb_package_usage 中存在生效中(status=PackageUsageStatusActive)的主套餐记录;
|
||||
// false: 不存在上述记录。
|
||||
func (s *DeviceStore) applyHasActivePackageFilter(query *gorm.DB, hasActive bool) *gorm.DB {
|
||||
subQuery := `SELECT 1 FROM tb_package_usage AS pu
|
||||
WHERE pu.device_id = tb_device.id
|
||||
AND pu.status = ?
|
||||
AND pu.master_usage_id IS NULL
|
||||
AND pu.deleted_at IS NULL`
|
||||
if hasActive {
|
||||
return query.Where("EXISTS ("+subQuery+")", constants.PackageUsageStatusActive)
|
||||
}
|
||||
return query.Where("NOT EXISTS ("+subQuery+")", constants.PackageUsageStatusActive)
|
||||
}
|
||||
|
||||
func (s *DeviceStore) applyActivationStatusFilter(query *gorm.DB, activationStatus int) *gorm.DB {
|
||||
activeCondition := `EXISTS (
|
||||
SELECT 1
|
||||
|
||||
Reference in New Issue
Block a user