大宗物料销售出库项目需求 v4.0

✍️ 作者:wr 📋 版本:4.0(终版)
整合 v3.0(基础架构)+ v3.1(扫码认领制)+ v3.2(多人员协作/纸质登记单重设计/厂区引导方案/逐件计工)+ U8接口集成方案,形成终版

版本演进

版本核心变化
v1.0结算中心初稿
v2.0状态机、角色、数据模型、API
v2.1装卸工小程序、无人值守调研
v3.0扫码前置装车、纸质登记单、成品库人员角色,含完整数据模型和API
v3.1从「分配制」改为「扫码认领制」;新增工作量统计模块D
v3.2多人员协作装车(逐件计工);纸质登记单格式重设计;司机自助流转+厂区引导方案
v4.0整合所有前序版本 + U8接口集成方案 + 代码审查结论 + 技术决策录

技术决策录(v4.0 代码审查后确认)

以下决策基于对现有 mes-warehouse 模块、数据库、小程序前端的全面审查后确认:

编号决策项结论依据
D1旧 OutboundHeader/OutboundBody 表处理删除旧表,建新表旧表字段与v4.0设计完全不同;数据库实际不存在 dzwl_outbound_header/dzwl_outbound_body
D2表名前缀全部带 dzwl_ 前缀MCP查数据库确认:dzwl_inbound_headerdzwl_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中间层
D7U8账套号获取u8_integrationdefault_or_not='Y' 记录获取和入库 DiskSaveServiceImpl 一致
D8纸质登记单打印后端 QRCodeUtils 生成二维码图片,前端用浏览器打印不走 PrintServiceImpl 中间服务

一、项目背景与目标

1.1 背景

当前 MES 大宗物料系统已完成入库功能(扫码→称重→临时表→存盘→同步U8),但出库环节空白。结算中心仍在使用老旧的销售出库流程,效率低下且数据追溯困难。

1.2 目标

开发大宗物料销售出库功能,使结算中心、装卸工、成品库人员、地磅室能在 MES 中完成从创建登记单到最终生成 U8 销售出库单的完整出库流程。同时支持工作量统计,为工资核算提供数据支持。

1.3 核心设计原则

原则说明
U8为唯一主数据源库存数据、财务核算以U8为准,MES是U8的现场操作终端
MES不做进销存MES不构建独立的库存管理系统,只记录操作过程数据用于追溯
U8不可用时降级运行U8接口异常时,MES本地操作不中断,待U8恢复后补同步
扫码认领制纸质登记单二维码 = 通行证,扫码即获操作权限
权限一致装卸工/成品库人员/地磅室对登记单操作权限完全相同
一票到底同一张纸质登记单贯穿全流程,司机/装卸工均可持有流转
逐件计工每扫一个合格证独立记录操作人,多人装同一车各自计工作量
重量校验 ≤ 0.2吨过磅净重与入库重量合计误差校验
安全第一行车吊装钢管有严格安全规范,装卸工不可替代;MES辅助提效

二、系统定位与设计原则

2.1 系统定位

┌──────────────────────────────────────────────────────┐
│              用友U8 ERP(主数据源 / 财务核算系统)     │
│                                                      │
│  库存管理 ←→ 销售发货单 ←→ 销售出库单 ←→ 财务核算    │
│                      ▲               ▲               │
│                      │ 读取          │ 写入           │
│                      │               │               │
│  ┌───────────────────┴───────────────┴─────────────┐ │
│  │          MES大宗物料系统(现场操作终端)         │ │
│  │                                                  │ │
│  │  ┌──────────┐ ┌──────────┐ ┌────────┐ ┌──────┐ │ │
│  │  │ 销售出库 │ │ 库提拆件 │ │ 订单   │ │工作量│ │ │
│  │  │ 主流程   │ │ 子系统   │ │ 完善   │ │统计  │ │ │
│  │  └──────────┘ └──────────┘ └────────┘ └──────┘ │ │
│  │  ┌──────────┐                                   │ │
│  │  │ 库位管理 │                                   │ │
│  │  └──────────┘                                   │ │
│  └─────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────┘

