- 新增入库专用网络层(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>
14 KiB
入库系统接口文档
生成时间: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 通用响应格式
所有接口返回结构统一如下:
{
"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 |
File(MultipartBody.Part) | 是 | 图片文件 |
响应 data:
String // 图片访问路径(相对 URL)
2.7 上传多张图片
| 项目 | 内容 |
|---|---|
| 请求方式 | POST |
| 接口路径 | {baseUrl}/terminal/neglect/inbound/pad/inboundWeighingScale/add |
| Content-Type | multipart/form-data |
Form-Data 参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
goodsId |
String(RequestBody) | 是 | 物品 ID |
goodsName |
String(RequestBody) | 是 | 物品名称 |
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