Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
- 新增六对成对迁移 000232–000237:H5 弹窗类型、退款结算标识与申请人备注、优先轮询事实字段与两个新终态、通道阈值命中留痕、手机号最近解绑人、提现资格校验留痕 - 退款:原因必填与申请人备注、来源支付与渠道流水冻结、线下处理流水号补录审计、按订单查询可选退款方式、企微审批材料补齐且新增字段缺失映射即明确失败 - 优先轮询:人工关闭、有效期到期独立周期任务、失败与过期人工重触发、事实字段与异常重试查询、资产解析端点只读投影 - 通道阈值:命中事实同事务留痕与命中记录查询;员工账单:列表筛选与详情投影;商户池:列表投影与统计周期语义;H5:弹窗类型与类别排序 - 手机号:有效关联数量与最近解绑人、短信验证码失败次数限制;导出:佣金明细十五列与报表序号列 - 时间筛选:三处新增筛选纳入统一严格解析契约,员工账单产生时间参数改名 - 同步 12 份主 Spec 需求、两端点与异步任务证据链,门禁 context-health 与 OpenSpec 校验通过
79 lines
5.1 KiB
Go
79 lines
5.1 KiB
Go
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"
|
||
)
|
||
|
||
// registerPollingPriorityRoutes 注册卡轮询优先队列的人工入口(入队、关闭、重触发)与只读查询路由。
|
||
// 仅挂在既有后台认证中间件组下,不新增认证边界;权限在用例内按账号与数据范围判定。
|
||
func registerPollingPriorityRoutes(router fiber.Router, handler *admin.PriorityPollingHandler, doc *openapi.Generator, basePath string) {
|
||
group := router.Group("/polling-priority-items")
|
||
groupPath := basePath + "/polling-priority-items"
|
||
|
||
Register(group, doc, groupPath, "POST", "", handler.Enqueue, RouteSpec{
|
||
Summary: "人工优先入队",
|
||
Description: "为该卡的全部纳入轮询任务类型(实名/流量/套餐/卡状态)建立或合并优先轮询项。" +
|
||
"同一卡同一任务类型至多一条活动项,重复入队合并触发次数与来源集合;原因必填。" +
|
||
"入队时冻结资产类型与资产 ID、设备号、店铺与代理归属,并以入队时间作为有效期起算时间。" +
|
||
"不受既有人工触发的每日次数上限与 24 小时去重约束;不修改调度优先级,也不绕过既有并发上限。",
|
||
Tags: []string{"轮询管理-优先队列"},
|
||
Input: new(dto.EnqueuePriorityPollingRequest),
|
||
Output: new(dto.EnqueuePriorityPollingResponse),
|
||
Auth: true,
|
||
})
|
||
// 字面量路径必须先于 /:id 注册,保证路径按字面量优先匹配。
|
||
Register(group, doc, groupPath, "GET", "", handler.ListPriorityItems, RouteSpec{
|
||
Summary: "查询优先轮询项列表",
|
||
Description: "分页查询卡轮询优先项,按创建时间倒序,支持卡、任务类型、状态、触发类型、" +
|
||
"入队时间范围(start_time/end_time,带时区的 RFC3339 秒级时间,闭区间含两端)与「异常与重试」视图筛选" +
|
||
"(失败终态、已过期、尝试次数达到上限或存在失败原因)。" +
|
||
"返回资产标识、设备号、店铺与代理归属、触发与尝试次数、最大尝试次数、最近与下一次执行时间、" +
|
||
"执行起止与耗时、入队与出队时间、执行结果与失败原因、集成交互日志标识。" +
|
||
"不提供优先级分级;查询不触发关闭或重触发。数据范围按卡所属店铺快照下推:" +
|
||
"代理只能看到自身及下级店铺资产,平台卡不可见。",
|
||
Tags: []string{"轮询管理-优先队列"},
|
||
Input: new(dto.PriorityPollingItemListRequest),
|
||
Output: new(dto.PriorityPollingItemListResponse),
|
||
Auth: true,
|
||
})
|
||
// 参数路由的子路径必须先于 /:id 注册,避免同段匹配歧义。
|
||
Register(group, doc, groupPath, "POST", "/:id/close", handler.Close, RouteSpec{
|
||
Summary: "人工关闭优先轮询项",
|
||
Description: "仅超级管理员与平台账号。仅允许关闭待执行或执行中的优先项:原因必填并写入审计(操作者、时间与原因)," +
|
||
"未完成项转已关闭终态并出队,不再发起任何上游调用,既有执行结果与失败原因一律保留。" +
|
||
"越权与不存在返回同一错误。",
|
||
Tags: []string{"轮询管理-优先队列"},
|
||
Input: new(dto.IDReq),
|
||
Body: new(dto.ClosePriorityPollingItemRequest),
|
||
Output: new(dto.ClosePriorityPollingItemResponse),
|
||
Auth: true,
|
||
})
|
||
Register(group, doc, groupPath, "POST", "/:id/retrigger", handler.Retrigger, RouteSpec{
|
||
Summary: "人工重触发优先轮询项",
|
||
Description: "权限与人工入队一致(超级管理员、平台账号与数据范围内的代理账号),仅允许对失败出队或已过期的项重触发。" +
|
||
"复用人工入队入口为该卡**该任务类型**建立新的活动项(尝试次数从零开始),原因必填并与操作者一同写入审计。" +
|
||
"不绕过活动项唯一键代表的并发上限、停复机持锁拒绝与任务类型范围;越权与不存在返回同一错误。",
|
||
Tags: []string{"轮询管理-优先队列"},
|
||
Input: new(dto.IDReq),
|
||
Body: new(dto.RetriggerPriorityPollingItemRequest),
|
||
Output: new(dto.RetriggerPriorityPollingItemResponse),
|
||
Auth: true,
|
||
})
|
||
Register(group, doc, groupPath, "GET", "/:id", handler.GetPriorityItem, RouteSpec{
|
||
Summary: "查询优先轮询项详情",
|
||
Description: "查询单条卡轮询优先项,字段与列表一致:资产标识、设备号、店铺与代理归属、任务类型、" +
|
||
"触发类型与来源、触发与尝试次数、最大尝试次数、最近与下一次执行时间、执行起止与耗时、" +
|
||
"入队与出队时间、执行结果与失败原因、集成交互日志标识,以及只读的有效期起算时间。" +
|
||
"不提供优先级分级;有效期到期由独立周期任务处理,人工关闭与人工重触发为独立受权限控制的写入口," +
|
||
"查询不会隐式触发二者。越权与不存在返回同一响应,不产生可枚举差异。",
|
||
Tags: []string{"轮询管理-优先队列"},
|
||
Input: new(dto.IDReq),
|
||
Output: new(dto.PriorityPollingItemResponse),
|
||
Auth: true,
|
||
})
|
||
}
|