Files
Inbound20260114/入库秤_API_DOC.md
lvmengandClaude Sonnet 4.6 fabc4d780a feat(inbound): 新增入库秤毛菜/净材入库功能
- 新增入库专用网络层(InboundApiService、InboundRepository、InboundNetworkModule、InboundInterceptor)
- 新增入库相关数据模型(IngredientByTrace、SupplierOption、ZoneOption、GoodsSearchModel、CleanInboundParam、RawInboundParam、InboundApiResponse)
- 新增 FormField 动态表单模型(FieldType 枚举、apiKey 字段映射、submitValueId 控制提交值)
- 新增 FormFieldAdapter,基于 FlexboxLayoutManager 实现两列自动换行表单,支持五种字段类型
- 新增 InboundGoodsSearchDialog(溯源码检索食材)和 InboundGoodsStoreDialog(入库录入,表单转 Map 提交)
- 新增 StoreViewModel,提交接口入参改为 Map<String, Any>
- 重构 StoreActivity:注入 StoreViewModel,onResume 预加载供应商/区域列表到 GlobalData
- 修改 GoodsListActivity:抽取 onGoodsSearchRequested() 供子类重写
- 修改 GoodsRecognizeDialog:StoreActivity 场景下打开 InboundGoodsStoreDialog
- GlobalData 新增 inboundSupplierList / inboundZoneList 全局缓存
- build.gradle.kts 新增 flexbox:3.0.0 依赖

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 21:18:09 +08:00