MES的职责:从U8读取库存、发货单、客户、产品等参考数据;连接地磅获取实时重量;扫合格证实现单品级出库追溯;业务完成后将结果写回U8。

MES不做的事:不维护独立的库存主数据;不做财务核算;不做采购管理。

三、角色与权限模型

3.1 角色总览

角色终端登记单操作权限职责
结算中心PC端创建、打印、审核(终审权)创建登记单→打印纸质单→审核出库→U8同步→出门证
装卸工小程序扫码认领→称皮重→装车扫码→称毛重→确认出库实物装车 + 系统操作
成品库人员小程序与装卸工完全一致 + 库提拆件库内产品管理 + 拆件
地磅室小程序与装卸工完全一致称重 + 应急支持
司机无系统纸质登记单的物理传递者开车 + 传递单据
管理员PC端配置管理称重地点、参数、权限
领导U8-第二天检查U8单据

3.2 权限矩阵

角色待称皮重待装车待审核已完成
装卸工✅ 可操作✅ 可操作❌ 无权👁 查看
成品库人员✅ 可操作✅ 可操作❌ 无权👁 查看
地磅室✅ 可操作✅ 可操作❌ 无权👁 查看
结算中心👁 查看👁 查看✅ 可操作👁 查看

3.3 核心规则

扫码即认领:扫纸质登记单二维码 → 系统校验角色 → 打开操作界面
不扫不能操作:登记单不出现在任何人的任务列表里,只有扫码才能获取
状态决定权限:见权限矩阵
操作即记录:每次关键操作自动记录操作人ID、姓名、时间

3.4 角色说明

角色说明
装卸工为何不可替代行车吊装钢管有严格的安全生产规范,必须持证上岗。任何阶段都不交由司机或外部人员操作。
成品库人员与装卸工的区别装卸工负责出库装车+扫码+称重;成品库人员负责库内产品管理(入库、存盘、拆件等)。
地磅室的转变从「现场操作者」转为「远程监督+应急支持」。装卸工出示纸质登记单二维码时可快速扫码定位。

四、核心设计理念

4.1 「扫码认领制」

维度旧方案(v3.0 分配制)新方案(扫码认领制)
灵活度结算中心必须预先指定谁操作现场谁有空谁扫码操作
跟车模式必须有装卸工跟车可以装卸工跟车,也可以司机自主
工作量统计无法精确到实际操作人精确到每次操作的实际执行人
工资核算无法基于实际工作量可直接导出工作量报表,对接工资

4.2 「一票到底」模式

一张纸质登记单 = 一个二维码 = 全流程通行证

同一张纸质登记单在司机/装卸工手中物理流转,各站点人员扫码即操作。系统完全不感知「谁拿着纸质单」,只感知「谁扫了二维码在操作」。

4.3 「逐件计工」模式

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│ ← 王五工作量
└────┴──────┴──────────┴──────────────┴──────┘

五、核心业务流程

5.1 兼容三种流转模式

模式纸质单持卡人说明
模式A:装卸工全程跟车装卸工纸质单全程在装卸工手中,装卸工自己扫码操作
模式B:司机全程自助司机(仅传递单据)司机不操作系统,到达各站点时将纸质单交给站点人员扫码操作
模式C:混合模式司机传递各步骤操作者不同

5.2 模式B流程详解(司机全程自助)

步骤① 结算中心(PC):创建登记单→打印纸质单→交给司机
步骤② 司机开车到地磅 → 将纸质单交给地磅室人员 → 地磅室人员扫二维码 → 称皮重 → 绑定 → 纸质单还给司机
步骤③ 司机开车到成品库 → 将纸质单交给成品库人员 → 逐件装车+扫合格证 → 多人协作各自计工 → 纸质单还给司机
步骤④ 司机开车回地磅 → 将纸质单交给地磅室人员 → 称毛重 → 确认出库 → 纸质单还给司机
步骤⑤ 司机到结算中心 → 交纸质单 → 结算中心审核 → 生成U8销售出库单 → 开出门证 → 完成

