1307 lines
46 KiB
HTML
1307 lines
46 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>小包接口文档</title>
|
||
<style>
|
||
/* 全局样式 */
|
||
* {
|
||
margin: 0;
|
||
padding: 0;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
body {
|
||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', Arial, sans-serif;
|
||
line-height: 1.6;
|
||
color: #333;
|
||
background-color: #f5f5f5;
|
||
padding: 20px;
|
||
}
|
||
|
||
.container {
|
||
max-width: 1200px;
|
||
margin: 0 auto;
|
||
background-color: #fff;
|
||
padding: 40px;
|
||
box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);
|
||
border-radius: 8px;
|
||
}
|
||
|
||
/* 标题样式 */
|
||
h1 {
|
||
font-size: 2.5em;
|
||
color: #2c3e50;
|
||
margin-bottom: 30px;
|
||
text-align: center;
|
||
padding-bottom: 15px;
|
||
border-bottom: 3px solid #3498db;
|
||
}
|
||
|
||
h2 {
|
||
font-size: 1.8em;
|
||
color: #34495e;
|
||
margin-top: 40px;
|
||
margin-bottom: 20px;
|
||
padding-bottom: 10px;
|
||
border-bottom: 2px solid #ecf0f1;
|
||
}
|
||
|
||
h3 {
|
||
font-size: 1.4em;
|
||
color: #34495e;
|
||
margin-top: 30px;
|
||
margin-bottom: 15px;
|
||
}
|
||
|
||
h4 {
|
||
font-size: 1.2em;
|
||
color: #34495e;
|
||
margin-top: 20px;
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
/* 段落样式 */
|
||
p {
|
||
margin-bottom: 15px;
|
||
text-align: justify;
|
||
}
|
||
|
||
/* 列表样式 */
|
||
ul, ol {
|
||
margin-left: 30px;
|
||
margin-bottom: 20px;
|
||
}
|
||
|
||
li {
|
||
margin-bottom: 8px;
|
||
}
|
||
|
||
/* 表格样式 */
|
||
table {
|
||
width: 100%;
|
||
border-collapse: collapse;
|
||
margin: 20px 0;
|
||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.05);
|
||
}
|
||
|
||
th, td {
|
||
padding: 12px;
|
||
text-align: left;
|
||
border-bottom: 1px solid #ddd;
|
||
}
|
||
|
||
th {
|
||
background-color: #3498db;
|
||
color: white;
|
||
font-weight: bold;
|
||
}
|
||
|
||
tr:hover {
|
||
background-color: #f5f5f5;
|
||
}
|
||
|
||
/* 代码块样式 */
|
||
pre {
|
||
background-color: #f8f9fa;
|
||
padding: 15px;
|
||
border-radius: 4px;
|
||
overflow-x: auto;
|
||
margin: 20px 0;
|
||
border-left: 4px solid #3498db;
|
||
}
|
||
|
||
code {
|
||
font-family: 'Courier New', Courier, monospace;
|
||
font-size: 0.9em;
|
||
}
|
||
|
||
/* 引用块样式 */
|
||
blockquote {
|
||
border-left: 4px solid #3498db;
|
||
padding-left: 15px;
|
||
margin: 20px 0;
|
||
color: #666;
|
||
font-style: italic;
|
||
}
|
||
|
||
/* 链接样式 */
|
||
a {
|
||
color: #3498db;
|
||
text-decoration: none;
|
||
}
|
||
|
||
a:hover {
|
||
text-decoration: underline;
|
||
}
|
||
|
||
/* 强调样式 */
|
||
strong {
|
||
font-weight: bold;
|
||
color: #2c3e50;
|
||
}
|
||
|
||
/* 页面分割线 */
|
||
hr {
|
||
border: none;
|
||
border-top: 1px solid #ecf0f1;
|
||
margin: 30px 0;
|
||
}
|
||
|
||
/* 响应式设计 */
|
||
@media (max-width: 768px) {
|
||
.container {
|
||
padding: 20px;
|
||
}
|
||
|
||
h1 {
|
||
font-size: 2em;
|
||
}
|
||
|
||
h2 {
|
||
font-size: 1.5em;
|
||
}
|
||
|
||
h3 {
|
||
font-size: 1.2em;
|
||
}
|
||
|
||
table {
|
||
font-size: 0.9em;
|
||
}
|
||
|
||
th, td {
|
||
padding: 8px;
|
||
}
|
||
}
|
||
|
||
/* 打印样式 */
|
||
@media print {
|
||
body {
|
||
background-color: white;
|
||
padding: 0;
|
||
}
|
||
|
||
.container {
|
||
box-shadow: none;
|
||
padding: 0;
|
||
}
|
||
|
||
h1, h2, h3, h4 {
|
||
color: #000;
|
||
}
|
||
|
||
table {
|
||
box-shadow: none;
|
||
}
|
||
|
||
th {
|
||
background-color: #ccc;
|
||
color: #000;
|
||
}
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<div class="container">
|
||
<h1>小包接口文档</h1>
|
||
|
||
<h2>1. 接口概述</h2>
|
||
<p>小包模块提供了一系列RESTful API接口,用于标签替换、扫描记录管理以及相关操作。本文档详细描述了这些接口的使用方法、请求参数和响应格式。</p>
|
||
|
||
<p><strong>测试环境请求地址:http://172.232.21.79:5002</strong></p>
|
||
<p><strong>正式环境请求地址:https://lr.tooexp.com</strong></p>
|
||
|
||
<h3>1.1 接口基础信息</h3>
|
||
<ul>
|
||
<li><strong>基础URL</strong>:<code>http://{服务器地址}:{端口}/api/Label</code></li>
|
||
<li><strong>请求方式</strong>:POST/GET</li>
|
||
<li><strong>数据格式</strong>:JSON</li>
|
||
<li><strong>响应格式</strong>:JSON</li>
|
||
</ul>
|
||
|
||
<h3>1.2 状态码说明</h3>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>状态码</th>
|
||
<th>描述</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>200</td>
|
||
<td>操作成功</td>
|
||
</tr>
|
||
<tr>
|
||
<td>400</td>
|
||
<td>请求参数错误或操作失败</td>
|
||
</tr>
|
||
<tr>
|
||
<td>401</td>
|
||
<td>身份验证失败</td>
|
||
</tr>
|
||
<tr>
|
||
<td>404</td>
|
||
<td>资源不存在</td>
|
||
</tr>
|
||
<tr>
|
||
<td>500</td>
|
||
<td>服务器内部错误</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h2>2. 接口详细说明</h2>
|
||
|
||
<h3>2.1 根据跟踪单号获取标签替换请求记录</h3>
|
||
<p><strong>接口路径</strong>:<code>/label-replace/tracking/{trackingNumber}</code></p>
|
||
<p><strong>请求方法</strong>:GET</p>
|
||
<p><strong>功能描述</strong>:根据跟踪单号获取标签替换请求记录</p>
|
||
|
||
<h4>请求参数</h4>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>参数名</th>
|
||
<th>类型</th>
|
||
<th>必填</th>
|
||
<th>描述</th>
|
||
<th>示例值</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>trackingNumber</td>
|
||
<td>string</td>
|
||
<td>是</td>
|
||
<td>跟踪单号</td>
|
||
<td>"1Z999AA10123456789"</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h4>请求示例</h4>
|
||
<pre><code>GET /api/Label/label-replace/tracking/1Z999AA10123456789</code></pre>
|
||
|
||
<h4>响应格式</h4>
|
||
<p><strong>成功响应</strong>:</p>
|
||
<pre><code>{"status": "ok", "timestamp": "2026-03-30T12:00:00Z", "trackingNumber": "1Z999AA10123456789", "count": 1, "data": [{"Id": 1, "NeutralWaybillNumber": "TEST001", "FinalMileTrackingNumber": "1Z999AA10123456789", "ReplaceStatus": "Y", "CreatedAt": "2026-03-30T10:00:00Z"}]}</code></pre>
|
||
|
||
<p><strong>失败响应</strong>:</p>
|
||
<pre><code>{"status": "error", "message": "Tracking number is required"}</code></pre>
|
||
|
||
<h3>2.2 根据中性面单单号获取标签替换请求记录</h3>
|
||
<p><strong>接口路径</strong>:<code>/label-replace/waybill/{waybillNumber}</code></p>
|
||
<p><strong>请求方法</strong>:GET</p>
|
||
<p><strong>功能描述</strong>:根据中性面单单号获取标签替换请求记录</p>
|
||
|
||
<h4>请求参数</h4>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>参数名</th>
|
||
<th>类型</th>
|
||
<th>必填</th>
|
||
<th>描述</th>
|
||
<th>示例值</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>waybillNumber</td>
|
||
<td>string</td>
|
||
<td>是</td>
|
||
<td>中性面单单号</td>
|
||
<td>"TEST001"</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h4>请求示例</h4>
|
||
<pre><code>GET /api/Label/label-replace/waybill/TEST001</code></pre>
|
||
|
||
<h4>响应格式</h4>
|
||
<p><strong>成功响应</strong>:</p>
|
||
<pre><code>{"status": "ok", "timestamp": "2026-03-30T12:00:00Z", "waybillNumber": "TEST001", "data": {"Id": 1, "NeutralWaybillNumber": "TEST001", "FinalMileTrackingNumber": "1Z999AA10123456789", "ReplaceStatus": "Y", "CreatedAt": "2026-03-30T10:00:00Z"}}</code></pre>
|
||
|
||
<p><strong>失败响应</strong>:</p>
|
||
<pre><code>{"status": "error", "message": "Waybill number is required"}</code></pre>
|
||
|
||
<h3>2.3 根据中性面单单号获取标签文件并返回字节流</h3>
|
||
<p><strong>接口路径</strong>:<code>/label-replace/waybill/{waybillNumber}/download</code></p>
|
||
<p><strong>请求方法</strong>:GET</p>
|
||
<p><strong>功能描述</strong>:根据中性面单单号获取标签文件并返回字节流</p>
|
||
|
||
<h4>请求参数</h4>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>参数名</th>
|
||
<th>类型</th>
|
||
<th>必填</th>
|
||
<th>描述</th>
|
||
<th>示例值</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>waybillNumber</td>
|
||
<td>string</td>
|
||
<td>是</td>
|
||
<td>中性面单单号</td>
|
||
<td>"TEST001"</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h4>请求示例</h4>
|
||
<pre><code>GET /api/Label/label-replace/waybill/TEST001/download</code></pre>
|
||
|
||
<h4>响应格式</h4>
|
||
<p><strong>成功响应</strong>:</p>
|
||
<ul>
|
||
<li>响应类型:<code>application/pdf</code></li>
|
||
<li>响应内容:标签文件的PDF字节流</li>
|
||
<li>文件名:<code>label_TEST001.pdf</code></li>
|
||
</ul>
|
||
|
||
<p><strong>失败响应</strong>:</p>
|
||
<pre><code>{"status": "error", "message": "Label replace request not found for the provided waybill number"}</code></pre>
|
||
|
||
<h3>2.4 获取打印预览页面</h3>
|
||
<p><strong>接口路径</strong>:<code>/print-preview</code></p>
|
||
<p><strong>请求方法</strong>:GET</p>
|
||
<p><strong>功能描述</strong>:获取打印预览页面</p>
|
||
|
||
<h4>请求参数</h4>
|
||
<p>无</p>
|
||
|
||
<h4>请求示例</h4>
|
||
<pre><code>GET /api/Label/print-preview</code></pre>
|
||
|
||
<h4>响应格式</h4>
|
||
<p><strong>成功响应</strong>:</p>
|
||
<ul>
|
||
<li>响应类型:<code>text/html</code></li>
|
||
<li>响应内容:打印预览页面的HTML内容</li>
|
||
</ul>
|
||
|
||
<p><strong>失败响应</strong>:</p>
|
||
<ul>
|
||
<li>404 Not Found</li>
|
||
</ul>
|
||
|
||
<h3>2.5 测试讯通回传接口</h3>
|
||
<p><strong>接口路径</strong>:<code>/label-scan/test-xuntong-webhook</code></p>
|
||
<p><strong>请求方法</strong>:POST</p>
|
||
<p><strong>功能描述</strong>:测试讯通回传接口</p>
|
||
|
||
<h4>请求参数</h4>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>参数名</th>
|
||
<th>类型</th>
|
||
<th>必填</th>
|
||
<th>描述</th>
|
||
<th>示例值</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>WaybillNumber</td>
|
||
<td>string</td>
|
||
<td>是</td>
|
||
<td>中性面单单号</td>
|
||
<td>"TEST001"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Success</td>
|
||
<td>bool</td>
|
||
<td>否</td>
|
||
<td>是否成功,默认true</td>
|
||
<td>true</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Description</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>描述</td>
|
||
<td>"Test webhook"</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h4>请求示例</h4>
|
||
<pre><code>{"WaybillNumber": "TEST001", "Success": true, "Description": "Test webhook"}</code></pre>
|
||
|
||
<h4>响应格式</h4>
|
||
<p><strong>成功响应</strong>:</p>
|
||
<pre><code>{"status": "ok", "message": "Test webhook sent successfully"}</code></pre>
|
||
|
||
<p><strong>失败响应</strong>:</p>
|
||
<pre><code>{"status": "error", "message": "Waybill number is required"}</code></pre>
|
||
|
||
<h3>2.6 记录标签扫描</h3>
|
||
<p><strong>接口路径</strong>:<code>/label-scan/record</code></p>
|
||
<p><strong>请求方法</strong>:POST</p>
|
||
<p><strong>功能描述</strong>:记录标签扫描</p>
|
||
|
||
<h4>请求参数</h4>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>参数名</th>
|
||
<th>类型</th>
|
||
<th>必填</th>
|
||
<th>描述</th>
|
||
<th>示例值</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>CustomerId</td>
|
||
<td>int</td>
|
||
<td>否</td>
|
||
<td>客户ID</td>
|
||
<td>1</td>
|
||
</tr>
|
||
<tr>
|
||
<td>NeutralWaybillNumber</td>
|
||
<td>string</td>
|
||
<td>是</td>
|
||
<td>中性面单单号</td>
|
||
<td>"TEST001"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Result</td>
|
||
<td>int</td>
|
||
<td>是</td>
|
||
<td>扫描结果</td>
|
||
<td>0</td>
|
||
</tr>
|
||
<tr>
|
||
<td>CreatedBy</td>
|
||
<td>string</td>
|
||
<td>是</td>
|
||
<td>创建人</td>
|
||
<td>"system"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>ReferenceNumber</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>参考号</td>
|
||
<td>"REF001"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>FinalMileTrackingNumber</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>尾程跟踪单号</td>
|
||
<td>"1Z999AA10123456789"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Description</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>描述</td>
|
||
<td>"标签扫描"</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h4>请求示例</h4>
|
||
<pre><code>{"CustomerId": 1, "NeutralWaybillNumber": "TEST001", "Result": 0, "CreatedBy": "system", "ReferenceNumber": "REF001", "FinalMileTrackingNumber": "1Z999AA10123456789", "Description": "标签扫描"}</code></pre>
|
||
|
||
<h4>响应格式</h4>
|
||
<p><strong>成功响应</strong>:</p>
|
||
<pre><code>{"status": "ok", "timestamp": "2026-03-30T12:00:00Z", "scanRecord": {"Id": 1, "NeutralWaybillNumber": "TEST001", "Result": 0, "CreatedBy": "system", "CreatedAt": "2026-03-30T12:00:00Z"}}</code></pre>
|
||
|
||
<p><strong>失败响应</strong>:</p>
|
||
<pre><code>{"status": "error", "message": "Neutral waybill number is required"}</code></pre>
|
||
|
||
<h3>2.7 根据中性面单查询扫描记录列表</h3>
|
||
<p><strong>接口路径</strong>:<code>/label-scan/waybill/{waybillNumber}</code></p>
|
||
<p><strong>请求方法</strong>:GET</p>
|
||
<p><strong>功能描述</strong>:根据中性面单查询扫描记录列表</p>
|
||
|
||
<h4>请求参数</h4>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>参数名</th>
|
||
<th>类型</th>
|
||
<th>必填</th>
|
||
<th>描述</th>
|
||
<th>示例值</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>waybillNumber</td>
|
||
<td>string</td>
|
||
<td>是</td>
|
||
<td>中性面单单号</td>
|
||
<td>"TEST001"</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h4>请求示例</h4>
|
||
<pre><code>GET /api/Label/label-scan/waybill/TEST001</code></pre>
|
||
|
||
<h4>响应格式</h4>
|
||
<p><strong>成功响应</strong>:</p>
|
||
<pre><code>{"status": "ok", "timestamp": "2026-03-30T12:00:00Z", "waybillNumber": "TEST001", "count": 1, "data": [{"Id": 1, "NeutralWaybillNumber": "TEST001", "Result": 0, "CreatedBy": "system", "CreatedAt": "2026-03-30T10:00:00Z"}]}</code></pre>
|
||
|
||
<p><strong>失败响应</strong>:</p>
|
||
<pre><code>{"status": "error", "message": "Waybill number is required"}</code></pre>
|
||
|
||
<h3>2.8 根据客户ID查询扫描记录列表</h3>
|
||
<p><strong>接口路径</strong>:<code>/label-scan/customer/{customerId}</code></p>
|
||
<p><strong>请求方法</strong>:GET</p>
|
||
<p><strong>功能描述</strong>:根据客户ID查询扫描记录列表</p>
|
||
|
||
<h4>请求参数</h4>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>参数名</th>
|
||
<th>类型</th>
|
||
<th>必填</th>
|
||
<th>描述</th>
|
||
<th>示例值</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>customerId</td>
|
||
<td>int</td>
|
||
<td>是</td>
|
||
<td>客户ID</td>
|
||
<td>1</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h4>请求示例</h4>
|
||
<pre><code>GET /api/Label/label-scan/customer/1</code></pre>
|
||
|
||
<h4>响应格式</h4>
|
||
<p><strong>成功响应</strong>:</p>
|
||
<pre><code>{"status": "ok", "timestamp": "2026-03-30T12:00:00Z", "customerId": 1, "count": 2, "data": [{"Id": 1, "NeutralWaybillNumber": "TEST001", "Result": 0, "CreatedBy": "system", "CreatedAt": "2026-03-30T10:00:00Z"}, {"Id": 2, "NeutralWaybillNumber": "TEST002", "Result": 0, "CreatedBy": "system", "CreatedAt": "2026-03-30T11:00:00Z"}]}</code></pre>
|
||
|
||
<p><strong>失败响应</strong>:</p>
|
||
<pre><code>{"status": "error", "message": "An unexpected error occurred during scan record retrieval.", "errorDetails": "错误信息"}</code></pre>
|
||
|
||
<h3>2.9 获取客户的扫描记录统计</h3>
|
||
<p><strong>接口路径</strong>:<code>/label-scan/stats/customer/{customerId}</code></p>
|
||
<p><strong>请求方法</strong>:GET</p>
|
||
<p><strong>功能描述</strong>:获取客户的扫描记录统计</p>
|
||
|
||
<h4>请求参数</h4>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>参数名</th>
|
||
<th>类型</th>
|
||
<th>必填</th>
|
||
<th>描述</th>
|
||
<th>示例值</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>customerId</td>
|
||
<td>int</td>
|
||
<td>是</td>
|
||
<td>客户ID</td>
|
||
<td>1</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h4>请求示例</h4>
|
||
<pre><code>GET /api/Label/label-scan/stats/customer/1</code></pre>
|
||
|
||
<h4>响应格式</h4>
|
||
<p><strong>成功响应</strong>:</p>
|
||
<pre><code>{"status": "ok", "timestamp": "2026-03-30T12:00:00Z", "customerId": 1, "stats": {"totalScans": 10, "successfulScans": 8, "failedScans": 2}}</code></pre>
|
||
|
||
<p><strong>失败响应</strong>:</p>
|
||
<pre><code>{"status": "error", "message": "An unexpected error occurred during scan statistics retrieval.", "errorDetails": "错误信息"}</code></pre>
|
||
|
||
<h3>2.10 批量查询标签替换请求</h3>
|
||
<p><strong>接口路径</strong>:<code>/label-replace/batch</code></p>
|
||
<p><strong>请求方法</strong>:GET</p>
|
||
<p><strong>功能描述</strong>:批量查询标签替换请求</p>
|
||
|
||
<h4>请求参数</h4>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>参数名</th>
|
||
<th>类型</th>
|
||
<th>必填</th>
|
||
<th>描述</th>
|
||
<th>示例值</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>page</td>
|
||
<td>int</td>
|
||
<td>否</td>
|
||
<td>页码,默认1</td>
|
||
<td>1</td>
|
||
</tr>
|
||
<tr>
|
||
<td>pageSize</td>
|
||
<td>int</td>
|
||
<td>否</td>
|
||
<td>每页数量,默认10</td>
|
||
<td>10</td>
|
||
</tr>
|
||
<tr>
|
||
<td>sortBy</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>排序字段,默认CreatedAt</td>
|
||
<td>"CreatedAt"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>sortOrder</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>排序方向,默认desc</td>
|
||
<td>"desc"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>billOfLadingNumber</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>提单号</td>
|
||
<td>"BOL001"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>masterPackageNumber</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>大包号</td>
|
||
<td>"MP001"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>referenceNumber</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>参考号</td>
|
||
<td>"REF001"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>neutralWaybillNumber</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>中性面单单号</td>
|
||
<td>"TEST001"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>finalMileTrackingNumber</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>尾程跟踪单号</td>
|
||
<td>"1Z999AA10123456789"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>replaceStatus</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>换单状态</td>
|
||
<td>"Y"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>customerId</td>
|
||
<td>int</td>
|
||
<td>否</td>
|
||
<td>客户ID</td>
|
||
<td>1</td>
|
||
</tr>
|
||
<tr>
|
||
<td>callback</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>JSONP回调函数名</td>
|
||
<td>"callback"</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h4>请求示例</h4>
|
||
<pre><code>GET /api/Label/label-replace/batch?page=1&pageSize=10&sortBy=CreatedAt&sortOrder=desc</code></pre>
|
||
|
||
<h4>响应格式</h4>
|
||
<p><strong>成功响应</strong>:</p>
|
||
<pre><code>{"status": "ok", "timestamp": "2026-03-30T12:00:00Z", "totalCount": 100, "page": 1, "pageSize": 10, "totalPages": 10, "data": [{"Id": 1, "NeutralWaybillNumber": "TEST001", "FinalMileTrackingNumber": "1Z999AA10123456789", "ReplaceStatus": "Y", "CreatedAt": "2026-03-30T10:00:00Z"}, ...]}</code></pre>
|
||
|
||
<p><strong>失败响应</strong>:</p>
|
||
<pre><code>{"status": "error", "message": "An unexpected error occurred during batch retrieval.", "errorDetails": "错误信息"}</code></pre>
|
||
|
||
<h3>2.11 批量查询标签扫描记录</h3>
|
||
<p><strong>接口路径</strong>:<code>/label-scan/batch</code></p>
|
||
<p><strong>请求方法</strong>:GET</p>
|
||
<p><strong>功能描述</strong>:批量查询标签扫描记录</p>
|
||
|
||
<h4>请求参数</h4>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>参数名</th>
|
||
<th>类型</th>
|
||
<th>必填</th>
|
||
<th>描述</th>
|
||
<th>示例值</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>page</td>
|
||
<td>int</td>
|
||
<td>否</td>
|
||
<td>页码,默认1</td>
|
||
<td>1</td>
|
||
</tr>
|
||
<tr>
|
||
<td>pageSize</td>
|
||
<td>int</td>
|
||
<td>否</td>
|
||
<td>每页数量,默认10</td>
|
||
<td>10</td>
|
||
</tr>
|
||
<tr>
|
||
<td>sortBy</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>排序字段,默认CreatedAt</td>
|
||
<td>"CreatedAt"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>sortOrder</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>排序方向,默认desc</td>
|
||
<td>"desc"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>customerId</td>
|
||
<td>int</td>
|
||
<td>否</td>
|
||
<td>客户ID</td>
|
||
<td>1</td>
|
||
</tr>
|
||
<tr>
|
||
<td>referenceNumber</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>参考号</td>
|
||
<td>"REF001"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>neutralWaybillNumber</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>中性面单单号</td>
|
||
<td>"TEST001"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>finalMileTrackingNumber</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>尾程跟踪单号</td>
|
||
<td>"1Z999AA10123456789"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>result</td>
|
||
<td>int</td>
|
||
<td>否</td>
|
||
<td>扫描结果</td>
|
||
<td>0</td>
|
||
</tr>
|
||
<tr>
|
||
<td>callback</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>JSONP回调函数名</td>
|
||
<td>"callback"</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h4>请求示例</h4>
|
||
<pre><code>GET /api/Label/label-scan/batch?page=1&pageSize=10&sortBy=CreatedAt&sortOrder=desc</code></pre>
|
||
|
||
<h4>响应格式</h4>
|
||
<p><strong>成功响应</strong>:</p>
|
||
<pre><code>{"status": "ok", "timestamp": "2026-03-30T12:00:00Z", "totalCount": 50, "page": 1, "pageSize": 10, "totalPages": 5, "data": [{"Id": 1, "NeutralWaybillNumber": "TEST001", "Result": 0, "CreatedBy": "system", "CreatedAt": "2026-03-30T10:00:00Z"}, ...]}</code></pre>
|
||
|
||
<p><strong>失败响应</strong>:</p>
|
||
<pre><code>{"status": "error", "message": "An unexpected error occurred during batch retrieval.", "errorDetails": "错误信息"}</code></pre>
|
||
|
||
<h3>2.12 导出标签替换请求为Excel</h3>
|
||
<p><strong>接口路径</strong>:<code>/label-replace/export-excel</code></p>
|
||
<p><strong>请求方法</strong>:GET</p>
|
||
<p><strong>功能描述</strong>:导出标签替换请求为Excel</p>
|
||
|
||
<h4>请求参数</h4>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>参数名</th>
|
||
<th>类型</th>
|
||
<th>必填</th>
|
||
<th>描述</th>
|
||
<th>示例值</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>billOfLadingNumber</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>提单号</td>
|
||
<td>"BOL001"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>masterPackageNumber</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>大包号</td>
|
||
<td>"MP001"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>referenceNumber</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>参考号</td>
|
||
<td>"REF001"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>neutralWaybillNumber</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>中性面单单号</td>
|
||
<td>"TEST001"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>finalMileTrackingNumber</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>尾程跟踪单号</td>
|
||
<td>"1Z999AA10123456789"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>replaceStatus</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>换单状态</td>
|
||
<td>"Y"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>customerId</td>
|
||
<td>int</td>
|
||
<td>否</td>
|
||
<td>客户ID</td>
|
||
<td>1</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h4>请求示例</h4>
|
||
<pre><code>GET /api/Label/label-replace/export-excel?customerId=1&replaceStatus=Y</code></pre>
|
||
|
||
<h4>响应格式</h4>
|
||
<p><strong>成功响应</strong>:</p>
|
||
<ul>
|
||
<li>响应类型:<code>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</code></li>
|
||
<li>响应内容:Excel文件字节流</li>
|
||
<li>文件名:<code>LabelReplaceRequests_20260330_120000.xlsx</code></li>
|
||
</ul>
|
||
|
||
<p><strong>失败响应</strong>:</p>
|
||
<pre><code>{"status": "error", "message": "An unexpected error occurred during export.", "errorDetails": "错误信息"}</code></pre>
|
||
|
||
<h3>2.13 批量取消订单</h3>
|
||
<p><strong>接口路径</strong>:<code>/label-replace/batch-cancel</code></p>
|
||
<p><strong>请求方法</strong>:POST</p>
|
||
<p><strong>功能描述</strong>:批量取消订单</p>
|
||
|
||
<h4>请求参数</h4>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>参数名</th>
|
||
<th>类型</th>
|
||
<th>必填</th>
|
||
<th>描述</th>
|
||
<th>示例值</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>CustomerCode</td>
|
||
<td>string</td>
|
||
<td>是</td>
|
||
<td>客户代码</td>
|
||
<td>"TEST"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>ApiKey</td>
|
||
<td>string</td>
|
||
<td>是</td>
|
||
<td>API密钥</td>
|
||
<td>"api_key_123"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>WaybillNumbers</td>
|
||
<td>array</td>
|
||
<td>是</td>
|
||
<td>中性面单单号列表</td>
|
||
<td>["TEST001", "TEST002"]</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h4>请求示例</h4>
|
||
<pre><code>{"CustomerCode": "TEST", "ApiKey": "api_key_123", "WaybillNumbers": ["TEST001", "TEST002"]}</code></pre>
|
||
|
||
<h4>响应格式</h4>
|
||
<p><strong>成功响应</strong>:</p>
|
||
<pre><code>{"status": "ok", "timestamp": "2026-03-30T12:00:00Z", "successCount": 2, "failedCount": 0, "failedItems": [], "message": "Batch cancel completed successfully"}</code></pre>
|
||
|
||
<p><strong>失败响应</strong>:</p>
|
||
<pre><code>{"status": "error", "message": "Waybill numbers are required"}</code></pre>
|
||
|
||
<h3>2.14 导出标签扫描记录为Excel</h3>
|
||
<p><strong>接口路径</strong>:<code>/label-scan/export-excel</code></p>
|
||
<p><strong>请求方法</strong>:GET</p>
|
||
<p><strong>功能描述</strong>:导出标签扫描记录为Excel</p>
|
||
|
||
<h4>请求参数</h4>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>参数名</th>
|
||
<th>类型</th>
|
||
<th>必填</th>
|
||
<th>描述</th>
|
||
<th>示例值</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>customerId</td>
|
||
<td>int</td>
|
||
<td>否</td>
|
||
<td>客户ID</td>
|
||
<td>1</td>
|
||
</tr>
|
||
<tr>
|
||
<td>referenceNumber</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>参考号</td>
|
||
<td>"REF001"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>neutralWaybillNumber</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>中性面单单号</td>
|
||
<td>"TEST001"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>finalMileTrackingNumber</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>尾程跟踪单号</td>
|
||
<td>"1Z999AA10123456789"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>result</td>
|
||
<td>int</td>
|
||
<td>否</td>
|
||
<td>扫描结果</td>
|
||
<td>0</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h4>请求示例</h4>
|
||
<pre><code>GET /api/Label/label-scan/export-excel?customerId=1&result=0</code></pre>
|
||
|
||
<h4>响应格式</h4>
|
||
<p><strong>成功响应</strong>:</p>
|
||
<ul>
|
||
<li>响应类型:<code>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</code></li>
|
||
<li>响应内容:Excel文件字节流</li>
|
||
<li>文件名:<code>LabelScanRecords_20260330_120000.xlsx</code></li>
|
||
</ul>
|
||
|
||
<p><strong>失败响应</strong>:</p>
|
||
<pre><code>{"status": "error", "message": "An unexpected error occurred during export.", "errorDetails": "错误信息"}</code></pre>
|
||
|
||
<h3>2.15 获取客户列表</h3>
|
||
<p><strong>接口路径</strong>:<code>/customers</code></p>
|
||
<p><strong>请求方法</strong>:GET</p>
|
||
<p><strong>功能描述</strong>:获取客户列表</p>
|
||
|
||
<h4>请求参数</h4>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>参数名</th>
|
||
<th>类型</th>
|
||
<th>必填</th>
|
||
<th>描述</th>
|
||
<th>示例值</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>callback</td>
|
||
<td>string</td>
|
||
<td>否</td>
|
||
<td>JSONP回调函数名</td>
|
||
<td>"callback"</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h4>请求示例</h4>
|
||
<pre><code>GET /api/Label/customers</code></pre>
|
||
|
||
<h4>响应格式</h4>
|
||
<p><strong>成功响应</strong>:</p>
|
||
<pre><code>{"status": "ok", "timestamp": "2026-03-30T12:00:00Z", "data": [{"Id": 1, "CustomerCode": "TEST", "CustomerName": "测试客户"}, ...]}</code></pre>
|
||
|
||
<p><strong>失败响应</strong>:</p>
|
||
<pre><code>{"status": "error", "message": "An unexpected error occurred during customers retrieval.", "errorDetails": "错误信息"}</code></pre>
|
||
|
||
<h3>2.16 批量查询换单状态</h3>
|
||
<p><strong>接口路径</strong>:<code>/label-replace/status</code></p>
|
||
<p><strong>请求方法</strong>:POST</p>
|
||
<p><strong>功能描述</strong>:批量查询换单状态</p>
|
||
|
||
<h4>请求参数</h4>
|
||
<p><strong>请求头</strong>:</p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>参数名</th>
|
||
<th>类型</th>
|
||
<th>必填</th>
|
||
<th>描述</th>
|
||
<th>示例值</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>customerCode</td>
|
||
<td>string</td>
|
||
<td>是</td>
|
||
<td>客户代码</td>
|
||
<td>"TEST"</td>
|
||
</tr>
|
||
<tr>
|
||
<td>apiKey</td>
|
||
<td>string</td>
|
||
<td>是</td>
|
||
<td>API密钥</td>
|
||
<td>"api_key_123"</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<p><strong>请求体</strong>:</p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>参数名</th>
|
||
<th>类型</th>
|
||
<th>必填</th>
|
||
<th>描述</th>
|
||
<th>示例值</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>numbers</td>
|
||
<td>array</td>
|
||
<td>是</td>
|
||
<td>单号列表(中性面单或尾程单号)</td>
|
||
<td>["TEST001", "1Z999AA10123456789"]</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h4>请求示例</h4>
|
||
<pre><code>{"numbers": ["TEST001", "1Z999AA10123456789"]}</code></pre>
|
||
|
||
<h4>响应格式</h4>
|
||
<p><strong>成功响应</strong>:</p>
|
||
<pre><code>{"code": 200, "timestamp": "2026-03-30T12:00:00Z", "count": 2, "data": [{"number": "TEST001", "status": "Y", "message": "Success"}, {"number": "1Z999AA10123456789", "status": "Y", "message": "Success"}]}</code></pre>
|
||
|
||
<p><strong>失败响应</strong>:</p>
|
||
<pre><code>{"code": 400, "message": "customerCode and apiKey are required in headers"}</code></pre>
|
||
|
||
<h2>3. 接口调用示例</h2>
|
||
|
||
<h3>3.1 使用cURL调用</h3>
|
||
|
||
<h4>根据跟踪单号获取标签替换请求记录</h4>
|
||
<pre><code>curl -X GET "http://localhost:5002/api/Label/label-replace/tracking/1Z999AA10123456789"</code></pre>
|
||
|
||
<h4>根据中性面单单号获取标签文件</h4>
|
||
<pre><code>curl -X GET "http://localhost:5002/api/Label/label-replace/waybill/TEST001/download" -o "label_TEST001.pdf"</code></pre>
|
||
|
||
<h4>记录标签扫描</h4>
|
||
<pre><code>curl -X POST "http://localhost:5002/api/Label/label-scan/record" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"NeutralWaybillNumber": "TEST001", "Result": 0, "CreatedBy": "system"}'</code></pre>
|
||
|
||
<h4>批量查询换单状态</h4>
|
||
<pre><code>curl -X POST "http://localhost:5002/api/Label/label-replace/status" \
|
||
-H "Content-Type: application/json" \
|
||
-H "customerCode: TEST" \
|
||
-H "apiKey: api_key_123" \
|
||
-d '{"numbers": ["TEST001", "1Z999AA10123456789"]}'</code></pre>
|
||
|
||
<h3>3.2 使用PowerShell调用</h3>
|
||
|
||
<h4>根据跟踪单号获取标签替换请求记录</h4>
|
||
<pre><code>Invoke-RestMethod -Uri "http://localhost:5002/api/Label/label-replace/tracking/1Z999AA10123456789" `
|
||
-Method GET</code></pre>
|
||
|
||
<h4>根据中性面单单号获取标签文件</h4>
|
||
<pre><code>Invoke-WebRequest -Uri "http://localhost:5002/api/Label/label-replace/waybill/TEST001/download" `
|
||
-Method GET `
|
||
-OutFile "label_TEST001.pdf"</code></pre>
|
||
|
||
<h4>记录标签扫描</h4>
|
||
<pre><code>Invoke-RestMethod -Uri "http://localhost:5002/api/Label/label-scan/record" `
|
||
-Method POST `
|
||
-ContentType "application/json" `
|
||
-Body '{"NeutralWaybillNumber": "TEST001", "Result": 0, "CreatedBy": "system"}'</code></pre>
|
||
|
||
<h4>批量查询换单状态</h4>
|
||
<pre><code>Invoke-RestMethod -Uri "http://localhost:5002/api/Label/label-replace/status" `
|
||
-Method POST `
|
||
-ContentType "application/json" `
|
||
-Headers @{"customerCode"="TEST"; "apiKey"="api_key_123"} `
|
||
-Body '{"numbers": ["TEST001", "1Z999AA10123456789"]}'</code></pre>
|
||
|
||
<h2>4. 业务流程示例</h2>
|
||
|
||
<h3>4.1 标签下载流程</h3>
|
||
<ol>
|
||
<li><strong>查询标签替换记录</strong>:根据中性面单单号查询标签替换记录</li>
|
||
<li><strong>下载标签文件</strong>:获取标签文件并返回字节流</li>
|
||
<li><strong>记录扫描</strong>:记录标签扫描操作</li>
|
||
</ol>
|
||
|
||
<h3>4.2 流程示例</h3>
|
||
<pre><code># 1. 查询标签替换记录
|
||
GET /api/Label/label-replace/waybill/TEST001
|
||
|
||
# 2. 下载标签文件
|
||
GET /api/Label/label-replace/waybill/TEST001/download
|
||
|
||
# 3. 记录扫描
|
||
POST /api/Label/label-scan/record
|
||
{"NeutralWaybillNumber": "TEST001", "Result": 0, "CreatedBy": "system"}</code></pre>
|
||
|
||
<h2>5. 注意事项</h2>
|
||
|
||
<h3>5.1 接口调用限制</h3>
|
||
<ul>
|
||
<li>批量操作时,建议单次处理数量不超过100个</li>
|
||
<li>频繁的接口调用可能会影响系统性能,建议合理控制调用频率</li>
|
||
</ul>
|
||
|
||
<h3>5.2 数据验证</h3>
|
||
<ul>
|
||
<li>中性面单单号不能为空</li>
|
||
<li>跟踪单号不能为空</li>
|
||
<li>批量操作时,单号列表不能为空</li>
|
||
</ul>
|
||
|
||
<h3>5.3 认证要求</h3>
|
||
<ul>
|
||
<li>部分接口需要在请求头中提供customerCode和apiKey进行认证</li>
|
||
<li>请确保使用正确的API凭证进行调用</li>
|
||
</ul>
|
||
|
||
<h2>6. 常见问题</h2>
|
||
|
||
<h3>6.1 标签下载失败</h3>
|
||
<p><strong>可能原因</strong>:</p>
|
||
<ul>
|
||
<li>中性面单单号不存在</li>
|
||
<li>标签数据不可用</li>
|
||
<li>订单被冻结</li>
|
||
</ul>
|
||
<p><strong>解决方案</strong>:</p>
|
||
<ul>
|
||
<li>检查中性面单单号是否正确</li>
|
||
<li>确认订单状态是否正常</li>
|
||
<li>联系系统管理员获取帮助</li>
|
||
</ul>
|
||
|
||
<h3>6.2 认证失败</h3>
|
||
<p><strong>可能原因</strong>:</p>
|
||
<ul>
|
||
<li>customerCode或apiKey不正确</li>
|
||
<li>认证信息未在请求头中提供</li>
|
||
</ul>
|
||
<p><strong>解决方案</strong>:</p>
|
||
<ul>
|
||
<li>确保在请求头中提供正确的customerCode和apiKey</li>
|
||
<li>联系系统管理员获取正确的API凭证</li>
|
||
</ul>
|
||
|
||
<h3>6.3 批量操作失败</h3>
|
||
<p><strong>可能原因</strong>:</p>
|
||
<ul>
|
||
<li>单号列表为空</li>
|
||
<li>部分单号不存在或状态异常</li>
|
||
</ul>
|
||
<p><strong>解决方案</strong>:</p>
|
||
<ul>
|
||
<li>确保单号列表不为空</li>
|
||
<li>检查单号是否正确且状态正常</li>
|
||
</ul>
|
||
|
||
<h2>7. 接口版本管理</h2>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>版本</th>
|
||
<th>变更内容</th>
|
||
<th>发布日期</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>v1.0</td>
|
||
<td>初始版本,包含所有基础接口</td>
|
||
<td>2026-03-30</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h2>8. 联系信息</h2>
|
||
<p>如有接口使用问题,请联系系统管理员或开发团队。</p>
|
||
</div>
|
||
</body>
|
||
</html> |