- 新增入库专用网络层(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>
6.6 KiB
6.6 KiB
入库秤设备端接口文档
Base URL:http://192.168.10.101:24801/nutrition/neglect/inbound
鉴权:无需 Sa-Token(Nacos 白名单 /nutrition/neglect/**)
| Header 字段 | 说明 | 示例值 |
|---|---|---|
authorization |
固定鉴权值 | 57ee87183f2a4fa59683ec9ef41c8f5d |
Content-Type:application/json |
通用响应结构
{
"code": 200,
"msg": "success",
"data": { ... }
}
| 字段 | 类型 | 说明 |
|---|---|---|
| code | int | 200 成功,其他为业务错误码 |
| msg | string | 提示信息 |
| data | any | 响应数据,无数据时为 null |
接口列表
1. 按溯源码查食材
GET /nutrition/neglect/inbound/ingredient-by-trace
按溯源码反查命中的食材列表,返回食材 id、名称、净菜类型,用于毛菜/净菜入库时联动选择食材。
Query 参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| traceCode | string | ✅ | 溯源码 |
响应示例
{
"code": 200,
"msg": "success",
"data": [
{
"traceCode": "TC20240501001",
"materId": 1001,
"materName": "西红柿",
"vegTypes": "切丁,切片"
}
]
}
响应字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| traceCode | string | 溯源码 |
| materId | long | 食材 id(关联 nut_mater_base.id) |
| materName | string | 食材名称 |
| vegTypes | string | 净菜类型,逗号分隔,如 切丁,切片 |
2. 仓库区域下拉列表
GET /nutrition/neglect/inbound/zone-options
获取仓库区域选项,用于入库时选择存放区域。
Query 参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| warehouseId | long | ❌ | 仓库 id,不传则返回所有区域 |
| keyword | string | ❌ | 关键字模糊搜索(区域编号/名称) |
响应示例
{
"code": 200,
"msg": "success",
"data": [
{
"id": 101,
"zoneNo": "WH-A-01",
"zoneName": "A仓-蔬菜区-01",
"warehouseId": 10
}
]
}
响应字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| id | long | 区域主键 id |
| zoneNo | string | 区域编号,如 WH-A-01 |
| zoneName | string | 区域名称,如 A仓-蔬菜区-01 |
| warehouseId | long | 关联仓库 id |
3. 供应商下拉列表
GET /nutrition/neglect/inbound/supplier-options
获取供应商选项,内部与外部供应商合并返回。
Query 参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| type | int | ❌ | 供应商类型:1-内部,2-外部,不传则返回全部 |
| keyword | string | ❌ | 关键字模糊搜索(供应商名称) |
响应示例
{
"code": 200,
"msg": "success",
"data": [
{
"id": 201,
"name": "绿源农场",
"type": 1
},
{
"id": 202,
"name": "鲜达食品有限公司",
"type": 2
}
]
}
响应字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| id | long | 供应商 id |
| name | string | 供应商名称 |
| type | int | 1-内部供应商,2-外部供应商 |
4. 毛菜入库提交
POST /nutrition/neglect/inbound/raw-inbound
入库秤设备提交毛菜入库记录,opType 由后端固定为 1(设备自动),无需传入。
Request Body
{
"traceCode": "TC20240501001",
"supplierType": 1,
"materialName": "西红柿",
"supplierId": 201,
"spec": "25kg/件",
"quantity": 2,
"weight": 49.8,
"zoneId": 101,
"operator": "张三",
"storageArea": "A仓-蔬菜区-01",
"reportNo": "RPT-2024-001",
"cameraCode": "CAM-001",
"videoUrl": "http://example.com/video/001.mp4",
"remark": ""
}
字段说明
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| traceCode | string | ✅ | 溯源码 |
| supplierType | short | ✅ | 供应商类型:1-内部,2-外部 |
| materialName | string | ✅ | 食材名称 |
| supplierId | long | ✅ | 供应商 id |
| spec | string | ✅ | 入库规格,如 25kg/件、散装(kg) |
| quantity | int | ✅ | 入库数量 |
| weight | decimal | ✅ | 入库重量(kg) |
| zoneId | long | ✅ | 存放区域 id |
| operator | string | ✅ | 操作人姓名 |
| storageArea | string | ❌ | 存放区域名称(冗余字段,可与 zoneId 对应名称一致) |
| reportNo | string | ❌ | 卫生检测报告编号 |
| cameraCode | string | ❌ | 摄像头编号 |
| videoUrl | string | ❌ | 监控视频地址 |
| remark | string | ❌ | 备注 |
响应示例
{
"code": 200,
"msg": "保存成功",
"data": null
}
5. 净菜入库提交
POST /nutrition/neglect/inbound/clean-inbound
入库秤设备提交净菜入库记录,opType 由后端固定为 1(设备自动),无需传入。
Request Body
{
"traceCode": "TC20240501002",
"ingredientName": "西红柿",
"cleanType": "切丁",
"spec": "袋装/500g",
"quantity": 10,
"weight": 5.0,
"inboundTime": "2024-05-01T08:30:00",
"zoneId": 102,
"operator": "李四",
"expiryDate": "2024-05-03T00:00:00",
"storageTemp": 4.5,
"cameraCode": "CAM-002",
"videoUrl": "http://example.com/video/002.mp4",
"remark": ""
}
字段说明
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| traceCode | string | ✅ | 溯源码 |
| ingredientName | string | ✅ | 食材名称 |
| cleanType | string | ✅ | 净菜类型,如 切丁、切片(参考接口1返回的 vegTypes) |
| spec | string | ✅ | 入库规格,如 袋装/500g、盒装/300g |
| quantity | int | ✅ | 入库数量(包/盒/份) |
| weight | decimal | ✅ | 入库重量(kg) |
| inboundTime | datetime | ✅ | 入库时间,格式:yyyy-MM-dd'T'HH:mm:ss |
| zoneId | long | ✅ | 仓库区域 id |
| operator | string | ❌ | 操作人姓名 |
| expiryDate | datetime | ❌ | 保质期至,格式同 inboundTime |
| storageTemp | decimal | ❌ | 存放温度(℃) |
| cameraCode | string | ❌ | 摄像头编号 |
| videoUrl | string | ❌ | 监控视频地址 |
| remark | string | ❌ | 备注 |
响应示例
{
"code": 200,
"msg": "保存成功",
"data": null
}
典型业务流程
设备扫溯源码
↓
GET /ingredient-by-trace?traceCode=xxx → 获取食材列表
↓
GET /zone-options → 获取区域列表
GET /supplier-options → 获取供应商列表(毛菜需要)
↓
用户确认信息 / 秤自动称重
↓
POST /raw-inbound (毛菜)
或
POST /clean-inbound(净菜)