488 lines
14 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.
# 入库系统接口文档
> 生成时间:2026-05-26
> 项目:Inbound20260114
---
## 一、通用说明
### 1.1 服务器环境
| 环境 | 地址 |
|------|------|
| 本地环境 | `http://192.168.1.201:14801` |
| 测试环境 | `https://dev.yixiong-tech.com:8083` |
| 生产环境(PROD | `https://api.dm.yixiong-tech.com:8443` |
> 代码中使用 `GlobalData.appBaseUrl` 动态切换,启动时由设备配置决定当前所用环境。
---
### 1.2 通用请求头
以下请求头由拦截器(`RequestInterceptor`)统一注入,**无需在每个接口中单独传递**:
| Header 字段 | 说明 | 示例值 |
|---|---|---|
| `Content-Type` | 请求体格式 | `application/json` |
| `Accept` | 响应体格式 | `application/json` |
| `deviceId` | 设备唯一标识符(UUID | `bcf396ed-78f6-3864-...` |
| `X-DEVICE-CODE` | 设备编码(同 deviceId | `bcf396ed-78f6-3864-...` |
| `x-access-token` | 用户登录 Token(登录后获取) | `{token}` |
| `authorization` | 固定鉴权值 | `57ee87183f2a4fa59683ec9ef41c8f5d` |
> **特殊说明**`getDeviceInfo` 接口额外通过 `@Header("X-Access-Token")` 传入设备 Token(设备初始化阶段使用,区别于用户登录 Token)。
---
### 1.3 通用响应格式
所有接口返回结构统一如下:
```json
{
"code": "00000",
"msg": "success",
"data": {}
}
```
| 字段 | 类型 | 说明 |
|------|------|------|
| `code` | String | 业务状态码,`00000` 表示成功 |
| `msg` | String | 提示信息 |
| `data` | T / null | 业务数据,各接口不同 |
---
### 1.4 接口路径前缀
业务接口通用前缀(简称 `{prefix}`):
```
/terminal/neglect/inbound
```
---
## 二、接口列表
---
### 2.1 获取存储方式列表
| 项目 | 内容 |
|------|------|
| 请求方式 | `GET` |
| 接口路径 | `{baseUrl}{prefix}/pad/getDictItemByF` |
**Query 参数:**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| `dictCode` | String | 否 | 字典编码,固定值 `ccfs`(存储方式) |
**响应 data`List<StorageType>`):**
| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | String | 存储方式 ID |
| `value` | String | 存储方式值 |
| `text` | String | 展示文本 |
| `title` | String | 标题 |
| `label` | String | 标签 |
---
### 2.2 获取物品类型列表
| 项目 | 内容 |
|------|------|
| 请求方式 | `GET` |
| 接口路径 | `{baseUrl}{prefix}/pad/notLimitList` |
**Query 参数:**
**响应 data`GoodsType`):**
| 字段 | 类型 | 说明 |
|------|------|------|
| `allType` | List\<AllType\> | 物品类型列表 |
**AllType 结构:**
| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | String | 类型 ID |
| `typeName` | String | 类型名称 |
| `typeCode` | String | 类型编码 |
| `ftype` | String | 父类型 |
| `superName` | String | 父类型名称 |
| `status` | Boolean | 是否启用 |
| `eaId` | Int | 企业 ID |
| `kidTypes` | List\<String\> | 子类型列表 |
| `createTime` | String | 创建时间 |
| `updateTime` | String | 更新时间 |
---
### 2.3 获取字典数据列表
| 项目 | 内容 |
|------|------|
| 请求方式 | `GET` |
| 接口路径 | `{baseUrl}{prefix}/pad/dataList` |
**Query 参数:**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| `type` | String | 是 | 字典类型,如仓库列表、单位类型等 |
**响应 data`List<DictType>`):**
| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | String | 字典项 ID |
| `value` | String | 字典项名称/值 |
---
### 2.4 采购单入库列表
| 项目 | 内容 |
|------|------|
| 请求方式 | `POST` |
| 接口路径 | `{baseUrl}{prefix}/pad/receivePage` |
| Content-Type | `application/json` |
**请求体(JSON`Map<String, String>`):**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| `pageNo` | String | 是 | 页码,从 1 开始 |
| `pageSize` | String | 是 | 每页条数 |
| *(其他筛选条件)* | String | 否 | 如供应商ID、日期范围等 |
**响应 data`List<SupplierInfo>`):**
| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | String | 收货单 ID |
| `purCode` | String | 采购单号 |
| `receiveCode` | String | 收货单号 |
| `supplierId` | String | 供应商 ID |
| `supplierName` | String | 供应商名称 |
| `purchaseDate` | String | 采购日期 |
| `receiveDate` | String | 收货时间 |
| `receiveStatus` | Int | 收货状态:1-收货关闭 / 2-收货完成 / 3-待收货 / 4-部分收货 |
| `receiveUser` | String | 操作人 |
| `goodCount` | Int | 物品项数 |
| `receiveCountAll` | Double | 总收货数量 |
| `receivePriceEx` | Double | 收货金额(不含税) |
| `receivePriceIn` | Double | 收货金额(含税) |
| `taxRateAll` | Double | 税率合计 |
| `giftAll` | Double | 赠品合计 |
| `warehouseId` | String | 仓库 ID |
| `eaId` | Int | 企业 ID |
| `createTime` | String | 创建时间 |
| `updateTime` | String | 更新时间 |
---
### 2.5 采购单入库详情
| 项目 | 内容 |
|------|------|
| 请求方式 | `GET` |
| 接口路径 | `{baseUrl}{prefix}/pad/receiveDetail` |
**Query 参数:**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| `id` | String | 是 | 收货单 ID |
**响应 data`PurchaseInfo`):**
| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | String | 收货单 ID |
| `supplierId` | String | 供应商 ID |
| `supplierName` | String | 供应商名称 |
| `purCode` | String | 采购单号 |
| `receiveCode` | String | 收货单号 |
| `receiveGoodsInfoList` | List\<GoodsInfo\> | 物品明细列表(见 **GoodsInfo 结构** |
**GoodsInfo 结构:**
| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | String | 明细 ID |
| `goodId` | String | 物品 ID |
| `goodName` | String | 物品名称 |
| `unitName` | String | 采购单位名称 |
| `purchaseUnitId` | String | 采购单位 ID |
| `goodsPurId` | String | 物品采购单位关系 ID |
| `receiveCount` | Double | 应收数量 |
| `receivedNum` | Double | 实收数量 |
| `receiveCountAll` | Double | 总收货数量 |
| `recUnitPriceTaxIn` | Double | 含税单价 |
| `newRecUnitPriceTaxIn` | Double | 调整后单价(部分收货使用) |
| `recPriceExItem` | Double | 不含税金额 |
| `recPriceInItem` | Double | 含税金额 |
| `warehouseId` | String | 仓库 ID |
| `warehouseName` | String | 仓库名称 |
| `kcUnitId` | String | 库存单位 ID |
| `kcUnitName` | String | 库存单位名称 |
| `purchaseValue` | Int | 采购库存转换值 |
| `consumeValue` | String | 库存与克的转换值 |
| `goodsWeight` | BigDecimal | 物品重量(千克) |
| `goodsCount` | Double | 物品数量 |
| `goodsUnitPrice` | Double | 物品单价 |
| `goodsPrice` | Double | 物品总价 |
| `buyToInventoryValue` | String | 采购转库存换算值 |
---
### 2.6 上传单张图片
| 项目 | 内容 |
|------|------|
| 请求方式 | `POST` |
| 接口路径 | `{baseUrl}/terminal/neglect/upload` |
| Content-Type | `multipart/form-data` |
**Form-Data 参数:**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| `file` | FileMultipartBody.Part | 是 | 图片文件 |
**响应 data**
```
String // 图片访问路径(相对 URL)
```
---
### 2.7 上传多张图片
| 项目 | 内容 |
|------|------|
| 请求方式 | `POST` |
| 接口路径 | `{baseUrl}/terminal/neglect/inbound/pad/inboundWeighingScale/add` |
| Content-Type | `multipart/form-data` |
**Form-Data 参数:**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| `goodsId` | StringRequestBody | 是 | 物品 ID |
| `goodsName` | StringRequestBody | 是 | 物品名称 |
| `goodsPics` | List\<MultipartBody.Part\> | 是 | 多张图片文件列表,字段名固定为 `goodsPics` |
**响应 data**
```
String // 操作结果
```
---
### 2.8 搜索物品列表
| 项目 | 内容 |
|------|------|
| 请求方式 | `POST` |
| 接口路径 | `{baseUrl}{prefix}/pad/goodsInfoList` |
| Content-Type | `application/json` |
**请求体(JSON`Map<String, String>`):**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| `goodsName` | String | 否 | 物品名称关键词 |
| `pageNo` | String | 是 | 页码 |
| `pageSize` | String | 是 | 每页条数 |
| *(其他筛选条件)* | String | 否 | 按需传入 |
**响应 data`SearchGoodsInfo`,分页结构):**
| 字段 | 类型 | 说明 |
|------|------|------|
| `current` | Int | 当前页码 |
| `total` | Int | 总记录数 |
| `size` | Int | 每页条数 |
| `pages` | Int | 总页数 |
| `records` | List\<Record\> | 物品记录列表(见 **Record 结构** |
**Record 结构:**
| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | String | 物品 ID |
| `goodsCode` | String | 物品编码 |
| `goodsName` | String | 物品名称 |
| `zjmCode` | String | 助记码 |
| `specification` | String | 规格 |
| `typeId` | Int | 物品类型 ID |
| `typeName` | String | 物品类型名称 |
| `kcUnitId` | Int | 库存单位 ID |
| `kcUnitName` | String | 库存单位名称 |
| `consumeValue` | String | 库存与克的转换值 |
| `purchaseValue` | String | 采购库存转换值 |
| `unit` | String | 单位 |
| `relativeUrl` | String | 物品图片相对路径 |
| `unitVoList` | List\<UnitVo\> | 可选采购单位列表(见 **UnitVo 结构** |
**UnitVo 结构:**
| 字段 | 类型 | 说明 |
|------|------|------|
| `businessUnitId` | String | 单位关系 ID |
| `purchaseUnitName` | String | 采购单位名称 |
| `buyToInventoryValue` | String | 采购转库存换算值 |
| `consumeValue` | String | 消耗转换值 |
| `purchaseValue` | Double | 购买单位对应库存数量 |
| `isDefault` | Int | 是否默认单位(1-是) |
| `value` | String | 单位展示值 |
---
### 2.9 图像识别物品列表查询
| 项目 | 内容 |
|------|------|
| 请求方式 | `POST` |
| 接口路径 | `{baseUrl}{prefix}/pad/goodsList` |
| Content-Type | `application/json` |
> 用于图片识别后,根据识别到的物品名称列表批量查询物品信息。
**请求体(`RecGoodsName`):**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| `nameList` | List\<String\> | 是 | 识别到的物品名称列表 |
**响应 data**
```
List<SearchGoodsInfo.Record> // 物品记录列表(字段同 2.8 的 Record 结构)
```
---
### 2.10 自采添加新物品
| 项目 | 内容 |
|------|------|
| 请求方式 | `POST` |
| 接口路径 | `{baseUrl}{prefix}/pad/goodsAdd` |
| Content-Type | `application/json` |
**请求体(`GoodsAddParam`):**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| `goodName` | String | 是 | 物品名称 |
| `goodCode` | String | 否 | 物品编号(服务端自动生成) |
| `goodType` | String | 是 | 物品类型 ID |
| `storageType` | String | 是 | 存储方式 ID |
| `netRate` | Float | 是 | 净材率(0~1 之间) |
| `unitId` | String | 是 | 库存单位 ID |
| `purchaseUnit` | String | 是 | 采购单位 ID |
| `purchaseValue` | Float | 是 | 采购单位对应库存数量(转换值) |
| `purchasePrice` | BigDecimal | 是 | 采购单价 |
| `relativeUrl` | String | 否 | 物品图片相对路径 |
| `consumeValue` | String | 是 | 库存单位对应消耗值(库存与克的转换值) |
**响应 data**
```
String // 新增物品 ID 或操作结果
```
---
### 2.11 确认收货(全部收货)
| 项目 | 内容 |
|------|------|
| 请求方式 | `POST` |
| 接口路径 | `{baseUrl}{prefix}/pad/saveAndReceiveAndGoWare` |
| Content-Type | `application/json` |
**请求体(`UploadInfo`):**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| `id` | String | 是 | 收货单 ID |
| `supplierId` | String | 否 | 供应商 ID |
| `purCode` | String | 否 | 采购单号 |
| `receiveGoodsInfos` | List\<GoodsInfo\> | 是 | 全部收货物品列表(字段同 GoodsInfo) |
| `receiveGoodsInfoList` | List\<GoodsInfo\> | 否 | 部分收货列表(全量收货时传空列表) |
**响应 data**
```
Boolean // true 表示操作成功
```
---
### 2.12 自采入库
| 项目 | 内容 |
|------|------|
| 请求方式 | `POST` |
| 接口路径 | `{baseUrl}{prefix}/pad/selfPurchasedGoods` |
| Content-Type | `application/json` |
**请求体(`List<PurchaseWarehouseParam>`):**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| `goodsId` | String | 是 | 物品 ID |
| `kcUnitId` | String | 否 | 库存单位 ID |
| `goodsCount` | Double | 是 | 入库数量 |
| `goodsUnitPrice` | Double | 是 | 入库单价 |
| `goodsPrice` | Double | 是 | 入库金额 |
| `goodPurId` | String | 是 | 物品采购单位关系 ID(`businessUnitId` |
| `warehouseId` | String | 是 | 仓库 ID |
| `buyToInventoryValue` | String | 否 | 采购转库存换算值 |
| `goodsWeight` | BigDecimal | 是 | 物品重量(千克) |
| `consumeValue` | String | 否 | 库存单位对应消耗值 |
> 注:`goodsName`、`unitName`、`unitList`、`selectUnitType` 等字段为本地 UI 展示用,**不上传至服务端**。
**响应 data**
```
Boolean // true 表示入库成功
```
---
## 三、接口速查表
| # | 接口名称 | 方法 | 路径 |
|---|----------|------|------|
| 2.1 | 获取存储方式列表 | GET | `{prefix}/pad/getDictItemByF` |
| 2.2 | 获取物品类型列表 | GET | `{prefix}/pad/notLimitList` |
| 2.3 | 获取字典数据列表 | GET | `{prefix}/pad/dataList` |
| 2.4 | 采购单入库列表 | POST | `{prefix}/pad/receivePage` |
| 2.5 | 采购单入库详情 | GET | `{prefix}/pad/receiveDetail` |
| 2.6 | 上传单张图片 | POST | `/terminal/neglect/upload` |
| 2.7 | 上传多张图片 | POST | `/terminal/neglect/inbound/pad/inboundWeighingScale/add` |
| 2.8 | 搜索物品列表 | POST | `{prefix}/pad/goodsInfoList` |
| 2.9 | 图像识别物品查询 | POST | `{prefix}/pad/goodsList` |
| 2.10 | 自采添加新物品 | POST | `{prefix}/pad/goodsAdd` |
| 2.11 | 确认收货(全部) | POST | `{prefix}/pad/saveAndReceiveAndGoWare` |
| 2.12 | 自采入库 | POST | `{prefix}/pad/selfPurchasedGoods` |
> `{prefix}` = `/terminal/neglect/inbound`