bdata SDK 现已支持 Activity(活动)和 Plan(计划)服务的接口调用。
const (
ServiceTypePerson ServiceType = "person"
ServiceTypeResource ServiceType = "resource"
ServiceTypeActivity ServiceType = "activity" // 新增
ServiceTypePlan ServiceType = "plan" // 新增
)
const (
DefaultActivityBaseURL = "http://10.0.0.210:30684/mbrms/api"
DefaultPlanBaseURL = "http://10.0.0.210:30684/mbrms/api"
)
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,
})
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)
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)
}
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)
}
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)
// 删除部分业务类型
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)
fields, err := client.Manage().PredefinedFields()
if err != nil {
log.Fatalf("获取预定义字段失败: %v", err)
}
for _, field := range fields {
fmt.Printf("字段: %+v\n", field)
}
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,
})
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)
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)
}
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)
}
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)
// 删除部分业务类型
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)
fields, err := client.Manage().PredefinedFields()
if err != nil {
log.Fatalf("获取预定义字段失败: %v", err)
}
for _, field := range fields {
fmt.Printf("字段: %+v\n", field)
}
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))
}
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))
}
// 等于
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},
}
// 等于
ExtendPropertyValues: map[string][]any{
"extend_properties->>'deptName' = ?": {"技术部"},
}
// 模糊查询
ExtendPropertyValues: map[string][]any{
"extend_properties->>'memberName' LIKE ?": {"%张%"},
}
// IN 查询
ExtendPropertyValues: map[string][]any{
"extend_properties->>'categoryName' IN (?, ?)": {"研发", "行政"},
}
ExtendPropertyValues: map[string][]any{
"(extend_properties->>'priority')::numeric = ?": {1},
"extend_properties->>'deptName' = ?": {"技术部"},
"(extend_properties->>'progress')::numeric > ?": {50},
}
| 服务类型 | 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 |
获取预定义字段 |
扩展属性类型
::numeric 转换参数类型
{1}, {2.0, 8.0}{"技术部"}ExtendPropertyValues 的类型是 map[string][]any业务类型
BaseURL
README.mdActivityManage/http_test/activity.httpActivityManage/http_test/plan.httpActivityManage/http_test/DATA_TYPES.md