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

155 lines
4.9 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"
)
// 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
},
},
}