sim_api.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. package data
  2. import (
  3. "context"
  4. "fmt"
  5. "strings"
  6. "github.com/mark3labs/mcp-go/mcp"
  7. "github.com/mark3labs/mcp-go/server"
  8. "fwh-toolbox-server/cmd/mcp/tools/helper"
  9. "fwh-toolbox-server/repositories"
  10. )
  11. func registerSimApiTools(s *server.MCPServer) {
  12. // SmartHub
  13. s.AddTool(
  14. mcp.NewTool("data_sim_smarthub_batch_info",
  15. mcp.WithDescription("批量查询 SmartHub 平台 SIM 卡信息"),
  16. mcp.WithNumber("page", mcp.Description("页码,默认1")),
  17. mcp.WithNumber("size", mcp.Description("每页数量,默认20")),
  18. ),
  19. handleSimSmartHubBatchInfo,
  20. )
  21. s.AddTool(
  22. mcp.NewTool("data_sim_smarthub_card_info",
  23. mcp.WithDescription("查询 SmartHub 平台单张 SIM 卡详细信息"),
  24. mcp.WithString("giccid", mcp.Required(), mcp.Description("SIM 卡 GICCID")),
  25. ),
  26. handleSimSmartHubCardInfo,
  27. )
  28. // Acceleronix
  29. s.AddTool(
  30. mcp.NewTool("data_sim_acceleronix_card_list",
  31. mcp.WithDescription("查询 Acceleronix 平台 SIM 卡列表"),
  32. mcp.WithNumber("page", mcp.Description("页码,默认1")),
  33. mcp.WithNumber("size", mcp.Description("每页数量,默认20")),
  34. ),
  35. handleSimAcceleronixCardList,
  36. )
  37. s.AddTool(
  38. mcp.NewTool("data_sim_acceleronix_card_info",
  39. mcp.WithDescription("查询 Acceleronix 平台单张 SIM 卡详情"),
  40. mcp.WithString("iccid", mcp.Required(), mcp.Description("SIM 卡 ICCID")),
  41. ),
  42. handleSimAcceleronixCardInfo,
  43. )
  44. s.AddTool(
  45. mcp.NewTool("data_sim_acceleronix_batch_data_info",
  46. mcp.WithDescription("批量获取 Acceleronix SIM 卡数据用量信息"),
  47. mcp.WithString("iccid_list", mcp.Required(), mcp.Description("ICCID 列表,逗号分隔")),
  48. mcp.WithString("month", mcp.Required(), mcp.Description("月份,格式 YYYYMM(如 202601)")),
  49. ),
  50. handleSimAcceleronixBatchDataInfo,
  51. )
  52. s.AddTool(
  53. mcp.NewTool("data_sim_acceleronix_data_pool_list",
  54. mcp.WithDescription("查询 Acceleronix 流量池列表"),
  55. mcp.WithNumber("page", mcp.Description("页码,默认1")),
  56. mcp.WithNumber("size", mcp.Description("每页数量,默认20")),
  57. ),
  58. handleSimAcceleronixDataPoolList,
  59. )
  60. s.AddTool(
  61. mcp.NewTool("data_sim_acceleronix_data_pool_sim_info",
  62. mcp.WithDescription("查询 Acceleronix 流量池中的 SIM 卡详情"),
  63. mcp.WithString("data_pool_id", mcp.Required(), mcp.Description("流量池ID")),
  64. mcp.WithNumber("page", mcp.Description("页码,默认1")),
  65. mcp.WithNumber("size", mcp.Description("每页数量,默认20")),
  66. ),
  67. handleSimAcceleronixDataPoolSimInfo,
  68. )
  69. }
  70. // === Handlers ===
  71. func handleSimSmartHubBatchInfo(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  72. page := uint(req.GetFloat("page", 1))
  73. size := uint(req.GetFloat("size", 20))
  74. data, err := repositories.QuerySmartHubBatchSimCardInfo(page, size)
  75. if err != nil {
  76. return helper.ServiceError("查询SmartHub SIM卡列表", err), nil
  77. }
  78. return helper.JSONResultOrFileAuto(data), nil
  79. }
  80. func handleSimSmartHubCardInfo(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  81. giccid, err := req.RequireString("giccid")
  82. if err != nil {
  83. return helper.ParamError("giccid"), nil
  84. }
  85. data, err := repositories.QuerySmartHubSimCardInfo(giccid)
  86. if err != nil {
  87. return helper.ServiceError("查询SmartHub SIM卡详情", err), nil
  88. }
  89. return helper.JSONResultOrFileAuto(data), nil
  90. }
  91. func handleSimAcceleronixCardList(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  92. page := uint(req.GetFloat("page", 1))
  93. size := uint(req.GetFloat("size", 20))
  94. data, err := repositories.QueryAcceleronixSimCardList(page, size)
  95. if err != nil {
  96. return helper.ServiceError("查询Acceleronix SIM卡列表", err), nil
  97. }
  98. return helper.JSONResultOrFileAuto(data), nil
  99. }
  100. func handleSimAcceleronixCardInfo(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  101. iccid, err := req.RequireString("iccid")
  102. if err != nil {
  103. return helper.ParamError("iccid"), nil
  104. }
  105. data, err := repositories.QueryAcceleronixSimCardInfo(iccid)
  106. if err != nil {
  107. return helper.ServiceError("查询Acceleronix SIM卡详情", err), nil
  108. }
  109. return helper.JSONResultOrFileAuto(data), nil
  110. }
  111. func handleSimAcceleronixBatchDataInfo(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  112. iccidListStr, err := req.RequireString("iccid_list")
  113. if err != nil {
  114. return helper.ParamError("iccid_list"), nil
  115. }
  116. month, err := req.RequireString("month")
  117. if err != nil {
  118. return helper.ParamError("month"), nil
  119. }
  120. // 验证月份格式
  121. if len(month) != 6 {
  122. return helper.ParamInvalidError("month", "需要 YYYYMM 格式,如 202601"), nil
  123. }
  124. iccidList := strings.Split(iccidListStr, ",")
  125. for i := range iccidList {
  126. iccidList[i] = strings.TrimSpace(iccidList[i])
  127. }
  128. if len(iccidList) == 0 {
  129. return helper.ParamInvalidError("iccid_list", "至少需要一个ICCID"), nil
  130. }
  131. if len(iccidList) > 50 {
  132. return helper.ParamInvalidError("iccid_list", fmt.Sprintf("最多50个ICCID,当前%d个", len(iccidList))), nil
  133. }
  134. data, err := repositories.QueryAcceleronixBatchSimCardDataInfo(iccidList, month)
  135. if err != nil {
  136. return helper.ServiceError("批量查询Acceleronix数据用量", err), nil
  137. }
  138. return helper.JSONResultOrFileAuto(data), nil
  139. }
  140. func handleSimAcceleronixDataPoolList(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  141. page := uint(req.GetFloat("page", 1))
  142. size := uint(req.GetFloat("size", 20))
  143. data, err := repositories.QueryAcceleronixDataPoolList(page, size)
  144. if err != nil {
  145. return helper.ServiceError("查询Acceleronix流量池列表", err), nil
  146. }
  147. return helper.JSONResultOrFileAuto(data), nil
  148. }
  149. func handleSimAcceleronixDataPoolSimInfo(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  150. poolID, err := req.RequireString("data_pool_id")
  151. if err != nil {
  152. return helper.ParamError("data_pool_id"), nil
  153. }
  154. page := uint(req.GetFloat("page", 1))
  155. size := uint(req.GetFloat("size", 20))
  156. data, err := repositories.QueryAcceleronixDataPoolSimInfo(poolID, page, size)
  157. if err != nil {
  158. return helper.ServiceError("查询流量池SIM详情", err), nil
  159. }
  160. return helper.JSONResultOrFileAuto(data), nil
  161. }