Files
junhong_cmp_fiber/internal/handler/admin/package_usage.go
邹进 94cbf2adab feat: 采集记录成功失败分表并保存网关原始数据,到期归档 csv.gz,新增记录分页查询接口
- 网关客户端新增原始数据收集器,记录最后一次尝试的明文请求、HTTP 状态、响应体与 code/msg/trace_id
- tb_card_traffic_collection 只写成功读数,新增 carrier_id 与原始数据列;新增 tb_card_traffic_collection_failure,失败不判断有无套餐并带错误详情
- 采集记录在线保留当月加最近 2 个整月,到期分区摘出、导出 csv.gz、校验行数与 SHA-256 后删除,本地保留 3 个月
- 新增采集成功/失败、卡日流量、套餐日流量详单、冲正流水、退款后处理尝试列表接口:可查单个也可查全部,分页与条件筛选
- 停复机记录支持资产标识、场景、原因、指令号筛选;单卡历史支持动作、结果、来源筛选
- 单卡采集记录支持筛选与合并失败记录;套餐日流量详单支持分页;退款列表支持后处理状态筛选
- 测试环境 api、worker 日志分目录,保留 40 个压缩备份;worker 挂载 archive 目录
- 迁移 000272、000273 需维护者在测试库执行后再部署

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 18:47:00 +09:00

53 lines
1.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 admin
import (
"strconv"
"github.com/gofiber/fiber/v2"
packageService "github.com/break/junhong_cmp_fiber/internal/service/package"
"github.com/break/junhong_cmp_fiber/pkg/errors"
"github.com/break/junhong_cmp_fiber/pkg/response"
)
// PackageUsageHandler 套餐使用记录 Handler
type PackageUsageHandler struct {
dailyRecordService *packageService.DailyRecordService
}
// NewPackageUsageHandler 创建套餐使用记录 Handler
func NewPackageUsageHandler(dailyRecordService *packageService.DailyRecordService) *PackageUsageHandler {
return &PackageUsageHandler{
dailyRecordService: dailyRecordService,
}
}
// GetDailyRecords 任务 16.2-16.5: 获取套餐流量详单
// GET /api/admin/package-usage/:id/daily-records
// 查询参数:start_date(开始日期,格式 YYYY-MM-DD), end_date(结束日期,格式 YYYY-MM-DD)
func (h *PackageUsageHandler) GetDailyRecords(c *fiber.Ctx) error {
// 解析套餐使用记录 ID
id, err := strconv.ParseUint(c.Params("id"), 10, 64)
if err != nil {
return errors.New(errors.CodeInvalidParam, "无效的套餐使用记录 ID")
}
// 任务 16.3: 解析日期范围查询参数
startDate := c.Query("start_date", "")
endDate := c.Query("end_date", "")
// 任务 16.4: 调用 DailyRecordService.GetDailyRecords 获取日记录
page := c.QueryInt("page", 0)
pageSize := c.QueryInt("page_size", 0)
if page < 0 || pageSize < 0 || pageSize > 100 {
return errors.New(errors.CodeInvalidParam, "分页参数不合法,page_size 最大 100")
}
records, err := h.dailyRecordService.GetDailyRecords(c.UserContext(), uint(id), startDate, endDate, page, pageSize)
if err != nil {
return err
}
// 任务 16.5: 返回 PackageUsageDetailResponse 响应
return response.Success(c, records)
}