3.2 KiB
3.2 KiB
2026.2.24-用户端发票申请修改
1. 需求背景
目前用户申请发票后,如果被管理员驳回(状态为 rejected),用户无法修改该申请信息并重新提交。由于每个订单只能关联一个发票记录,用户也无法为该订单重新发起新的申请。因此需要增加一个发票修改接口,允许用户在驳回状态下编辑发票信息并重新进入待处理状态。
2. 业务流程
- 用户侧:查看发票详情,发现状态为“已驳回”,查看“驳回原因”和“修改建议”。
- 用户侧:点击修改,编辑发票抬头、税号、邮箱等信息。
- 提交修改:调用修改接口。
- 系统校验发票当前状态必须为
rejected。 - 系统校验发票所属权。
- 系统更新发票信息,并将状态重置为
pending。 - 系统清空原有的驳回信息(可选,或保留历史但在界面不再作为当前驳回提示)。
- 系统校验发票当前状态必须为
- 管理侧:发票重新出现在待处理列表中。
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不允许修改,因为发票记录与订单是一一绑定的。
-
逻辑校验:
- 存在性校验:发票 ID 必须存在。
- 权限校验:发票必须属于当前登录的客户用户 (
cu_user_id)。 - 状态校验:只有
status = 'rejected'的发票允许修改。若状态为pending或issued,则返回错误。 - 字段校验:与创建发票时的校验逻辑一致(如企业类型必须有税号)。
-
数据更新:
- 更新传入的业务字段。
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)。