通用下料场景开发使用文档

📦 通用下料模型场景开发使用文档

一、功能概述

在润信制造执行过程中,叫料业务需要 ERP、WCS、WMS、RCS 等多个系统协同完成。之前的开发方式中,各系统需重复开发需求推送、任务搬运、搬运反馈等功能,造成效率低下、逻辑重复。

为此,设计本“通用下料模型”,用于抽象各类叫料场景(如领料、退料等),统一托盘搬运与回调流程,实现业务与搬运任务解耦,提升开发效率与系统可维护性。


二、使用场景流程(以“领料”为例)

  1. 创建下料需求

    • 建立下料清单 WMS_Allocation_Model​。

    • 明细分配方式:

      • 退料:用户手动选择;
      • 领料:通过调用 WMS 接口自动返回。
  2. 发起叫料任务

    • 通过调用统一方法 StockOrderOut()​ 发起搬运任务。
  3. 搬运到位处理

    • 搬运任务到达目标库位后:

      • IsAutoOut = true​,系统自动完成出库;
      • 否则,库存停留在终点,等待手动处理。
  4. 是否拆托

    • 可由系统判定或用户输入;

详细业务流程如下图:

通用下料 V1.0

三、业务开发指引(仅需实现 3 步)

  1. 创建下料需求

    • 可多次追加明细;
    • 总数量不超过申请数量。
  2. 调用叫料搬运任务

    • 自动完成库存下料搬运到目的地。
  3. 实现特殊出库逻辑

    • 非领料单出库的完善对应出库单逻辑。

如下图:开发仅需完善如下即可。

image


四、数据字段说明:

下料需求-数据结构

📄 t_WMS_Allocation_hd​ — 下料主表模型(Header)

字段名 类型 必填 说明
Id long 主键 ID(任务唯一标识)
TaskNo string 任务编号(自动生成或业务指定)
TaskType string 任务类型(如:"IN"=入库,"OUT"=出库)
BillNo string 业务单据编号(领料单/退料单)
BillItemId int 业务单据明细 ID
Subcompanyid string 所属事业处编码:03
CompanyId string 公司编码:DG3
businesstype string 业务类型(AppOut:领料出仓
ScrapOut:报废出仓
PurReturn:采购退货
DeliveOut:送货出库
Transfer:转仓出库
WFOut:综合加工出库)=》 关联到自动出库所走策略
TargetLocation string 搬运终点位置(如:产线位置)
MachineNo string 机器编号/产线编号
ItemNo string 物料编码
MaterialType string 物料类型(如:Material 原料、WIP 半成品、Product 成品)
AppQty decimal 申请/需求数量
IsAutoOut bool 是否自动出库(搬运到位后是否自动出库)
SourceType string 任务来源(ERP/VMES)
status string 任务状态 -1 取消
0 待分配
1 搬运中
4 部分完成
5 搬运完成
CreatedBy string 创建用户
CreatedTime DateTime? 创建时间
CompletedTime DateTime? 任务完成时间
Remark string 备注信息

📄 t_WMS_Allocation_dl​ — 下料明细表(Detail)

字段名 类型 必填 说明
Id long 主键 ID(雪花 ID) 不需要传
zbid long 主表 ID(关联 t_WMS_Allocation_hd.Id​) 不需要传
keyno int 序号(明细项顺序)
BillNo string 业务单号
BillID int 业务明细行号
ContainerCode string 托盘号
ItemNo string 料号(物料编码)
Qty decimal 实际托盘数量
AppQty decimal 需求数量
Lotno string 批次号
Unit string 单位(PCS、KG 等)
ProductNo string 工程单号(如适用)
SeqNo int 作号(工单子任务编号)
Currlocation string 当前托盘所在库位
TargetLocation string 目标下料位置
SourceLocation string 来源库位
status string 状态标识:
0=等待搬运
1=搬运中
2=待拆托
3=待出库
4=已完成
-1=已取消
MaterialType string 物料类型(与主表一致)
SplitFlag bool 是否需要拆托处理
SourceLocType string 起始仓库类型(L=立库,P=平库)
MachineNo string 目标设备编号(产线、工站等)
laneno string 巷道号(立库使用)=》如果是从立库下料则必填
buildno string 栋号(立库使用)=》如果是从立库下料则必填
floorno string 楼层号(立库使用)=》如果是从立库下料则必填
Remark string 备注信息

