feat: 卡实名时间以上游 archiveTime 为准并记录实名时间历史,新增二次实名批次
Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled

This commit is contained in:
邹进
2026-11-08 19:12:46 +09:00
parent 94f86ab217
commit 4967f4df43
32 changed files with 1885 additions and 47 deletions

View File

@@ -0,0 +1,128 @@
package admin
import (
"github.com/go-playground/validator/v10"
"github.com/gofiber/fiber/v2"
"github.com/break/junhong_cmp_fiber/internal/application/realnamereset"
"github.com/break/junhong_cmp_fiber/internal/model/dto"
"github.com/break/junhong_cmp_fiber/internal/query/cardrealname"
"github.com/break/junhong_cmp_fiber/pkg/errors"
"github.com/break/junhong_cmp_fiber/pkg/response"
)
// CardRealnameHandler 处理卡实名记录与二次实名批次。
type CardRealnameHandler struct {
reset *realnamereset.Service
query *cardrealname.Query
validator *validator.Validate
}
// NewCardRealnameHandler 创建卡实名记录处理器。
func NewCardRealnameHandler(reset *realnamereset.Service, query *cardrealname.Query, validate *validator.Validate) *CardRealnameHandler {
if validate == nil {
validate = validator.New()
}
return &CardRealnameHandler{reset: reset, query: query, validator: validate}
}
func (h *CardRealnameHandler) validate(prefix string, req any) error {
if err := h.validator.Struct(req); err != nil {
return errors.New(errors.CodeInvalidParam, validationMessage(prefix, req, err))
}
return nil
}
// CardHistory 查询单卡当前实名时间与实名时间历史。
// GET /api/admin/iot-cards/:id/realname-history
func (h *CardRealnameHandler) CardHistory(c *fiber.Ctx) error {
var req dto.CardRealnameHistoryListRequest
if err := c.QueryParser(&req); err != nil {
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
}
id, err := rateLimitPathID(c, "id", "IoT 卡 ID")
if err != nil {
return err
}
req.ID = id
if err := h.validate("实名记录查询参数不合法", &req); err != nil {
return err
}
result, err := h.query.CardHistory(c.UserContext(), req)
if err != nil {
return err
}
return response.Success(c, result)
}
// ImportResetBatch 导入二次实名名单。
// POST /api/admin/realname-reset/batches
func (h *CardRealnameHandler) ImportResetBatch(c *fiber.Ctx) error {
var req dto.RealnameResetImportRequest
if err := c.BodyParser(&req); err != nil {
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
}
if err := h.validate("二次实名导入参数不合法", &req); err != nil {
return err
}
result, err := h.reset.Import(c.UserContext(), req)
if err != nil {
return err
}
return response.Success(c, result)
}
// ListResetBatches 分页查询二次实名批次。
// GET /api/admin/realname-reset/batches
func (h *CardRealnameHandler) ListResetBatches(c *fiber.Ctx) error {
var req dto.RealnameResetBatchListRequest
if err := c.QueryParser(&req); err != nil {
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
}
if err := h.validate("二次实名批次查询参数不合法", &req); err != nil {
return err
}
list, total, page, size, err := h.query.ListResetBatches(c.UserContext(), req)
if err != nil {
return err
}
return response.SuccessWithPagination(c, list, total, page, size)
}
// GetResetBatch 查询二次实名批次详情。
// GET /api/admin/realname-reset/batches/:id
func (h *CardRealnameHandler) GetResetBatch(c *fiber.Ctx) error {
id, err := rateLimitPathID(c, "id", "批次 ID")
if err != nil {
return err
}
result, err := h.query.GetResetBatch(c.UserContext(), id)
if err != nil {
return err
}
return response.Success(c, result)
}
// RevertResetBatch 撤销批次中仍在等待二次实名的卡。
// POST /api/admin/realname-reset/batches/:id/revert
func (h *CardRealnameHandler) RevertResetBatch(c *fiber.Ctx) error {
var req dto.RealnameResetRevertRequest
if len(c.Body()) > 0 {
if err := c.BodyParser(&req); err != nil {
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
}
}
id, err := rateLimitPathID(c, "id", "批次 ID")
if err != nil {
return err
}
req.ID = id
if err := h.validate("二次实名撤销参数不合法", &req); err != nil {
return err
}
result, err := h.reset.Revert(c.UserContext(), req)
if err != nil {
return err
}
return response.Success(c, result)
}