5.3 步骤详解

步骤①:结算中心创建登记单 + 打印纸质单

结算中心在MES PC端,进入「大宗物料→销售出库→登记单管理」,点击「新建登记单」。系统调用U8 API获取「已保存未出库」的U8发货单列表供筛选。选择发货单后系统自动拉取数据预填。不指定操作人。保存后系统自动:生成登记单号(格式:yyyyMMdd-6位随机码)、生成登记单二维码、计算装车路线、状态→待称皮重。

步骤②:称皮重

操作者打开小程序,扫码获取登记单。系统校验:二维码有效 + 状态=待称皮重 + 有操作角色。核对车牌号,引导车辆上磅,点击获取皮重(轮询磅秤API),稳定后点击绑定为皮重。自动记录操作人信息,状态→待装车。

步骤③:装车扫码

操作者引导车辆到成品库。扫纸质登记单二维码进入界面。逐件装车+立即扫合格证码,校验有效性/是否已出库/合同号。每扫一件插入一条扫描记录。支持多人协作,各自记录名下。

步骤④:称毛重 + 确认出库

装车完毕,车辆驶回地磅。核对已绑定列表,实时显示毛重并自动计算净重和差值。差值≤0.2吨时可确认出库:分配净重到每件产品、标记is_delivered、回写U8发货单、记录确认操作人、状态→待审核。

步骤⑤:审核

结算中心筛选「待审核」登记单,点击审核。系统执行:保存U8销售出库单→获取u8SaleOutId→审核U8销售出库单→状态→已完成→二维码失效→开具出门证。

5.4 称重技术方案

统一使用 IWeighService 直连地磅硬件(与入库称重完全一致)。

