采购来票 + 付款关联来票 - 前端联调方案
涉及页面
- 采购来票管理页(**新建页面**,参考采购申请/采购订单页面结构)
- 采购订单详情页(展示该订单下已关联的来票信息)
- 付款单管理页(新建/编辑弹窗、列表、详情)
- 付款单详情页(展示关联的来票信息)
业务流程与数据带入
- 采购订单(审核通过)-> 创建来票:
purchaseOrderId 必选,供应商自动带出(以采购订单的供应商为准,前端无需传 supplierId,由后端按采购订单查询设置)。
- 来票创建后 -> 上传发票附件(走 system 模块 Storage API)。
- 来票提交审批 -> 审批通过 -> 才可作为付款关联对象。
- 新建付款单 -> 选择关联来票(
invoiceId 必填):从 GET /erp/purchase-invoice/simple-list?supplierId=&purchaseOrderId= 选择,仅显示"审批通过 + 已上传附件 + 剩余可付金额 > 0"的来票;选择后 remainingInvoicePrice 可用于预填付款金额上限。
对应关系:**采购订单(1) -> 来票(N) -> 付款(M)**。
API
1. 来票管理(新)
| 方法 |
路径 |
说明 |
| POST |
/erp/purchase-invoice/create |
创建来票 |
| PUT |
/erp/purchase-invoice/update |
更新来票 |
| DELETE |
/erp/purchase-invoice/delete?id= |
删除来票 |
| GET |
/erp/purchase-invoice/get?id= |
获得来票详情 |
| GET |
/erp/purchase-invoice/page |
来票分页 |
| GET |
/erp/purchase-invoice/export-excel |
导出来票 Excel |
| PUT |
/erp/purchase-invoice/submit?id= |
提交来票审批 |
| GET |
/erp/purchase-invoice/audit-count |
待审核来票数量 |
| GET |
/erp/purchase-invoice/simple-list?supplierId=&purchaseOrderId= |
精简列表(付款表单选来票) |
创建/更新来票请求参数:
| 参数 |
类型 |
必填 |
说明 |
| id |
Long |
否 |
更新时必填 |
| purchaseOrderId |
Long |
是 |
采购订单编号,必选 |
| supplierId |
Long |
否 |
供应商编号,**不传**,由后端按采购订单查询设置 |
| invoiceNo |
String |
否 |
发票号码 |
| invoiceTitle |
String |
否 |
发票抬头 |
| price |
BigDecimal |
是 |
来票金额(元) |
| invoiceTime |
LocalDateTime |
是 |
来票日期 |
| remark |
String |
否 |
备注 |
| blobIds |
List<Long> |
否 |
发票附件 blobId 列表 |
来票分页/详情响应新增字段:
| 字段 |
类型 |
说明 |
| no |
String |
来票编号(后端生成,前缀 FPD) |
| supplierName |
String |
供应商名称 |
| order |
Object |
采购订单信息(嵌套) |
| auditStatus |
Integer |
审批状态(0未提交/10审批中/20审核通过/30审核不通过/40已取消) |
| attachmentList |
List |
发票附件列表 |
| hasAttachment |
Boolean |
是否已上传发票附件 |
| remainingInvoicePrice |
BigDecimal |
剩余可付金额 = 来票金额 - 该来票已付款金额 |
simple-list 响应:
| 字段 |
类型 |
说明 |
| id |
Long |
来票编号 |
| no |
String |
来票编号 |
| invoiceNo |
String |
发票号码 |
| invoiceTitle |
String |
发票抬头 |
| price |
BigDecimal |
来票金额 |
| supplierId |
Long |
供应商编号 |
| purchaseOrderId |
Long |
采购订单编号 |
| auditStatus |
Integer |
审批状态 |
| hasAttachment |
Boolean |
是否已上传附件(恒为 true) |
| remainingInvoicePrice |
BigDecimal |
剩余可付金额 |
2. 付款单(接口变更)
| 方法 |
路径 |
说明 |
| POST |
/erp/finance-payment/create |
创建付款单,请求体新增 invoiceId(必填) |
| PUT |
/erp/finance-payment/update |
更新付款单,请求体新增 invoiceId(必填) |
| GET |
/erp/finance-payment/get |
响应新增 invoiceId、invoice 嵌套对象 |
| GET |
/erp/finance-payment/page |
响应新增 invoiceId、invoice 嵌套对象 |
请求参数新增:
| 参数 |
类型 |
必填 |
说明 |
| invoiceId |
Long |
是 |
关联的来票编号(新建付款单必填) |
响应字段新增:
| 字段 |
类型 |
说明 |
| invoiceId |
Long |
关联的来票编号 |
| invoice |
Object |
关联的来票信息(含 no、invoiceNo、invoiceTitle、price、auditStatus 等) |
响应示例:
{
"code": 0,
"data": {
"id": 1,
"no": "FKD20260810000001",
"invoiceId": 100,
"invoice": {
"id": 100,
"no": "FPD20260810000001",
"invoiceNo": "02564178",
"invoiceTitle": "XX科技有限公司",
"price": 9000.00,
"auditStatus": 20
},
"paymentPrice": 5000.00
}
}
字段展示规则
| 字段 |
展示位置 |
说明 |
| 来票编号 |
来票列表、详情、付款详情 |
前缀 FPD |
| 供应商 |
来票列表、详情 |
按采购订单带出 |
| 采购订单 |
来票列表、详情 |
展示订单编号/信息 |
| 发票号码/抬头 |
来票列表、详情 |
录入字段 |
| 来票金额 |
来票列表、详情、付款表单 |
元 |
| 来票日期 |
来票列表、详情 |
|
| 审批状态 |
来票列表、详情 |
字典展示 |
| 发票附件 |
来票详情、来票列表 |
上传/预览/下载 |
| 剩余可付金额 |
来票列表、付款表单 |
来票金额 - 已付款金额 |
| 关联来票 |
付款列表、付款详情 |
展示 invoice.no / invoice.invoiceNo / invoice.price |
业务规则说明
| 场景 |
规则 |
| 来票创建 |
采购订单必须审核通过;来票供应商与采购订单一致;来票金额不超过订单剩余可开票金额 |
| 来票编辑 |
仅"未提交"状态可编辑 |
| 来票删除 |
审批通过后不可删除 |
| 来票提交审批 |
仅"未提交"状态可提交,提交后进入审批中 |
| 付款选择来票 |
仅审批通过 + 已上传发票附件的来票可选 |
| 付款金额上限 |
付款金额 <= 该来票金额 - 该来票已付款金额(未审核+审批中+已审核付款,排除作废) |
| 供应商一致性 |
付款的供应商必须与关联来票的供应商一致 |
| 存量付款单 |
invoiceId 为空的存量付款单,编辑时需重新选择合格来票 |
注意事项
- 来票供应商不从前端传入,创建/更新时由后端根据采购订单自动设置,前端表单只展示。
- 付款表单选择来票时,先按供应商过滤(
supplierId),可选订单时传 purchaseOrderId 进一步过滤。
remainingInvoicePrice 为负数或 0 的来票不会出现在 simple-list 中,前端可直接按返回列表渲染。
- 付款金额校验在后端,前端可将来票的
remainingInvoicePrice 作为付款金额输入上限提示。
- 来票审批状态变化通过 BPM 回调更新,前端无需处理,分页接口直接返回最新状态。
- 来票发票附件上传使用 system 模块 Storage API(upload -> bind),不要使用旧版 /infra/file 接口。