2026-05-21
为了提供更强大、更易用的查询功能,将原有的 ExtendPropertyValues 参数替换为 AdvancedQuery 参数。底层服务会将 AdvancedQueryParams 解析为 ExtendPropertyValues。
type QueryActivitiesParams struct {
Name string `json:"name,omitempty"`
ActorID string `json:"actorId,omitempty"`
BusinessType []string `json:"businessType,omitempty"`
ExtendPropertyValues map[string][]any `json:"extendPropertyValues,omitempty"` // 旧参数
CreateUserID string `json:"createUserId,omitempty"`
TenantID string `json:"tenantId"`
PageNo int `json:"pageNo"`
PageSize int `json:"pageSize"`
}
type QueryActivitiesParams struct {
Name string `json:"name,omitempty"`
ActorID string `json:"actorId,omitempty"`
BusinessType []string `json:"businessType,omitempty"`
AdvancedQuery *AdvancedQueryParams `json:"advancedQuery,omitempty"` // 新参数
CreateUserID string `json:"createUserId,omitempty"`
TenantID string `json:"tenantId"`
PageNo int `json:"pageNo"`
PageSize int `json:"pageSize"`
}
type QueryPlansParams struct {
PlanType string `json:"planType,omitempty"`
Name string `json:"name,omitempty"`
ActorID string `json:"actorId,omitempty"`
State string `json:"state,omitempty"`
BusinessType []string `json:"businessType,omitempty"`
ExtendPropertyValues map[string][]any `json:"extendPropertyValues,omitempty"` // 旧参数
CreateUserID string `json:"createUserId,omitempty"`
TenantID string `json:"tenantId"`
PageNo int `json:"pageNo"`
PageSize int `json:"pageSize"`
}
type QueryPlansParams struct {
PlanType string `json:"planType,omitempty"`
Name string `json:"name,omitempty"`
ActorID string `json:"actorId,omitempty"`
State string `json:"state,omitempty"`
BusinessType []string `json:"businessType,omitempty"`
AdvancedQuery *AdvancedQueryParams `json:"advancedQuery,omitempty"` // 新参数
CreateUserID string `json:"createUserId,omitempty"`
TenantID string `json:"tenantId"`
PageNo int `json:"pageNo"`
PageSize int `json:"pageSize"`
}
type AdvancedQueryParams struct {
ConditionGroups []ConditionGroup `json:"conditionGroups"`
GroupLogic LogicOperator `json:"groupLogic"`
}
type ConditionGroup struct {
Conditions []ConditionItem `json:"conditions"`
Logic LogicOperator `json:"logic"`
}
type ConditionItem struct {
Condition *ConditionGroup `json:"condition,omitempty"`
SingleCondition *QueryCondition `json:"singleCondition,omitempty"`
}
type QueryCondition struct {
Field string `json:"field"`
Operator QueryOperator `json:"operator"`
Value any `json:"value,omitempty"`
}
type QueryOperator string
type LogicOperator string
// 旧的查询方式
params := managesdk.QueryActivitiesParams{
TenantID: "tenant-001",
ExtendPropertyValues: map[string][]any{
"(extend_properties->>'priority')::numeric = ?": {1},
"(extend_properties->>'progress')::numeric > ?": {50},
"extend_properties->>'deptName' = ?": {"技术部"},
},
PageNo: 1,
PageSize: 10,
}
缺点:
// 新的查询方式
params := managesdk.QueryActivitiesParams{
TenantID: "tenant-001",
AdvancedQuery: managesdk.AndQuery(
managesdk.AndGroup(
managesdk.Equal("priority", 1),
managesdk.GreaterThan("progress", 50),
managesdk.Equal("deptName", "技术部"),
),
),
PageNo: 1,
PageSize: 10,
}
优点:
| 旧方式(SQL) | 新方式(AdvancedQuery) | 说明 |
|---|---|---|
field = ? |
Equal("field", value) |
等于 |
field != ? |
NotEqual("field", value) |
不等于 |
field > ? |
GreaterThan("field", value) |
大于 |
field >= ? |
GreaterEqual("field", value) |
大于等于 |
field < ? |
LessThan("field", value) |
小于 |
field <= ? |
LessEqual("field", value) |
小于等于 |
field LIKE ? |
Like("field", value) |
模糊查询 |
field NOT LIKE ? |
NotLike("field", value) |
不包含 |
field LIKE 'prefix%' |
StartsWith("field", "prefix") |
以...开头 |
field LIKE '%suffix' |
EndsWith("field", "suffix") |
以...结尾 |
field IS NULL |
IsNull("field") |
为空 |
field IS NOT NULL |
IsNotNull("field") |
不为空 |
field IN (?, ?) |
In("field", []any{v1, v2}) |
IN 查询 |
field NOT IN (?, ?) |
NotIn("field", []any{v1, v2}) |
NOT IN 查询 |
ExtendPropertyValues: map[string][]any{
"(extend_properties->>'priority')::numeric = ?": {1},
}
AdvancedQuery: managesdk.AndQuery(
managesdk.AndGroup(
managesdk.Equal("priority", 1),
),
)
ExtendPropertyValues: map[string][]any{
"(extend_properties->>'priority')::numeric = ?": {1},
"(extend_properties->>'progress')::numeric > ?": {50},
"extend_properties->>'deptName' = ?": {"技术部"},
}
AdvancedQuery: managesdk.AndQuery(
managesdk.AndGroup(
managesdk.Equal("priority", 1),
managesdk.GreaterThan("progress", 50),
managesdk.Equal("deptName", "技术部"),
),
)
ExtendPropertyValues: map[string][]any{
"(extend_properties->>'duration')::numeric BETWEEN ? AND ?": {2.0, 8.0},
}
AdvancedQuery: managesdk.AndQuery(
managesdk.AndGroup(
managesdk.GreaterEqual("duration", 2.0),
managesdk.LessEqual("duration", 8.0),
),
)
ExtendPropertyValues: map[string][]any{
"(extend_properties->>'complex')::numeric IN (?, ?)": {2, 3},
}
AdvancedQuery: managesdk.AndQuery(
managesdk.AndGroup(
managesdk.In("complex", []int{2, 3}),
),
)
ExtendPropertyValues: map[string][]any{
"extend_properties->>'memberName' LIKE ?": {"%张%"},
}
AdvancedQuery: managesdk.AndQuery(
managesdk.AndGroup(
managesdk.Like("memberName", "%张%"),
),
)
// 旧方式不支持 OR 查询,需要多次调用
AdvancedQuery: managesdk.OrQuery(
managesdk.OrGroup(
managesdk.Equal("priority", 1),
managesdk.Equal("priority", 2),
),
)
// 旧方式难以表达:(priority = 1 AND progress > 50) OR (priority = 2 AND progress > 80)
AdvancedQuery: managesdk.OrQuery(
managesdk.AndGroup(
managesdk.Equal("priority", 1),
managesdk.GreaterThan("progress", 50),
),
managesdk.AndGroup(
managesdk.Equal("priority", 2),
managesdk.GreaterThan("progress", 80),
),
)
// (priority = 1 AND (progress > 50 OR duration > 4))
AdvancedQuery: managesdk.AndQuery(
managesdk.AndGroup(
managesdk.Equal("priority", 1),
managesdk.NewNestedConditionGroup(
managesdk.OrGroup(
managesdk.GreaterThan("progress", 50),
managesdk.GreaterThan("duration", 4),
),
),
),
)
// 快速构建 AND 查询
managesdk.AndQuery(groups...)
// 快速构建 OR 查询
managesdk.OrQuery(groups...)
// 快速构建 AND 条件组
managesdk.AndGroup(conditions...)
// 快速构建 OR 条件组
managesdk.OrGroup(conditions...)
Equal, NotEqual, GreaterThan, GreaterEqual, LessThan, LessEqualLike, NotLike, StartsWith, EndsWithIsNull, IsNotNullIn, NotIn⚠️ 这是一个破坏性变更
ExtendPropertyValues 参数已被移除ExtendPropertyValues 的代码需要迁移到 AdvancedQuery确保使用最新版本的 bdata SDK。
将所有 ExtendPropertyValues 替换为 AdvancedQuery。
使用新的查询构建器 API 重写查询条件。
充分测试所有查询功能,确保结果正确。
A: 使用嵌套条件组和多个条件组合:
// (A AND B) OR (C AND D)
managesdk.OrQuery(
managesdk.AndGroup(A, B),
managesdk.AndGroup(C, D),
)
A: 使用 GreaterEqual 和 LessEqual 组合:
managesdk.AndGroup(
managesdk.GreaterEqual("field", min),
managesdk.LessEqual("field", max),
)
A: 使用 NotIn 操作符:
managesdk.NotIn("field", []any{v1, v2, v3})
A: 不需要,直接使用字段名即可,底层服务会自动处理:
// 正确
managesdk.Equal("priority", 1)
// 错误(不需要加前缀)
managesdk.Equal("extend_properties->>'priority'", 1)
A: 不需要,底层服务会自动处理类型转换:
// 正确
managesdk.Equal("priority", 1)
// 不需要手动转换
managesdk.Equal("(extend_properties->>'priority')::numeric", 1)
✅ 类型安全:编译时检查,减少运行时错误
✅ 易于使用:语义清晰,无需编写 SQL
✅ 功能强大:支持复杂的逻辑组合和嵌套
✅ 可维护性:代码更清晰,易于理解和修改
✅ 扩展性:易于添加新的操作符和功能
变更完成时间:2026-05-21
变更人员:Kiro AI
状态:✅ 已完成