erp-java/services/invoice-service/deploy/API.md

440 lines
8.6 KiB
Markdown
Raw Permalink 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.

# 发票服务 API 文档
## 基本信息
- **服务地址**: `http://localhost:8086`
- **API版本**: v1
- **Base Path**: `/api/invoices`
## 认证
所有API请求需要在Header中传递用户信息
- `X-User-Id`: 用户ID
- `X-User-Name`: 用户名称
---
## 接口列表
### 1. 获取发票列表
**GET** `/api/invoices`
分页查询发票列表
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| tenantId | Long | 否 | 租户ID |
| status | Integer | 否 | 发票状态0-待审核, 1-已开具, 2-已作废, 3-已红冲 |
| invoiceType | Integer | 否 | 发票类型1-专用发票, 2-普通发票, 3-电子发票, 4-卷式发票 |
| keyword | String | 否 | 关键词搜索(发票号、购方名称、订单号) |
| startDate | String | 否 | 开始日期 (yyyy-MM-dd) |
| endDate | String | 否 | 结束日期 (yyyy-MM-dd) |
| page | Integer | 否 | 页码默认1 |
| size | Integer | 否 | 每页数量默认20 |
**响应示例:**
```json
{
"list": [
{
"id": 1,
"invoiceNo": "INV20260404001",
"invoiceType": 2,
"invoiceTypeName": "增值税普通发票",
"status": 1,
"statusName": "已开具",
"buyerName": "测试公司",
"buyerTaxNo": "91110000XXXXXXXX",
"totalAmount": 1130.00,
"amount": 1000.00,
"taxAmount": 130.00,
"taxRate": 0.13,
"invoiceDate": "2026-04-04",
"applyDate": "2026-04-03",
"createdAt": "2026-04-03T10:00:00"
}
],
"total": 100,
"current_page": 1,
"last_page": 5,
"page_size": 20
}
```
---
### 2. 获取发票详情
**GET** `/api/invoices/{id}`
根据ID获取发票详细信息
**路径参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | Long | 是 | 发票ID |
**响应示例:**
```json
{
"id": 1,
"invoiceNo": "INV20260404001",
"invoiceCode": "144031900110",
"invoiceType": 2,
"invoiceTypeName": "增值税普通发票",
"status": 1,
"statusName": "已开具",
"buyerName": "测试公司",
"buyerTaxNo": "91110000XXXXXXXX",
"buyerAddressPhone": "北京市朝阳区 010-12345678",
"buyerBankAccount": "中国银行 123456789",
"sellerName": "销售公司",
"sellerTaxNo": "91110000YYYYYYYY",
"totalAmount": 1130.00,
"amount": 1000.00,
"taxAmount": 130.00,
"taxRate": 0.13,
"orderId": 100,
"orderNo": "ORD20260401001",
"customerId": 50,
"customerName": "测试客户",
"invoiceContent": "咨询服务",
"drawer": "开票人",
"reviewer": "复核人",
"payee": "收款人",
"invoiceDate": "2026-04-04",
"applyDate": "2026-04-03",
"pdfPath": "/files/invoices/2026/04/INV20260404001.pdf",
"imagePath": "/files/invoices/2026/04/INV20260404001.png",
"applicantId": 10,
"applicantName": "张三",
"auditorId": 20,
"auditorName": "李四",
"issuerId": 30,
"issuerName": "王五",
"items": [
{
"id": 1,
"goodsName": "咨询服务",
"spec": "标准版",
"unit": "次",
"quantity": 1.0000,
"unitPrice": 1130.00,
"amount": 1000.00,
"taxRate": 0.13,
"taxAmount": 130.00,
"totalAmount": 1130.00
}
]
}
```
---
### 3. 根据发票号获取发票
**GET** `/api/invoices/no/{invoiceNo}`
**路径参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| invoiceNo | String | 是 | 发票号 |
---
### 4. 创建发票申请
**POST** `/api/invoices`
**请求体:**
```json
{
"invoiceType": 2,
"buyerName": "测试公司",
"buyerTaxNo": "91110000XXXXXXXX",
"buyerAddressPhone": "北京市朝阳区 010-12345678",
"buyerBankAccount": "中国银行 123456789",
"totalAmount": 1130.00,
"amount": 1000.00,
"taxAmount": 130.00,
"taxRate": 0.13,
"orderId": 100,
"orderNo": "ORD20260401001",
"customerId": 50,
"customerName": "测试客户",
"invoiceContent": "咨询服务",
"remark": "备注信息",
"items": [
{
"goodsName": "咨询服务",
"spec": "标准版",
"unit": "次",
"quantity": 1.0000,
"unitPrice": 1130.00,
"amount": 1000.00,
"taxRate": 0.13,
"taxAmount": 130.00,
"totalAmount": 1130.00
}
]
}
```
**响应:** 返回创建的发票详情
---
### 5. 更新发票申请
**PUT** `/api/invoices/{id}`
仅允许更新待审核状态的发票
**路径参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | Long | 是 | 发票ID |
**请求体:** 同创建发票申请
---
### 6. 删除发票申请
**DELETE** `/api/invoices/{id}`
仅允许删除待审核状态的发票
**路径参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | Long | 是 | 发票ID |
---
### 7. 审核发票申请
**POST** `/api/invoices/{id}/audit`
**路径参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | Long | 是 | 发票ID |
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| auditStatus | Integer | 是 | 审核状态1-通过, 0-拒绝 |
| auditRemark | String | 否 | 审核备注 |
**响应:** 返回审核后的发票详情
---
### 8. 开具发票
**POST** `/api/invoices/{id}/issue`
**路径参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | Long | 是 | 发票ID |
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| invoiceNo | String | 是 | 发票号码 |
| invoiceCode | String | 否 | 发票代码 |
| invoiceDate | String | 否 | 开票日期 (yyyy-MM-dd),默认当天 |
| drawer | String | 否 | 开票人 |
| reviewer | String | 否 | 复核人 |
| payee | String | 否 | 收款人 |
**响应:** 返回开具后的发票详情
---
### 9. 作废发票
**POST** `/api/invoices/{id}/void`
**路径参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | Long | 是 | 发票ID |
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| reason | String | 是 | 作废原因 |
**响应:** 返回作废后的发票详情
---
### 10. 红冲发票
**POST** `/api/invoices/{id}/reverse`
**路径参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | Long | 是 | 发票ID |
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| reason | String | 是 | 红冲原因 |
**响应:** 返回红冲后的发票详情
---
### 11. 根据订单ID获取发票列表
**GET** `/api/invoices/order/{orderId}`
**路径参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| orderId | Long | 是 | 订单ID |
---
### 12. 根据客户ID获取发票列表
**GET** `/api/invoices/customer/{customerId}`
**路径参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| customerId | Long | 是 | 客户ID |
---
### 13. 获取租户已开具发票总金额
**GET** `/api/invoices/tenant/{tenantId}/amount`
**路径参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| tenantId | Long | 是 | 租户ID |
**响应示例:**
```json
100000.00
```
---
### 14. 获取日期范围内发票数量
**GET** `/api/invoices/tenant/{tenantId}/count`
**路径参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| tenantId | Long | 是 | 租户ID |
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| startDate | String | 是 | 开始日期 (yyyy-MM-dd) |
| endDate | String | 是 | 结束日期 (yyyy-MM-dd) |
**响应示例:**
```json
10
```
---
### 15. 更新发票PDF路径
**PUT** `/api/invoices/{id}/pdf`
**路径参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | Long | 是 | 发票ID |
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| pdfPath | String | 是 | PDF文件路径 |
---
### 16. 更新发票图片路径
**PUT** `/api/invoices/{id}/image`
**路径参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | Long | 是 | 发票ID |
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| imagePath | String | 是 | 图片文件路径 |
---
### 17. 获取发票明细
**GET** `/api/invoices/{id}/items`
**路径参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | Long | 是 | 发票ID |
---
## 错误码
| 错误码 | 说明 |
|--------|------|
| INVOICE_ERROR | 发票业务异常 |
| VALIDATION_ERROR | 参数校验失败 |
| SYSTEM_ERROR | 系统异常 |
---
## 发票状态流转
```
待审核(0) --> 已开具(1) --> 已作废(2)
|
+--> 已红冲(3)
待审核(0) --> 已作废(2) (审核拒绝)
```