فهرست منبع

新增计划和活动

duyong 2 هفته پیش
والد
کامیت
c8d012eaa7
4فایلهای تغییر یافته به همراه762 افزوده شده و 0 حذف شده
  1. 620 0
      ACTIVITY_PLAN_USAGE.md
  2. 4 0
      client.go
  3. 12 0
      manage.go
  4. 126 0
      model.go

+ 620 - 0
ACTIVITY_PLAN_USAGE.md

@@ -0,0 +1,620 @@
+# 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 = ?": []any{1},
+        "(extend_properties->>'progress')::numeric > ?": []any{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 = ?": []any{1},
+        "(extend_properties->>'estimatedWork')::numeric > ?": []any{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 = ?": []any{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 = ?": []any{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 = ?": []any{1},
+}
+
+// 大于
+ExtendPropertyValues: map[string]any{
+    "(extend_properties->>'progress')::numeric > ?": []any{50},
+}
+
+// 范围查询
+ExtendPropertyValues: map[string]any{
+    "(extend_properties->>'duration')::numeric BETWEEN ? AND ?": []any{2.0, 8.0},
+}
+
+// IN 查询
+ExtendPropertyValues: map[string]any{
+    "(extend_properties->>'complex')::numeric IN (?, ?)": []any{2, 3},
+}
+```
+
+### 字符串字段查询
+
+```go
+// 等于
+ExtendPropertyValues: map[string]any{
+    "extend_properties->>'deptName' = ?": []any{"技术部"},
+}
+
+// 模糊查询
+ExtendPropertyValues: map[string]any{
+    "extend_properties->>'memberName' LIKE ?": []any{"%张%"},
+}
+
+// IN 查询
+ExtendPropertyValues: map[string]any{
+    "extend_properties->>'categoryName' IN (?, ?)": []any{"研发", "行政"},
+}
+```
+
+### 组合查询
+
+```go
+ExtendPropertyValues: map[string]any{
+    "(extend_properties->>'priority')::numeric = ?": []any{1},
+    "extend_properties->>'deptName' = ?": []any{"技术部"},
+    "(extend_properties->>'progress')::numeric > ?": []any{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. **参数类型**
+   - 数值查询参数使用数值类型:`[]any{1}`, `[]any{2.0, 8.0}`
+   - 字符串查询参数使用字符串类型:`[]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`

+ 4 - 0
client.go

@@ -27,6 +27,10 @@ func NewClient(config Config) *Client {
 			baseURL = DefaultPersonBaseURL
 		case ServiceTypeResource:
 			baseURL = DefaultResourceBaseURL
+		case ServiceTypeActivity:
+			baseURL = DefaultActivityBaseURL
+		case ServiceTypePlan:
+			baseURL = DefaultPlanBaseURL
 		default:
 			baseURL = DefaultPersonBaseURL
 		}

+ 12 - 0
manage.go

@@ -14,6 +14,10 @@ func (s *ManageService) getServicePath() string {
 		return "/person"
 	case ServiceTypeResource:
 		return "/resource"
+	case ServiceTypeActivity:
+		return "/activity"
+	case ServiceTypePlan:
+		return "/plan"
 	default:
 		return "/person"
 	}
@@ -87,6 +91,14 @@ func (s *ManageService) Options() ([]map[string]any, error) {
 		path = "/person/genders"
 	case ServiceTypeResource:
 		path = "/resource/categories"
+	case ServiceTypeActivity:
+		// Activity 没有 options 接口,返回空
+		return []map[string]any{}, nil
+	case ServiceTypePlan:
+		// Plan 没有 options 接口,返回空
+		return []map[string]any{}, nil
+	default:
+		return nil, fmt.Errorf("不支持的服务类型")
 	}
 	_, err := s.client.http.R().
 		SetResult(&resp).

+ 126 - 0
model.go

@@ -5,11 +5,15 @@ type ServiceType string
 const (
 	ServiceTypePerson   ServiceType = "person"
 	ServiceTypeResource ServiceType = "resource"
+	ServiceTypeActivity ServiceType = "activity"
+	ServiceTypePlan     ServiceType = "plan"
 )
 
 const (
 	DefaultPersonBaseURL   = "http://10.0.0.210:30684/mbpms/api"
 	DefaultResourceBaseURL = "http://10.0.0.210:30684/mbrms/api"
+	DefaultActivityBaseURL = "http://10.0.0.210:30604/mbact/api"
+	DefaultPlanBaseURL     = "http://10.0.0.210:30604/mbact/api"
 )
 
 type Config struct {
@@ -196,3 +200,125 @@ type OperateLogInfo struct {
 	TenantID     string `json:"tenantId"`
 	CreatedTime  string `json:"createdTime"`
 }
+
+// Activity 相关模型
+
+type ActivityInfo struct {
+	ID                   string         `json:"id"`
+	Name                 string         `json:"name"`
+	Description          string         `json:"description"`
+	ActorID              string         `json:"actorId"`
+	BusinessType         []string       `json:"businessType"`
+	ExtendPropertyValues map[string]any `json:"extendProperties"`
+	TenantID             string         `json:"tenantId"`
+	CreateUserID         string         `json:"createUserId"`
+	LastUpdateUserID     string         `json:"lastUpdateUserId"`
+	CreatedTime          string         `json:"createdTime"`
+	LastUpdatedTime      string         `json:"lastUpdatedTime"`
+}
+
+type SaveActivityParams struct {
+	ID               string         `json:"id,omitempty"`
+	Name             string         `json:"name"`
+	Description      string         `json:"description,omitempty"`
+	ActorID          string         `json:"actorId"`
+	BusinessType     []string       `json:"businessType"`
+	ExtendProperties map[string]any `json:"extendProperties,omitempty"`
+	TenantID         string         `json:"tenantId"`
+	CreateUserID     string         `json:"createUserId,omitempty"`
+	UpdateUserID     string         `json:"updateUserId"`
+	OperatorUserName string         `json:"operatorUserName"`
+}
+
+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"`
+	TenantID             string         `json:"tenantId"`
+	PageNo               int            `json:"pageNo"`
+	PageSize             int            `json:"pageSize"`
+}
+
+type DeleteActivityParams struct {
+	ID               string   `json:"id"`
+	BusinessType     []string `json:"businessType"`
+	DeleteWhole      bool     `json:"deleteWhole"`
+	DeleteUserID     string   `json:"deleteUserId"`
+	OperatorUserName string   `json:"operatorUserName"`
+}
+
+type GetActivityParams struct {
+	ID string `json:"id"`
+}
+
+// Plan 相关模型
+
+type PlanInfo struct {
+	ID                   string         `json:"id"`
+	PlanType             string         `json:"planType"`
+	Name                 string         `json:"name"`
+	Description          string         `json:"description"`
+	ActorID              string         `json:"actorId"`
+	State                string         `json:"state"`
+	BusinessType         []string       `json:"businessType"`
+	TaskIDs              []string       `json:"taskIds"`
+	Attachments          []string       `json:"attachments"`
+	ExtendPropertyValues map[string]any `json:"extendProperties"`
+	StartTime            string         `json:"startTime"`
+	EndTime              string         `json:"endTime"`
+	RemindAdvanceDays    int            `json:"remindAdvanceDays"`
+	RemindTimes          []string       `json:"remindTimes"`
+	PeriodType           string         `json:"periodType"`
+	TenantID             string         `json:"tenantId"`
+	CreateUserID         string         `json:"createUserId"`
+	LastUpdateUserID     string         `json:"lastUpdateUserId"`
+	CreatedTime          string         `json:"createdTime"`
+	LastUpdatedTime      string         `json:"lastUpdatedTime"`
+}
+
+type SavePlanParams struct {
+	ID                string         `json:"id,omitempty"`
+	PlanType          string         `json:"planType"`
+	Name              string         `json:"name"`
+	Description       string         `json:"description,omitempty"`
+	ActorID           string         `json:"actorId"`
+	State             string         `json:"state,omitempty"`
+	BusinessType      []string       `json:"businessType"`
+	TaskIDs           []string       `json:"taskIds,omitempty"`
+	Attachments       []string       `json:"attachments,omitempty"`
+	ExtendProperties  map[string]any `json:"extendProperties,omitempty"`
+	StartTime         string         `json:"startTime,omitempty"`
+	EndTime           string         `json:"endTime,omitempty"`
+	RemindAdvanceDays int            `json:"remindAdvanceDays,omitempty"`
+	RemindTimes       []string       `json:"remindTimes,omitempty"`
+	PeriodType        string         `json:"periodType,omitempty"`
+	TenantID          string         `json:"tenantId"`
+	CreateUserID      string         `json:"createUserId,omitempty"`
+	UpdateUserID      string         `json:"updateUserId"`
+	OperatorUserName  string         `json:"operatorUserName"`
+}
+
+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"`
+	TenantID             string         `json:"tenantId"`
+	PageNo               int            `json:"pageNo"`
+	PageSize             int            `json:"pageSize"`
+}
+
+type DeletePlanParams struct {
+	ID               string   `json:"id"`
+	BusinessType     []string `json:"businessType"`
+	DeleteWhole      bool     `json:"deleteWhole"`
+	DeleteUserID     string   `json:"deleteUserId"`
+	OperatorUserName string   `json:"operatorUserName"`
+}
+
+type GetPlanParams struct {
+	ID string `json:"id"`
+}