# 运输计划管理模块 — 需求说明文档 > **版本**:v1.1 > **日期**:2026-06-10 > **状态**:✅ 需求确认完成 --- ## 修订记录 | 版本 | 日期 | 变更说明 | |------|------|----------| | v1.0 | 2026-06-10 | 初始版本,整合原始需求文档、需求分析文档和40个澄清问题确认结果 | | v1.1 | 2026-06-10 | 补充运输计划子模块需求确认(Q10-Q15),明确合同来源、审批流程等细节 | --- ## 一、文档目的 本文档为运输计划管理模块的需求说明文档,整合了以下输入材料: - 原始需求文档(`计划需求.md`) - 需求分析文档(`山峡化工一体化门户-需求分析文档.md`) - 澄清问题清单(40个问题全部确认) --- ## 二、业务背景 ### 2.1 项目背景 安庆山峡化工有限公司已建设 CRM 系统(线索/客户/商机/报价单/合同/产品管理)和地磅系统。现需建设**统一的计划管理系统**,将 CRM 合同与后续的运输、地磅、库存等环节串联,形成完整的业务闭环。 ### 2.2 系统目标 1. 建设统一系统,涵盖计划管理、运输公司管理、库存管理、运输管理等子模块 2. 系统基于 shanxia2.0 既有基础设施(账号密码、菜单权限、数据权限、工作流、基础数据等模块已具备) 3. 计划表名以 `pl_` 为前缀 --- ## 三、名词与定义 | 名词 | 含义 | |------|------| | 计划 | 从 CRM 合同发起的运输/出入库执行单据 | | 计划订单编号 | 格式 `SXDDH` + `YYYYMMDD` + 6位序号 | | 运输编号 | 格式 `SXYS` + 6位序号 | | 购买证/运输证 | 易制毒/易制爆产品的法定凭证 | | 地磅单 | 待入库/待出库单据自动生成的过磅记录 | | 运输结算单 | 多选运输单合并生成的费用结算单据 | | 框架合同 | CRM 系统中的合同类型,价格可通过调价函调整 | | 直销单 | 不经过仓库的直发单据 | | 入库单 | 货物进入仓库的单据 | | 出库单 | 货物从仓库发出的单据 | | 安庆山峡 | 安庆市山峡化工有限公司 | | 安徽云栋 | 安徽云栋化工有限公司 | --- ## 四、单据分类 ### 4.1 分类维度 计划单据的类别由以下两个维度确定: | 维度 | 值 | 说明 | |------|-----|------| | **归属公司** | 安庆山峡 / 安徽云栋 | 签署订单的公司主体 | | **单据类型** | 直销单 / 入库单 / 出库单 | 决定后续的流程分支 | ### 4.2 单据类型定义 | 单据类型 | 含义 | 判断规则 | |----------|------|----------| | 直销单 | 不经过仓库的直发 | 供应商 ≠ 安庆山峡/安徽云栋 **且** 目的地 ≠ 安庆山峡/安徽云栋 | | 入库单 | 货物需进入仓库 | 目的地 = 安庆山峡 **或** 安徽云栋 | | 出库单 | 货物从仓库发出 | 供应商 = 安庆山峡 **或** 安徽云栋 | --- ## 五、基础配置 ### 5.1 编号规则 | 项目 | 规则 | 说明 | |------|------|------| | 计划订单编号 | `SXDDH` + `YYYYMMDD` + `######` | 每日独立重置,从 000001 开始 | | 运输编号 | `SXYS` + `######` | 每月重置,全局连续 | ### 5.2 枚举值 | 枚举类型 | 值 | |----------|-----| | 送货方式 | 山峡自提、一票制、客户自提 | | 运费计算方式 | 按重量(默认)/ 按趟次(由用户选择) | ### 5.3 状态定义 #### 5.3.1 跟进状态 | 序号 | 状态值 | 适用单据类型 | 说明 | |------|--------|-------------|------| | 1 | 等客户确认 | 直销单、出库单 | 等待客户确认要货 | | 2 | 待采购 | 直销单、入库单 | 等待采购完成 | | 3 | 待发货 | 直销单、入库单 | 等待发货 | | 4 | 待收货 | 直销单、出库单 | 等待收货确认 | | 5 | 已收货 | 出库单 | 收货完成 | | 6 | 待入库 | 入库单 | 等待入库 | | 7 | 已入库 | 入库单 | 入库完成 | | 8 | 待出库 | 出库单 | 等待出库 | | 9 | 已出库 | 出库单 | 出库完成 | | 10 | 待归档 | 所有类型 | 归档前置状态 | | 11 | 归档完成 | 所有类型 | 终态 | | 12 | 计划取消 | 所有类型 | 终态(可从任意状态进入) | #### 5.3.2 运输安排状态 | 状态值 | 说明 | |--------|------| | 待安排 | 运输尚未安排 | | 已安排 | 已完成运输安排(选定车辆、填写运输信息) | #### 5.3.3 归档状态 | 状态值 | 说明 | |--------|------| | 未归档 | 初始值 | | 已归档 | 归档操作完成后 | #### 5.3.4 完成状态 | 状态值 | 说明 | |--------|------| | 是 | 归档后自动变为"是" | | 否 | 初始值 | --- ## 六、业务流程 ### 6.1 主流程(7步) ``` ┌────────────────────────────────────────────────────────────────────┐ │ 第1步:从 CRM 合同发起计划 │ │ - 选择归属公司(安庆山峡 / 安徽云栋) │ │ - 选择单据类型(直销单 / 入库单 / 出库单) │ │ - 选择合同、产品,填写基本信息 │ │ - 系统生成计划订单编号 │ │ - 入库/出库数量按产品级别填写 │ │ - 入库价默认为合同价格,可修改 │ │ - 入库金额 = 入库数 × 入库价 │ │ - 出库金额 = 出库数 × 出库价 │ └───────────────────────────────┬────────────────────────────────────┘ │ ▼ ┌────────────────────────────────────────────────────────────────────┐ │ 第2步:判断产品属性 │ │ - 产品属性为易制毒/易制爆? │ │ → 是:必须上传购买证 + 运输证(固定两种) │ │ → 否:直接进入下一步 │ │ - 检查时机:点击「安排运输」时统一检查 │ │ - 购买证/运输证不需要过期时间检查 │ └───────────────────────────────┬────────────────────────────────────┘ │ ▼ ┌────────────────────────────────────────────────────────────────────┐ │ 第3步:安排运输 │ │ - 选择车辆类型(自有 或 承运商) │ │ → 选择承运商后,只显示该承运商名下的车辆 │ │ - 选择车辆后,自动带出该车辆的默认司机 │ │ - 同一辆车只能属于一种类型(自有 或 承运商) │ │ - 填写运输信息 │ │ - 运输安排状态:待安排 → 已安排 │ │ - 生成二维码 │ │ → 有效期:默认不设期限,用户可手动填写 │ │ → 分发方式:点击按钮生成二维码图片 → 专员截图 → 发送 │ └───────────────────────────────┬────────────────────────────────────┘ │ ▼ ┌────────────────────────────────────────────────────────────────────┐ │ 第4步:跟进状态流转 │ │ 【直销单】等客户确认→待采购→待发货→待收货→待归档→归档完成 │ │ 【入库单】待采购→待发货→待入库→已入库→待归档→归档完成 │ │ 【出库单】等客户确认→待出库→已出库→待收货→已收货→待归档→归档完成 │ │ │ │ 其中: │ │ - 入库单/出库单涉及地磅: │ │ → 待入库/待出库的单据自动生成地磅单 │ │ → 单据同步给现场工作人员(系统消息 + 复制文本微信发送) │ │ → 现场工作人员确认后提交地磅单和出入库附件 │ │ → 地磅数据由现场人员手动填写(不对接硬件) │ │ - 司机通过扫描二维码回传运输单据、运输数量等信息 │ │ - 通知信息按模板生成,不可编辑 │ └───────────────────────────────┬────────────────────────────────────┘ │ ▼ ┌────────────────────────────────────────────────────────────────────┐ │ 第5步:核对 │ │ - 计划专员B 核对整个订单 │ │ - 判断是否有运输费用 │ └───────────────────────────────┬────────────────────────────────────┘ │ ▼ ┌────────────────────────────────────────────────────────────────────┐ │ 第6步:运费结算(仅运费需要结算,运输本身不产生结算) │ │ - 有运费:进入运费结算流程 │ │ - 无运费:直接归档 │ │ │ │ 运费结算流程(不走工作流): │ │ 待提交 → 已提交 → 审核通过 → 已确认 │ │ │ │ 运费计算方式: │ │ - 按重量:运输数量 × 运输单价(计算结果可调整) │ │ - 按趟次:手动填写 │ │ │ │ 发票信息:需记录发票号、开票日期、发票金额 │ │ 汇款凭证:需精确对应到结算单 │ └───────────────────────────────┬────────────────────────────────────┘ │ ▼ ┌────────────────────────────────────────────────────────────────────┐ │ 第7步:归档 │ │ - 归档状态:未归档 → 已归档 │ │ - 完成状态:否 → 是 │ └────────────────────────────────────────────────────────────────────┘ ``` ### 6.2 通知信息模板 通知信息按以下模板生成,系统中不可编辑: ``` 计划号:SXDDH20260102000002 企业名称:安徽英毅热电有限公司 提货单位:安庆市山峡化工有限公司 到货时间:2026-01-02 药品名称:31% 工业盐酸 到货吨位:【4.7吨】 备注: ``` --- ## 七、计划单据 ### 7.1 计划主表字段 | 字段名 | 说明 | 规则/备注 | |--------|------|-----------| | 计划日期 | 发起计划的日期 | — | | 计划订单编号 | `SXDDHYYYYMMDD######` | 系统自动生成,每日重置 | | 归属公司 | 安庆山峡 / 安徽云栋 | 新增维度 | | 单据类型 | 直销单 / 入库单 / 出库单 | 决定流程分支 | | 跟进状态 | 见跟进状态枚举 | 按单据类型流转 | | 运输安排状态 | 待安排 / 已安排 | — | | 归档状态 | 未归档 / 已归档 | 归档后自动变更 | | 完成状态 | 是 / 否 | 归档后自动变更 | | 供应商名称 | 供应商公司名称 | 下拉选择,来自客户表 | | 目的地 | 目的公司名称 | 下拉选择,来自客户表 | | 送货方式 | 山峡自提 / 一票制 / 客户自提 | 枚举值 | | 是否有运输费用 | 布尔值 | 创建计划时勾选 | | 运输编号 | `SXYS######` | 关联运输信息 | | 车牌号 | — | 关联车辆信息 | | 运输公司 | — | 关联运输公司信息 | | 运输费用 | 单次运输费用 | — | | 运费合计 | — | — | | 单据附件 | 上传的各类单据文件 | — | | 销售合同 | 关联的 CRM 合同 | — | | 跟进人 | 当前跟进的计划专员 | — | | 备注 | — | — | | 通知信息 | 标准模板内容 | 按模板生成,不可编辑 | | 创建人 | — | 系统自动 | | 创建时间 | — | 系统自动 | | 修改人 | — | 系统自动 | | 修改时间 | — | 系统自动 | ### 7.2 计划产品明细表字段 | 字段名 | 说明 | 规则/备注 | |--------|------|-----------| | 计划ID | 关联计划主表 | 外键 | | 物料编号 | — | 关联产品主数据 | | 物料名称 | — | 冗余自产品主数据 | | 产品规格 | — | 冗余自产品主数据 | | 包装规格 | — | 冗余自产品主数据 | | 单位 | 吨/个/箱等 | — | | 入库预估数 | — | 安排时预估 | | 入库数 | 实际入库数量 | 地磅确认后填入 | | 入库价 | 默认合同价格,可修改 | — | | 入库金额 | 入库数 × 入库价 | 自动计算 | | 出库预估数 | — | — | | 出库数 | 实际出库数量 | — | | 出库单价 | — | — | | 出库金额 | 出库数 × 出库价 | 自动计算 | | 是否易制毒 | — | 冗余自产品主数据 | | 是否易制爆 | — | 冗余自产品主数据 | --- ## 八、运输管理 ### 8.1 运输信息表字段 | 字段名 | 说明 | 规则/备注 | |--------|------|-----------| | 运输编号 | `SXYS` + 6位序号 | 每月重置,全局连续 | | 车牌号 | — | 关联车辆信息 | | 运输公司 | — | 关联运输公司信息 | | 所属公司 | 运输公司所属的人或公司名称 | — | | 运输介质 | — | — | | 运输起点 | — | — | | 运输终点 | — | — | | 运输公里数 | — | — | | 单位 | 吨/趟 | — | | 运输费用 | — | — | | 是否开票 | 布尔值 | — | | 备注 | — | — | | 创建人 | — | 系统自动 | | 创建时间 | — | 系统自动 | ### 8.2 运输与计划的关系 - 计划与运输为 **N:N 关系** - 三种场景均存在: - 1:1 一个计划一趟运输 - 1:N 一个计划多趟运输(分车装运) - N:1 多个计划一趟运输(拼车) ### 8.3 二维码 | 项目 | 说明 | |------|------| | 生成时机 | 安排运输时 | | 有效期 | 默认不设期限,用户可手动填写 | | 分发方式 | 点击按钮生成图片 / 复制链接 → 专员发送给司机/现场人员 | | 司机扫码 | 无需登录,回传运输单据、运输数量等信息 | | 现场人员链接 | 免登录 token 链接(`/#/public/db/inventory/{token}`),可上传附件与备注;已完成单只读 | --- ## 九、车辆与司机管理 ### 9.1 车辆归属 | 规则 | 说明 | |------|------| | 归属唯一性 | 同一辆车只能属于一种类型(自有 或 承运商) | | 承运商筛选 | 选择承运商后,只显示该承运商名下的车辆 | | 司机自动带出 | 选择车辆后,自动带出该车辆的默认司机 | ### 9.2 司机档案 | 项目 | 说明 | |------|------| | 管理方式 | 系统单独维护司机档案 | | 基本信息 | 姓名、联系方式等 | | 证件 | 驾驶证、行驶证、危化品证 | | 过期提醒 | 证件过期前 **30 天** 提醒(驾驶证/行驶证/危化品证) | --- ## 十、运费结算 ### 10.1 结算流程 ``` 待提交 → 已提交 → 审核通过 → 已确认 ``` - **审核方式**:不走工作流,固定由计划专员C确认 - **运输本身不产生结算**:只有运费需要结算 ### 10.2 运费计算 | 方式 | 说明 | |------|------| | 按重量(默认) | 运输数量 × 运输单价,计算结果可调整 | | 按趟次 | 手动填写 | ### 10.3 发票信息 需要记录:发票号、开票日期、发票金额 ### 10.4 汇款凭证 - 需精确对应到某个结算单 - 上传功能不限制文件类型,支持多个文件 --- ## 十一、盘存统计 ### 11.1 统计口径 - 以**归档完成**的单据为准 - 直销单不纳入库存统计 ### 11.2 统计报表 | 报表名称 | 说明 | |----------|------| | 库存台账 | 按产品汇总当前库存量、库存金额 | | 出入库明细 | 按时间范围列出所有入库/出库记录 | | 出入库汇总 | 按月/周汇总各产品的入库量、出库量、净变化 | | 运输统计 | 按运输公司/车辆统计运输趟次、运费 | | 计划执行统计 | 按跟进状态统计各状态的计划数量 | > 报表导出功能后续按需补充 ### 11.3 库存预警 - 需要库存预警功能 - 按产品设置预警阈值 ### 11.4 库存金额 - 使用**入库时的实际价格**(每批单独计算) - 不使用加权平均 --- ## 十二、司机端功能 ### 12.1 扫码回传 - 司机扫描二维码回传: - 运输单据照片 - 运输数量 - 其他信息 ### 12.2 文件上传 - 不限制上传单据类型 - 支持上传多个文件 - 不需要电子签名 ### 12.3 消息通知 - 司机**不需要接收系统通知** --- ## 十三、计划变更与取消 ### 13.1 计划取消 - 任意跟进状态下均可取消 - 保留运输信息,标记为「已取消」 - 取消后不再流转 ### 13.2 变更记录 - 需要记录变更历史 - 包含:变更人、时间、内容 ### 13.3 计划复制 - 后续按需补充 --- ## 十四、系统约束 ### 14.1 数据隔离 - 数据暂不按归属公司隔离 ### 14.2 权限 - 暂不考虑角色权限细化 - 计划专员A/B/C为三个不同角色,通过统一角色权限体系控制 ### 14.3 地磅对接 - 地磅数据由现场人员手动填写 - 不对接硬件设备 ### 14.4 其他功能(暂不考虑) - 移动端离线支持 - 移动端扫码能力 - 数据导入 - 打印功能 - 操作日志 - 多语言 - 附件类型限制 --- ## 十五、业务规则汇总 | 编号 | 规则描述 | |------|----------| | BR-01 | 一个计划可包含多个产品 | | BR-02 | 框架合同商品价格可通过调价函调整,每次调整保留版本历史 | | BR-03 | 产品属性为易制毒或易制爆时,必须上传购买证和运输证后才能安排运输 | | BR-04 | 运输分两种方式:自有车辆、运输公司车辆 | | BR-05 | 运输信息生成二维码,由计划专员复制线下分发 | | BR-06 | 待入库/待出库的单子通过系统消息 + 复制文本微信发送同步 | | BR-07 | 入库单判断:目的地 = 安庆山峡 或 安徽云栋 | | BR-08 | 出库单判断:供应商 = 安庆山峡 或 安徽云栋 | | BR-09 | 直销单判断:供应商 ≠ 安庆山峡/安徽云栋 且 目的地 ≠ 安庆山峡/安徽云栋 | | BR-10 | 待入库/待出库的单据自动生成地磅单 | | BR-11 | 地磅单由现场工作人员确认后,提交单据和附件 | | BR-12 | 司机通过扫描二维码回传运输单据、运输数量等信息 | | BR-13 | 计划专员B核对整个订单 | | BR-14 | 是否有运输费用在创建计划时勾选确定 | | BR-15 | 运输费用由计划专员C确认后归档 | | BR-16 | 计划编号格式:`SXDDHYYYYMMDD######` | | BR-17 | 运输编号格式:`SXYS` + 6位序号 | | BR-18 | 入库价默认为合同价格,支持后续修改 | | BR-19 | 入库金额 = 入库数 × 入库价 | | BR-20 | 出库金额 = 出库数 × 出库价 | | BR-21 | 送货方式包括:山峡自提、一票制、客户自提 | | BR-22 | 通知信息按模板生成,系统中不可编辑 | | BR-23 | 产品主数据需增加"是否易制毒"、"是否易制爆"配置项 | | BR-24 | 运费计算方式一:运输数量 × 运输单价(计算结果可调整) | | BR-25 | 运费计算方式二:按趟次,手动填写 | | BR-26 | 运输结算流程:多选运输单 → 生成结算单 → 提交审核 → 审核成功 → 通知开票 → 票据上传 → 汇款 → 上传汇款单据 | | BR-27 | 运输结算的审核流程不走工作流,由计划专员C直接确认 | | BR-28 | 运费结算需要记录发票号、开票日期、发票金额 | | BR-29 | 运费结算需要精确对应汇款凭证到结算单 | | BR-30 | 计划与运输为 N:N 关系 | | BR-31 | 所有单据类型在任意跟进状态下均可取消 | | BR-32 | 归档操作完成后,归档状态自动变"已归档",完成状态自动变"是" | | BR-33 | 司机与现场人员均使用免登录 token 链接;管理端内操作仍走 JWT 登录 | | BR-34 | 购买证/运输证不需要过期时间检查 | | BR-35 | 司机/押运员证件(驾驶证、行驶证、危化品证)需要过期提醒(30天) | | BR-36 | 二维码有效期默认不设期限,用户可手动填写 | | BR-37 | 同一辆车只能属于一种类型(自有 或 承运商) | | BR-38 | 选择承运商后,只显示该承运商名下的车辆 | | BR-39 | 选择车辆后,自动带出该车辆的默认司机 | | BR-40 | 运费结算状态:待提交 → 已提交 → 审核通过 → 已确认 | | BR-41 | 不设磅差告警,也不记录磅差 | | BR-42 | 盘存统计以归档完成的单据为准 | | BR-43 | 库存预警按产品设置阈值 | | BR-44 | 库存金额使用入库时的实际价格(每批单独计算) | | BR-45 | 直销单不纳入库存统计 | | BR-46 | 司机不需要接收系统通知 | | BR-47 | 上传功能不限制单据类型,支持多个文件 | | BR-48 | 不需要电子签名 | | BR-49 | 计划取消后保留运输信息,标记为「已取消」 | | BR-50 | 需要记录变更历史(变更人、时间、内容) | | BR-51 | 数据暂不按归属公司隔离 | --- ## 附录 ### 附录A:单据类型判断规则 > 计划单据类型的自动判断逻辑 #### A.1 入库单 ``` 目的地 = 安庆山峡 OR 目的地 = 安徽云栋 ``` #### A.2 出库单 ``` 供应商 = 安庆山峡 OR 供应商 = 安徽云栋 ``` #### A.3 直销单 ``` 供应商 ≠ 安庆山峡 AND 供应商 ≠ 安徽云栋 AND 目的地 ≠ 安庆山峡 AND 目的地 ≠ 安徽云栋 ``` ### 附录B:计划跟进状态流转图 #### B.1 直销单 ``` 等客户确认 → 待采购 → 待发货 → 待收货 → 待归档 → 归档完成 ↓ 计划取消(任意状态可进入) ``` #### B.2 入库单 ``` 待采购 → 待发货 → 待入库 → 已入库 → 待归档 → 归档完成 ↓ 计划取消(任意状态可进入) ``` #### B.3 出库单 ``` 等客户确认 → 待出库 → 已出库 → 待收货 → 已收货 → 待归档 → 归档完成 ↓ 计划取消(任意状态可进入) ``` ### 附录C:运费结算状态流转 ``` 待提交 → 已提交 → 审核通过 → 已确认 ``` ### 附录D:运输计划审批状态流转 > 适用于新建/修改运输计划时的审批流程 ``` 草稿 → 待审批 → 审批中 → 待执行 → 执行中 → 已完成 ↓ 已取消(任意状态可进入) ``` **审批规则**: - 提交审批时,用户**选择审批人** - 选择几个就是几个人审批 - 按照**选择时的排序**依次审批 - 审批方式:**会签**(所有人审批通过才算通过) ### 附录E:运输计划子模块需求确认(Q10-Q15) > 以下为运输计划管理模块的需求澄清问答记录 #### E.1 合同关联(Q10-Q10.1) | 问题 | 答案 | |------|------| | Q10: 新建计划时,合同来源? | **A** - 关联现有合同(完整信息) | | Q10.1: 现有合同表信息? | 主表 `crm_contract`,产品明细表 `crm_contract_product` | **从合同带入运输计划的信息:** | 信息 | 来源表 | 字段 | |------|--------|------| | 客户信息 | `crm_contract` | `customer_id`, `customer_name` | | 联系人信息 | `crm_contract` | `contact_name`, `contact_mobile` | | 甲方/乙方信息 | `crm_contract` | `party_a*`, `party_b*` | | 合同有效期 | `crm_contract` | `start_date`, `end_date` | | 结算方式 | `crm_contract` | `settlement_method` | | 商品明细 | `crm_contract_product` | `product_id`, `product_name`, `model`, `unit`, `price` 等 | | 送货方式 | `crm_contract_product` | `delivery_method` | #### E.2 待入库/待出库数据来源(Q11) | 问题 | 答案 | |------|------| | Q11: 待入库/待出库数据来源? | 入库单/出库单:地磅单;直销单:人工录入 | #### E.3 运费计算方式(Q12) | 问题 | 答案 | |------|------| | Q12: 运费计算方式? | 按重量(默认)/ 按趟次(由用户选择) | #### E.4 运输计划审批流程(Q13-Q14) | 问题 | 答案 | |------|------| | Q13: 运输计划状态流转? | 草稿 → 待执行 → 执行中 → 已完成 → 已取消 | | Q13.1: 状态是否可以回退? | 不允许回退,状态只能向前推进 | | Q14: 是否需要审批流程? | **B** - 简单审批(会签) | #### E.5 其他功能(Q15) | 问题 | 答案 | |------|------| | Q15: 还需要哪些功能? | 暂不需要(计划变更/拆分/合并/导入/附件/打印均不需要) | --- **文档结束**