调用链路:小程序前端 → ExternalServiceController → WeighServiceImpl → 地磅硬件 (POST https://www.kingpipe.com:17601/process_number)

场景对应步骤称重类型说明
称皮重步骤②获取当前重量 → 绑定为皮重空车过磅
称毛重步骤④实时显示当前重量 → 自动计算净重和差值装车后过磅

六、厂区引导方案

6.2 三级引导牌体系

第一级:厂区入口总导览

┌──────────────────────────────────────────────┐
│              XX钢管厂 物流路线导览             │
│                                              │
│   ┌──────┐     ┌────────┐     ┌──────┐      │
│   │ 地磅 │ →→→ │ 成品库 │ →→→ │ 地磅 │       │
│   │ ①号 │     │        │     │ ①号 │       │
│   └──────┘     └────────┘     └──────┘      │
│                                              │
│   成品库编号:A库=冷拔无缝管  B库=热轧无缝管   │
│              C库=毛管        D库=其他产品     │
└──────────────────────────────────────────────┘

6.3 引导牌编号体系

编号含义说明
地磅①号大宗物料专用地磅dzwl_inbound_set 中配置的称重地点
成品库A冷拔无缝管仓库库位编码 A
成品库B热轧无缝管仓库库位编码 B
成品库C毛管仓库库位编码 C
成品库D其他产品仓库库位编码 D
结算中心审核/出门证结算中心办公室

七、纸质登记单设计

7.1 打印规格

参数规格
打印机类型针式票据打印机(如 Epson TM-U220 / LQ-590K)
纸张横向,宽度 240mm × 高度 140mm(约 A4 横向一半)
打印方式一式两联(白联归档,粉联司机留存)
二维码左侧 1/5 区域(约 48mm 宽),大尺寸便于扫码

7.2 版式设计(横向布局)

┌──────┬──────────────────────────────────────────────────────────────────┐
│      │                      大宗物料出库登记单                          │
│      │                 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大宗物料系统                                               │
└──────┴──────────────────────────────────────────────────────────────────┘

八、装车路线规划

8.1 路线规划逻辑

系统处理流程:从登记单表体获取所有待出库产品 → 查询各产品对应的库存位置(库位编码)→ 按库位分组 → 按库位与地磅的距离排序确定访问顺序 → 生成路线并打印在纸质登记单上。

8.2 库位数据来源

方案实现方式优先级
方案1dzwl_inbound_body 增加 warehouse_code 字段。入库时由成品库人员选择⭐ 推荐
方案2dzwl_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. 库位管理产品入库时指定库位,支撑路线规划新增

十二、模块A:销售出库主流程

12.1 PC端:登记单管理

路径:大宗物料 → 销售出库 → 登记单管理

12.1.1 登记单列表

筛选条件:登记单号、U8发货单号、客户、车牌号、状态、日期范围。列表字段:登记单号、发货单号、客户、车牌号、皮重、毛重、净重、称皮人、状态、创建时间。操作按钮:查看详情、打印纸质登记单、作废(非终态)、审核(待审核态)。

12.1.2 新建登记单

  1. 「新建登记单」
  2. 系统调用U8 API获取发货单列表(仅「已保存未完成出库」的U8发货单)
  3. 选择发货单后,自动拉取预填表头(客户名称、销售部门、U8发货单号、发货日期、车牌号)和表体(存货编码、存货名称、规格型号、钢号、标准、发货数量)
  4. 点击「保存」→ 生成登记单号 + 二维码 + 计算装车路线 → 状态:待称皮重
  5. 可选择立即打印纸质登记单

12.1.3 审核登记单

  1. 筛选「待审核」→ 查看详情,确认数据完整
  2. 点击「审核」
  3. 系统执行:调用U8 API /api/SaleOut/save 保存销售出库单 → 调用U8 API /api/saleout/Verify 审核出库单 → 状态→已完成 → 开具出门证

12.2 小程序端:登记单操作

路径:大宗物料 → 出库操作

入口:扫码认领 — 操作者打开小程序,扫描纸质登记单二维码,系统校验二维码有效性+登记单状态+操作者角色,通过后打开对应状态的操作界面。

十三、模块B:库提拆件子系统

13.1 业务场景

客户购买一件产品(多根钢管打包成一件)中的部分钢管。由成品库人员操作拆件。

13.2 拆件流程

原有入库件 (TrackNumber: 合格证1, is_split = 0)
  │
  │ 成品库人员拆为 2 件
  │
  ├──▶ 出库件 (给客户) → 库提出库(临时出库单) → 库提出库存盘 → U8产成品出库单
  │    新合格证: TrackNumber-S1
  │    重量: 原入库重的一部分
  │
  └──▶ 剩件 (回库) → 库提入库(临时入库单) → 库提入库存盘 → U8产成品入库单
       新合格证: TrackNumber-S2
       重量: 原入库重的一部分

原有入库件 → is_split = 1(标记已拆件)

13.3 四个子页面

库提出库:扫原有合格证码→填写拆出数量→生成新合格证码→生成临时出库单→打印新合格证。

库提出库存盘:筛选待存盘的临时出库记录→批量选择→存盘→调用U8 API生成产成品出库单。

库提入库:自动获取拆件后剩余信息→生成新合格证码→入库重量=原入库重-拆出重量→生成临时入库单→打印新合格证。

库提入库存盘:筛选待存盘→批量存盘→调用U8 API生成产成品入库单。

十四、模块C:订单管理完善

视图关键字段/指标来源
入库明细合格证码、品名/规格/钢号、入库重量(t)、支数、状态(未出库/已出库/已拆件)dzwl_inbound_body
发货进度汇总订单总量、已入库数量、已发货数量、未发货数量SUM聚合计算
出库记录登记单号、U8发货单号、客户、出库日期、重量、状态dzwl_outbound_header

十五、模块D:出库工作量统计

15.1 数据来源

基于新表 dzwl_outbound_scan_record。称皮重和确认出库的操作人仍在表头,单独查询。

15.2 统计维度

视图说明
人员日明细某人员某天扫了哪些合格证、各多少吨/支
人员日汇总某人员某天总计装车吨数、支数、件数
人员月汇总按月汇总,用于工资核算
登记单维度每个登记单由哪些人协作完成

15.4 工作量统计接口

接口说明
GET /warehouse/workload/scan-list扫码工作量明细(基于 scan_record)
GET /warehouse/workload/scan-summary按人员+日期汇总吨/支/件
GET /warehouse/workload/tare-summary称皮重工作量(从 header 查询)
GET /warehouse/workload/confirm-summary确认出库工作量(从 header 查询)

十六、模块E:库位管理

dzwl_inbound_body 新增 warehouse_code VARCHAR(20)。入库时由成品库人员在下拉列表中选择,仓库编码与引导牌编号一致(A、B、C、D)。

编码含义关联引导牌
A冷拔无缝管仓库成品库A
B热轧无缝管仓库成品库B
C毛管仓库成品库C
D其他产品仓库成品库D

十七、数据模型设计

17.1 表结构总览

需修改的现有表dzwl_inbound_body(新增5字段)、dzwl_tep_inbound_body(新增2字段)
需重新设计的现有表dzwl_outbound_headerdzwl_outbound_body
需新增的表dzwl_tep_outbound_body(库提临时出库表)、dzwl_outbound_scan_record(扫码记录表,逐件计工核心)

17.2 dzwl_inbound_body(修改:新增字段)

字段名类型说明默认值
is_deliveredTINYINT(1)是否已出库0
delivery_outbound_idBIGINT关联出库登记单表体IDNULL
delivery_timeDATETIME出库时间NULL
is_splitTINYINT(1)是否已被拆件0
warehouse_codeVARCHAR(20)库位编码(A/B/C/D)NULL

17.3 dzwl_outbound_header(登记单表头,终版)

字段名类型说明
idBIGINT PK主键,自增
outbound_noVARCHAR(50)登记单号(yyyyMMdd-6位随机码)
U8_delivery_order_noVARCHAR(50)U8发货单号
U8_dlidBIGINTU8发货单主键(dlid)
U8_cdlcodeVARCHAR(50)U8发货单编号(cDLcode)
U8_ccuscodeVARCHAR(50)U8客户编码
U8_cdepcodeVARCHAR(50)U8部门编码
U8_cbustypeVARCHAR(50)U8业务类型
customer_nameVARCHAR(100)客户名称
plate_numberVARCHAR(20)车牌号
tare_weightDECIMAL(10,3)皮重(吨)
gross_weightDECIMAL(10,3)毛重(吨)
net_weightDECIMAL(10,3)净重(吨)
weight_diffDECIMAL(10,3)重量差值(吨)
statusVARCHAR(30)DRAFT / PENDING_TARE / TARE_DONE / PENDING_REVIEW / COMPLETED / CANCELLED
tare_operator_idBIGINT称皮重操作人ID
tare_operator_nameVARCHAR(50)称皮重操作人姓名
confirm_operator_idBIGINT确认出库操作人ID
confirm_operator_nameVARCHAR(50)确认出库操作人姓名
review_byVARCHAR(50)审核人
U8_saleout_idVARCHAR(50)U8销售出库单ID
remarkVARCHAR(500)备注

17.5 dzwl_outbound_scan_record(扫码记录表,新增—逐件计工核心)

字段名类型说明
idBIGINT PK主键,自增
header_idBIGINT关联登记单表头ID
body_idBIGINT关联登记单表体ID
inbound_body_idBIGINT关联入库表体ID
track_numberVARCHAR(100)合格证码
operator_idBIGINT扫合格证操作人ID
operator_nameVARCHAR(50)扫合格证操作人姓名
scan_timeDATETIME扫码时间
inbound_weightDECIMAL(10,3)该件入库重量(吨)
inbound_piecesINT该件支数
warehouse_codeVARCHAR(20)库位编码(冗余,方便统计)
索引建议idx_header_id(按登记单查询)、idx_operator_timeoperator_id, scan_time)— 工作量统计核心索引

