浏览代码

Merge remote-tracking branch 'origin/master'

haolongfei 1 天之前
父节点
当前提交
5018b7b20f
共有 3 个文件被更改,包括 20 次插入1069 次删除
  1. 0 621
      ACTIVITY_PLAN_USAGE.md
  2. 0 430
      ADVANCED_QUERY_USAGE.md
  3. 20 18
      model.go

+ 0 - 621
ACTIVITY_PLAN_USAGE.md

@@ -1,621 +0,0 @@
-# Activity 和 Plan SDK 使用指南
-
-## 概述
-
-bdata SDK 现已支持 Activity(活动)和 Plan(计划)服务的接口调用。
-
-## 新增服务类型
-
-```go
-const (
-    ServiceTypePerson   ServiceType = "person"
-    ServiceTypeResource ServiceType = "resource"
-    ServiceTypeActivity ServiceType = "activity"  // 新增
-    ServiceTypePlan     ServiceType = "plan"      // 新增
-)
-```
-
-## 默认 BaseURL
-
-```go
-const (
-    DefaultActivityBaseURL = "http://10.0.0.210:30684/mbrms/api"
-    DefaultPlanBaseURL     = "http://10.0.0.210:30684/mbrms/api"
-)
-```
-
----
-
-## Activity(活动)使用示例
-
-### 1. 创建客户端
-
-```go
-import "managesdk"
-
-// 使用默认 BaseURL
-client := managesdk.NewClient(managesdk.Config{
-    Type:    managesdk.ServiceTypeActivity,
-    Timeout: 10,
-})
-
-// 或者自定义 BaseURL
-client := managesdk.NewClient(managesdk.Config{
-    Type:    managesdk.ServiceTypeActivity,
-    BaseURL: "http://localhost:8080/mbrms/api",
-    Timeout: 10,
-})
-```
-
-### 2. 保存活动
-
-```go
-params := managesdk.SaveActivityParams{
-    Name:        "测试活动",
-    Description: "这是一个测试活动",
-    ActorID:     "user-001",
-    BusinessType: []string{"mbact", "daily"},
-    ExtendProperties: map[string]any{
-        "categoryId":   "cat-001",
-        "categoryName": "研发",
-        "deptId":       "dept-001",
-        "deptName":     "技术部",
-        "priority":     1,
-        "progress":     50,
-        "duration":     4.5,
-        "onPlan":       1,
-        "year":         2026,
-        "week":         21,
-    },
-    TenantID:         "tenant-001",
-    CreateUserID:     "user-001",
-    UpdateUserID:     "user-001",
-    OperatorUserName: "测试用户",
-}
-
-id, err := client.Manage().Save(params)
-if err != nil {
-    log.Fatalf("保存活动失败: %v", err)
-}
-fmt.Printf("活动ID: %s\n", id)
-```
-
-### 3. 查询活动列表
-
-```go
-params := managesdk.QueryActivitiesParams{
-    Name:     "测试",
-    ActorID:  "user-001",
-    TenantID: "tenant-001",
-    PageNo:   1,
-    PageSize: 10,
-}
-
-result, err := client.Manage().Query(params)
-if err != nil {
-    log.Fatalf("查询活动列表失败: %v", err)
-}
-
-fmt.Printf("总数: %d\n", result.TotalCount)
-for _, activity := range result.Infos {
-    fmt.Printf("活动: %+v\n", activity)
-}
-```
-
-### 4. 按扩展属性查询
-
-```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,
-}
-
-result, err := client.Manage().Query(params)
-if err != nil {
-    log.Fatalf("查询失败: %v", err)
-}
-```
-
-### 5. 获取活动详情
-
-```go
-params := managesdk.GetActivityParams{
-    ID: "activity-id-123",
-}
-
-activity, err := client.Manage().Get(params)
-if err != nil {
-    log.Fatalf("获取活动详情失败: %v", err)
-}
-fmt.Printf("活动详情: %+v\n", activity)
-```
-
-### 6. 删除活动
-
-```go
-// 删除部分业务类型
-params := managesdk.DeleteActivityParams{
-    ID:               "activity-id-123",
-    BusinessType:     []string{"daily"},
-    DeleteWhole:      false,
-    DeleteUserID:     "user-001",
-    OperatorUserName: "测试用户",
-}
-
-err := client.Manage().Delete(params)
-if err != nil {
-    log.Fatalf("删除失败: %v", err)
-}
-
-// 删除整条记录
-params := managesdk.DeleteActivityParams{
-    ID:               "activity-id-123",
-    BusinessType:     []string{"mbact"},
-    DeleteWhole:      true,
-    DeleteUserID:     "user-001",
-    OperatorUserName: "测试用户",
-}
-
-err := client.Manage().Delete(params)
-```
-
-### 7. 获取预定义字段
-
-```go
-fields, err := client.Manage().PredefinedFields()
-if err != nil {
-    log.Fatalf("获取预定义字段失败: %v", err)
-}
-
-for _, field := range fields {
-    fmt.Printf("字段: %+v\n", field)
-}
-```
-
----
-
-## Plan(计划)使用示例
-
-### 1. 创建客户端
-
-```go
-import "managesdk"
-
-// 使用默认 BaseURL
-client := managesdk.NewClient(managesdk.Config{
-    Type:    managesdk.ServiceTypePlan,
-    Timeout: 10,
-})
-
-// 或者自定义 BaseURL
-client := managesdk.NewClient(managesdk.Config{
-    Type:    managesdk.ServiceTypePlan,
-    BaseURL: "http://localhost:8080/mbrms/api",
-    Timeout: 10,
-})
-```
-
-### 2. 保存计划
-
-```go
-params := managesdk.SavePlanParams{
-    PlanType:    "短期活动",
-    Name:        "测试计划",
-    Description: "这是一个测试计划",
-    ActorID:     "user-001",
-    State:       "进行中",
-    BusinessType: []string{"mbact", "project"},
-    ExtendProperties: map[string]any{
-        "no":                  32,
-        "level":               3,
-        "matterType":          2,
-        "projectId":           "9b92a7e75abc4d56bc5f5120df89a76c",
-        "storyPoints":         5,
-        "estimatedWork":       80,
-        "actualCompleteness":  50,
-    },
-    StartTime:        "2026-05-20T09:00:00Z",
-    EndTime:          "2026-05-25T18:00:00Z",
-    TenantID:         "tenant-001",
-    CreateUserID:     "user-001",
-    UpdateUserID:     "user-001",
-    OperatorUserName: "测试用户",
-}
-
-id, err := client.Manage().Save(params)
-if err != nil {
-    log.Fatalf("保存计划失败: %v", err)
-}
-fmt.Printf("计划ID: %s\n", id)
-```
-
-### 3. 查询计划列表
-
-```go
-params := managesdk.QueryPlansParams{
-    PlanType: "短期活动",
-    Name:     "测试",
-    ActorID:  "user-001",
-    State:    "进行中",
-    TenantID: "tenant-001",
-    PageNo:   1,
-    PageSize: 10,
-}
-
-result, err := client.Manage().Query(params)
-if err != nil {
-    log.Fatalf("查询计划列表失败: %v", err)
-}
-
-fmt.Printf("总数: %d\n", result.TotalCount)
-for _, plan := range result.Infos {
-    fmt.Printf("计划: %+v\n", plan)
-}
-```
-
-### 4. 按扩展属性查询
-
-```go
-params := managesdk.QueryPlansParams{
-    TenantID: "tenant-001",
-    ExtendPropertyValues: map[string][]any{
-        "(extend_properties->>'level')::numeric = ?": {1},
-        "(extend_properties->>'estimatedWork')::numeric > ?": {50},
-    },
-    PageNo:   1,
-    PageSize: 10,
-}
-
-result, err := client.Manage().Query(params)
-if err != nil {
-    log.Fatalf("查询失败: %v", err)
-}
-```
-
-### 5. 获取计划详情
-
-```go
-params := managesdk.GetPlanParams{
-    ID: "plan-id-123",
-}
-
-plan, err := client.Manage().Get(params)
-if err != nil {
-    log.Fatalf("获取计划详情失败: %v", err)
-}
-fmt.Printf("计划详情: %+v\n", plan)
-```
-
-### 6. 删除计划
-
-```go
-// 删除部分业务类型
-params := managesdk.DeletePlanParams{
-    ID:               "plan-id-123",
-    BusinessType:     []string{"project"},
-    DeleteWhole:      false,
-    DeleteUserID:     "user-001",
-    OperatorUserName: "测试用户",
-}
-
-err := client.Manage().Delete(params)
-if err != nil {
-    log.Fatalf("删除失败: %v", err)
-}
-
-// 删除整条记录
-params := managesdk.DeletePlanParams{
-    ID:               "plan-id-123",
-    BusinessType:     []string{"mbact"},
-    DeleteWhole:      true,
-    DeleteUserID:     "user-001",
-    OperatorUserName: "测试用户",
-}
-
-err := client.Manage().Delete(params)
-```
-
-### 7. 获取预定义字段
-
-```go
-fields, err := client.Manage().PredefinedFields()
-if err != nil {
-    log.Fatalf("获取预定义字段失败: %v", err)
-}
-
-for _, field := range fields {
-    fmt.Printf("字段: %+v\n", field)
-}
-```
-
----
-
-## 完整示例
-
-### Activity 完整示例
-
-```go
-package main
-
-import (
-    "fmt"
-    "log"
-    "managesdk"
-)
-
-func main() {
-    // 创建客户端
-    client := managesdk.NewClient(managesdk.Config{
-        Type:    managesdk.ServiceTypeActivity,
-        BaseURL: "http://localhost:8080/mbrms/api",
-        Timeout: 10,
-    })
-
-    // 1. 保存活动
-    saveParams := managesdk.SaveActivityParams{
-        Name:        "日常工作活动",
-        Description: "完成项目需求文档编写",
-        ActorID:     "user-001",
-        BusinessType: []string{"mbact", "daily"},
-        ExtendProperties: map[string]any{
-            "categoryName": "研发",
-            "deptName":     "技术部",
-            "memberName":   "张三",
-            "priority":     1,
-            "progress":     50,
-            "duration":     4.5,
-            "onPlan":       1,
-            "year":         2026,
-            "week":         21,
-        },
-        TenantID:         "tenant-001",
-        CreateUserID:     "user-001",
-        UpdateUserID:     "user-001",
-        OperatorUserName: "测试用户",
-    }
-
-    activityID, err := client.Manage().Save(saveParams)
-    if err != nil {
-        log.Fatalf("保存活动失败: %v", err)
-    }
-    fmt.Printf("创建活动成功,ID: %s\n", activityID)
-
-    // 2. 查询活动列表
-    queryParams := managesdk.QueryActivitiesParams{
-        TenantID: "tenant-001",
-        ExtendPropertyValues: map[string][]any{
-            "(extend_properties->>'priority')::numeric = ?": {1},
-        },
-        PageNo:   1,
-        PageSize: 10,
-    }
-
-    result, err := client.Manage().Query(queryParams)
-    if err != nil {
-        log.Fatalf("查询活动列表失败: %v", err)
-    }
-    fmt.Printf("查询到 %d 条活动\n", result.TotalCount)
-
-    // 3. 获取活动详情
-    getParams := managesdk.GetActivityParams{
-        ID: activityID,
-    }
-
-    activity, err := client.Manage().Get(getParams)
-    if err != nil {
-        log.Fatalf("获取活动详情失败: %v", err)
-    }
-    fmt.Printf("活动详情: %+v\n", activity)
-
-    // 4. 获取预定义字段
-    fields, err := client.Manage().PredefinedFields()
-    if err != nil {
-        log.Fatalf("获取预定义字段失败: %v", err)
-    }
-    fmt.Printf("预定义字段数量: %d\n", len(fields))
-}
-```
-
-### Plan 完整示例
-
-```go
-package main
-
-import (
-    "fmt"
-    "log"
-    "managesdk"
-)
-
-func main() {
-    // 创建客户端
-    client := managesdk.NewClient(managesdk.Config{
-        Type:    managesdk.ServiceTypePlan,
-        BaseURL: "http://localhost:8080/mbrms/api",
-        Timeout: 10,
-    })
-
-    // 1. 保存计划
-    saveParams := managesdk.SavePlanParams{
-        PlanType:    "短期活动",
-        Name:        "项目开发计划",
-        Description: "完成项目开发任务",
-        ActorID:     "user-001",
-        State:       "进行中",
-        BusinessType: []string{"mbact", "project"},
-        ExtendProperties: map[string]any{
-            "no":                 32,
-            "level":              1,
-            "matterType":         1,
-            "projectId":          "9b92a7e75abc4d56bc5f5120df89a76c",
-            "storyPoints":        5,
-            "estimatedWork":      80,
-            "actualCompleteness": 50,
-        },
-        StartTime:        "2026-05-20T09:00:00Z",
-        EndTime:          "2026-05-25T18:00:00Z",
-        TenantID:         "tenant-001",
-        CreateUserID:     "user-001",
-        UpdateUserID:     "user-001",
-        OperatorUserName: "测试用户",
-    }
-
-    planID, err := client.Manage().Save(saveParams)
-    if err != nil {
-        log.Fatalf("保存计划失败: %v", err)
-    }
-    fmt.Printf("创建计划成功,ID: %s\n", planID)
-
-    // 2. 查询计划列表
-    queryParams := managesdk.QueryPlansParams{
-        State:    "进行中",
-        TenantID: "tenant-001",
-        ExtendPropertyValues: map[string][]any{
-            "(extend_properties->>'level')::numeric = ?": {1},
-        },
-        PageNo:   1,
-        PageSize: 10,
-    }
-
-    result, err := client.Manage().Query(queryParams)
-    if err != nil {
-        log.Fatalf("查询计划列表失败: %v", err)
-    }
-    fmt.Printf("查询到 %d 条计划\n", result.TotalCount)
-
-    // 3. 获取计划详情
-    getParams := managesdk.GetPlanParams{
-        ID: planID,
-    }
-
-    plan, err := client.Manage().Get(getParams)
-    if err != nil {
-        log.Fatalf("获取计划详情失败: %v", err)
-    }
-    fmt.Printf("计划详情: %+v\n", plan)
-
-    // 4. 获取预定义字段
-    fields, err := client.Manage().PredefinedFields()
-    if err != nil {
-        log.Fatalf("获取预定义字段失败: %v", err)
-    }
-    fmt.Printf("预定义字段数量: %d\n", len(fields))
-}
-```
-
----
-
-## 扩展属性查询说明
-
-### 数值字段查询
-
-```go
-// 等于
-ExtendPropertyValues: map[string][]any{
-    "(extend_properties->>'priority')::numeric = ?": {1},
-}
-
-// 大于
-ExtendPropertyValues: map[string][]any{
-    "(extend_properties->>'progress')::numeric > ?": {50},
-}
-
-// 范围查询
-ExtendPropertyValues: map[string][]any{
-    "(extend_properties->>'duration')::numeric BETWEEN ? AND ?": {2.0, 8.0},
-}
-
-// IN 查询
-ExtendPropertyValues: map[string][]any{
-    "(extend_properties->>'complex')::numeric IN (?, ?)": {2, 3},
-}
-```
-
-### 字符串字段查询
-
-```go
-// 等于
-ExtendPropertyValues: map[string][]any{
-    "extend_properties->>'deptName' = ?": {"技术部"},
-}
-
-// 模糊查询
-ExtendPropertyValues: map[string][]any{
-    "extend_properties->>'memberName' LIKE ?": {"%张%"},
-}
-
-// IN 查询
-ExtendPropertyValues: map[string][]any{
-    "extend_properties->>'categoryName' IN (?, ?)": {"研发", "行政"},
-}
-```
-
-### 组合查询
-
-```go
-ExtendPropertyValues: map[string][]any{
-    "(extend_properties->>'priority')::numeric = ?": {1},
-    "extend_properties->>'deptName' = ?": {"技术部"},
-    "(extend_properties->>'progress')::numeric > ?": {50},
-}
-```
-
----
-
-## API 路径映射
-
-| 服务类型 | API 路径前缀 |
-|---------|-------------|
-| Activity | `/v1/activity` |
-| Plan | `/v1/plan` |
-
-### 接口列表
-
-| 方法 | 路径 | 说明 |
-|------|------|------|
-| POST | `/v1/activity/save` | 保存活动 |
-| POST | `/v1/activity/query` | 查询活动列表 |
-| POST | `/v1/activity/get` | 获取活动详情 |
-| POST | `/v1/activity/delete` | 删除活动 |
-| GET | `/v1/activity/predefined-fields` | 获取预定义字段 |
-| POST | `/v1/plan/save` | 保存计划 |
-| POST | `/v1/plan/query` | 查询计划列表 |
-| POST | `/v1/plan/get` | 获取计划详情 |
-| POST | `/v1/plan/delete` | 删除计划 |
-| GET | `/v1/plan/predefined-fields` | 获取预定义字段 |
-
----
-
-## 注意事项
-
-1. **扩展属性类型**
-   - Activity 数值字段:priority, progress, duration, onPlan, year, week, stage, complex
-   - Plan 数值字段:no, level, matterType, storyPoints, estimatedWork, actualCompleteness
-   - 数值字段查询时需要使用 `::numeric` 转换
-
-2. **参数类型**
-   - 数值查询参数使用数值类型:`{1}`, `{2.0, 8.0}`
-   - 字符串查询参数使用字符串类型:`{"技术部"}`
-   - `ExtendPropertyValues` 的类型是 `map[string][]any`
-
-3. **业务类型**
-   - BusinessType 是字符串数组
-   - 删除时可以指定删除部分业务类型或整条记录
-
-4. **BaseURL**
-   - Activity 和 Plan 使用相同的 BaseURL(都在 mbrms 服务下)
-   - 可以通过 Config.BaseURL 自定义
-
----
-
-## 相关文档
-
-- bdata SDK README: `README.md`
-- Activity 测试用例: `ActivityManage/http_test/activity.http`
-- Plan 测试用例: `ActivityManage/http_test/plan.http`
-- 数据类型说明: `ActivityManage/http_test/DATA_TYPES.md`

