Files
license-manager/backend/docs/demand/2026.2.24-用户端发票申请修改.md
T

3.2 KiB
Raw Blame History

2026.2.24-用户端发票申请修改

1. 需求背景

目前用户申请发票后,如果被管理员驳回(状态为 rejected),用户无法修改该申请信息并重新提交。由于每个订单只能关联一个发票记录,用户也无法为该订单重新发起新的申请。因此需要增加一个发票修改接口,允许用户在驳回状态下编辑发票信息并重新进入待处理状态。

2. 业务流程

  1. 用户侧:查看发票详情,发现状态为“已驳回”,查看“驳回原因”和“修改建议”。
  2. 用户侧:点击修改,编辑发票抬头、税号、邮箱等信息。
  3. 提交修改:调用修改接口。
    • 系统校验发票当前状态必须为 rejected。
    • 系统校验发票所属权。
    • 系统更新发票信息,并将状态重置为 pending。
    • 系统清空原有的驳回信息(可选,或保留历史但在界面不再作为当前驳回提示)。
  4. 管理侧:发票重新出现在待处理列表中。

3. 接口设计

3.1 修改发票申请 (客户端)

  • 接口地址:PUT /api/cu/invoices/{id}
  • 鉴权:需要客户端登录态 (CustomerAuth)
  • 请求参数 (JSON Body):
字段名 类型 必填 说明
invoice_type string 是 发票类型: personal/enterprise/vat_special
receiver_email string 是 收票邮箱
title string 是 发票抬头
taxpayer_id string 否 纳税人识别号 (企业类型必填)
content string 否 开票内容
remark string 否 备注

Note

order_id 不允许修改,因为发票记录与订单是一一绑定的。

  • 逻辑校验:

    1. 存在性校验:发票 ID 必须存在。
    2. 权限校验:发票必须属于当前登录的客户用户 (cu_user_id)。
    3. 状态校验:只有 status = 'rejected' 的发票允许修改。若状态为 pending 或 issued,则返回错误。
    4. 字段校验:与创建发票时的校验逻辑一致(如企业类型必须有税号)。
  • 数据更新:

    • 更新传入的业务字段。
    • status 更新为 pending。
    • updated_at 更新为当前时间。
    • reject_reason、suggestion、rejected_at、rejected_by 建议清空,以表示这是一次全新的提交。

3.2 响应示例

成功响应:

{
  "code": "000000",
  "message": "成功",
  "data": {
    "id": "invoice-uuid",
    "invoice_no": "INV20260224001",
    "status": "pending"
  },
  "timestamp": "2026-02-24T18:00:00Z"
}

失败响应 (状态错误):

{
  "code": "700004",
  "message": "发票当前状态不允许该操作",
  "timestamp": "2026-02-24T18:00:00Z"
}

4. 影响范围

  • 后端模型:需新增 InvoiceUpdateRequest 结构体。
  • 后端服务:CuInvoiceService 新增 UpdateInvoice 方法。
  • 后端接口:router.go 注册新路由。
  • 前端:发票详情页增加修改按钮(仅在驳回时显示),跳转至编辑页。

5. 错误码补充

  • 700006: 发票当前状态不允许修改 (如果 700004 语义不够具体可以新增,或沿用 700004)。