瀏覽代碼

修改活动查询参数

duyong 2 周之前
父節點
當前提交
7fdeee30d1
共有 4 個文件被更改,包括 939 次插入67 次删除
  1. 176 49
      ACTIVITY_PLAN_USAGE.md
  2. 479 0
      ADVANCED_QUERY_MIGRATION.md
  3. 266 0
      API_CHANGE_SUMMARY.md
  4. 18 18
      model.go

+ 176 - 49
ACTIVITY_PLAN_USAGE.md

@@ -107,10 +107,12 @@ for _, activity := range result.Infos {
 ```go
 params := managesdk.QueryActivitiesParams{
     TenantID: "tenant-001",
-    ExtendPropertyValues: map[string][]any{
-        "(extend_properties->>'priority')::numeric = ?": {1},
-        "(extend_properties->>'progress')::numeric > ?": {50},
-    },
+    AdvancedQuery: managesdk.AndQuery(
+        managesdk.AndGroup(
+            managesdk.Equal("priority", 1),
+            managesdk.GreaterThan("progress", 50),
+        ),
+    ),
     PageNo:   1,
     PageSize: 10,
 }
@@ -263,10 +265,12 @@ for _, plan := range result.Infos {
 ```go
 params := managesdk.QueryPlansParams{
     TenantID: "tenant-001",
-    ExtendPropertyValues: map[string][]any{
-        "(extend_properties->>'level')::numeric = ?": {1},
-        "(extend_properties->>'estimatedWork')::numeric > ?": {50},
-    },
+    AdvancedQuery: managesdk.AndQuery(
+        managesdk.AndGroup(
+            managesdk.Equal("level", 1),
+            managesdk.GreaterThan("estimatedWork", 50),
+        ),
+    ),
     PageNo:   1,
     PageSize: 10,
 }
@@ -388,9 +392,11 @@ func main() {
     // 2. 查询活动列表
     queryParams := managesdk.QueryActivitiesParams{
         TenantID: "tenant-001",
-        ExtendPropertyValues: map[string][]any{
-            "(extend_properties->>'priority')::numeric = ?": {1},
-        },
+        AdvancedQuery: managesdk.AndQuery(
+            managesdk.AndGroup(
+                managesdk.Equal("priority", 1),
+            ),
+        ),
         PageNo:   1,
         PageSize: 10,
     }
@@ -475,9 +481,11 @@ func main() {
     queryParams := managesdk.QueryPlansParams{
         State:    "进行中",
         TenantID: "tenant-001",
-        ExtendPropertyValues: map[string][]any{
-            "(extend_properties->>'level')::numeric = ?": {1},
-        },
+        AdvancedQuery: managesdk.AndQuery(
+            managesdk.AndGroup(
+                managesdk.Equal("level", 1),
+            ),
+        ),
         PageNo:   1,
         PageSize: 10,
     }
@@ -512,56 +520,174 @@ func main() {
 
 ## 扩展属性查询说明
 
-### 数值字段查询
+### 使用 AdvancedQuery 进行查询
+
+SDK 提供了强大的高级查询功能,通过 `AdvancedQuery` 参数可以构建复杂的查询条件。
+
+### 基本查询操作符
 
 ```go
 // 等于
-ExtendPropertyValues: map[string][]any{
-    "(extend_properties->>'priority')::numeric = ?": {1},
-}
+managesdk.Equal("priority", 1)
+
+// 不等于
+managesdk.NotEqual("priority", 1)
 
 // 大于
-ExtendPropertyValues: map[string][]any{
-    "(extend_properties->>'progress')::numeric > ?": {50},
-}
+managesdk.GreaterThan("progress", 50)
 
-// 范围查询
-ExtendPropertyValues: map[string][]any{
-    "(extend_properties->>'duration')::numeric BETWEEN ? AND ?": {2.0, 8.0},
-}
+// 大于等于
+managesdk.GreaterEqual("progress", 50)
+
+// 小于
+managesdk.LessThan("progress", 100)
+
+// 小于等于
+managesdk.LessEqual("progress", 100)
+
+// 模糊查询
+managesdk.Like("deptName", "%技术%")
+
+// 不包含
+managesdk.NotLike("deptName", "%销售%")
+
+// 以...开头
+managesdk.StartsWith("memberName", "张")
+
+// 以...结尾
+managesdk.EndsWith("memberName", "三")
+
+// 为空
+managesdk.IsNull("remark")
+
+// 不为空
+managesdk.IsNotNull("remark")
 
 // IN 查询
-ExtendPropertyValues: map[string][]any{
-    "(extend_properties->>'complex')::numeric IN (?, ?)": {2, 3},
-}
+managesdk.In("complex", []int{2, 3})
+
+// NOT IN 查询
+managesdk.NotIn("complex", []int{1})
 ```
 
-### 字符串字段查询
+### 简单查询示例
 
 ```go
-// 等于
-ExtendPropertyValues: map[string][]any{
-    "extend_properties->>'deptName' = ?": {"技术部"},
-}
+// 单个条件
+AdvancedQuery: managesdk.AndQuery(
+    managesdk.AndGroup(
+        managesdk.Equal("priority", 1),
+    ),
+)
 
-// 模糊查询
-ExtendPropertyValues: map[string][]any{
-    "extend_properties->>'memberName' LIKE ?": {"%张%"},
-}
+// 多个 AND 条件
+AdvancedQuery: managesdk.AndQuery(
+    managesdk.AndGroup(
+        managesdk.Equal("priority", 1),
+        managesdk.GreaterThan("progress", 50),
+        managesdk.Equal("deptName", "技术部"),
+    ),
+)
 
-// IN 查询
-ExtendPropertyValues: map[string][]any{
-    "extend_properties->>'categoryName' IN (?, ?)": {"研发", "行政"},
-}
+// 多个 OR 条件
+AdvancedQuery: managesdk.OrQuery(
+    managesdk.OrGroup(
+        managesdk.Equal("priority", 1),
+        managesdk.Equal("priority", 2),
+    ),
+)
+```
+
+### 复杂查询示例
+
+```go
+// 组合查询:(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),
+    ),
+)
+
+// 范围查询:duration BETWEEN 2.0 AND 8.0
+AdvancedQuery: managesdk.AndQuery(
+    managesdk.AndGroup(
+        managesdk.GreaterEqual("duration", 2.0),
+        managesdk.LessEqual("duration", 8.0),
+    ),
+)
+
+// IN 查询:complex IN (2, 3)
+AdvancedQuery: managesdk.AndQuery(
+    managesdk.AndGroup(
+        managesdk.In("complex", []int{2, 3}),
+    ),
+)
+
+// 字符串模糊查询
+AdvancedQuery: managesdk.AndQuery(
+    managesdk.AndGroup(
+        managesdk.Like("memberName", "%张%"),
+        managesdk.Equal("deptName", "技术部"),
+    ),
+)
+```
+
+### 嵌套条件组
+
+```go
+// 复杂嵌套:(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),
+            ),
+        ),
+    ),
+)
 ```
 
-### 组合查询
+### 完整查询示例
 
 ```go
-ExtendPropertyValues: map[string][]any{
-    "(extend_properties->>'priority')::numeric = ?": {1},
-    "extend_properties->>'deptName' = ?": {"技术部"},
-    "(extend_properties->>'progress')::numeric > ?": {50},
+// Activity 查询示例
+params := managesdk.QueryActivitiesParams{
+    Name:     "项目",  // 基础字段查询
+    TenantID: "tenant-001",
+    AdvancedQuery: managesdk.AndQuery(
+        managesdk.AndGroup(
+            managesdk.Equal("priority", 1),
+            managesdk.GreaterThan("progress", 50),
+            managesdk.Like("categoryName", "%研发%"),
+        ),
+    ),
+    PageNo:   1,
+    PageSize: 10,
+}
+
+// Plan 查询示例
+params := managesdk.QueryPlansParams{
+    State:    "进行中",
+    TenantID: "tenant-001",
+    AdvancedQuery: managesdk.OrQuery(
+        managesdk.AndGroup(
+            managesdk.Equal("level", 1),
+            managesdk.GreaterThan("estimatedWork", 50),
+        ),
+        managesdk.AndGroup(
+            managesdk.Equal("level", 2),
+            managesdk.GreaterThan("estimatedWork", 100),
+        ),
+    ),
+    PageNo:   1,
+    PageSize: 10,
 }
 ```
 
@@ -599,9 +725,10 @@ ExtendPropertyValues: map[string][]any{
    - 数值字段查询时需要使用 `::numeric` 转换
 
 2. **参数类型**
-   - 数值查询参数使用数值类型:`{1}`, `{2.0, 8.0}`
-   - 字符串查询参数使用字符串类型:`{"技术部"}`
-   - `ExtendPropertyValues` 的类型是 `map[string][]any`
+   - 使用 `AdvancedQuery` 进行扩展属性查询
+   - 支持丰富的查询操作符:等于、不等于、大于、小于、模糊查询、IN、范围查询等
+   - 支持 AND/OR 逻辑组合
+   - 支持嵌套条件组
 
 3. **业务类型**
    - BusinessType 是字符串数组

+ 479 - 0
ADVANCED_QUERY_MIGRATION.md

@@ -0,0 +1,479 @@
+# ExtendPropertyValues 迁移到 AdvancedQuery 说明
+
+## 变更时间
+2026-05-21
+
+## 变更原因
+为了提供更强大、更易用的查询功能,将原有的 `ExtendPropertyValues` 参数替换为 `AdvancedQuery` 参数。底层服务会将 `AdvancedQueryParams` 解析为 `ExtendPropertyValues`。
+
+---
+
+## 变更内容
+
+### 1. QueryActivitiesParams 变更
+
+#### 修改前
+```go
+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"`
+}
+```
+
+#### 修改后
+```go
+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"`
+}
+```
+
+### 2. QueryPlansParams 变更
+
+#### 修改前
+```go
+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"`
+}
+```
+
+#### 修改后
+```go
+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"`
+}
+```
+
+---
+
+## AdvancedQueryParams 结构
+
+```go
+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
+```
+
+---
+
+## 迁移指南
+
+### 旧方式(ExtendPropertyValues)
+
+```go
+// 旧的查询方式
+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,
+}
+```
+
+**缺点**:
+- 需要手动编写 SQL 片段
+- 容易出错(SQL 语法、类型转换)
+- 不够直观
+- 难以构建复杂的逻辑组合
+
+### 新方式(AdvancedQuery)
+
+```go
+// 新的查询方式
+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 查询 |
+
+---
+
+## 迁移示例
+
+### 示例 1:简单等值查询
+
+#### 旧方式
+```go
+ExtendPropertyValues: map[string][]any{
+    "(extend_properties->>'priority')::numeric = ?": {1},
+}
+```
+
+#### 新方式
+```go
+AdvancedQuery: managesdk.AndQuery(
+    managesdk.AndGroup(
+        managesdk.Equal("priority", 1),
+    ),
+)
+```
+
+### 示例 2:多条件 AND 查询
+
+#### 旧方式
+```go
+ExtendPropertyValues: map[string][]any{
+    "(extend_properties->>'priority')::numeric = ?": {1},
+    "(extend_properties->>'progress')::numeric > ?": {50},
+    "extend_properties->>'deptName' = ?": {"技术部"},
+}
+```
+
+#### 新方式
+```go
+AdvancedQuery: managesdk.AndQuery(
+    managesdk.AndGroup(
+        managesdk.Equal("priority", 1),
+        managesdk.GreaterThan("progress", 50),
+        managesdk.Equal("deptName", "技术部"),
+    ),
+)
+```
+
+### 示例 3:范围查询
+
+#### 旧方式
+```go
+ExtendPropertyValues: map[string][]any{
+    "(extend_properties->>'duration')::numeric BETWEEN ? AND ?": {2.0, 8.0},
+}
+```
+
+#### 新方式
+```go
+AdvancedQuery: managesdk.AndQuery(
+    managesdk.AndGroup(
+        managesdk.GreaterEqual("duration", 2.0),
+        managesdk.LessEqual("duration", 8.0),
+    ),
+)
+```
+
+### 示例 4:IN 查询
+
+#### 旧方式
+```go
+ExtendPropertyValues: map[string][]any{
+    "(extend_properties->>'complex')::numeric IN (?, ?)": {2, 3},
+}
+```
+
+#### 新方式
+```go
+AdvancedQuery: managesdk.AndQuery(
+    managesdk.AndGroup(
+        managesdk.In("complex", []int{2, 3}),
+    ),
+)
+```
+
+### 示例 5:模糊查询
+
+#### 旧方式
+```go
+ExtendPropertyValues: map[string][]any{
+    "extend_properties->>'memberName' LIKE ?": {"%张%"},
+}
+```
+
+#### 新方式
+```go
+AdvancedQuery: managesdk.AndQuery(
+    managesdk.AndGroup(
+        managesdk.Like("memberName", "%张%"),
+    ),
+)
+```
+
+### 示例 6:OR 查询
+
+#### 旧方式
+```go
+// 旧方式不支持 OR 查询,需要多次调用
+```
+
+#### 新方式
+```go
+AdvancedQuery: managesdk.OrQuery(
+    managesdk.OrGroup(
+        managesdk.Equal("priority", 1),
+        managesdk.Equal("priority", 2),
+    ),
+)
+```
+
+### 示例 7:复杂组合查询
+
+#### 旧方式
+```go
+// 旧方式难以表达:(priority = 1 AND progress > 50) OR (priority = 2 AND progress > 80)
+```
+
+#### 新方式
+```go
+AdvancedQuery: managesdk.OrQuery(
+    managesdk.AndGroup(
+        managesdk.Equal("priority", 1),
+        managesdk.GreaterThan("progress", 50),
+    ),
+    managesdk.AndGroup(
+        managesdk.Equal("priority", 2),
+        managesdk.GreaterThan("progress", 80),
+    ),
+)
+```
+
+---
+
+## 新增功能
+
+### 1. 嵌套条件组
+
+```go
+// (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),
+            ),
+        ),
+    ),
+)
+```
+
+### 2. 便捷的辅助函数
+
+```go
+// 快速构建 AND 查询
+managesdk.AndQuery(groups...)
+
+// 快速构建 OR 查询
+managesdk.OrQuery(groups...)
+
+// 快速构建 AND 条件组
+managesdk.AndGroup(conditions...)
+
+// 快速构建 OR 条件组
+managesdk.OrGroup(conditions...)
+```
+
+### 3. 丰富的操作符
+
+- 基础比较:`Equal`, `NotEqual`, `GreaterThan`, `GreaterEqual`, `LessThan`, `LessEqual`
+- 字符串匹配:`Like`, `NotLike`, `StartsWith`, `EndsWith`
+- 空值判断:`IsNull`, `IsNotNull`
+- 集合操作:`In`, `NotIn`
+
+---
+
+## 向后兼容性
+
+⚠️ **这是一个破坏性变更**
+
+- `ExtendPropertyValues` 参数已被移除
+- 所有使用 `ExtendPropertyValues` 的代码需要迁移到 `AdvancedQuery`
+
+---
+
+## 迁移步骤
+
+### 1. 更新 SDK 版本
+
+确保使用最新版本的 bdata SDK。
+
+### 2. 替换查询参数
+
+将所有 `ExtendPropertyValues` 替换为 `AdvancedQuery`。
+
+### 3. 重写查询逻辑
+
+使用新的查询构建器 API 重写查询条件。
+
+### 4. 测试验证
+
+充分测试所有查询功能,确保结果正确。
+
+---
+
+## 常见问题
+
+### Q1: 如何表达复杂的 SQL 条件?
+
+**A**: 使用嵌套条件组和多个条件组合:
+
+```go
+// (A AND B) OR (C AND D)
+managesdk.OrQuery(
+    managesdk.AndGroup(A, B),
+    managesdk.AndGroup(C, D),
+)
+```
+
+### Q2: 如何进行 BETWEEN 查询?
+
+**A**: 使用 `GreaterEqual` 和 `LessEqual` 组合:
+
+```go
+managesdk.AndGroup(
+    managesdk.GreaterEqual("field", min),
+    managesdk.LessEqual("field", max),
+)
+```
+
+### Q3: 如何进行 NOT IN 查询?
+
+**A**: 使用 `NotIn` 操作符:
+
+```go
+managesdk.NotIn("field", []any{v1, v2, v3})
+```
+
+### Q4: 字段名需要加前缀吗?
+
+**A**: 不需要,直接使用字段名即可,底层服务会自动处理:
+
+```go
+// 正确
+managesdk.Equal("priority", 1)
+
+// 错误(不需要加前缀)
+managesdk.Equal("extend_properties->>'priority'", 1)
+```
+
+### Q5: 数值类型需要转换吗?
+
+**A**: 不需要,底层服务会自动处理类型转换:
+
+```go
+// 正确
+managesdk.Equal("priority", 1)
+
+// 不需要手动转换
+managesdk.Equal("(extend_properties->>'priority')::numeric", 1)
+```
+
+---
+
+## 相关文档
+
+- **ACTIVITY_PLAN_USAGE.md** - 完整的使用文档
+- **advanced_query.go** - AdvancedQuery 实现源码
+- **model.go** - 数据模型定义
+
+---
+
+## 总结
+
+### 优势
+
+✅ **类型安全**:编译时检查,减少运行时错误  
+✅ **易于使用**:语义清晰,无需编写 SQL  
+✅ **功能强大**:支持复杂的逻辑组合和嵌套  
+✅ **可维护性**:代码更清晰,易于理解和修改  
+✅ **扩展性**:易于添加新的操作符和功能  
+
+### 迁移建议
+
+1. 优先迁移简单查询
+2. 逐步迁移复杂查询
+3. 充分测试每个迁移点
+4. 保留旧代码作为参考
+
+---
+
+**变更完成时间**:2026-05-21  
+**变更人员**:Kiro AI  
+**状态**:✅ 已完成