+ 0 - 430
ADVANCED_QUERY_USAGE.md

@@ -1,430 +0,0 @@
-# 高级查询使用说明
-
-## 概述
-
-高级查询模块提供了类似 Navicat 数据筛选的灵活查询条件构建能力,支持复杂的条件组合和嵌套。
-
-## 核心概念
-
-### 1. 查询操作符 (QueryOperator)
-
-| 操作符 | 常量 | 说明 | 示例 |
-|--------|------|------|------|
-| 等于 | `OperatorEqual` | 字段值等于指定值 | `name = "测试"` |
-| 不等于 | `OperatorNotEqual` | 字段值不等于指定值 | `status != "deleted"` |
-| 大于 | `OperatorGreaterThan` | 字段值大于指定值 | `quantity > 10` |
-| 大于等于 | `OperatorGreaterEqual` | 字段值大于等于指定值 | `price >= 100` |
-| 小于 | `OperatorLessThan` | 字段值小于指定值 | `stock < 50` |
-| 小于等于 | `OperatorLessEqual` | 字段值小于等于指定值 | `age <= 18` |
-| 包含 | `OperatorLike` | 字段值包含指定字符串 | `name LIKE "%测试%"` |
-| 不包含 | `OperatorNotLike` | 字段值不包含指定字符串 | `name NOT LIKE "%测试%"` |
-| 开头是 | `OperatorStartsWith` | 字段值以指定字符串开头 | `code LIKE "ABC%"` |
-| 结尾是 | `OperatorEndsWith` | 字段值以指定字符串结尾 | `email LIKE "%@qq.com"` |
-| 为空 | `OperatorIsNull` | 字段值为 NULL | `deleted_at IS NULL` |
-| 不为空 | `OperatorIsNotNull` | 字段值不为 NULL | `email IS NOT NULL` |
-| 在列表中 | `OperatorIn` | 字段值在指定列表中 | `status IN ('active', 'pending')` |
-| 不在列表中 | `OperatorNotIn` | 字段值不在指定列表中 | `status NOT IN ('deleted', 'archived')` |
-
-### 2. 逻辑操作符 (LogicOperator)
-
-| 操作符 | 常量 | 说明 |
-|--------|------|------|
-| 与 | `LogicAnd` | 所有条件都必须满足 |
-| 或 | `LogicOr` | 满足任意一个条件即可 |
-
-### 3. 数据结构
-
-```go
-// 单个查询条件
-type QueryCondition struct {
-    Field    string        // 字段名
-    Operator QueryOperator // 操作符
-    Value    any           // 比较值(可选)
-}
-
-// 条件项(可以是单个条件或嵌套的条件组)
-type ConditionItem struct {
-    Condition       *ConditionGroup // 嵌套条件组
-    SingleCondition *QueryCondition // 单个条件
-}
-
-// 条件组
-type ConditionGroup struct {
-    Conditions []ConditionItem // 条件列表
-    Logic      LogicOperator   // 组内逻辑关系
-}
-
-// 高级查询参数
-type AdvancedQueryParams struct {
-    ConditionGroups []ConditionGroup // 条件组列表
-    GroupLogic      LogicOperator    // 组间逻辑关系
-}
-```
-
-## 快捷函数
-
-### 单条件快捷函数
-
-```go
-// 等于
-Equal("name", "测试资源")
-
-// 不等于
-NotEqual("status", "deleted")
-
-// 大于
-GreaterThan("quantity", 10)
-
-// 大于等于
-GreaterEqual("price", 100)
-
-// 小于
-LessThan("stock", 50)
-
-// 小于等于
-LessEqual("age", 18)
-
-// 包含(模糊匹配)
-Like("name", "测试")
-
-// 不包含
-NotLike("name", "测试")
-
-// 开头是
-StartsWith("code", "ABC")
-
-// 结尾是
-EndsWith("email", "@qq.com")
-
-// 为空
-IsNull("deleted_at")
-
-// 不为空
-IsNotNull("email")
-
-// 在列表中
-In("category", []any{"设备", "耗材", "工具"})
-
-// 不在列表中
-NotIn("status", []any{"deleted", "archived"})
-```
-
-### 条件组快捷函数
-
-```go
-// AND 条件组(所有条件都必须满足)
-AndGroup(
-    Equal("name", "测试"),
-    GreaterThan("quantity", 10),
-    IsNotNull("code"),
-)
-
-// OR 条件组(满足任意一个条件即可)
-OrGroup(
-    Equal("category", "设备"),
-    Equal("category", "耗材"),
-    Like("name", "测试"),
-)
-```
-
-### 完整查询快捷函数
-
-```go
-// AND 查询(所有条件组都必须满足)
-AndQuery(
-    AndGroup(Equal("name", "测试"), GreaterThan("quantity", 10)),
-    OrGroup(Equal("category", "设备"), Equal("category", "耗材")),
-)
-
-// OR 查询(满足任意一个条件组即可)
-OrQuery(
-    AndGroup(Equal("status", "active"), GreaterThan("quantity", 0)),
-    AndGroup(Equal("status", "pending"), IsNotNull("approved_by")),
-)
-```
-
-## 使用示例
-
-### 示例 1:简单条件查询
-
-查询名称包含"测试"且数量大于 10 的资源:
-
-```go
-params := managesdk.QueryResourcesParams{
-    TenantID: "tenant123",
-    AdvancedQuery: &managesdk.AdvancedQueryParams{
-        ConditionGroups: []managesdk.ConditionGroup{
-            managesdk.AndGroup(
-                managesdk.Like("name", "测试"),
-                managesdk.GreaterThan("quantity", 10),
-            ),
-        },
-        GroupLogic: managesdk.LogicAnd,
-    },
-    BaseQueryParams: managesdk.BaseQueryParams{
-        PageNo:   1,
-        PageSize: 10,
-    },
-}
-
-result, err := client.Manage().Query(params)
-```
-
-等价于 SQL:
-```sql
-WHERE (name LIKE '%测试%' AND quantity > 10)
-```
-
-### 示例 2:OR 条件查询
-
-查询分类为"设备"或"耗材"的资源:
-
-```go
-params := managesdk.QueryResourcesParams{
-    TenantID: "tenant123",
-    AdvancedQuery: &managesdk.AdvancedQueryParams{
-        ConditionGroups: []managesdk.ConditionGroup{
-            managesdk.OrGroup(
-                managesdk.Equal("category", "设备"),
-                managesdk.Equal("category", "耗材"),
-            ),
-        },
-        GroupLogic: managesdk.LogicAnd,
-    },
-    PageNo:   1,
-    PageSize: 10,
-}
-```
-
-等价于 SQL:
-```sql
-WHERE (category = '设备' OR category = '耗材')
-```
-
-### 示例 3:使用 IN 操作符
-
-查询多个分类的资源:
-
-```go
-params := managesdk.QueryResourcesParams{
-    TenantID: "tenant123",
-    AdvancedQuery: &managesdk.AdvancedQueryParams{
-        ConditionGroups: []managesdk.ConditionGroup{
-            {
-                Conditions: []managesdk.ConditionItem{
-                    managesdk.In("category", []any{"设备", "耗材", "工具"}),
-                },
-                Logic: managesdk.LogicAnd,
-            },
-        },
-        GroupLogic: managesdk.LogicAnd,
-    },
-    PageNo:   1,
-    PageSize: 10,
-}
-```
-
-等价于 SQL:
-```sql
-WHERE category IN ('设备', '耗材', '工具')
-```
-
-### 示例 4:复杂嵌套查询
-
-查询满足以下条件的资源:
-- (名称包含"测试" AND 数量 > 10) OR (分类是"设备" AND 状态不为空)
-
-```go
-params := managesdk.QueryResourcesParams{
-    TenantID: "tenant123",
-    AdvancedQuery: managesdk.OrQuery(
-        managesdk.AndGroup(
-            managesdk.Like("name", "测试"),
-            managesdk.GreaterThan("quantity", 10),
-        ),
-        managesdk.AndGroup(
-            managesdk.Equal("category", "设备"),
-            managesdk.IsNotNull("status"),
-        ),
-    ),
-    PageNo:   1,
-    PageSize: 10,
-}
-```
-
-等价于 SQL:
-```sql
-WHERE ((name LIKE '%测试%' AND quantity > 10) OR (category = '设备' AND status IS NOT NULL))
-```
-
-### 示例 5:多条件组组合
-
-查询满足以下条件的资源:
-- (名称包含"测试" AND 数量 > 10)
-- AND (分类是"设备" OR 分类是"耗材")
-- AND (状态不为空)
-
-```go
-params := managesdk.QueryResourcesParams{
-    TenantID: "tenant123",
-    AdvancedQuery: managesdk.AndQuery(
-        // 条件组1:名称和数量
-        managesdk.AndGroup(
-            managesdk.Like("name", "测试"),
-            managesdk.GreaterThan("quantity", 10),
-        ),
-        // 条件组2:分类
-        managesdk.OrGroup(
-            managesdk.Equal("category", "设备"),
-            managesdk.Equal("category", "耗材"),
-        ),
-        // 条件组3:状态
-        managesdk.AndGroup(
-            managesdk.IsNotNull("status"),
-        ),
-    ),
-    PageNo:   1,
-    PageSize: 10,
-}
-```
-
-等价于 SQL:
-```sql
-WHERE ((name LIKE '%测试%' AND quantity > 10) 
-       AND (category = '设备' OR category = '耗材') 
-       AND (status IS NOT NULL))
-```
-
-### 示例 6:深层嵌套查询
-
-查询满足以下条件的资源:
-- ((名称包含"A" OR 名称包含"B") AND 数量 > 0) OR ((分类是"设备" AND 状态是"可用"))
-
-```go
-params := managesdk.QueryResourcesParams{
-    TenantID: "tenant123",
-    AdvancedQuery: managesdk.OrQuery(
-        // 条件组1
-        managesdk.AndGroup(
-            // 嵌套的 OR 条件
-            managesdk.NewNestedConditionGroup(
-                managesdk.OrGroup(
-                    managesdk.Like("name", "A"),
-                    managesdk.Like("name", "B"),
-                ),
-            ),
-            managesdk.GreaterThan("quantity", 0),
-        ),
-        // 条件组2
-        managesdk.AndGroup(
-            managesdk.Equal("category", "设备"),
-            managesdk.Equal("status", "available"),
-        ),
-    ),
-    PageNo:   1,
-    PageSize: 10,
-}
-```
-
-等价于 SQL:
-```sql
-WHERE (((name LIKE '%A%' OR name LIKE '%B%') AND quantity > 0) 
-       OR (category = '设备' AND status = 'available'))
-```
-
-### 示例 7:范围查询
-
-查询数量在 10 到 100 之间的资源:
-
-```go
-params := managesdk.QueryResourcesParams{
-    TenantID: "tenant123",
-    AdvancedQuery: &managesdk.AdvancedQueryParams{
-        ConditionGroups: []managesdk.ConditionGroup{
-            managesdk.AndGroup(
-                managesdk.GreaterEqual("quantity", 10),
-                managesdk.LessEqual("quantity", 100),
-            ),
-        },
-        GroupLogic: managesdk.LogicAnd,
-    },
-    PageNo:   1,
-    PageSize: 10,
-}
-```
-
-等价于 SQL:
-```sql
-WHERE (quantity >= 10 AND quantity <= 100)
-```
-
-### 示例 8:空值判断
-
-查询未删除的资源(deleted_at 为空):
-
-```go
-params := managesdk.QueryResourcesParams{
-    TenantID: "tenant123",
-    AdvancedQuery: &managesdk.AdvancedQueryParams{
-        ConditionGroups: []managesdk.ConditionGroup{
-            managesdk.AndGroup(
-                managesdk.IsNull("deleted_at"),
-            ),
-        },
-        GroupLogic: managesdk.LogicAnd,
-    },
-    PageNo:   1,
-    PageSize: 10,
-}
-```
-
-等价于 SQL:
-```sql
-WHERE deleted_at IS NULL
-```
-
-## 与传统查询参数配合使用
-
-高级查询可以与传统查询参数配合使用:
-
-```go
-params := managesdk.QueryResourcesParams{
-    TenantID:     "tenant123",
-    Name:         "测试",           // 传统参数:名称筛选
-    BusinessType: "mbrms",         // 传统参数:业务类型
-    AdvancedQuery: managesdk.AndQuery(  // 高级查询:额外条件
-        managesdk.GreaterThan("quantity", 10),
-        managesdk.IsNotNull("code"),
-    ),
-    PageNo:   1,
-    PageSize: 10,
-}
-```
-
-传统参数会先应用,然后再应用高级查询条件。
-
-## 最佳实践
-
-### 1. 性能优化
-
-- 对于大表查询,优先使用 `Equal`、`In` 等精确匹配操作符
-- 避免在大文本字段上使用 `Like` 操作符
-- 合理使用索引字段进行查询
-
-### 2. 条件组织
-
-- 将选择性高的条件放在前面
-- 合理分组,避免过深的嵌套层级
-- 使用语义化的条件组命名(通过代码注释)
-
-### 3. 安全性
-
-- 字段名应该使用白名单验证
-- 避免直接拼接用户输入到查询条件
-
-## 注意事项
-
-1. **字段名映射**:确保使用的字段名与数据库字段名一致
-2. **类型匹配**:比较值的类型应与字段类型匹配
-3. **NULL 处理**:`IsNull` 和 `IsNotNull` 不需要 Value 参数
-4. **数组参数**:`In` 和 `NotIn` 的 Value 应该是 `[]any` 类型

+ 20 - 18
model.go

@@ -183,14 +183,15 @@ 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"`
+	ExtendPropertyValues map[string]any       `form:"extendPropertyValues"`
+	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 {
@@ -253,16 +254,17 @@ 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"`
+	ExtendPropertyValues map[string]any       `form:"extendPropertyValues"`
+	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 {