Authorization: Bearer <token> 进行JWT认证。
用户登录获取JWT访问令牌,用于后续接口调用的身份认证。
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| userName | string | 是 | 用户名 |
| password | string | 是 | 密码 |
| source | string | 否 | 登录来源 |
直接返回JWT Token字符串。
curl -X POST '/Base_Manage/Home/SubmitLogin' \
-H 'Content-Type: application/json' \
-d '{
"userName": "admin",
"password": "123456",
"source": "web"
}'
功能描述:分页获取货单列表,支持条件搜索和状态筛选。
主要特性:
- 支持分页查询,可自定义每页显示数量
- 支持按销售单号、客户名称、创建时间等条件进行模糊搜索
- 支持按货单状态进行精确筛选(草稿、已提交、已审核、已发货、已完成、已取消)
- 支持按创建日期范围进行时间筛选
- 支持多租户模式,可按公司ID进行数据隔离
- 返回完整的分页信息和货单详细数据
分页参数(必填):
| 参数名 | 类型 | 必填 | 说明 | 示例值 | 备注 |
|---|---|---|---|---|---|
| PageIndex | int | 是 | 当前页码,从1开始 | 1 | 最小值:1 |
| PageRows | int | 是 | 每页显示数量 | 20 | 建议范围:1-100 |
搜索条件(可选):
| 参数名 | 类型 | 必填 | 说明 | 示例值 | 备注 |
|---|---|---|---|---|---|
| Search.Condition | string | 否 | 搜索字段 | "SalesOrder" | SalesOrder/CustomerName/CreateTime |
| Search.Keyword | string | 否 | 搜索关键字 | "SO2025" | 配合Condition使用,支持模糊匹配 |
状态筛选(可选):
| 参数名 | 类型 | 必填 | 说明 | 示例值 | 可选值 |
|---|---|---|---|---|---|
| Status | int | 否 | 货单状态筛选 | 1 | 0-草稿,1-已提交,2-已审核,3-已发货,4-已完成,5-已取消 |
其他筛选条件(可选):
| 参数名 | 类型 | 必填 | 说明 | 示例值 | 备注 |
|---|---|---|---|---|---|
| CompanyId | string | 否 | 公司ID | "company_123" | 多租户场景下的数据隔离 |
| StartDate | string | 否 | 开始日期 | "2025-01-01" | 格式:YYYY-MM-DD,筛选创建时间 |
| EndDate | string | 否 | 结束日期 | "2025-01-31" | 格式:YYYY-MM-DD,筛选创建时间 |
操作状态信息:
| 字段名 | 类型 | 说明 | 示例值 | 备注 |
|---|---|---|---|---|
| Success | boolean | 操作是否成功 | true | true-成功,false-失败 |
| Msg | string | 返回消息 | "查询成功" | 成功时返回操作信息,失败时返回错误信息 |
数据列表信息:
| 字段名 | 类型 | 说明 | 示例值 | 备注 |
|---|---|---|---|---|
| Data | Array | 货单列表数据数组 | 见下方Data字段详情 | 包含当前页的所有货单记录 |
分页信息:
| 字段名 | 类型 | 说明 | 示例值 | 备注 |
|---|---|---|---|---|
| Total | int | 满足条件的总记录数 | 156 | 用于计算总页数 |
| PageIndex | int | 当前页码 | 1 | 与请求参数一致 |
| PageRows | int | 每页数量 | 20 | 与请求参数一致 |
| TotalPages | int | 总页数 | 8 | 根据Total和PageRows计算得出 |
基础信息:
| 字段名 | 类型 | 说明 | 示例值 | 备注 |
|---|---|---|---|---|
| Id | string | 货单唯一标识 | "bill_20250101001" | 系统自动生成,全局唯一 |
| SalesOrder | string | 销售单号 | "SO202501010001" | 业务单号,用户可见 |
| CustomerId | string | 客户ID | "customer_123" | 关联客户表的主键 |
| CustomerName | string | 客户名称 | "示例客户公司" | 客户的显示名称 |
金额统计信息:
| 字段名 | 类型 | 说明 | 示例值 | 备注 |
|---|---|---|---|---|
| TotalSum | decimal | 货单总金额 | 15800.50 | 单位:元,保留2位小数 |
| TotalWeight | decimal | 总重量 | 250.8 | 单位:千克(KG) |
| TotalQuantity | int | 商品总数量 | 120 | 所有商品数量汇总 |
状态信息:
| 字段名 | 类型 | 说明 | 示例值 | 备注 |
|---|---|---|---|---|
| Status | int | 货单状态码 | 1 | 0-草稿,1-已提交,2-已审核,3-已发货,4-已完成,5-已取消 |
| StatusName | string | 状态显示名称 | "已提交" | 状态的中文描述 |
时间及操作人信息:
| 字段名 | 类型 | 说明 | 示例值 | 备注 |
|---|---|---|---|---|
| CreateTime | datetime | 创建时间 | "2025-01-01T10:30:00" | ISO 8601格式 |
| CreateUserName | string | 创建人姓名 | "张三" | 创建该货单的用户 |
| AuditTime | datetime | 审核时间 | "2025-01-01T14:20:00" | 未审核时为null |
| AuditUserName | string | 审核人姓名 | "李四" | 审核该货单的用户,未审核时为null |
1. 基础分页查询(获取第1页,每页显示20条):
curl -X POST '/BO/BIlling/GetBillOfLadingListDataList' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
-d '{
"PageIndex": 1,
"PageRows": 20
}'
2. 按销售单号进行模糊搜索:
curl -X POST '/BO/BIlling/GetBillOfLadingListDataList' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
-d '{
"PageIndex": 1,
"PageRows": 20,
"Search": {
"Condition": "SalesOrder",
"Keyword": "SO2025"
}
}'
3. 按客户名称搜索:
curl -X POST '/BO/BIlling/GetBillOfLadingListDataList' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
-d '{
"PageIndex": 1,
"PageRows": 30,
"Search": {
"Condition": "CustomerName",
"Keyword": "示例公司"
}
}'
4. 按状态筛选(查询已审核的货单):
curl -X POST '/BO/BIlling/GetBillOfLadingListDataList' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
-d '{
"PageIndex": 1,
"PageRows": 50,
"Status": 2
}'
5. 综合条件查询(状态 + 日期范围 + 公司ID):
curl -X POST '/BO/BIlling/GetBillOfLadingListDataList' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
-d '{
"PageIndex": 1,
"PageRows": 50,
"Status": 2,
"StartDate": "2025-01-01",
"EndDate": "2025-01-31",
"CompanyId": "company_123"
}'
JavaScript调用示例:
// 使用fetch API调用
const getBillingList = async (params) => {
try {
const response = await fetch('/BO/BIlling/GetBillOfLadingListDataList', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + localStorage.getItem('token')
},
body: JSON.stringify({
PageIndex: params.pageIndex || 1,
PageRows: params.pageSize || 20,
Search: {
Condition: params.searchField,
Keyword: params.searchKeyword
},
Status: params.status,
StartDate: params.startDate,
EndDate: params.endDate
})
});
const result = await response.json();
if (result.Success) {
console.log('获取货单列表成功:', result.Data);
console.log('总记录数:', result.Total);
return result;
} else {
console.error('获取货单列表失败:', result.Msg);
}
} catch (error) {
console.error('请求失败:', error);
}
};
// 调用示例
getBillingList({
pageIndex: 1,
pageSize: 20,
searchField: 'SalesOrder',
searchKeyword: 'SO2025',
status: 1
});
成功返回示例(包含多条货单数据):
{
"Success": true,
"Msg": "查询成功",
"Total": 156,
"PageIndex": 1,
"PageRows": 20,
"TotalPages": 8,
"Data": [
{
"Id": "bill_20250101001",
"SalesOrder": "SO202501010001",
"CustomerName": "示例客户公司",
"CustomerId": "customer_123",
"TotalSum": 15800.50,
"TotalWeight": 250.8,
"TotalQuantity": 120,
"Status": 1,
"StatusName": "已提交",
"CreateTime": "2025-01-01T10:30:00",
"CreateUserName": "张三",
"AuditTime": null,
"AuditUserName": null
},
{
"Id": "bill_20250101002",
"SalesOrder": "SO202501010002",
"CustomerName": "另一个客户",
"CustomerId": "customer_456",
"TotalSum": 28900.00,
"TotalWeight": 180.5,
"TotalQuantity": 85,
"Status": 2,
"StatusName": "已审核",
"CreateTime": "2025-01-01T11:15:00",
"CreateUserName": "王五",
"AuditTime": "2025-01-01T14:20:00",
"AuditUserName": "李四"
}
]
}
无数据返回示例:
{
"Success": true,
"Msg": "查询成功",
"Total": 0,
"PageIndex": 1,
"PageRows": 20,
"TotalPages": 0,
"Data": []
}
失败返回示例(参数错误):
{
"Success": false,
"Msg": "参数错误:PageIndex必须大于0",
"Total": 0,
"PageIndex": 0,
"PageRows": 0,
"TotalPages": 0,
"Data": null
}
HTTP状态码:
| 状态码 | 说明 | 可能原因 | 解决方案 |
|---|---|---|---|
| 200 | 请求成功 | 接口正常处理 | 检查返回Success字段确定业务结果 |
| 400 | 请求参数错误 | PageIndex≤ 0、PageRows超出范围、日期格式错误等 | 检查请求参数的类型和取值范围 |
| 401 | 未授权访问 | Token缺失、过期或格式错误 | 重新获取Token或检查Authorization请求头 |
| 403 | 权限不足 | 当前用户无货单查看权限 | 联系管理员分配相应权限 |
| 500 | 服务器内部错误 | 数据库连接失败、服务异常等 | 稍后重试或联系系统管理员 |
业务错误码(Success=false时):
| 错误类型 | Msg示例 | 可能原因 | 解决方案 |
|---|---|---|---|
| 参数验证失败 | "参数错误:PageIndex必须大于0" | 参数值不符合预期 | 检查并修正请求参数 |
| 数据访问错误 | "公司信息不存在" | 提供了无效的CompanyId | 确认CompanyId的有效性 |
| 权限限制 | "当前用户不属于该公司" | 跨公司数据访问 | 检查用户所属公司或使用正确的CompanyId |
| 系统异常 | "数据库连接失败" | 后端服务不可用 | 稍后重试或联系技术支持 |
常见问题排查:
- 返回空数据:检查搜索条件是否过于严格,或者确认是否存在满足条件的数据
- 分页信息不正确:检查PageIndex是否超出了TotalPages范围
- 搜索结果不准确:确认Search.Condition和Search.Keyword的匹配关系,支持模糊匹配
- 状态筛选异常:确认Status值在有效范围内(0-5)
保存货单数据,支持新增和修改操作。新增时不传Id,修改时必须传入有效的货单Id。支持批量保存商品明细,自动计算总金额、总重量等信息。
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|---|---|---|---|---|
| Id | string | 否 | 货单ID,修改时必填,新增时不传 | "bill_20250101001" |
| SalesOrder | string | 是 | 销售单号,必须唯一 | "SO202501010001" |
| CustomerId | string | 是 | 客户ID,必须为有效的客户 | "customer_123" |
| CompanyId | string | 是 | 公司ID,多租户模式下必须 | "company_456" |
| Content | string | 否 | 商品明细JSON数据,包含商品列表 | 见下方Content格式 |
| TotalSum | decimal | 否 | 应收总金额,系统可自动计算 | 15800.50 |
| TotalWeight | decimal | 否 | 总重量(KG) | 250.8 |
| TotalQuantity | int | 否 | 总数量 | 120 |
| Remark | string | 否 | 备注信息 | "紧急订单,需要加急处理" |
| DeliveryDate | datetime | 否 | 要求交货日期 | "2025-01-05" |
Content字段为JSON字符串,包含商品明细信息:
[
{
"InventoryId": "inv_001",
"InventoryName": "商品A",
"Specification": "500g/盒",
"Unit": "盒",
"Quantity": 50,
"UnitPrice": 125.00,
"Amount": 6250.00,
"Weight": 25.0,
"Remark": "特殊包装"
},
{
"InventoryId": "inv_002",
"InventoryName": "商品B",
"Specification": "1kg/袋",
"Unit": "袋",
"Quantity": 70,
"UnitPrice": 136.50,
"Amount": 9555.00,
"Weight": 70.0,
"Remark": ""
}
]
| 字段名 | 类型 | 说明 | 示例值 |
|---|---|---|---|
| Success | boolean | 操作是否成功 | true |
| Msg | string | 返回消息 | "保存成功" |
| Data | string | 保存成功的货单ID | "bill_20250101001" |
新增货单:
curl -X POST '/BO/BIlling/SaveBillOfLadingData' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
-d '{
"SalesOrder": "SO202501010001",
"CustomerId": "customer_123",
"CompanyId": "company_456",
"Content": "[{\"InventoryId\":\"inv_001\",\"InventoryName\":\"商品A\",\"Quantity\":50,\"UnitPrice\":125.00,\"Amount\":6250.00}]",
"TotalSum": 15800.50,
"TotalWeight": 250.8,
"TotalQuantity": 120,
"Remark": "紧急订单",
"DeliveryDate": "2025-01-05"
}'
修改货单:
curl -X POST '/BO/BIlling/SaveBillOfLadingData' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
-d '{
"Id": "bill_20250101001",
"SalesOrder": "SO202501010001",
"CustomerId": "customer_123",
"CompanyId": "company_456",
"TotalSum": 16500.00,
"Remark": "已修改总金额"
}'
对提交的货单进行审核操作,只有审核通过的货单才能生成电子回执。审核人必须具有相应的审核权限,审核拒绝时需要填写拒绝原因。
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|---|---|---|---|---|
| billingId | string | 是 | 货单ID,必须为有效的货单 | "bill_20250101001" |
| examineResult | int | 是 | 审核结果:0-拒绝,1-通过 | 1 |
| examineRemark | string | 否 | 审核备注,拒绝时建议填写原因 | "商品信息核对无误,审核通过" |
| 字段名 | 类型 | 说明 | 示例值 |
|---|---|---|---|
| Success | boolean | 操作是否成功 | true |
| Msg | string | 返回消息 | "审核成功" |
| Data | object | 审核后的货单状态信息 | 见下方示例 |
审核通过:
curl -X POST '/BO/BIlling/BillingExamine' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
-d '{
"billingId": "bill_20250101001",
"examineResult": 1,
"examineRemark": "商品信息核对无误,审核通过"
}'
审核拒绝:
curl -X POST '/BO/BIlling/BillingExamine' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
-d '{
"billingId": "bill_20250101001",
"examineResult": 0,
"examineRemark": "商品价格信息错误,需要重新核对"
}'
{
"Success": true,
"Msg": "审核成功",
"Data": {
"BillingId": "bill_20250101001",
"Status": 2,
"StatusName": "已审核",
"ExamineTime": "2025-01-01T14:30:00",
"ExamineUserName": "李四",
"ExamineResult": 1,
"ExamineRemark": "商品信息核对无误,审核通过"
}
}
根据已审核通过的货单生成电子回执单。只有状态为"已审核"的货单才能生成电子回执。电子回执生成后将包含唯一的回执编号和二维码,用于签收确认。
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|---|---|---|---|---|
| billingId | string | 是 | 已审核的货单ID | "bill_20250101001" |
| receiptType | int | 否 | 回执类型:1-普通回执,2-加急回执 | 1 |
| templateId | string | 否 | 回执模板ID,不传使用默认模板 | "template_001" |
| 字段名 | 类型 | 说明 | 示例值 |
|---|---|---|---|
| Success | boolean | 操作是否成功 | true |
| Msg | string | 返回消息 | "电子回执生成成功" |
| Data | object | 生成的电子回执信息 | 见下方示例 |
curl -X POST '/BO/BIlling/SaveBillingToBillList' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
-d '{
"billingId": "bill_20250101001",
"receiptType": 1,
"templateId": "template_001"
}'
{
"Success": true,
"Msg": "电子回执生成成功",
"Data": {
"ReceiptId": "receipt_20250101001",
"ReceiptCode": "RC202501010001",
"BillingId": "bill_20250101001",
"QrCode": "https://api.example.com/receipt/view?id=receipt_20250101001",
"Status": 0,
"StatusName": "未签收",
"CreateTime": "2025-01-01T15:00:00",
"ExpireTime": "2025-01-08T15:00:00"
}
}
功能描述:根据电子回执ID获取回执的详细信息,包括回执基本信息、关联货单信息、签收状态等完整数据。
主要特性:
- 返回回执的完整详细信息
- 包含关联货单的基本信息
- 提供签收人信息和签收时间
- 支持查看回执状态变更历史
- 返回二维码信息用于移动端签收
| 参数名 | 类型 | 必填 | 说明 | 示例值 | 备注 |
|---|---|---|---|---|---|
| Id | string | 是 | 电子回执唯一标识 | "receipt_20250101001" | 系统生成的回执ID |
操作状态信息:
| 字段名 | 类型 | 说明 | 示例值 | 备注 |
|---|---|---|---|---|
| Success | boolean | 操作是否成功 | true | true-成功,false-失败 |
| Msg | string | 返回消息 | "查询成功" | 成功/失败信息 |
Data字段详情(电子回执详细信息):
| 字段名 | 类型 | 说明 | 示例值 | 备注 |
|---|---|---|---|---|
| Id | string | 回执唯一标识 | "receipt_20250101001" | 系统生成 |
| BillId | string | 关联货单ID | "bill_20250101001" | 对应的货单ID |
| Title | string | 回执标题 | "货物签收回执" | 回执单标题 |
| Customer | string | 客户名称 | "示例客户公司" | 收货客户 |
| CustomerId | string | 客户ID | "customer_123" | 关联客户表 |
| Address | string | 收货地址 | "北京市朝阳区示例路123号" | 详细收货地址 |
| Phone | string | 联系电话 | "010-12345678" | 客户联系电话 |
| Status | int | 回执状态 | 0 | 0-未签收,1-已签收,2-已作废 |
| StatusName | string | 状态显示名称 | "未签收" | 状态的中文描述 |
| CreateTime | datetime | 创建时间 | "2025-01-01T15:00:00" | ISO 8601格式 |
| SigningDate | datetime | 签收时间 | "2025-01-02T10:30:00" | 未签收时为null |
| FullName | string | 签收人姓名 | "张三" | 实际签收人 |
| ReceiptPhone | string | 签收人手机 | "138****8888" | 签收人联系方式 |
| QrCode | string | 二维码地址 | "https://api.example.com/receipt/view?id=receipt_20250101001" | 用于移动端扫码签收 |
| ExpireTime | datetime | 过期时间 | "2025-01-08T15:00:00" | 回执有效期 |
关联货单信息:
| 字段名 | 类型 | 说明 | 示例值 | 备注 |
|---|---|---|---|---|
| BillInfo.SalesOrder | string | 销售单号 | "SO202501010001" | 对应货单的销售单号 |
| BillInfo.TotalSum | decimal | 货单总金额 | 15800.50 | 单位:元 |
| BillInfo.TotalWeight | decimal | 总重量 | 250.8 | 单位:千克(KG) |
| BillInfo.TotalQuantity | int | 商品总数量 | 120 | 所有商品数量汇总 |
curl -X POST '/BO/BillList/GetTheBllliModelData' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
-d '{
"Id": "receipt_20250101001"
}'
JavaScript调用示例:
// 获取电子回执详情
const getReceiptDetail = async (receiptId) => {
try {
const response = await fetch('/BO/BillList/GetTheBllliModelData', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + localStorage.getItem('token')
},
body: JSON.stringify({
Id: receiptId
})
});
const result = await response.json();
if (result.Success) {
console.log('获取回执详情成功:', result.Data);
return result.Data;
} else {
console.error('获取回执详情失败:', result.Msg);
}
} catch (error) {
console.error('请求失败:', error);
}
};
// 调用示例
getReceiptDetail('receipt_20250101001');
成功返回示例:
{
"Success": true,
"Msg": "查询成功",
"Data": {
"Id": "receipt_20250101001",
"BillId": "bill_20250101001",
"Title": "货物签收回执",
"Customer": "示例客户公司",
"CustomerId": "customer_123",
"Address": "北京市朝阳区示例路123号",
"Phone": "010-12345678",
"Status": 1,
"StatusName": "已签收",
"CreateTime": "2025-01-01T15:00:00",
"SigningDate": "2025-01-02T10:30:00",
"FullName": "张三",
"ReceiptPhone": "138****8888",
"QrCode": "https://api.example.com/receipt/view?id=receipt_20250101001",
"ExpireTime": "2025-01-08T15:00:00",
"BillInfo": {
"SalesOrder": "SO202501010001",
"TotalSum": 15800.50,
"TotalWeight": 250.8,
"TotalQuantity": 120
}
}
}
失败返回示例(回执不存在):
{
"Success": false,
"Msg": "电子回执不存在",
"Data": null
}
| 错误码 | 说明 | 可能原因 | 解决方案 |
|---|---|---|---|
| 400 | 请求参数错误 | Id参数缺失或格式错误 | 检查Id参数是否正确传递 |
| 401 | 未授权访问 | Token缺失或无效 | 重新获取Token |
| 403 | 权限不足 | 当前用户无查看权限 | 联系管理员分配权限 |
| 404 | 回执不存在 | 提供的Id对应的回执不存在 | 确认Id的正确性 |
| 500 | 服务器内部错误 | 服务异常 | 稍后重试或联系技术支持 |
功能描述:将指定的电子回执设置为作废状态,作废后的回执不能再进行签收操作。
主要特性:
- 只有未签收状态的回执才能被作废
- 作废操作不可逆,需要谨慎操作
- 作废时需要填写作废原因
- 作废后会记录操作人和操作时间
- 支持批量作废操作
| 参数名 | 类型 | 必填 | 说明 | 示例值 | 备注 |
|---|---|---|---|---|---|
| Ids | array | 是 | 要作废的回执ID数组 | ["receipt_001", "receipt_002"] | 支持单个或多个ID |
| VoidReason | string | 是 | 作废原因 | "客户取消订单" | 必须填写作废原因 |
| 字段名 | 类型 | 说明 | 示例值 | 备注 |
|---|---|---|---|---|
| Success | boolean | 操作是否成功 | true | true-成功,false-失败 |
| Msg | string | 返回消息 | "作废成功" | 操作结果信息 |
| Data | object | 作废结果详情 | 见下方示例 | 包含成功和失败的数量 |
单个回执作废:
curl -X POST '/BO/BillList/ToVoid' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
-d '{
"Ids": ["receipt_20250101001"],
"VoidReason": "客户取消订单"
}'
批量回执作废:
curl -X POST '/BO/BillList/ToVoid' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
-d '{
"Ids": ["receipt_20250101001", "receipt_20250101002", "receipt_20250101003"],
"VoidReason": "系统维护需要重新生成回执"
}'
成功返回示例:
{
"Success": true,
"Msg": "作废成功",
"Data": {
"SuccessCount": 2,
"FailCount": 0,
"VoidTime": "2025-01-01T16:30:00",
"VoidUserName": "管理员",
"VoidReason": "客户取消订单"
}
}
部分失败返回示例:
{
"Success": false,
"Msg": "部分回执作废失败",
"Data": {
"SuccessCount": 1,
"FailCount": 1,
"FailReasons": [
{
"Id": "receipt_20250101002",
"Reason": "回执已签收,无法作废"
}
]
}
}
| 错误码 | 说明 | 可能原因 | 解决方案 |
|---|---|---|---|
| 400 | 请求参数错误 | Ids为空或VoidReason未填写 | 检查必填参数 |
| 401 | 未授权访问 | Token无效或过期 | 重新获取Token |
| 403 | 权限不足 | 当前用户无作废权限 | 联系管理员分配权限 |
| 409 | 状态冲突 | 回执已签收或已作废 | 确认回执状态后重试 |
| 500 | 服务器内部错误 | 服务异常 | 稍后重试 |
功能描述:分页获取电子回执列表,支持按日期范围、状态、关键字等条件进行筛选查询。
主要特性:
- 支持分页查询,提高数据加载性能
- 支持按创建日期范围进行时间筛选
- 支持按回执状态进行筛选(未签收、已签收、已作废等)
- 支持按回执单号、客户名称等关键字进行模糊搜索
- 支持多租户模式,按公司ID进行数据隔离
- 返回完整的回执信息和分页数据
分页参数(必填):
| 参数名 | 类型 | 必填 | 说明 | 示例值 | 备注 |
|---|---|---|---|---|---|
| PageIndex | int | 是 | 当前页码,从1开始 | 1 | 最小值:1 |
| PageRows | int | 是 | 每页显示数量 | 20 | 建议范围:1-100 |
搜索条件(可选):
| 参数名 | 类型 | 必填 | 说明 | 示例值 | 备注 |
|---|---|---|---|---|---|
| Search.Condition | string | 否 | 搜索字段 | "BillId" | BillId/Title/Address等 |
| Search.Keyword | string | 否 | 搜索关键字 | "RC2025" | 配合Condition使用,支持模糊匹配 |
| Search.CompanyId | string | 否 | 公司ID | "company_123" | 多租户场景下的数据隔离 |
操作状态信息:
| 字段名 | 类型 | 说明 | 示例值 | 备注 |
|---|---|---|---|---|
| Success | boolean | 操作是否成功 | true | true-成功,false-失败 |
| Msg | string | 返回消息 | "查询成功" | 成功/失败信息 |
分页信息:
| 字段名 | 类型 | 说明 | 示例值 | 备注 |
|---|---|---|---|---|
| Total | int | 满足条件的总记录数 | 89 | 用于计算总页数 |
| PageIndex | int | 当前页码 | 1 | 与请求参数一致 |
| PageRows | int | 每页数量 | 20 | 与请求参数一致 |
| TotalPages | int | 总页数 | 5 | 根据Total和PageRows计算 |
Data字段详情(电子回执列表项):
| 字段名 | 类型 | 说明 | 示例值 | 备注 |
|---|---|---|---|---|
| Id | string | 电子回执唯一标识 | "receipt_20250101001" | 系统自动生成 |
| BillId | string | 关联的货单ID | "bill_20250101001" | 对应货单的ID |
| Title | string | 回执标题 | "货物签收回执" | 回执单标题 |
| Customer | string | 客户名称 | "示例客户公司" | 收货客户名称 |
| CustomerId | string | 客户ID | "customer_123" | 关联客户表 |
| Status | int | 回执状态 | 0 | 0-未签收,1-已签收,2-已作废 |
| CreateTime | datetime | 创建时间 | "2025-01-01T15:00:00" | ISO 8601格式 |
| SigningDate | datetime | 签收时间 | "2025-01-02T10:30:00" | 未签收时为null |
| FullName | string | 签收人姓名 | "张三" | 实际签收人 |
| ReceiptPhone | string | 签收人手机 | "138****8888" | 签收人联系方式 |
1. 基础分页查询:
curl -X POST '/BO/BillList/GetDataListByDate' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
-d '{
"PageIndex": 1,
"PageRows": 20
}'
2. 按回执单号搜索:
curl -X POST '/BO/BillList/GetDataListByDate' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
-d '{
"PageIndex": 1,
"PageRows": 20,
"Search": {
"Condition": "BillId",
"Keyword": "RC2025",
"CompanyId": "company_123"
}
}'
{
"Success": true,
"Msg": "查询成功",
"Total": 89,
"PageIndex": 1,
"PageRows": 20,
"TotalPages": 5,
"Data": [
{
"Id": "receipt_20250101001",
"BillId": "bill_20250101001",
"Title": "货物签收回执",
"Customer": "示例客户公司",
"CustomerId": "customer_123",
"Status": 1,
"CreateTime": "2025-01-01T15:00:00",
"SigningDate": "2025-01-02T10:30:00",
"FullName": "张三",
"ReceiptPhone": "138****8888"
}
]
}
| 错误码 | 说明 | 解决方案 |
|---|---|---|
| 400 | 请求参数错误 | 检查分页参数格式 |
| 401 | 未授权访问 | 检查Token是否有效 |
| 403 | 权限不足 | 联系管理员分配权限 |
| 500 | 服务器内部错误 | 稍后重试或联系技术支持 |
功能描述:根据回执唯一标识获取电子回执的完整展示信息,适用于移动端扫码查看和签收操作。
主要特性:
- 支持二维码扫码访问,无需登录
- 返回适合移动端展示的回执信息
- 包含完整的货单和客户信息
- 支持在线签收功能
- 展示回执状态和签收历史
| 参数名 | 类型 | 必填 | 说明 | 示例值 | 备注 |
|---|---|---|---|---|---|
| id | string | 是 | 电子回执唯一标识 | "receipt_20250101001" | 可以是回执ID或二维码参数 |
| 字段名 | 类型 | 说明 | 示例值 |
|---|---|---|---|
| Success | boolean | 操作是否成功 | true |
| Msg | string | 返回消息 | "查询成功" |
| Data | object | 回执展示信息 | 见下方示例 |
curl -X POST '/BO/BillList/GetBillDetailByGreen' \
-H 'Content-Type: application/json' \
-d '{
"id": "receipt_20250101001"
}'
特殊说明:此接口为公开接口,无需Token认证,主要用于移动端扫码查看。
{
"Success": true,
"Msg": "查询成功",
"Data": {
"ReceiptInfo": {
"Id": "receipt_20250101001",
"Title": "货物签收回执",
"Status": 0,
"StatusName": "未签收",
"CreateTime": "2025-01-01T15:00:00",
"ExpireTime": "2025-01-08T15:00:00"
},
"CustomerInfo": {
"Name": "示例客户公司",
"Address": "北京市朝阳区示例路123号",
"Phone": "010-12345678",
"Contact": "张经理"
},
"BillInfo": {
"SalesOrder": "SO202501010001",
"TotalSum": 15800.50,
"TotalWeight": 250.8,
"TotalQuantity": 120,
"CreateTime": "2025-01-01T10:30:00"
},
"CanSign": true
}
}
功能描述:将已签收的电子回执导出PDF文件,用于打印或存档。
主要特性:
- 支持导出已签收的回执为PDF格式
- 包含完整的签收信息和货单详情
- 支持水印和数字签名
- 生成的PDF文件具有法律效力
- 支持自定义模板格式
| 参数名 | 类型 | 必填 | 说明 | 示例值 | 备注 |
|---|---|---|---|---|---|
| receiptId | string | 是 | 已签收的回执ID | "receipt_20250101001" | 只能下载已签收的回执 |
| templateType | string | 否 | 模板类型 | "standard" | standard-标准模板,simple-简化模板 |
| withWatermark | boolean | 否 | 是否添加水印 | true | 默认true,添加官方水印 |
| 字段名 | 类型 | 说明 | 备注 |
|---|---|---|---|
| Content-Type | string | application/pdf | PDF文件流 |
| Content-Disposition | string | attachment; filename="receipt_xxx.pdf" | 文件下载名称 |
| Content-Length | string | 文件大小字节数 | 用于显示下载进度 |
1. 基本下载:
curl -X GET '/Base_Manage/Home/ExportPageToPdf?receiptId=receipt_20250101001' \ -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \ -o receipt_20250101001.pdf
2. 自定义模板下载:
curl -X GET '/Base_Manage/Home/ExportPageToPdf?receiptId=receipt_20250101001&templateType=simple&withWatermark=false' \ -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \ -o receipt_simple.pdf
JavaScript下载示例:
// 下载签收PDF文件
const downloadReceiptPDF = async (receiptId, options = {}) => {
try {
const params = new URLSearchParams({
receiptId: receiptId,
templateType: options.templateType || 'standard',
withWatermark: options.withWatermark !== false
});
const response = await fetch('/Base_Manage/Home/ExportPageToPdf?' + params, {
method: 'GET',
headers: {
'Authorization': 'Bearer ' + localStorage.getItem('token')
}
});
if (response.ok) {
const blob = await response.blob();
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `receipt_${receiptId}.pdf`;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
window.URL.revokeObjectURL(url);
} else {
console.error('下载失败:', response.statusText);
}
} catch (error) {
console.error('下载错误:', error);
}
};
// 调用示例
downloadReceiptPDF('receipt_20250101001', {
templateType: 'standard',
withWatermark: true
});
| 错误码 | 说明 | 可能原因 | 解决方案 |
|---|---|---|---|
| 400 | 请求参数错误 | receiptId参数缺失 | 检查receiptId参数 |
| 401 | 未授权访问 | Token无效或过期 | 重新获取Token |
| 403 | 权限不足 | 当前用户无下载权限 | 联系管理员分配权限 |
| 404 | 回执不存在 | 回执不存在或未签收 | 确认回执ID和状态 |
| 500 | PDF生成失败 | 模板或服务异常 | 稍后重试或联系技术支持 |
功能描述:分页获取客户信息列表,支持按客户名称、联系电话等条件进行查询。
主要特性:
- 支持分页查询,提高数据加载性能
- 支持按客户名称、联系人、电话等条件模糊查询
- 支持按客户状态进行筛选(正常、禁用)
- 支持多租户模式,按公司ID进行数据隔离
- 返回完整的客户详细信息和联系方式
分页参数(必填):
| 参数名 | 类型 | 必填 | 说明 | 示例值 | 备注 |
|---|---|---|---|---|---|
| PageIndex | int | 是 | 当前页码,从1开始 | 1 | 最小值:1 |
| PageRows | int | 是 | 每页显示数量 | 20 | 建议范围:1-100 |
搜索条件(可选):
| 参数名 | 类型 | 必填 | 说明 | 示例值 | 备注 |
|---|---|---|---|---|---|
| Search.Condition | string | 否 | 搜索字段 | "CustomerName" | CustomerName/ContactPerson/Phone/Address |
| Search.Keyword | string | 否 | 搜索关键字 | "示例公司" | 配合Condition使用,支持模糊匹配 |
| Search.CompanyId | string | 否 | 公司ID | "company_123" | 多租户场景下的数据隔离 |
状态筛选(可选):
| 参数名 | 类型 | 必填 | 说明 | 示例值 | 可选值 |
|---|---|---|---|---|---|
| Status | int | 否 | 客户状态筛选 | 1 | 0-禁用,1-正常 |
操作状态信息:
| 字段名 | 类型 | 说明 | 示例值 |
|---|---|---|---|
| Success | boolean | 操作是否成功 | true |
| Msg | string | 返回消息 | "查询成功" |
Data字段详情(客户列表项):
| 字段名 | 类型 | 说明 | 示例值 |
|---|---|---|---|
| Id | string | 客户唯一标识 | "customer_123" |
| CustomerName | string | 客户名称 | "示例客户公司" |
| ContactPerson | string | 联系人 | "张经理" |
| Phone | string | 联系电话 | "010-12345678" |
| Address | string | 地址 | "北京市朝阳区示例路123号" |
| Status | int | 客户状态 | 1 |
| CreateTime | datetime | 创建时间 | "2025-01-01T10:00:00" |
curl -X POST '/BO/CustomerInfo/GetDataList' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
-d '{
"PageIndex": 1,
"PageRows": 20,
"Search": {
"Condition": "CustomerName",
"Keyword": "示例公司",
"CompanyId": "company_123"
},
"Status": 1
}'
{
"Success": true,
"Msg": "查询成功",
"Total": 45,
"PageIndex": 1,
"PageRows": 20,
"TotalPages": 3,
"Data": [
{
"Id": "customer_123",
"CustomerName": "示例客户公司",
"ContactPerson": "张经理",
"Phone": "010-12345678",
"Address": "北京市朝阳区示例路123号",
"Status": 1,
"CreateTime": "2025-01-01T10:00:00"
}
]
}
功能描述:保存客户信息,支持新增和修改操作。新增时不传Id,修改时必须传入有效的客户Id。
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|---|---|---|---|---|
| Id | string | 否 | 客户ID,修改时必填 | "customer_123" |
| CustomerName | string | 是 | 客户名称 | "示例客户公司" |
| ContactPerson | string | 是 | 联系人姓名 | "张经理" |
| Phone | string | 是 | 联系电话 | "010-12345678" |
| Address | string | 是 | 详细地址 | "北京市朝阳区示例路123号" |
| CompanyId | string | 是 | 公司ID | "company_456" |
| 字段名 | 类型 | 说明 | 示例值 |
|---|---|---|---|
| Success | boolean | 操作是否成功 | true |
| Msg | string | 返回消息 | "保存成功" |
| Data | string | 客户ID | "customer_123" |
curl -X POST '/BO/CustomerInfo/SaveData' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
-d '{
"CustomerName": "新客户公司",
"ContactPerson": "李经理",
"Phone": "010-87654321",
"Address": "上海市浦东新区世纪大道456号",
"CompanyId": "company_456"
}'
功能描述:删除指定的客户信息。为了数据安全,只有没有关联货单的客户才能被删除。
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|---|---|---|---|---|
| Ids | array | 是 | 要删除的客户ID数组 | ["customer_123"] |
| 字段名 | 类型 | 说明 | 示例值 |
|---|---|---|---|
| Success | boolean | 操作是否成功 | true |
| Msg | string | 返回消息 | "删除成功" |
| Data | object | 删除结果统计 | 见下方示例 |
curl -X POST '/BO/CustomerInfo/DeleteCustomerInfo' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
-d '{
"Ids": ["customer_123"]
}'
{
"Success": true,
"Msg": "删除成功",
"Data": {
"SuccessCount": 1,
"FailCount": 0
}
}
功能描述:下载客户信息导入模板文件,用于批量导入客户数据。
特殊说明:此接口为GET请求,无需请求参数。
| 字段名 | 类型 | 说明 |
|---|---|---|
| Content-Type | string | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
| Content-Disposition | string | attachment; filename="customer_template.xlsx" |
curl -X GET '/BO/CustomerInfo/ExportToExcel' \ -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \ -o customer_template.xlsx
功能描述:批量导入客户信息,支持Excel文件上传。
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| file | file | 是 | Excel文件 |
| 字段名 | 类型 | 说明 | 示例值 |
|---|---|---|---|
| Success | boolean | 操作是否成功 | true |
| Msg | string | 返回消息 | "导入成功" |
| Data | object | 导入结果统计 | 见下方示例 |
curl -X POST '/BO/CustomerInfo/Import' \ -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \ -F 'file=@customer_data.xlsx'
{
"Success": true,
"Msg": "导入成功",
"Data": {
"TotalCount": 50,
"SuccessCount": 45,
"FailCount": 5,
"ImportTime": "2025-01-01T14:30:00"
}
}