Files
junhong_cmp_fiber/internal/routes/polling_pause.go
邹进 7ddb9312e3
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m35s
feat: 不轮询清单与批量开关轮询
- 新增不轮询清单 tb_card_polling_pause(迁移 000256 补写存量),所有改 enable_polling 的入口同事务写清单
- 卡、设备勾选批量开关轮询(单次 500,逐项结果,开启跳过风险停机与已销户)与 CSV 文件导入
- 订单套餐生效、改有效期后自动恢复轮询并按规则评估复机
- 不轮询清单查询与导出;卡、设备列表与导出增加是否轮询
- 失败告警停机被拒视图、导出与批量关闭轮询;开关轮询影响说明

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 03:07:20 +09:00

62 lines
4.7 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 routes
import (
"github.com/gofiber/fiber/v2"
"github.com/break/junhong_cmp_fiber/internal/handler/admin"
"github.com/break/junhong_cmp_fiber/internal/model/dto"
"github.com/break/junhong_cmp_fiber/pkg/openapi"
)
// pollingToggleImpactDoc 开关轮询影响说明,随接口文档提供给前端确认框。
const pollingToggleImpactDoc = `
**关闭轮询的影响**:关闭后不再查询上游卡状态、流量与实名;流量用完、实名不满足时不自动停机,套餐激活、流量重置后不自动复机;
套餐到期、退款后无可用套餐时仍会自动停机;订单套餐生效、后台修改有效期后资产有生效套餐时会自动恢复轮询并按规则复机;人工停复机照常;设备关闭时设备下所有卡同样适用。
**开启轮询的影响**:按轮询配置查询上游并按规则自动停复机,人工停机不享有豁免;网关扩展状态为风险停机或已销户的卡不能开启轮询(逐项返回跳过原因,不提供强制参数)。`
// registerPollingPauseRoutes 注册批量开关轮询、不轮询清单、轮询开关导入与告警页关闭轮询接口。
func registerPollingPauseRoutes(router fiber.Router, handler *admin.PollingPauseHandler, doc *openapi.Generator, basePath string) {
tags := []string{"不轮询清单"}
Register(router, doc, basePath, "POST", "/iot-cards/batch-update-polling-status", handler.BatchCards, RouteSpec{
Summary: "勾选批量开关卡轮询",
Description: "单次最多500个;按数据权限逐项处理并返回结果,每项同事务写轮询开关、不轮询清单与审计。" + pollingToggleImpactDoc,
Tags: tags, Input: new(dto.BatchUpdatePollingStatusRequest), Output: new(dto.BatchUpdatePollingStatusResponse), Auth: true,
})
Register(router, doc, basePath, "POST", "/devices/batch-update-polling-status", handler.BatchDevices, RouteSpec{
Summary: "勾选批量开关设备轮询",
Description: "单次最多500个;设备沿用级联到设备下各卡(开启时跳过风险停机、已销户的卡)。" + pollingToggleImpactDoc,
Tags: tags, Input: new(dto.BatchUpdatePollingStatusRequest), Output: new(dto.BatchUpdatePollingStatusResponse), Auth: true,
})
Register(router, doc, basePath, "GET", "/polling-status/impact", handler.Impact, RouteSpec{
Summary: "开关轮询影响说明", Description: "供前端关闭与开启轮询的确认框展示。", Tags: tags,
Input: nil, Output: new(dto.PollingToggleImpactResponse), Auth: true,
})
Register(router, doc, basePath, "GET", "/card-polling-pauses", handler.ListPauses, RouteSpec{
Summary: "查询不轮询清单(仅平台账号)",
Description: "每个资产只有一条已关闭记录,恢复后保留历史;导出使用统一导出任务,场景 polling_pause,筛选参数同本接口。",
Tags: tags, Input: new(dto.CardPollingPauseListRequest), Output: new(dto.CardPollingPausePageResult), Auth: true,
})
imports := router.Group("/polling-status-imports")
importsPath := basePath + "/polling-status-imports"
Register(imports, doc, importsPath, "POST", "", handler.CreateImport, RouteSpec{
Summary: "创建轮询开关文件导入任务(仅平台账号)",
Description: "先调用 POST /api/admin/storage/upload-url(purpose 传 polling_status_import)上传 CSV;首行为表头,首列为 ICCID(卡)或 IMEI/虚拟号(设备)。" +
"异步逐行处理,规则同勾选批量,部分成功不回滚。" + pollingToggleImpactDoc,
Tags: tags, Input: new(dto.CreatePollingStatusImportRequest), Output: new(dto.PollingStatusImportTaskResponse), Auth: true,
})
Register(imports, doc, importsPath, "GET", "", handler.ListImports, RouteSpec{
Summary: "查询轮询开关导入任务", Tags: tags, Input: new(dto.PollingStatusImportListRequest), Output: new(dto.PollingStatusImportPageResult), Auth: true,
})
Register(imports, doc, importsPath, "GET", "/:id", handler.GetImport, RouteSpec{
Summary: "查询轮询开关导入任务详情(含逐行结果)", Tags: tags, Input: new(dto.PollingStatusImportIDPath),
Output: new(dto.PollingStatusImportTaskDetailResponse), Auth: true,
})
Register(router, doc, basePath, "POST", "/polling-failure-alerts/close-polling", handler.ClosePollingByAlerts, RouteSpec{
Summary: "告警页勾选批量关闭轮询(仅平台账号)",
Description: "单次最多500条;关闭告警对应卡的轮询,清单来源记\"停机被拒告警处理\",告警状态改为已关闭轮询。停机被拒视图:GET /polling-failure-alerts?view=stop_refused,导出场景 polling_stop_refused_alert。",
Tags: tags, Input: new(dto.ClosePollingByAlertsRequest), Output: new(dto.BatchUpdatePollingStatusResponse), Auth: true,
})
}