合同 / 运输计划 · 多合同 · 同品同包装多单价 · 拆行 Demo

按已确认方案:合同允许同产品同包装多行(不同单价);段次可多选合同;选品先选产品/包装,多命中则弹拆分量; 装/送独立维护,提供「一键从装货同步到送货」;归档按行录实际量(安排阶段已拆好,不做事后划分)。

特殊① 同品同包装多单价行 特殊② 段次多合同 特殊③ 选品命中多明细 → 拆行 特殊④ 装/送独立 + 一键同步 特殊⑤ 归档各行各自实际量 方案 1 · contract_product_id 绑定

合同管理 · 产品明细

特殊情况:同一合同内,同一产品 + 同一包装规格可以有多行,单价不同(如批次/议价差异)。

对比现状:现网前后端会拦截「同一产品的包装规格不能重复」。本 Demo 展示放开后的效果。
特殊①
合同 HT-A:烧碱 32% / 25kg袋,两行,单价 2100 与 2350。
特殊①(另一合同)
合同 HT-B:同品同包装再有一行,单价 2200(供多合同段次演示)。
计量键
后续安排/归档按 合同明细行 id(cp-xxx)记账,不再按「产品+包装」糊成一池。

合同 HT-A · 安徽某某贸易(示意)

明细行 id 产品 包装规格 合同数量 单价 已安排 剩余 说明

合同 HT-B · 合肥某某化工(示意)

明细行 id 产品 包装规格 合同数量 单价 已安排 剩余 说明
同品同包装 · 多单价行 另一合同同品同包装

运输计划 · 段次多合同 + 选品拆行

特殊②③④:段次可选多份合同;先选产品/包装,命中多条明细则弹拆分量;装/送独立,可一键同步。

选多份合同→ 选产品 / 包装→ 命中 ≥2 条明细→ 拆分量弹窗→ 生成多行(绑 contract_product_id)
装货段 非内置客户 · 须选合同
特殊②:本段已选 2 份合同(现状上限为 1)。
绑定明细 合同 产品 / 包装 单价 计划量

尚未添加产品。点「添加产品」演示:选「烧碱 32% / 25kg袋」将命中 3 条明细。

送货段 独立选品 · 不强制对齐装货
特殊④:默认不同步;可用下方按钮从装货覆盖同步。
绑定明细 合同 产品 / 包装 单价 计划量

送货可另选合同明细;本 Demo 默认可与装货选同一批合同。

运输计划归档 · 按行录实际量

特殊⑤:不做「事后按比例划分」。安排阶段已拆成多行,归档时每行各自填写实际量;合同已归档量按 contract_product_id 累加。

与需求 3 的对应:多合同同品同包装、或同合同多单价行 —— 在计划层已是多行;归档只录本行实际量,即完成「划分」。

装货段 · 入库实际量

绑定明细 合同 产品 / 包装 单价 计划量 实际入库量

送货段 · 出库实际量

绑定明细 合同 产品 / 包装 单价 计划量 实际出库量

特殊情况对照表

把客户三点需求与 Demo 操作、数据键对齐,便于评审。

特殊情况 客户诉求 Demo 怎么体现 实现要点(方案 1)
① 合同同品同包装多行 同产品同包装可多条,因单价可能不同 步骤 1:HT-A 两行烧碱/25kg,单价 2100 / 2350 去掉包装唯一校验;行主键即计量键
② 段次多合同 一次运输可送两个合同的同品同包装货 步骤 2:装货 chips 显示 HT-A + HT-B 取消 assert_at_most_one_contract
③ 选品拆行 安排阶段拆好,归档不再事后划分 步骤 2:选烧碱/25kg → 弹窗对 3 条明细填计划量 → 生成 3 行 段产品行绑定 contract_product_id
④ 装/送独立 送货不强制与装货一一对应 步骤 2:送货可单独加品;「从装货同步」覆盖 取消默认自动同步;保留手动按钮
⑤ 归档按行实际量 多合同 / 同合同多单价行的已执行按实际划分 步骤 3:每行各自填入库/出库实际量;确认后回写各 cp 行 聚合键改为 contract_product_id;无事后分摊算法

选择产品 / 包装

交互 B:仍按产品选。本 Demo 只有一个演示品,点击后若命中多条合同明细则进入拆分量。

将在当前段已选合同中匹配「产品+包装 ∈ 明细」的所有行(含同合同多单价 + 跨合同)。

拆分量 · 烧碱 32% / 25kg袋

特殊③命中:当前段所选合同中,同产品同包装共 3 条明细(同合同多单价 + 跨合同)。请为需要安排的行填写计划量;填 0 或不填则不生成该行。
烧碱 32%
25kg袋
明细行 合同 单价 剩余可安排 本次计划量
合计计划量:0