+ 266 - 0
API_CHANGE_SUMMARY.md

@@ -0,0 +1,266 @@
+# bdata SDK API 变更总结
+
+## 📋 变更概述
+
+**变更时间**:2026-05-21  
+**变更类型**:破坏性变更  
+**影响范围**:Activity 和 Plan 查询接口
+
+---
+
+## 🔧 核心变更
+
+### 参数替换
+
+将 `ExtendPropertyValues` 参数替换为 `AdvancedQuery` 参数。
+
+#### QueryActivitiesParams
+
+```go
+// 旧参数(已移除)
+ExtendPropertyValues map[string][]any `json:"extendPropertyValues,omitempty"`
+
+// 新参数
+AdvancedQuery *AdvancedQueryParams `json:"advancedQuery,omitempty"`
+```
+
+#### QueryPlansParams
+
+```go
+// 旧参数(已移除)
+ExtendPropertyValues map[string][]any `json:"extendPropertyValues,omitempty"`
+
+// 新参数
+AdvancedQuery *AdvancedQueryParams `json:"advancedQuery,omitempty"`
+```
+
+---
+
+## 📊 对比示例
+
+### 旧方式(ExtendPropertyValues)
+
+```go
+params := managesdk.QueryActivitiesParams{
+    TenantID: "tenant-001",
+    ExtendPropertyValues: map[string][]any{
+        "(extend_properties->>'priority')::numeric = ?": {1},
+        "(extend_properties->>'progress')::numeric > ?": {50},
+    },
+    PageNo:   1,
+    PageSize: 10,
+}
+```
+
+**缺点**:
+- ❌ 需要手动编写 SQL 片段
+- ❌ 容易出错(SQL 语法、类型转换)
+- ❌ 不支持复杂的 OR 逻辑
+- ❌ 代码可读性差
+
+### 新方式(AdvancedQuery)
+
+```go
+params := managesdk.QueryActivitiesParams{
+    TenantID: "tenant-001",
+    AdvancedQuery: managesdk.AndQuery(
+        managesdk.AndGroup(
+            managesdk.Equal("priority", 1),
+            managesdk.GreaterThan("progress", 50),
+        ),
+    ),
+    PageNo:   1,
+    PageSize: 10,
+}
+```
+
+**优点**:
+- ✅ 类型安全
+- ✅ 语义清晰
+- ✅ 支持复杂逻辑组合
+- ✅ 代码可读性强
+- ✅ 易于维护
+
+---
+
+## 🎯 支持的操作符
+
+| 操作符 | 函数 | 示例 |
+|--------|------|------|
+| = | `Equal(field, value)` | `Equal("priority", 1)` |
+| != | `NotEqual(field, value)` | `NotEqual("status", "closed")` |
+| > | `GreaterThan(field, value)` | `GreaterThan("progress", 50)` |
+| >= | `GreaterEqual(field, value)` | `GreaterEqual("duration", 2.0)` |
+| < | `LessThan(field, value)` | `LessThan("progress", 100)` |
+| <= | `LessEqual(field, value)` | `LessEqual("duration", 8.0)` |
+| LIKE | `Like(field, value)` | `Like("name", "%项目%")` |
+| NOT LIKE | `NotLike(field, value)` | `NotLike("name", "%测试%")` |
+| STARTS WITH | `StartsWith(field, value)` | `StartsWith("name", "项目")` |
+| ENDS WITH | `EndsWith(field, value)` | `EndsWith("name", "完成")` |
+| IS NULL | `IsNull(field)` | `IsNull("remark")` |
+| IS NOT NULL | `IsNotNull(field)` | `IsNotNull("remark")` |
+| IN | `In(field, values)` | `In("priority", []int{1, 2})` |
+| NOT IN | `NotIn(field, values)` | `NotIn("status", []string{"closed"})` |
+
+---
+
+## 💡 常用查询模式
+
+### 1. 简单查询
+
+```go
+AdvancedQuery: managesdk.AndQuery(
+    managesdk.AndGroup(
+        managesdk.Equal("priority", 1),
+    ),
+)
+```
+
+### 2. 多条件 AND
+
+```go
+AdvancedQuery: managesdk.AndQuery(
+    managesdk.AndGroup(
+        managesdk.Equal("priority", 1),
+        managesdk.GreaterThan("progress", 50),
+        managesdk.Equal("deptName", "技术部"),
+    ),
+)
+```
+
+### 3. 多条件 OR
+
+```go
+AdvancedQuery: managesdk.OrQuery(
+    managesdk.OrGroup(
+        managesdk.Equal("priority", 1),
+        managesdk.Equal("priority", 2),
+    ),
+)
+```
+
+### 4. 范围查询
+
+```go
+AdvancedQuery: managesdk.AndQuery(
+    managesdk.AndGroup(
+        managesdk.GreaterEqual("duration", 2.0),
+        managesdk.LessEqual("duration", 8.0),
+    ),
+)
+```
+
+### 5. IN 查询
+
+```go
+AdvancedQuery: managesdk.AndQuery(
+    managesdk.AndGroup(
+        managesdk.In("complex", []int{2, 3}),
+    ),
+)
+```
+
+### 6. 模糊查询
+
+```go
+AdvancedQuery: managesdk.AndQuery(
+    managesdk.AndGroup(
+        managesdk.Like("memberName", "%张%"),
+    ),
+)
+```
+
+### 7. 复杂组合
+
+```go
+// (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),
+    ),
+)
+```
+
+---
+
+## 📝 迁移清单
+
+### 修改的文件
+
+- ✅ `bdata/model.go` - 更新 QueryActivitiesParams 和 QueryPlansParams
+- ✅ `bdata/ACTIVITY_PLAN_USAGE.md` - 更新使用文档
+- ✅ `bdata/ADVANCED_QUERY_MIGRATION.md` - 创建迁移指南
+- ✅ `bdata/API_CHANGE_SUMMARY.md` - 创建变更总结
+
+### 需要迁移的代码
+
+所有使用以下参数的代码需要迁移:
+- `QueryActivitiesParams.ExtendPropertyValues`
+- `QueryPlansParams.ExtendPropertyValues`
+
+---
+
+## ⚠️ 注意事项
+
+### 1. 破坏性变更
+
+这是一个破坏性变更,所有使用 `ExtendPropertyValues` 的代码必须迁移。
+
+### 2. 字段名不需要前缀
+
+```go
+// ✅ 正确
+managesdk.Equal("priority", 1)
+
+// ❌ 错误(不需要加前缀)
+managesdk.Equal("extend_properties->>'priority'", 1)
+```
+
+### 3. 自动类型转换
+
+底层服务会自动处理类型转换,无需手动转换:
+
+```go
+// ✅ 正确
+managesdk.Equal("priority", 1)
+
+// ❌ 不需要(底层自动处理)
+managesdk.Equal("(extend_properties->>'priority')::numeric", 1)
+```
+
+### 4. 底层处理
+
+底层服务会将 `AdvancedQueryParams` 解析为 `ExtendPropertyValues`,开发者无需关心实现细节。
+
+---
+
+## 📚 相关文档
+
+1. **ADVANCED_QUERY_MIGRATION.md** - 详细的迁移指南
+2. **ACTIVITY_PLAN_USAGE.md** - 完整的使用文档
+3. **advanced_query.go** - AdvancedQuery 实现源码
+
+---
+
+## ✅ 优势总结
+
+| 特性 | 旧方式 | 新方式 |
+|------|--------|--------|
+| 类型安全 | ❌ | ✅ |
+| 易于使用 | ❌ | ✅ |
+| 支持 OR 逻辑 | ❌ | ✅ |
+| 支持嵌套条件 | ❌ | ✅ |
+| 代码可读性 | ⭐⭐ | ⭐⭐⭐⭐⭐ |
+| 可维护性 | ⭐⭐ | ⭐⭐⭐⭐⭐ |
+| 扩展性 | ⭐⭐ | ⭐⭐⭐⭐⭐ |
+
+---
+
+**变更完成时间**:2026-05-21  
+**变更人员**:Kiro AI  
+**状态**:✅ 已完成

+ 18 - 18
model.go

@@ -172,14 +172,14 @@ type SaveActivityParams struct {
 }
 
 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"`
+	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 DeleteActivityParams struct {
@@ -242,16 +242,16 @@ type SavePlanParams struct {
 }
 
 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"`
+	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 DeletePlanParams struct {