WiiCITMS/servers/hrStaffPositionTools.go

155 lines
4.9 KiB
Go
Raw Permalink Normal View History

2025-11-07 14:14:34 +08:00
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
},
},
}