十八、API接口设计

18.1 PC端接口

接口方法路径说明
查询登记单列表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原二维码失效,生成新二维码

18.2 小程序端接口

接口方法路径说明
扫码获取登记单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

18.3 扫码绑定合格证接口(核心)

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接口集成方案

19.1 两条通信渠道

渠道用途调用方式地址来源
U8数据API数据CRUDcallU8Api 方法u8_integration.api + u8_integration.auth
U8审核API单据审核POST 直接调用http://www.kingpipe.com:9004

19.2 创建登记单时「选U8发货单」

接口方法用途
/api/Consignment/GetPagePOST分页查询发货单列表
/api/Consignment/GetDetailPOST查询发货单详情(含明细行)

19.3 确认出库时「回写U8发货单」

调用 /api/Consignment/save,传入已有 dlid 即为更新。回写内容:实际称重重量 → iquantity

19.4 审核登记单时「生成U8销售出库单」

第一步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

19.6 U8接口快速参考

接口路径方法用途调用方式
/api/Consignment/GetPagePOST查询发货单列表callU8Api
/api/Consignment/GetDetailPOST查询发货单详情callU8Api
/api/Consignment/savePOST保存/更新发货单callU8Api
/api/SaleOut/savePOST保存销售出库单callU8Api
/api/saleout/VerifyPOST审核销售出库单9004直接调用
/api/ProductIn/VerifyPOST审核产成品入库单9004直接调用

