| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- package service
- import (
- "context"
- "fmt"
- "time"
- "github.com/mark3labs/mcp-go/mcp"
- "github.com/mark3labs/mcp-go/server"
- "fwh-toolbox-server/cmd/mcp/tools/helper"
- "fwh-toolbox-server/dto"
- "fwh-toolbox-server/services"
- )
- func registerSiteTools(s *server.MCPServer) {
- s.AddTool(
- mcp.NewTool("service_site_query_info",
- mcp.WithDescription("查询单个站点设备的详细信息,包括版本、网络状态、激活状态、固件、SN 等"),
- mcp.WithString("sn", mcp.Required(), mcp.Description("站点 SN 序列号")),
- ),
- handleSiteQueryInfo,
- )
- s.AddTool(
- mcp.NewTool("service_site_search",
- mcp.WithDescription("搜索站点设备列表,支持分页和关键字搜索"),
- mcp.WithNumber("page", mcp.Description("页码,从1开始,默认1")),
- mcp.WithNumber("size", mcp.Description("每页数量,默认10")),
- mcp.WithString("keyword", mcp.Description("搜索关键字(匹配 SN、设备名)")),
- ),
- handleSiteSearch,
- )
- s.AddTool(
- mcp.NewTool("service_site_power_flow",
- mcp.WithDescription("查询站点指定日期的功率流数据(PV、Grid、aPower、HomeLoad、Generator)"),
- mcp.WithString("sn", mcp.Required(), mcp.Description("站点 SN 序列号")),
- mcp.WithString("date", mcp.Required(), mcp.Description("日期,格式 yyyy-MM-dd")),
- ),
- handleSitePowerFlow,
- )
- }
- func handleSiteQueryInfo(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
- sn, err := req.RequireString("sn")
- if err != nil {
- return helper.ParamError("sn"), nil
- }
- data, err := services.GetSiteInfoData(sn)
- if err != nil {
- return helper.ServiceError("查询站点信息", err), nil
- }
- return helper.JSONResultOrFileAuto(data), nil
- }
- func handleSiteSearch(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
- page := uint(req.GetFloat("page", 1))
- size := uint(req.GetFloat("size", 10))
- keyword := req.GetString("keyword", "")
- param := dto.SiteInfoRequest{
- PageNum: page,
- PageSize: size,
- Search: keyword,
- }
- data, err := services.QuerySiteInfoDataList(param)
- if err != nil {
- return helper.ServiceError("搜索站点列表", err), nil
- }
- return helper.PageResult(data.Total, data.PageSize, data.PageNum, data.Data, "site_search"), nil
- }
- func handleSitePowerFlow(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
- sn, err := req.RequireString("sn")
- if err != nil {
- return helper.ParamError("sn"), nil
- }
- dateStr, err := req.RequireString("date")
- if err != nil {
- return helper.ParamError("date"), nil
- }
- day, err := time.Parse("2006-01-02", dateStr)
- if err != nil {
- return helper.ParamInvalidError("date", fmt.Sprintf("需要 yyyy-MM-dd 格式: %v", err)), nil
- }
- data, err := services.QuerySitePowerFlow(sn, day)
- if err != nil {
- return helper.ServiceError("查询功率流", err), nil
- }
- return helper.JSONResultOrFileAuto(data), nil
- }
|