feat: 新增设备切卡模式接口 SetSwitchMode
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m32s

This commit is contained in:
2026-04-18 16:22:30 +08:00
parent 2b3a9cb33f
commit fd795d8742
7 changed files with 146 additions and 0 deletions

View File

@@ -69,6 +69,14 @@ func (c *Client) RebootDevice(ctx context.Context, req *DeviceOperationReq) erro
return err
}
// SwitchMode 设置设备切卡模式
// 切换设备卡槽的自动/手动模式0=自动切卡1=手动切卡
// POST /device/SwitchMode
func (c *Client) SwitchMode(ctx context.Context, req *SwitchModeReq) error {
_, err := c.doRequest(ctx, "/device/SwitchMode", req)
return err
}
// SyncDeviceInfo 同步查询设备信息(直接返回,无需回调)
// 与异步 /device/info 的区别:直接返回全量数据,无需 callbackUrl
// POST /device/sync-info

View File

@@ -159,6 +159,13 @@ type DeviceOperationReq struct {
Extend string `json:"extend,omitempty" description:"扩展字段(广电国网特殊参数)"`
}
// SwitchModeReq 是设置设备切卡模式的请求
type SwitchModeReq struct {
CardNo string `json:"cardNo" validate:"required" required:"true" description:"设备编号IMEI"`
SwitchMode int `json:"switch_mode" description:"切卡模式0:自动切卡, 1:手动切卡)"`
CallbackURL string `json:"callbackUrl,omitempty" description:"异步回调通知地址"`
}
// SlotInfo 是单个卡槽信息
type SlotInfo struct {
SlotNo int `json:"slotNo" description:"卡槽编号"`

View File

@@ -286,6 +286,26 @@ func (h *DeviceHandler) SwitchCard(c *fiber.Ctx) error {
return response.Success(c, nil)
}
// SetSwitchMode 设置设备切卡模式
// POST /api/admin/devices/by-identifier/:identifier/switch-mode
func (h *DeviceHandler) SetSwitchMode(c *fiber.Ctx) error {
identifier := c.Params("identifier")
if identifier == "" {
return errors.New(errors.CodeInvalidParam, "设备标识符不能为空")
}
var req dto.SetSwitchModeRequest
if err := c.BodyParser(&req); err != nil {
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
}
if err := h.service.GatewaySwitchMode(c.UserContext(), identifier, &req); err != nil {
return err
}
return response.Success(c, nil)
}
// RebootDevice 重启设备
// POST /api/admin/devices/by-identifier/:identifier/reboot
func (h *DeviceHandler) RebootDevice(c *fiber.Ctx) error {

View File

@@ -180,6 +180,12 @@ type SwitchCardRequest struct {
TargetICCID string `json:"target_iccid" validate:"required" required:"true" description:"目标卡 ICCID"`
}
// SetSwitchModeRequest 设置切卡模式请求
type SetSwitchModeRequest struct {
Identifier string `path:"identifier" description:"设备标识符(支持虚拟号/IMEI/SN)" required:"true"`
SwitchMode int `json:"switch_mode" validate:"oneof=0 1" required:"true" description:"切卡模式 (0:自动切卡, 1:手动切卡)"`
}
type EmptyResponse struct {
Message string `json:"message,omitempty" description:"提示信息"`
}

View File

@@ -165,6 +165,15 @@ func registerDeviceRoutes(router fiber.Router, handler *admin.DeviceHandler, imp
Auth: true,
})
Register(devices, doc, groupPath, "POST", "/by-identifier/:identifier/switch-mode", handler.SetSwitchMode, RouteSpec{
Summary: "设置切卡模式",
Description: "通过虚拟号/IMEI/SN 设置设备切卡模式0:自动切卡, 1:手动切卡)。设备必须已配置 IMEI。",
Tags: []string{"设备管理"},
Input: new(dto.SetSwitchModeRequest),
Output: new(dto.EmptyResponse),
Auth: true,
})
Register(devices, doc, groupPath, "POST", "/by-identifier/:identifier/reboot", handler.RebootDevice, RouteSpec{
Summary: "重启设备",
Description: "通过虚拟号/IMEI/SN 重启设备。设备必须已配置 IMEI。",

View File

@@ -103,3 +103,15 @@ func (s *Service) GatewayResetDevice(ctx context.Context, identifier string) err
DeviceID: imei,
})
}
// GatewaySwitchMode 通过标识符设置设备切卡模式
func (s *Service) GatewaySwitchMode(ctx context.Context, identifier string, req *dto.SetSwitchModeRequest) error {
imei, err := s.getDeviceIMEI(ctx, identifier)
if err != nil {
return err
}
return s.gatewayClient.SwitchMode(ctx, &gateway.SwitchModeReq{
CardNo: imei,
SwitchMode: req.SwitchMode,
})
}