二十、与现有系统的衔接

20.1 与入库系统的关联

关联点设计
合格证码dzwl_inbound_body.TrackNumber — 出库扫码校验
is_delivered = 1防重复出库
is_split = 1防重复拆件
warehouse_code支撑装车路线规划

20.3 前端页面调整

开发范围:仅新版小程序 wxma-v3。旧版 jbc-wxma 不动。
outbound/index.vue废弃,新建「出库操作」替代
pickup/index.vue重构为库提出库(成品库人员操作)

二十一、远期规划与扩展点

扩展点预留方式
无人地磅值守扫码认领制已是基础:纸质单二维码即通行证
车牌识别自动写入plate_number 支持设备写入
自助终端RESTful API,终端HTTP调用
道闸联动确认出库后 WebHook
语音/LED引导状态变更消息通道
退货功能dzwl_outbound_header 增加退货类型字段
报表生成工作量统计数据为基础构建综合报表

二十二、专业建议与风险提示

22.1 并发扫码

同一登记单二维码被两人同时扫:先扫者进入操作(Redis锁30s过期),后扫者提示「该登记单正在被 XXX 操作中」。

22.4 U8依赖

U8不可用时 MES 本地不中断。待 U8 恢复后通过补同步机制将本地数据推送到 U8。

22.5 审核接口方案(已确认)

单据类型审核接口
产成品入库单/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}

22.6 幂等性控制

审核登记单的接口应加 @Idempotent 注解,防止重复生成U8出库单。

二十三、附录

A. 术语对照

术语说明
登记单MES出库操作单据,号段 yyyyMMdd-6位随机码
发货单(Consignment)U8预发货单据,含客户、车牌号、计划发货产品
销售出库单(SaleOut)U8正式出库单据,涉及库存扣减和财务核算
合格证(TrackNumber)产品入库标签,出库扫码依据
扫码认领制谁扫纸质登记单二维码谁操作,系统自动记录
一票到底同一张纸质登记单贯穿全流程
逐件计工每扫一个合格证独立记录操作人

C. 接口文档清单

文档说明
U8销售发货单接口.openapi.jsonU8发货单查询/Save接口
U8销售出库单接口.openapi.jsonU8销售出库单Save/查询接口
U8单据审核.openapi.json6种单据审核接口

D. 后续待开发

一、项目背景与目标 二、系统定位与设计原则 三、角色与权限模型 四、核心设计理念 五、核心业务流程 六、厂区引导方案 七、纸质登记单设计 八、装车路线规划 九、状态机设计 十、异常处理机制 十一、功能模块清单 十二、模块A:销售出库主流程 十三、模块B:库提拆件子系统 十四、模块C:订单管理完善 十五、模块D:出库工作量统计 十六、模块E:库位管理 十七、数据模型设计 十八、API接口设计 十九、U8接口集成方案 二十、与现有系统的衔接 二十一、远期规划与扩展点 二十二、专业建议与风险提示 二十三、附录