feat: 后台订单按平台、代理商、在线支付拆分列表与导出
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m34s

- 新增 GET /orders/platform、/orders/agent、/orders/online,类别由路径固定,参数、响应、权限同原订单列表
- 新增导出场景 order_platform、order_agent、order_online,筛选与表头同 order
- 类别按钱从哪来划分:客户端下单为在线支付;后台代理钱包扣款(含平台代扣)为代理商;其余后台订单为平台
- 列表与导出共用 internal/query/ordercategory 的类别条件
- 企业账号访问订单列表、详情、购买预检改为无权限,修复其可看到全部订单的问题
- 原订单列表与 order 导出场景保留不变

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
邹进
2026-10-26 12:53:24 +09:00
parent 3618fc2b20
commit eb9f12d160
16 changed files with 700 additions and 25 deletions

View File

@@ -74,6 +74,9 @@ func (h *OrderHandler) Create(c *fiber.Ctx) error {
}
func (h *OrderHandler) Get(c *fiber.Ctx) error {
if err := rejectEnterpriseOrderAccess(c); err != nil {
return err
}
id, err := strconv.ParseUint(c.Params("id"), 10, 64)
if err != nil {
return errors.New(errors.CodeInvalidParam, "无效的订单ID")
@@ -87,7 +90,32 @@ func (h *OrderHandler) Get(c *fiber.Ctx) error {
return response.Success(c, order)
}
// List 获取订单列表(不限类别)。
func (h *OrderHandler) List(c *fiber.Ctx) error {
return h.list(c, "")
}
// ListPlatform 获取平台订单列表:后台下单且不走代理钱包。
func (h *OrderHandler) ListPlatform(c *fiber.Ctx) error {
return h.list(c, constants.OrderCategoryPlatform)
}
// ListAgent 获取代理商订单列表:后台下单且从代理钱包扣款。
func (h *OrderHandler) ListAgent(c *fiber.Ctx) error {
return h.list(c, constants.OrderCategoryAgent)
}
// ListOnline 获取在线支付订单列表:客户端下单。
func (h *OrderHandler) ListOnline(c *fiber.Ctx) error {
return h.list(c, constants.OrderCategoryOnline)
}
// list 是订单列表的唯一实现:参数解析、时间范围与代理买家条件只有一份,
// 按类别拆分的接口只额外固定订单类别,权限与数据范围与原列表一致。
func (h *OrderHandler) list(c *fiber.Ctx, category string) error {
if err := rejectEnterpriseOrderAccess(c); err != nil {
return err
}
var req dto.OrderListRequest
if err := c.QueryParser(&req); err != nil {
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
@@ -112,7 +140,7 @@ func (h *OrderHandler) List(c *fiber.Ctx) error {
buyerID = 0
}
orders, err := h.service.List(ctx, &req, startTime, endTime, buyerType, buyerID)
orders, err := h.service.List(ctx, &req, startTime, endTime, buyerType, buyerID, category)
if err != nil {
return err
}
@@ -146,6 +174,9 @@ func (h *OrderHandler) Cancel(c *fiber.Ctx) error {
// 参数: order_type(订单类型), resource_id(资源ID), package_ids(套餐ID列表)
// 响应: 套餐总价、强充要求、实际支付金额等预检结果
func (h *OrderHandler) PurchaseCheck(c *fiber.Ctx) error {
if err := rejectEnterpriseOrderAccess(c); err != nil {
return err
}
var req dto.PurchaseCheckRequest
if err := c.BodyParser(&req); err != nil {
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
@@ -158,3 +189,12 @@ func (h *OrderHandler) PurchaseCheck(c *fiber.Ctx) error {
return response.Success(c, result)
}
// rejectEnterpriseOrderAccess 拒绝企业账号访问后台订单接口:后台对企业账号不加订单数据范围,
// 放行会看到全部订单。企业账号的下单与取消已由各自接口拒绝。
func rejectEnterpriseOrderAccess(c *fiber.Ctx) error {
if middleware.GetUserTypeFromContext(c.UserContext()) == constants.UserTypeEnterprise {
return errors.New(errors.CodeForbidden, "企业账号无权访问订单")
}
return nil
}