|
|
@@ -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`
|