| 版本 | 核心变化 |
|---|---|
| v1.0 | 结算中心初稿 |
| v2.0 | 状态机、角色、数据模型、API |
| v2.1 | 装卸工小程序、无人值守调研 |
| v3.0 | 扫码前置装车、纸质登记单、成品库人员角色,含完整数据模型和API |
| v3.1 | 从「分配制」改为「扫码认领制」;新增工作量统计模块D |
| v3.2 | 多人员协作装车(逐件计工);纸质登记单格式重设计;司机自助流转+厂区引导方案 |
| v4.0 | 整合所有前序版本 + U8接口集成方案 + 代码审查结论 + 技术决策录 |
以下决策基于对现有 mes-warehouse 模块、数据库、小程序前端的全面审查后确认:
| 编号 | 决策项 | 结论 | 依据 |
|---|---|---|---|
| D1 | 旧 OutboundHeader/OutboundBody 表处理 | 删除旧表,建新表 | 旧表字段与v4.0设计完全不同;数据库实际不存在 dzwl_outbound_header/dzwl_outbound_body 表 |
| D2 | 表名前缀 | 全部带 dzwl_ 前缀 | MCP查数据库确认:dzwl_inbound_header、dzwl_inbound_body 等6表均带前缀 |
| D3 | 前端项目 | 仅开发 wxma-v3(新版) | jbc-wxma(旧版)不动 |
| D4 | 称重方式 | 直接调用 IWeighService(地磅直连) | 已是生产环境入库称重的实际方案 |
| D5 | 库位字段 | 在 dzwl_inbound_body 新增 warehouse_code | 现有 cargoLocation 是货位级别,需新增独立的仓库级别字段 |
| D6 | 审核接口 | 出库+入库审核统一改为 http://www.kingpipe.com:9004 | 出库审核:/api/saleout/Verify;入库审核:/api/ProductIn/Verify。放弃17601中间层 |
| D7 | U8账套号获取 | 从 u8_integration 表 default_or_not='Y' 记录获取 | 和入库 DiskSaveServiceImpl 一致 |
| D8 | 纸质登记单打印 | 后端 QRCodeUtils 生成二维码图片,前端用浏览器打印 | 不走 PrintServiceImpl 中间服务 |
当前 MES 大宗物料系统已完成入库功能(扫码→称重→临时表→存盘→同步U8),但出库环节空白。结算中心仍在使用老旧的销售出库流程,效率低下且数据追溯困难。
开发大宗物料销售出库功能,使结算中心、装卸工、成品库人员、地磅室能在 MES 中完成从创建登记单到最终生成 U8 销售出库单的完整出库流程。同时支持工作量统计,为工资核算提供数据支持。
| 原则 | 说明 |
|---|---|
| U8为唯一主数据源 | 库存数据、财务核算以U8为准,MES是U8的现场操作终端 |
| MES不做进销存 | MES不构建独立的库存管理系统,只记录操作过程数据用于追溯 |
| U8不可用时降级运行 | U8接口异常时,MES本地操作不中断,待U8恢复后补同步 |
| 扫码认领制 | 纸质登记单二维码 = 通行证,扫码即获操作权限 |
| 权限一致 | 装卸工/成品库人员/地磅室对登记单操作权限完全相同 |
| 一票到底 | 同一张纸质登记单贯穿全流程,司机/装卸工均可持有流转 |
| 逐件计工 | 每扫一个合格证独立记录操作人,多人装同一车各自计工作量 |
| 重量校验 ≤ 0.2吨 | 过磅净重与入库重量合计误差校验 |
| 安全第一 | 行车吊装钢管有严格安全规范,装卸工不可替代;MES辅助提效 |
┌──────────────────────────────────────────────────────┐ │ 用友U8 ERP(主数据源 / 财务核算系统) │ │ │ │ 库存管理 ←→ 销售发货单 ←→ 销售出库单 ←→ 财务核算 │ │ ▲ ▲ │ │ │ 读取 │ 写入 │ │ │ │ │ │ ┌───────────────────┴───────────────┴─────────────┐ │ │ │ MES大宗物料系统(现场操作终端) │ │ │ │ │ │ │ │ ┌──────────┐ ┌──────────┐ ┌────────┐ ┌──────┐ │ │ │ │ │ 销售出库 │ │ 库提拆件 │ │ 订单 │ │工作量│ │ │ │ │ │ 主流程 │ │ 子系统 │ │ 完善 │ │统计 │ │ │ │ │ └──────────┘ └──────────┘ └────────┘ └──────┘ │ │ │ │ ┌──────────┐ │ │ │ │ │ 库位管理 │ │ │ │ │ └──────────┘ │ │ │ └─────────────────────────────────────────────────┘ │ └──────────────────────────────────────────────────────┘
MES的职责:从U8读取库存、发货单、客户、产品等参考数据;连接地磅获取实时重量;扫合格证实现单品级出库追溯;业务完成后将结果写回U8。
MES不做的事:不维护独立的库存主数据;不做财务核算;不做采购管理。
| 角色 | 终端 | 登记单操作权限 | 职责 |
|---|---|---|---|
| 结算中心 | PC端 | 创建、打印、审核(终审权) | 创建登记单→打印纸质单→审核出库→U8同步→出门证 |
| 装卸工 | 小程序 | 扫码认领→称皮重→装车扫码→称毛重→确认出库 | 实物装车 + 系统操作 |
| 成品库人员 | 小程序 | 与装卸工完全一致 + 库提拆件 | 库内产品管理 + 拆件 |
| 地磅室 | 小程序 | 与装卸工完全一致 | 称重 + 应急支持 |
| 司机 | 无系统 | 纸质登记单的物理传递者 | 开车 + 传递单据 |
| 管理员 | PC端 | 配置管理 | 称重地点、参数、权限 |
| 领导 | U8 | - | 第二天检查U8单据 |
| 角色 | 待称皮重 | 待装车 | 待审核 | 已完成 |
|---|---|---|---|---|
| 装卸工 | ✅ 可操作 | ✅ 可操作 | ❌ 无权 | 👁 查看 |
| 成品库人员 | ✅ 可操作 | ✅ 可操作 | ❌ 无权 | 👁 查看 |
| 地磅室 | ✅ 可操作 | ✅ 可操作 | ❌ 无权 | 👁 查看 |
| 结算中心 | 👁 查看 | 👁 查看 | ✅ 可操作 | 👁 查看 |
| 角色 | 说明 |
|---|---|
| 装卸工为何不可替代 | 行车吊装钢管有严格的安全生产规范,必须持证上岗。任何阶段都不交由司机或外部人员操作。 |
| 成品库人员与装卸工的区别 | 装卸工负责出库装车+扫码+称重;成品库人员负责库内产品管理(入库、存盘、拆件等)。 |
| 地磅室的转变 | 从「现场操作者」转为「远程监督+应急支持」。装卸工出示纸质登记单二维码时可快速扫码定位。 |
| 维度 | 旧方案(v3.0 分配制) | 新方案(扫码认领制) |
|---|---|---|
| 灵活度 | 结算中心必须预先指定谁操作 | 现场谁有空谁扫码操作 |
| 跟车模式 | 必须有装卸工跟车 | 可以装卸工跟车,也可以司机自主 |
| 工作量统计 | 无法精确到实际操作人 | 精确到每次操作的实际执行人 |
| 工资核算 | 无法基于实际工作量 | 可直接导出工作量报表,对接工资 |
一张纸质登记单 = 一个二维码 = 全流程通行证
同一张纸质登记单在司机/装卸工手中物理流转,各站点人员扫码即操作。系统完全不感知「谁拿着纸质单」,只感知「谁扫了二维码在操作」。
v3.1 的问题:certificate_operator 在表头上,只能记录一个人,无法处理多人协作装同一车。
解决方案:建立独立的扫码记录表,每扫一个合格证 = 一条记录。
登记单 20260501-A3F7K2 扫描记录表 dzwl_outbound_scan_record: ┌────┬──────┬──────────┬──────────────┬──────┐ │ 序号│ 人员 │ 合格证码 │ 入库重量(t) │ 时间 │ ├────┼──────┼──────────┼──────────────┼──────┤ │ 1 │ 张三 │ ZS001 │ 2.500 │ 09:15│ ← 张三工作量 │ 2 │ 张三 │ ZS002 │ 3.200 │ 09:17│ ← 张三工作量 │ 3 │ 李四 │ ZS003 │ 2.800 │ 09:22│ ← 李四工作量 │ 4 │ 李四 │ ZS004 │ 3.100 │ 09:25│ ← 李四工作量 │ 5 │ 王五 │ ZS005 │ 2.200 │ 09:30│ ← 王五工作量 └────┴──────┴──────────┴──────────────┴──────┘
| 模式 | 纸质单持卡人 | 说明 |
|---|---|---|
| 模式A:装卸工全程跟车 | 装卸工 | 纸质单全程在装卸工手中,装卸工自己扫码操作 |
| 模式B:司机全程自助 | 司机(仅传递单据) | 司机不操作系统,到达各站点时将纸质单交给站点人员扫码操作 |
| 模式C:混合模式 | 司机传递 | 各步骤操作者不同 |
步骤① 结算中心(PC):创建登记单→打印纸质单→交给司机
步骤② 司机开车到地磅 → 将纸质单交给地磅室人员 → 地磅室人员扫二维码 → 称皮重 → 绑定 → 纸质单还给司机
步骤③ 司机开车到成品库 → 将纸质单交给成品库人员 → 逐件装车+扫合格证 → 多人协作各自计工 → 纸质单还给司机
步骤④ 司机开车回地磅 → 将纸质单交给地磅室人员 → 称毛重 → 确认出库 → 纸质单还给司机
步骤⑤ 司机到结算中心 → 交纸质单 → 结算中心审核 → 生成U8销售出库单 → 开出门证 → 完成
结算中心在MES PC端,进入「大宗物料→销售出库→登记单管理」,点击「新建登记单」。系统调用U8 API获取「已保存未出库」的U8发货单列表供筛选。选择发货单后系统自动拉取数据预填。不指定操作人。保存后系统自动:生成登记单号(格式:yyyyMMdd-6位随机码)、生成登记单二维码、计算装车路线、状态→待称皮重。
操作者打开小程序,扫码获取登记单。系统校验:二维码有效 + 状态=待称皮重 + 有操作角色。核对车牌号,引导车辆上磅,点击获取皮重(轮询磅秤API),稳定后点击绑定为皮重。自动记录操作人信息,状态→待装车。
操作者引导车辆到成品库。扫纸质登记单二维码进入界面。逐件装车+立即扫合格证码,校验有效性/是否已出库/合同号。每扫一件插入一条扫描记录。支持多人协作,各自记录名下。
装车完毕,车辆驶回地磅。核对已绑定列表,实时显示毛重并自动计算净重和差值。差值≤0.2吨时可确认出库:分配净重到每件产品、标记is_delivered、回写U8发货单、记录确认操作人、状态→待审核。
结算中心筛选「待审核」登记单,点击审核。系统执行:保存U8销售出库单→获取u8SaleOutId→审核U8销售出库单→状态→已完成→二维码失效→开具出门证。
统一使用 IWeighService 直连地磅硬件(与入库称重完全一致)。
调用链路:小程序前端 → ExternalServiceController → WeighServiceImpl → 地磅硬件 (POST https://www.kingpipe.com:17601/process_number)
| 场景 | 对应步骤 | 称重类型 | 说明 |
|---|---|---|---|
| 称皮重 | 步骤② | 获取当前重量 → 绑定为皮重 | 空车过磅 |
| 称毛重 | 步骤④ | 实时显示当前重量 → 自动计算净重和差值 | 装车后过磅 |
┌──────────────────────────────────────────────┐ │ XX钢管厂 物流路线导览 │ │ │ │ ┌──────┐ ┌────────┐ ┌──────┐ │ │ │ 地磅 │ →→→ │ 成品库 │ →→→ │ 地磅 │ │ │ │ ①号 │ │ │ │ ①号 │ │ │ └──────┘ └────────┘ └──────┘ │ │ │ │ 成品库编号:A库=冷拔无缝管 B库=热轧无缝管 │ │ C库=毛管 D库=其他产品 │ └──────────────────────────────────────────────┘
| 编号 | 含义 | 说明 |
|---|---|---|
| 地磅①号 | 大宗物料专用地磅 | dzwl_inbound_set 中配置的称重地点 |
| 成品库A | 冷拔无缝管仓库 | 库位编码 A |
| 成品库B | 热轧无缝管仓库 | 库位编码 B |
| 成品库C | 毛管仓库 | 库位编码 C |
| 成品库D | 其他产品仓库 | 库位编码 D |
| 结算中心 | 审核/出门证 | 结算中心办公室 |
| 参数 | 规格 |
|---|---|
| 打印机类型 | 针式票据打印机(如 Epson TM-U220 / LQ-590K) |
| 纸张 | 横向,宽度 240mm × 高度 140mm(约 A4 横向一半) |
| 打印方式 | 一式两联(白联归档,粉联司机留存) |
| 二维码 | 左侧 1/5 区域(约 48mm 宽),大尺寸便于扫码 |
┌──────┬──────────────────────────────────────────────────────────────────┐ │ │ 大宗物料出库登记单 │ │ │ No: 20260501-A3F7K2 │ │ │ │ │ 二 │ 车牌:鲁Q-XXXXX │ │ 维 │ │ │ 码 │ 装车路线: │ │ 区 │ 地磅①号 ─→ 成品库A(冷拔) ─→ 成品库B(热轧) ─→ 地磅①号 ─→ 结算中心│ │ 域 │ │ │ 48mm │ ─────────────────────────────────────────────────────────── │ │ × │ 装车明细: │ │ 48mm │ ┌────┬──────┬──────────┬──────┬──────┬────────┬──────────────┐ │ │ │ │序号│品名 │ 规格型号 │ 钢号 │ 标准 │数量(吨)│库位(第X站) │ │ │ │ ├────┼──────┼──────────┼──────┼──────┼────────┼──────────────┤ │ │ │ │ 1 │ 冷管 │ 60×5 │ 20# │ 8163 │ 10.000 │A库 ← 第1站 │ │ │ │ │ 2 │ 热管 │ 89×6 │ 45# │ 3087 │ 15.000 │B库 ← 第2站 │ │ │ │ │ 3 │ 冷管 │ 76×4.5 │ 20# │ 8163 │ 8.000 │A库 ← 第1站 │ │ │ │ └────┴──────┴──────────┴──────┴──────┴────────┴──────────────┘ │ │ │ │ │ │ 装车顺序:先到A库装1、3号(共18.000吨) → 再到B库装2号 │ │ │ │ │ │ ─────────────────────────────────────────────────────────── │ │ │ JBC-MES大宗物料系统 │ └──────┴──────────────────────────────────────────────────────────────────┘
系统处理流程:从登记单表体获取所有待出库产品 → 查询各产品对应的库存位置(库位编码)→ 按库位分组 → 按库位与地磅的距离排序确定访问顺序 → 生成路线并打印在纸质登记单上。
| 方案 | 实现方式 | 优先级 |
|---|---|---|
| 方案1 | 在 dzwl_inbound_body 增加 warehouse_code 字段。入库时由成品库人员选择 | ⭐ 推荐 |
| 方案2 | 在 dzwl_inbound_set 中为每个称重地点关联默认仓库 | 简单但不精确 |
| 方案3 | 建立独立的库位管理表,入库时指定 | 功能最完善,周期长 |
┌─────────┐
│ 草稿 │ (PC端新建未保存)
│ DRAFT │
└────┬────┘
│ 保存 + 计算装车路线
▼
┌─────────┐
│ 待称皮重│ 扫码认领→称皮重→记录tare_operator
│ PENDING │
│ _TARE │
└────┬────┘
│
▼
┌─────────┐
│ 待装车 │ 扫码认领→逐件装车扫码
│ TARE │ 每件→插入scan_record(含操作人)
│ _DONE │ 多人可协作,各自记录
└────┬────┘
│ 装车完毕→回车称毛重→校验差值→确认出库
│ 记录confirm_operator + 回写U8发货单
▼
┌─────────┐
│ 待审核 │ 仅结算中心可审核
│ PENDING │
│ _REVIEW │
└────┬────┘
│ 审核 → 生成+审核U8销售出库单
▼
┌─────────┐
│ 已完成 │ 二维码失效,纸质单归档
│ COMPLETE│
│ D │
└─────────┘
┌─────────┐ 任一环节结算中心可手动 ┌─────────┐
│ 已作废 │ ◀────────────────────── │任意状态 │
│ CANCELLE│ │(除已完成)│
│ D │ └─────────┘
└─────────┘
| 状态 | 操作者 | 可执行操作 |
|---|---|---|
DRAFT | 结算中心 | 编辑、删除 |
PENDING_TARE | 装卸工/成品库/地磅室(任一人) | 扫二维码→绑定皮重 |
TARE_DONE | 装卸工/成品库/地磅室(任一人) | 扫二维码→装车扫码→称毛重→确认出库 |
PENDING_REVIEW | 仅结算中心 | 审核 |
COMPLETED | 所有人 | 仅查看 |
CANCELLED | 所有人 | 仅查看 |
| 异常 | 处理方式 |
|---|---|
| 磅差 > 0.2t | 「重量差异过大(X.XX吨),请检查装车产品或合格证」→ 返回成品库核对 |
| 合格证已出库 | 「该产品已出库(时间XXX)」→ 换未出库产品 |
| 合同号不匹配 | 「合同号XXX与登记单YYY不一致」→ 换正确合同号产品 |
| 磅秤失败 | 「地磅连接失败」+ 手动入口 + 求助 → 地磅室诊断/授权 |
| U8超时 | 「U8暂不可用,本地已保存」→ 继续操作,U8恢复后补同步 |
| 二维码被多人同时扫 | 后扫的人提示:「该登记单正在被 XXX 操作中」(Redis 锁,30s 过期) |
| 司机找不到成品库 | 纸质单上有库位编号和路线引导;现场引导牌指引 |
| 纸质单在途中丢失 | 结算中心可重新打印,原二维码自动失效,新二维码生效 |
| 部分产品未指定库位 | 登记单创建时 warehouse_code 为空 → 提示「部分产品未指定库位,无法计算装车路线」 |
| 模块 | 说明 | 新增/变更 |
|---|---|---|
| A. 销售出库主流程 | 登记单管理(PC) + 登记单操作(小程序) | 含路线图、多人协作 |
| B. 库提拆件子系统 | 库提出库/存盘/入库/存盘 4个页面 | 成品库人员操作 |
| C. 订单管理完善 | 入库明细 + 发货进度 + 出库记录 | 订单维度可视化 |
| D. 出库工作量统计 | 逐件统计装车、称重、确认工作量 | 基于 scan_record 表 |
| E. 库位管理 | 产品入库时指定库位,支撑路线规划 | 新增 |
路径:大宗物料 → 销售出库 → 登记单管理
筛选条件:登记单号、U8发货单号、客户、车牌号、状态、日期范围。列表字段:登记单号、发货单号、客户、车牌号、皮重、毛重、净重、称皮人、状态、创建时间。操作按钮:查看详情、打印纸质登记单、作废(非终态)、审核(待审核态)。
/api/SaleOut/save 保存销售出库单 → 调用U8 API /api/saleout/Verify 审核出库单 → 状态→已完成 → 开具出门证路径:大宗物料 → 出库操作
入口:扫码认领 — 操作者打开小程序,扫描纸质登记单二维码,系统校验二维码有效性+登记单状态+操作者角色,通过后打开对应状态的操作界面。
客户购买一件产品(多根钢管打包成一件)中的部分钢管。由成品库人员操作拆件。
原有入库件 (TrackNumber: 合格证1, is_split = 0)
│
│ 成品库人员拆为 2 件
│
├──▶ 出库件 (给客户) → 库提出库(临时出库单) → 库提出库存盘 → U8产成品出库单
│ 新合格证: TrackNumber-S1
│ 重量: 原入库重的一部分
│
└──▶ 剩件 (回库) → 库提入库(临时入库单) → 库提入库存盘 → U8产成品入库单
新合格证: TrackNumber-S2
重量: 原入库重的一部分
原有入库件 → is_split = 1(标记已拆件)
库提出库:扫原有合格证码→填写拆出数量→生成新合格证码→生成临时出库单→打印新合格证。
库提出库存盘:筛选待存盘的临时出库记录→批量选择→存盘→调用U8 API生成产成品出库单。
库提入库:自动获取拆件后剩余信息→生成新合格证码→入库重量=原入库重-拆出重量→生成临时入库单→打印新合格证。
库提入库存盘:筛选待存盘→批量存盘→调用U8 API生成产成品入库单。
| 视图 | 关键字段/指标 | 来源 |
|---|---|---|
| 入库明细 | 合格证码、品名/规格/钢号、入库重量(t)、支数、状态(未出库/已出库/已拆件) | dzwl_inbound_body |
| 发货进度汇总 | 订单总量、已入库数量、已发货数量、未发货数量 | SUM聚合计算 |
| 出库记录 | 登记单号、U8发货单号、客户、出库日期、重量、状态 | dzwl_outbound_header |
基于新表 dzwl_outbound_scan_record。称皮重和确认出库的操作人仍在表头,单独查询。
| 视图 | 说明 |
|---|---|
| 人员日明细 | 某人员某天扫了哪些合格证、各多少吨/支 |
| 人员日汇总 | 某人员某天总计装车吨数、支数、件数 |
| 人员月汇总 | 按月汇总,用于工资核算 |
| 登记单维度 | 每个登记单由哪些人协作完成 |
| 接口 | 说明 |
|---|---|
GET /warehouse/workload/scan-list | 扫码工作量明细(基于 scan_record) |
GET /warehouse/workload/scan-summary | 按人员+日期汇总吨/支/件 |
GET /warehouse/workload/tare-summary | 称皮重工作量(从 header 查询) |
GET /warehouse/workload/confirm-summary | 确认出库工作量(从 header 查询) |
在 dzwl_inbound_body 新增 warehouse_code VARCHAR(20)。入库时由成品库人员在下拉列表中选择,仓库编码与引导牌编号一致(A、B、C、D)。
| 编码 | 含义 | 关联引导牌 |
|---|---|---|
| A | 冷拔无缝管仓库 | 成品库A |
| B | 热轧无缝管仓库 | 成品库B |
| C | 毛管仓库 | 成品库C |
| D | 其他产品仓库 | 成品库D |
dzwl_inbound_body(新增5字段)、dzwl_tep_inbound_body(新增2字段)dzwl_outbound_header、dzwl_outbound_bodydzwl_tep_outbound_body(库提临时出库表)、dzwl_outbound_scan_record(扫码记录表,逐件计工核心)
| 字段名 | 类型 | 说明 | 默认值 |
|---|---|---|---|
is_delivered | TINYINT(1) | 是否已出库 | 0 |
delivery_outbound_id | BIGINT | 关联出库登记单表体ID | NULL |
delivery_time | DATETIME | 出库时间 | NULL |
is_split | TINYINT(1) | 是否已被拆件 | 0 |
warehouse_code | VARCHAR(20) | 库位编码(A/B/C/D) | NULL |
| 字段名 | 类型 | 说明 |
|---|---|---|
id | BIGINT PK | 主键,自增 |
outbound_no | VARCHAR(50) | 登记单号(yyyyMMdd-6位随机码) |
U8_delivery_order_no | VARCHAR(50) | U8发货单号 |
U8_dlid | BIGINT | U8发货单主键(dlid) |
U8_cdlcode | VARCHAR(50) | U8发货单编号(cDLcode) |
U8_ccuscode | VARCHAR(50) | U8客户编码 |
U8_cdepcode | VARCHAR(50) | U8部门编码 |
U8_cbustype | VARCHAR(50) | U8业务类型 |
customer_name | VARCHAR(100) | 客户名称 |
plate_number | VARCHAR(20) | 车牌号 |
tare_weight | DECIMAL(10,3) | 皮重(吨) |
gross_weight | DECIMAL(10,3) | 毛重(吨) |
net_weight | DECIMAL(10,3) | 净重(吨) |
weight_diff | DECIMAL(10,3) | 重量差值(吨) |
status | VARCHAR(30) | DRAFT / PENDING_TARE / TARE_DONE / PENDING_REVIEW / COMPLETED / CANCELLED |
tare_operator_id | BIGINT | 称皮重操作人ID |
tare_operator_name | VARCHAR(50) | 称皮重操作人姓名 |
confirm_operator_id | BIGINT | 确认出库操作人ID |
confirm_operator_name | VARCHAR(50) | 确认出库操作人姓名 |
review_by | VARCHAR(50) | 审核人 |
U8_saleout_id | VARCHAR(50) | U8销售出库单ID |
remark | VARCHAR(500) | 备注 |
| 字段名 | 类型 | 说明 |
|---|---|---|
id | BIGINT PK | 主键,自增 |
header_id | BIGINT | 关联登记单表头ID |
body_id | BIGINT | 关联登记单表体ID |
inbound_body_id | BIGINT | 关联入库表体ID |
track_number | VARCHAR(100) | 合格证码 |
operator_id | BIGINT | 扫合格证操作人ID |
operator_name | VARCHAR(50) | 扫合格证操作人姓名 |
scan_time | DATETIME | 扫码时间 |
inbound_weight | DECIMAL(10,3) | 该件入库重量(吨) |
inbound_pieces | INT | 该件支数 |
warehouse_code | VARCHAR(20) | 库位编码(冗余,方便统计) |
idx_header_id(按登记单查询)、idx_operator_time(operator_id, scan_time)— 工作量统计核心索引
| 接口 | 方法 | 路径 | 说明 |
|---|---|---|---|
| 查询登记单列表 | GET | /warehouse/outbound/list | 分页,多条件筛选 |
| 获取登记单详情 | GET | /warehouse/outbound/{id} | 含表体 + scan_records |
| 新建登记单 | POST | /warehouse/outbound/create | 选U8发货单 → 生成 |
| 获取U8发货单列表 | GET | /warehouse/u8/delivery-orders | 通过 callU8Api |
| 获取U8发货单详情 | GET | /warehouse/u8/delivery-order/{dlid} | 含明细行 |
| 作废登记单 | PUT | /warehouse/outbound/{id}/cancel | - |
| 审核登记单 | POST | /warehouse/outbound/{id}/review | 生成 + 审核U8销售出库单 |
| 重新打印登记单 | POST | /warehouse/outbound/{id}/reprint | 原二维码失效,生成新二维码 |
| 接口 | 方法 | 路径 | 说明 |
|---|---|---|---|
| 扫码获取登记单 | GET | /warehouse/outbound/scan?code={QR内容} | 校验二维码+状态+角色 |
| 绑定皮重 | PUT | /warehouse/outbound/{id}/bind-tare | 记录 tare_operator |
| 扫码绑定合格证 | POST | /warehouse/outbound/{id}/scan-certificate | 核心:校验 + 插入 scan_record |
| 移除已绑合格证 | DELETE | /warehouse/outbound/{id}/scan-record/{recordId} | 仅 TARE_DONE 状态允许 |
| 获取实时数据 | GET | /warehouse/outbound/{id}/realtime | 绑定列表 + 毛重 + 差值 |
| 确认出库 | POST | /warehouse/outbound/{id}/confirm | 净重分配 + 回写U8 |
POST /warehouse/outbound/{headerId}/scan-certificate
请求体:
{
"trackNumber": "合格证码"
}
响应:
{
"code": 200,
"data": {
"scanRecordId": 123,
"productName": "冷拔无缝管",
"specification": "60×5",
"steelGrade": "20#",
"batchNumber": "P20260501001",
"inboundWeight": 2.500,
"inboundPieces": 15,
"warehouseCode": "A",
"operatorName": "张三"
}
}
| 渠道 | 用途 | 调用方式 | 地址来源 |
|---|---|---|---|
| U8数据API | 数据CRUD | callU8Api 方法 | u8_integration.api + u8_integration.auth |
| U8审核API | 单据审核 | POST 直接调用 | http://www.kingpipe.com:9004 |
| 接口 | 方法 | 用途 |
|---|---|---|
/api/Consignment/GetPage | POST | 分页查询发货单列表 |
/api/Consignment/GetDetail | POST | 查询发货单详情(含明细行) |
调用 /api/Consignment/save,传入已有 dlid 即为更新。回写内容:实际称重重量 → iquantity。
第一步:POST /api/SaleOut/save → 返回 Data = U8出库单ID
第二步:审核销售出库单
POST http://www.kingpipe.com:9004/api/saleout/Verify?accnum={accNum}&id={u8SaleOutId}
Header: Auth = u8_integration.auth
| 接口路径 | 方法 | 用途 | 调用方式 |
|---|---|---|---|
/api/Consignment/GetPage | POST | 查询发货单列表 | callU8Api |
/api/Consignment/GetDetail | POST | 查询发货单详情 | callU8Api |
/api/Consignment/save | POST | 保存/更新发货单 | callU8Api |
/api/SaleOut/save | POST | 保存销售出库单 | callU8Api |
/api/saleout/Verify | POST | 审核销售出库单 | 9004直接调用 |
/api/ProductIn/Verify | POST | 审核产成品入库单 | 9004直接调用 |
| 关联点 | 设计 |
|---|---|
| 合格证码 | dzwl_inbound_body.TrackNumber — 出库扫码校验 |
is_delivered = 1 | 防重复出库 |
is_split = 1 | 防重复拆件 |
warehouse_code | 支撑装车路线规划 |
wxma-v3。旧版 jbc-wxma 不动。outbound/index.vue — 废弃,新建「出库操作」替代pickup/index.vue — 重构为库提出库(成品库人员操作)
| 扩展点 | 预留方式 |
|---|---|
| 无人地磅值守 | 扫码认领制已是基础:纸质单二维码即通行证 |
| 车牌识别自动写入 | plate_number 支持设备写入 |
| 自助终端 | RESTful API,终端HTTP调用 |
| 道闸联动 | 确认出库后 WebHook |
| 语音/LED引导 | 状态变更消息通道 |
| 退货功能 | dzwl_outbound_header 增加退货类型字段 |
| 报表生成 | 工作量统计数据为基础构建综合报表 |
同一登记单二维码被两人同时扫:先扫者进入操作(Redis锁30s过期),后扫者提示「该登记单正在被 XXX 操作中」。
U8不可用时 MES 本地不中断。待 U8 恢复后通过补同步机制将本地数据推送到 U8。
| 单据类型 | 审核接口 |
|---|---|
| 产成品入库单 | /api/ProductIn/Verify?accnum={accNum}&id={id} |
| 销售出库单 | /api/saleout/Verify?accnum={accNum}&id={id} |
| 其他入库单 | /api/OtherIn/Verify?accnum={accNum}&id={id} |
| 其他出库单 | /api/OtherOut/Verify?accnum={accNum}&id={id} |
| 采购入库单 | /api/PuStoreIn/Verify?accnum={accNum}&id={id} |
| 材料出库单 | /api/MaterialOut/Verify?accnum={accNum}&id={id} |
审核登记单的接口应加 @Idempotent 注解,防止重复生成U8出库单。
| 术语 | 说明 |
|---|---|
| 登记单 | MES出库操作单据,号段 yyyyMMdd-6位随机码 |
| 发货单(Consignment) | U8预发货单据,含客户、车牌号、计划发货产品 |
| 销售出库单(SaleOut) | U8正式出库单据,涉及库存扣减和财务核算 |
| 合格证(TrackNumber) | 产品入库标签,出库扫码依据 |
| 扫码认领制 | 谁扫纸质登记单二维码谁操作,系统自动记录 |
| 一票到底 | 同一张纸质登记单贯穿全流程 |
| 逐件计工 | 每扫一个合格证独立记录操作人 |
| 文档 | 说明 |
|---|---|
U8销售发货单接口.openapi.json | U8发货单查询/Save接口 |
U8销售出库单接口.openapi.json | U8销售出库单Save/查询接口 |
U8单据审核.openapi.json | 6种单据审核接口 |