package servers import ( "WiiCITMS/process/hr" "context" "encoding/json" "fmt" "github.com/mark3labs/mcp-go/mcp" "github.com/mark3labs/mcp-go/server" ) // HRStaffPositionTools 员工岗位管理工具 var HRStaffPositionTools = []server.ServerTool{ // 为员工分配岗位 { Tool: mcp.NewTool( "assignPosition", mcp.WithDescription("为员工分配组织和岗位"), mcp.WithString("staffGuid", mcp.Required(), mcp.Description("员工GUID")), mcp.WithString("organizationGuid", mcp.Required(), mcp.Description("组织GUID")), mcp.WithString("positionGuid", mcp.Description("岗位GUID,可选,不提供则只绑定组织")), mcp.WithBoolean("isLeader", mcp.Description("是否是组织负责人,默认false")), mcp.WithNumber("recordType", mcp.Description("关系类型,0-主部门/岗位,1-兼职部门/岗位,默认1")), ), Handler: func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { staffGuid := request.GetString("staffGuid", "") if staffGuid == "" { return nil, fmt.Errorf("员工GUID不能为空") } orgGuid := request.GetString("organizationGuid", "") if orgGuid == "" { return nil, fmt.Errorf("组织GUID不能为空") } params := hr.AssignPositionRequest{ StaffGuid: staffGuid, OrganizationGuid: orgGuid, PositionGuid: request.GetString("positionGuid", ""), IsLeader: request.GetBool("isLeader", false), RecordType: request.GetInt("recordType", 1), // 默认为兼职部门/岗位 } result, proc := hr.AssignPosition(params) if proc.IsError() { return mcp.NewToolResultText(""), proc.Error } repStr, err := json.Marshal(result) if err != nil { return mcp.NewToolResultText(""), err } return mcp.NewToolResultText(string(repStr)), nil }, }, // 更新员工岗位关系 { Tool: mcp.NewTool( "updateStaffPosition", mcp.WithDescription("更新员工岗位关系"), mcp.WithString("recordGuid", mcp.Required(), mcp.Description("关系记录GUID")), mcp.WithString("positionGuid", mcp.Description("岗位GUID")), mcp.WithBoolean("isLeader", mcp.Description("是否是组织负责人")), mcp.WithNumber("recordType", mcp.Description("关系类型,0-主部门/岗位,1-兼职部门/岗位")), ), Handler: func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { recordGuid := request.GetString("recordGuid", "") if recordGuid == "" { return nil, fmt.Errorf("关系记录GUID不能为空") } params := hr.UpdateStaffPositionRequest{ RecordGuid: recordGuid, PositionGuid: request.GetString("positionGuid", ""), IsLeader: request.GetBool("isLeader", false), RecordType: request.GetInt("recordType", 1), } result, proc := hr.UpdateStaffPosition(params) if proc.IsError() { return mcp.NewToolResultText(""), proc.Error } repStr, err := json.Marshal(result) if err != nil { return mcp.NewToolResultText(""), err } return mcp.NewToolResultText(string(repStr)), nil }, }, // 移除员工岗位 { Tool: mcp.NewTool( "removeStaffPosition", mcp.WithDescription("移除员工的组织和岗位关联"), mcp.WithString("staffGuid", mcp.Required(), mcp.Description("员工GUID")), mcp.WithString("organizationGuid", mcp.Required(), mcp.Description("组织GUID")), ), Handler: func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { staffGuid := request.GetString("staffGuid", "") if staffGuid == "" { return nil, fmt.Errorf("员工GUID不能为空") } orgGuid := request.GetString("organizationGuid", "") if orgGuid == "" { return nil, fmt.Errorf("组织GUID不能为空") } params := hr.RemoveStaffPositionRequest{ StaffGuid: staffGuid, OrganizationGuid: orgGuid, } proc := hr.RemoveStaffPosition(params) if proc.IsError() { return mcp.NewToolResultText(""), proc.Error } result := map[string]bool{"success": true} repStr, err := json.Marshal(result) if err != nil { return mcp.NewToolResultText(""), err } return mcp.NewToolResultText(string(repStr)), nil }, }, // 获取员工的所有组织和岗位关联 { Tool: mcp.NewTool( "getStaffPositions", mcp.WithDescription("获取员工的所有组织和岗位关联"), mcp.WithString("staffGuid", mcp.Required(), mcp.Description("员工GUID")), ), Handler: func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { staffGuid := request.GetString("staffGuid", "") if staffGuid == "" { return nil, fmt.Errorf("员工GUID不能为空") } result, proc := hr.GetStaffPositions(staffGuid) if proc.IsError() { return mcp.NewToolResultText(""), proc.Error } repStr, err := json.Marshal(result) if err != nil { return mcp.NewToolResultText(""), err } return mcp.NewToolResultText(string(repStr)), nil }, }, }