五、接口说明与调用样例

1、出库需求单相关接口

✅ 1. 新增下料需求

using VoionERP.Modules.IMS.WIP.Services.Service; var newRequestList = new List<WMS_Allocation_Model> { new WMS_Allocation_Model { BillNo = "BO20250401", BillItemId = 1, CompanyId = "C001", TaskType = "IN", TargetLocation = "A1-01", MachineNo = "M123", ItemNo = "ITM456", AppQty = 10, Details = new List<t_WMS_Allocation_dl> { new t_WMS_Allocation_dl { ContainerCode= "", ItemNo ="", Lotno="", Currlocation = "", TargetLocation = "", SourceLocation = "", SplitFlag = false, SourceLocType = "L", AppQty = 4 } } } }; var result = EngineContext.Current.Resolve<IWCSService>() .AddStockOrder(tran, newRequestList);

✏️ 2. 修改下料需求

同上接口 AddStockOrder​,重新传入结构即可。


❌ 3. 按单据取消需求

using VoionERP.Modules.IMS.WIP.Services.Service; // 取消整单 var result = EngineContext.Current.Resolve<IWCSService>() .CancelStockOrder(tran, "业务单号", "公司ID", 0); // 取消某一条明细 var result = EngineContext.Current.Resolve<IWCSService>() .CancelStockOrder(tran, "业务单号", "公司ID", 1);

❌ 4. 按托盘取消叫料

using VoionERP.Modules.IMS.WIP.Services.Service; var result = EngineContext.Current.Resolve<IWCSService>() .CancelStockOrderByPackId(tran, "业务单号", "公司ID", "托盘号");

➕ 5. 多次新增托盘明细

using VoionERP.Modules.IMS.WIP.Services.Service; var packList = new List<t_WMS_Allocation_dl> { new t_WMS_Allocation_dl { ContainerCode= "", ItemNo ="", Lotno="", Currlocation = "", TargetLocation = "", SourceLocation = "", SplitFlag = false, SourceLocType = "P", AppQty = 6, status = "0" } }; var result = EngineContext.Current.Resolve<IWCSService>() .AddStockPackOrder(tran, "业务单号", "公司ID", 1, packList);

🔄 6. 托盘状态更新

using VoionERP.Modules.IMS.WIP.Services.Service; // 状态码 "4" = 已完成 var result = EngineContext.Current.Resolve<IWCSService>() .UpdateStockOrderStatus(tran, "业务单号", "公司ID", "托盘号", "4", "当前位置");

🔢 7. 拆托回报更新数量

暂未完成



2、下料搬运相关接口

🚚 1. 发起下料搬运任务

using VoionERP.Modules.IMS.WIP.Services.Service; var result = EngineContext.Current.Resolve<IWCSService>() .StockOrderOut(tran, "业务单号", "公司ID");

3、最终出库接口实现

出库默认实现了领料单出库的方法,如果有其他特殊场景出库还需要实现,具体实现图下图,继承 IstockOrderOut 实现即可

通用下料-出库接口

如果是非领料单出库,实现了对应的出库之后,完善下述代码即可:

namespace VoionERP.Modules.IMS.Repository { public static class StockRepository { public static ServiceResponseResult CreateStockOrderOut(ServiceToken token, WMS_Allocation_Model stockOrder, t_WMS_Allocation_dl detail,string startCode,string endCode, ref string BillNo, ITransactionManager tran = null) { ServiceResponseResult result = new ServiceResponseResult(); switch (stockOrder.businesstype) { case "": case "partout": case "ProApp": return new StockOrderOutContext(new StockOrderOut_AppOut()).CreateStockOrderOut(token, stockOrder, detail, startCode, BillNo, ref BillNo, tran); } result.Success = false; result.ErrorMsg = "未知业务类型"; return result; } } }
  • 项目
    24 引用 • 159 回帖 • 2 关注
1 操作
lsjice 在 2025-05-06 11:27:12 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...