### 详细入库全流程解析 #### 单据创建阶段 (Creation) * 动作: 用户通过 add 接口新增,或 importData 导入 Excel。 * 数据变更: * 插入 TRkWareNotice,状态 ReceivingStatus = "0"。 * 插入 TRkWareNoticeTab,状态 ReceivingStatus = "0", InStatus = "0"。 #### 收货确认阶段 (Receiving / Task Generation) 此阶段是“实物清点与任务生成”,并非流程的终点。 * 接口: confirmNoticeTab * 业务逻辑: 1. 校验: 检查托盘状态、是否冻结(InStatus=="1")。 2. 更新收货量: 累加 RecNum (累计收货数量)。 3. 判定冻结: 如果 RecNum (累计收货) == ReceivingNum (应收总数),将明细 InStatus 更新为 "1"。这标志着该物料收货动作结束,不能再收了。 4. 生成任务: 创建 TOngoodsshelf (入库任务),状态 InStatus = "0"。 5. 发送通知: 生成 TCallNotice,通知下游(如AGV或搬运工)执行上架任务。 * 关键点: 此时单据状态 `ReceivingStatus` 依然是 `"0"`,库存表尚未增加库存。 #### 上架确认阶段 (Putaway / Completion) 此阶段是“任务执行与库存生成”,驱动状态流转。 * 接口: shelvesConfirm * 业务逻辑: 1. 校验: 检查库位 (LocationId) 有效性。 2. 更新上架量: 累加 AcceNum (累计上架数量)。 3. 更新明细状态: * 若 AcceNum < RecNum: 设置 ReceivingStatus = "1" (部分上架)。 * 若 AcceNum >= RecNum: 设置 ReceivingStatus = "2" (全部上架)。 4. 完成任务: 将 TOngoodsshelf 移入历史表 TOngoodsshelfBak,并从原表删除。 5. 生成库存: * 普通模式: 插入 TMiStock (真实库存)。 * 虚拟模式 (Fictitious="1"): 插入 TMiStockF (虚拟库存)。 6. 判断主单完结: * 遍历该单据下所有明细。 * 如果所有明细的状态都为 `"2"` (已上架),则触发归档流程。 #### 归档流程 (Archiving) 当上架确认检测到主单完结时自动触发。 * 更新主单: 将 TRkWareNotice 的 ReceivingStatus 设为 "2"。 * 同步收货表: 更新或插入 TRkReceivingGoods (收货记录表)。 * 历史迁移: * 将主单数据移入 TRkWareNoticeBak。 * 将明细数据移入 TRkWareNoticeTabBak。 * 数据清理: 物理删除 TRkWareNotice 和 TRkWareNoticeTab 中的原数据。 * 关闭通知: 关闭关联的 TCallNoticeOrder 任务。