WiiCITMS/servers/hrOrgAITools.go
2025-11-07 14:14:34 +08:00

158 lines
5.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package servers
import (
"WiiCITMS/process/hr"
"context"
"encoding/json"
"fmt"
"github.com/mark3labs/mcp-go/mcp"
"github.com/mark3labs/mcp-go/server"
)
// HROrgAITools 组织架构查询工具AI专用
var HROrgAITools = []server.ServerTool{
// 获取单个组织的详细信息AI专用
{
Tool: mcp.NewTool(
"getOrganizationForAI",
mcp.WithDescription("获取单个组织的详细信息适用于AI查询组织结构"),
mcp.WithString("orgGuid", mcp.Required(), mcp.Description("组织ID")),
mcp.WithBoolean("includePositions", mcp.Description("是否包含岗位信息默认false")),
),
Handler: func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
orgGuid := request.GetString("orgGuid", "")
if orgGuid == "" {
return nil, fmt.Errorf("组织ID不能为空")
}
includePositions := request.GetBool("includePositions", false)
org, proc := hr.GetOrganizationForAI(orgGuid, includePositions)
if proc.IsError() {
return mcp.NewToolResultText(""), proc.Error
}
repStr, err := json.Marshal(org)
if err != nil {
return mcp.NewToolResultText(""), err
}
return mcp.NewToolResultText(string(repStr)), nil
},
},
// 获取组织树结构AI专用
{
Tool: mcp.NewTool(
"getOrganizationTreeForAI",
mcp.WithDescription("获取组织树结构适用于AI查询完整组织架构"),
mcp.WithString("rootOrgGuid", mcp.Description("根组织ID不指定则获取所有顶级组织")),
mcp.WithBoolean("includeStaff", mcp.Description("是否包含员工信息默认false")),
mcp.WithBoolean("includeDetails", mcp.Description("是否包含详细信息默认true")),
mcp.WithNumber("maxDepth", mcp.Description("最大深度0表示不限制")),
),
Handler: func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
params := hr.AIOrganizationTreeRequest{
RootOrgGuid: request.GetString("rootOrgGuid", ""),
IncludeStaff: request.GetBool("includeStaff", false),
IncludeDetails: request.GetBool("includeDetails", true),
MaxDepth: request.GetInt("maxDepth", 0),
}
tree, proc := hr.GetOrganizationTreeForAI(params)
if proc.IsError() {
return mcp.NewToolResultText(""), proc.Error
}
repStr, err := json.Marshal(tree)
if err != nil {
return mcp.NewToolResultText(""), err
}
return mcp.NewToolResultText(string(repStr)), nil
},
},
// 获取组织成员AI专用
{
Tool: mcp.NewTool(
"getOrganizationMembers",
mcp.WithDescription("获取组织成员列表适用于AI查询部门成员"),
mcp.WithString("orgGuid", mcp.Required(), mcp.Description("组织ID")),
),
Handler: func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
orgGuid := request.GetString("orgGuid", "")
if orgGuid == "" {
return nil, fmt.Errorf("组织ID不能为空")
}
members, proc := hr.GetOrganizationMembers(orgGuid)
if proc.IsError() {
return mcp.NewToolResultText(""), proc.Error
}
repStr, err := json.Marshal(members)
if err != nil {
return mcp.NewToolResultText(""), err
}
return mcp.NewToolResultText(string(repStr)), nil
},
},
// 获取组织完整路径AI专用
{
Tool: mcp.NewTool(
"getFullOrganizationPath",
mcp.WithDescription("获取组织的完整路径适用于AI了解组织层级关系"),
mcp.WithString("orgGuid", mcp.Required(), mcp.Description("组织ID")),
),
Handler: func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
orgGuid := request.GetString("orgGuid", "")
if orgGuid == "" {
return nil, fmt.Errorf("组织ID不能为空")
}
path, proc := hr.GetFullOrganizationPath(orgGuid)
if proc.IsError() {
return mcp.NewToolResultText(""), proc.Error
}
result := map[string]string{
"path": path,
}
repStr, err := json.Marshal(result)
if err != nil {
return mcp.NewToolResultText(""), err
}
return mcp.NewToolResultText(string(repStr)), nil
},
},
// 获取所有组织列表AI专用扁平结构
{
Tool: mcp.NewTool(
"getAllOrganizations",
mcp.WithDescription("获取所有组织的扁平列表适用于AI全面了解公司组织"),
mcp.WithBoolean("includeDetails", mcp.Description("是否包含详细信息默认false")),
),
Handler: func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
// 获取参数
includeDetails := request.GetBool("includeDetails", false)
// 创建空参数对象只传递includeDetails
params := hr.AIOrganizationTreeRequest{
IncludeDetails: includeDetails,
}
// 使用GetOrganizationTreeForAI并传递params参数
orgs, proc := hr.GetOrganizationTreeForAI(params)
if proc.IsError() {
return mcp.NewToolResultText(""), proc.Error
}
// 转换为JSON并返回
repStr, err := json.Marshal(orgs)
if err != nil {
return mcp.NewToolResultText(""), err
}
return mcp.NewToolResultText(string(repStr)), nil
},
},
}