我们会梳理 贵公司的运输模式 并告诉您 应当优先自动化什么
申请从哪里来、现在路线是怎么排的、谁在维护状态,以及贵公司的数据现在躺在哪些程序里。
运输量少的时候,这些事装在脑子里、表格里和聊天记录里。量一上来就不行了:货在哪儿只有司机知道,谁对谁承诺了什么只有接单的人知道。物流软件把这种工作方式去掉:申请、路线、货物和配送状态都成为同一套系统里的记录,调度员在一个屏幕上就能看到。以下讲解它是怎么运作的——从申请进来,到确认收货。
物流管理系统 — 一个用于运输核算的程序:接收申请、把申请编成路线、指派执行人、跟踪货物流转,并保存每一次配送发生过什么的历史。
一个例子就能看出区别。没有系统时,申请活在即时通讯里,路线在调度员桌上的一张纸上,货物状态在司机的脑子里。要回答客户「我的货在哪」,得给三个人打电话。谁也不知道明天装了多少车,因为这个数字从来没在任何地方算过。
在系统里,这一切都是记录。申请有编号、发货方、收货方、时限和当前状态。路线有站点清单、行车顺序和执行人。货物有状态,而状态的改变不是靠嘴说,而是靠程序里的一次动作。回答「货在哪」只要几秒钟,而且不取决于今天谁在班上。
举个例子。 客户周四提交了一份运输申请。业务员核对了地址和尺寸,把申请排进周五的路线,系统连同另外六个站点一起指派给了一名司机。早上司机打开任务清单,标记了取货,晚上标记了送达。与此同时客户那边的状态在不断更新,而到周五傍晚,公司手里已经有一份汇总:跑了多少站、多少按时完成、哪一单出了问题。
物流自动化 的起点,是当三个问题的答案再也装不进调度员的脑子时:现在手上有多少份申请、某一批货此刻在哪里,以及昨天为什么有两单配送拖到了第二天。
链路是双向的:任务从左往右走,执行人的标记和事件再回来。配送是否算完成,不看司机是不是离开了那个地址,而看收货是否得到确认。少了这一步,系统讲述的就是它相信的货物状态,而不是真实发生的事。

程序不开车,也不替代调度员。它去掉的是决策周围的手工活:把申请集中在一处、显示负荷情况、不让任何一个站点丢失、并记录每一次变更。急单给谁、要不要等迟到的客户,这些决定仍然由人来做——只是依据的是完整图景,而不是记忆。
同样,系统本身并不「知道」路况和天气:任何外部数据都要通过对接进来,其内容由项目确定。
最先搬进系统的是申请的记录,而不是路线,也不是地图。原因很简单:只要申请还活在聊天记录里,任何路线都是按不完整的清单排的,任何报表也都是按谁没忘记记下来的东西算的。
下面列的不是功能清单,而是让物流被自动化的六个问题。每一个的表述方式都一样:没有程序时会发生什么,有了程序又会怎样。
没有系统时,申请从即时通讯、邮件和电话三处进来,它的命运取决于有没有人把它记下来。在系统里,任何一份申请都是带编号、录入人和时限的记录:它要么在处理中,要么已关闭,没有第三种状态。丢掉的申请会立刻显形,而不是等客户打电话来。
调度员把明天所有站点列成一张清单:地址、时间窗、尺寸。站点被编成路线,路线有执行人和行车顺序。被遗忘的站点不会悄无声息地拖到第二天——它会保持未分配状态,并出现在一份单独的清单里。
一辆车已经排了多少站、按重量和体积还剩多少空间、哪几名司机再过一小时就下班。没有这些数字,负荷就只能靠目测分配,结果一辆车半空跑出去,另一辆到傍晚都跑不完。
配送状态由执行它的人在动作发生的那一刻改变。调度员、业务员和客户看的是同一条记录。「我的货在哪」不再是三个人的工作量。
谁收的货、什么时候收的、依据是什么,都是系统里的记录,而不是回忆。签名、照片或确认码都绑定到具体那一单配送。「送了没送」的争执,靠打开一张卡片就能解决,不用再去查。
延误、取消、退回和配送失败,都会成为带原因的独立事件。到月底看到的不是一句「难免的」,而是一份具体的清单:出了多少次问题、发生在哪些线路上、原因是什么。
系统由模块拼装而成。并不是每家公司都需要全部模块:市内配送公司不需要城际运次的核算,自有车队的生产企业也不需要订单交易平台。具体组合由需求决定,但模块之间是事先就能对接好的,而不是事后从旁边硬加。

系统的入口:一份运输申请,含发货方、收货方、货物内容、时限和条件。申请可以来自业务员、客户的个人中心,也可以通过 API 从外部系统进来——此后它们都按同一套规则运转。
把站点编成路线、行车顺序、指派车辆和执行人、当天调整路线。路线与申请一样是一个业务对象:它有日期、状态和变更历史。
具体运的是什么:件数、重量、体积、包装、特殊条件。货物与申请、路线、单据和当前状态相关联,因此从任何一侧都能还原出其余各侧。
车和人的台账:载重、车厢容积、车型、工作时段、服务片区。负荷就是从这里来的——今天这辆车还能再排几个站点。
员工的工作台:进行中的配送、路线、执行人、状态、延误和问题订单,都在一个屏幕上。在浏览器里打开,无需安装任何东西。
一组有限的配送状态,以及它们之间的流转规则。每一次变更都是一个带操作者、时间和依据的事件;这些事件汇成历史,日后据此复盘问题。
与拣货和发货的接缝:拣了什么、备好了什么待交接、实际交给司机的是什么。没有它,仓库和配送就活在两套账里,到中午就对不上了。
司机和配送员的应用或移动界面:任务清单、地址、行车顺序、货物信息、变更状态、确认取货和送达、与调度员联络。
发给客户和员工的消息:申请已受理、货物已取、配送员已出发、配送已改期、配送未完成。消息的下发渠道在落地时选定,并通过对接接入。
接单员、调度员、仓库员工、司机、负责人。修改路线、取消配送、修改地址和访问收货人个人数据,都是各自独立的权限,而不是打包成一个「员工」。
配送单量、按时完成占比、车辆和人员的负荷、路线效率、问题订单清单。报表可导出为文件,也可按计划自动生成。
系统对外的接口:创建申请、查询状态、获取路线、回传送达确认、拉取日志。网店、CRM、ERP 和仓储系统都通过它接入。
运输申请 — 一份单据,记录要把什么送到哪里、什么时限之前、由谁承担费用、按什么条件。此后的一切——路线、执行人、状态、单据——都挂在它的编号上。
申请通过三种方式之一进入系统:由业务员创建、由客户自己在个人中心填写,或由公司的另一个程序通过 API 传入。来源不同,之后的路径相同——否则一部分订单就会形成自己那套不成文的处理顺序。
验证 — 是一个单独的步骤,而不是走形式。系统会检查:必填项是否填了、收货方是否在台账里、货物是否在允许的尺寸内、时限是否做得到。有疑问的申请不会悄悄进入路线:它会带着明确的原因留在待确认清单里。
一份申请包含什么:
指派到配送 — 申请从一个意向变成一项工作的那一刻。它进入某一天的路线,有了执行人,执行人的清单里也有了这项任务。从这一刻起,这份申请在调度面板里、司机应用里和客户的历史里都能看到。
有些修改会改变当天的计划:新地址可能落在路线之外,重量增加可能装不进已指派的车。这类申请不会被悄悄改掉——它会连同原因退回给调度员重新规划。

系统界面截图,数据为演示用。第五步很关键:取货的标记由实际拿到货的人来打。如果由调度员「听电话」代打,系统描述的就不再是这次运输,而是关于这次运输的说法。
修改是一项受控操作,而不是随意编辑。改地址、改时限或改货物内容都会保留上一版本并留下痕迹:谁改的、什么时候改的、改了什么。否则复盘一次有争议的配送,就会卡在「当初的地址到底是什么」这个问题上。
路线 — 一名执行人在一个班次内要跑完的站点清单,以及行车顺序。站点是指某个地址上的一次具体动作:取货、送货、收回退货。
创建路线 从选定日期上未分配的申请开始。调度员把它们列成清单:地址、片区、收货方的时间窗、重量和体积。站点可以手工编入路线,也可以按规则编入——例如「明天这个片区的全部配送」——路线随即显示总重量、总体积和站点数。
站点顺序 是显式设定的,并且对所有人可见:调度员在面板里看,司机在应用里看。顺序通过拖动站点来调整,与此同时系统会重算路线负荷并对冲突发出提示——例如某个「12:00 前」的站点被排到了第八位。
指派执行人 — 把路线绑定到司机或配送员以及一辆车上。系统会考虑载重和车厢容积:装不进所派车辆的路线,在出车之前就会被标出来,而不是到装车时才发现。
调整路线 发生在当天进行中,这是正常场景,不是事故。站点可以增加、撤下、转到另一条路线或另一天。执行人在自己的清单里会看到变化,而路线历史里留下一条记录:改了什么、谁改的、几点改的。
执行管控 — 把计划和实际做对比:路线上有多少站点已关闭、还剩多少、执行人在哪里偏离了行车顺序、哪些站点已超出时间窗。当路线上的所有站点都关闭时,路线才关闭——包括那些以配送失败告终的站点。

自动生成最优路线是一个独立模块,而不是账务系统的内置功能。把它当作一种可选的实现方案来看待才合理:它需要道路数据源、计算规则,以及在公司真实车次上的验证。
可选的方案从简单地按片区和时间窗排序站点,到通过外部地图服务来计算,跨度很大。具体接什么、按什么数据算,在调研时确定:事先宣称已经有现成的优化,那是一句承诺,而不是一段描述。
没有它,基础链路照样能跑:站点、顺序、执行人和执行管控,并不取决于站点是人排的还是算法排的。
路线和申请一样,有日期、执行人、车辆、状态和变更历史。因此「昨天这个地址为什么拖到今天」这个问题,靠路线记录来复盘,而不是靠当班的记忆。
| № | 网点 | 行动 | 时间窗 | 件数 | 重量 | 状态 |
|---|---|---|---|---|---|---|
| 1 | 仓库,Promyshlennaya 街 | 取货 | 08:00–09:00 | 14 | 310 公斤 | 已完成 |
| 2 | 「中央」门店 | 配送 | 09:00–12:00 | 4 | 86 公斤 | 已完成 |
| 3 | 客户办公室,4 楼 | 配送 | 10:00–13:00 | 2 | 18 公斤 | 在途 |
| 4 | 自提点,Asanbay 小区 | 配送 | 18:00 前 | 6 | 142 公斤 | 等待中 |
| 5 | 「东方」门店 | 送货 + 收退 | 14:00–17:00 | 2 | 64 公斤 | 等待中 |
行车顺序调度员和司机都能看到,因此「我们俩换了一下」不会变成争执。第 3 行在执行人标记结果之前不会关闭:搬上楼是配送最容易被拖住的典型环节,而系统应当从站在门口的那个人那里得知这一点。
货物 — 实际发生位移的东西。在系统里它是一条与申请关联的独立记录:一份申请可以运多个货件,一趟车次也可以装多份申请的货。
这样拆开不是为了账目严谨。恰恰是在货物这一层,才能回答那些被问得最多的问题:发出去几件、是不是都到了、哪一件破损了、退回来的是什么。
货物状态的每一次变化都是一个带时间和操作者的事件。因此整段运输历史可以完整还原:几点取的货、在哪里在执行人之间做了交接、什么时候交给收货人、由谁确认的。
执行人之间的交接 — 是一项独立操作,而不是副产品。从仓库运到分拣、再从分拣送到地址的货,至少要换两次责任人。每一次交接都显式记录;否则东西丢了,根本说不清是在哪一段丢的。
「谁的责任」这个问题的答案也来自这里——不是为了找人背锅,而是为了定位到某一段路程。收货人发现的破损,会被归到货物记在某位具体执行人名下的那一段上。

送货单、交接单、包装照片、收货人签名,都跟货物放在一起。单据同时关联货物和申请,因此从客户一侧和从车次一侧都能找到——不必再去翻聊天记录。
收货时和交付时各拍一张照片,是了结破损争议最便宜的办法:它是在已知的时刻由已知的人拍的,而且就放在与收货人签名同一张卡片里。
一份申请可以运多个货件,一趟车次也可以装多份申请的货。只要它们还是一条记录,任何部分情况——五件收了三件、退回一件——就只能在备注里用文字描述。
必填字段是最低限度:少了它们,货物就不能排进路线。其余都可以配置:家具运输和文件递送,重要字段完全不同;逼着人填不需要的东西,是让台账写满破折号最稳妥的办法。
状态不是屏幕上的一行字,而是一种状态,由它决定哪些动作是被允许的。状态的集合是有限的:只要没有把它明确列出来,每个员工对「处理中」的理解都不一样,报表也就无从谈起。

顺序正是这样才有意义。每一次状态流转都由做出该动作的人、在动作发生的那一刻完成——否则系统显示的就不是运输的状态,而是调度员的意图。中间状态(「在分拣」「已交给承运商」)可以按公司流程添加,但集合始终是有限且明确的。
| 发生了什么 | 系统会做什么 | 状态 |
|---|---|---|
| 延误:收货方的时间窗快到了 | 把该站点标记为超时,在一份单独清单里呈现给调度员,并准备一条改期通知发给收货人 | 待排查 |
| 客户在发货前取消了订单 | 以取消原因关闭申请,把站点从路线中撤下,并把货物退回仓库库存 | 正常 |
| 货已在途时客户取消了订单 | 不会悄悄把这单配送关掉:它会转为退回,并在执行人的路线里加一个返程站点 | 待排查 |
| 收货人不在 | 记录一次配送失败,附原因和执行人备注,货物仍留在他手上,并把是否再送一次提上日程 | 待排查 |
| 收货人只接收了一部分 | 把这单配送拆开:接收的货件关闭,拒收的作为一条单独记录转入退回 | 待排查 |
| 货物在运输中破损 | 生成一个带照片和破损当时责任人的事件,并且不允许把这单配送按普通方式关闭 | 待排查 |
| 执行人没来上班 | 释放他的路线以便重新指派,并把受影响的全部站点用一份清单呈现给调度员 | 提醒 |
总原则:失败的结果不会消失,也不会变成成功。这单配送保持打开状态并进入排查队列——这比一份「没有问题」的报表要便宜,因为那份报表之所以没有问题,只是因为问题无处记录。
公司到底需要哪些异常处理,在调研时决定。家具运输需要退回和破损核查,文件递送需要再送一次和收件人身份验证。状态集合可以配置,但规则不变:任何一单配送的结束都有一个原因,而这个原因会进入报表。
调度面板 — 用来驾驭一整天的工作台。它的任务不是「把数据显示出来」,而是把此刻需要做决定的一切集中到一个屏幕上,同时不显示其余内容。
因此这个面板做得像一张当班的办公桌:紧急的在上面,当天的全局在下面,历史和台账在更深处。员工不必记住东西放在哪里,就能接起客户的电话。
面板里能看到什么:
访问权限 把面板按角色区分开。调度员看到自己的片区,负责人看到所有方向,呼叫中心坐席看到状态和联系方式,但看不到财务数据。
这种区分由角色设定,而不是给每个员工勾一堆复选框。否则半年之后,新人的权限就是「照着 Ivanov 那样配」,再也没人说得清他到底能看到什么。

系统界面截图,数字为演示用。磁贴的顺序不是随手排的:排在最前的不是总量,而是需要做决定的事。未分配的申请排在最后,因为那是调度员唯一能自己彻底做完的一块。
历史不是「以防万一」的存档,而是复盘工具。记录不做编辑:更正以新增一条记录的方式写入。因此「谁把这单配送挪到了明天」这个问题有答案,而不是有几个版本。
通常从三头之一去看它:按申请看——它身上发生过什么;按执行人看——他这个班次做了什么;按路线看——它一天里是怎么变的。
仓库和物流不是两个共用一个群聊的部门,而是同一个流程的两段。「已拣配但未交接」的货和「已交接但未标记」的货,是两种不同的状态,混起来代价很高。
统一的数字化流程只意味着一件事:仓库与配送之间的每一次交接,都由动作而不是由消息来记录。仓库员工标记拣配,司机标记接收货物,收货人标记签收。在这些标记之间,货物任何时刻都记在某个具体的环节上。
这个接缝给仓库带来什么: 它能看到什么已经运走了,什么在发货区已经放了第二天。 给物流带来什么: 不会为还没拣配好的货去排线,司机也不会在没东西可装的时候就开到门口。
完整的仓储核算——收货、上架、盘点、批次和保质期——是另一个页面的主题。这里只讲接缝:仓库交给物流什么,又从物流拿回什么。
第四次交接是唯一一次货物更换责任人的地方。正因如此,它被做成一项有双方的独立操作:仓库交出、执行人接收。少了这一步,货件丢失时就说不清是哪一段丢的,复盘也就变成了挨个问当班的人。

这是常见情况:仓储核算已经在既有系统里做了,没有人打算换掉它。这时接缝以数据交换的方式搭建——物流取到订单是否备好和货件构成,回传状态和确认。
交换的内容和频率,取决于外部系统能对外提供什么。具体某个程序能做到什么,在调研时确认——事先宣称已有现成的对接,那是在替别人的产品做承诺。
申请与路线
货物与状态
调度面板
配送报表
每个角色都有自己的工作台和自己的一组动作。这不是为了限制而限制:屏幕上多余的东西越少,当班出错就越少,新人上手也越快。
从所有渠道接收申请,核对地址和货物内容,有疑问就跟客户确认。他看到的是待确认队列和自己的申请;路线和车辆负荷他不碰。
编排路线、指派执行人、驾驭一整天:挪站点、应对延误、处理问题配送。他是面板的主要使用者,也是当天变更的主要来源。
标记拣配和是否可发货,办理把货交给执行人以及接收退货。他打交道的是货件和标签,而不是路线。
领取当班路线,标记取货和送达,若站点没能关闭则记录原因。他只看到自己当天的任务,以及完成任务所需的数据。
同样的流程,只是换成移动界面,而且一个班次里的短站点更多。他确认签收、附上照片或签名、就地址写备注。
他看的不是一个班次,而是一段时间:配送量、按时完成占比、负荷、反复出现的问题清单。他不需要操作动作——他需要的是可以依靠的数字。
执行人需要的不是「系统的访问权」,而是一份现在该做什么的短清单。因此他的工作台是一个单独的界面:移动应用或适配过的网页,而不是调度员用的那个面板。
它包含:
对这类界面的一个重要要求是:网络不好时也能用。离线做的标记先存在设备上,等有网络时再补传;重发不会生成第二单配送。
执行人工作的详细解析,是「配送员解决方案」那个页面的主题。这里要紧的是另一件事:这个界面里的标记,是实际状态的唯一来源,因此它是最先设计的,而不是最后。

执行人在动作发生的那一刻做标记,不是为了管控而管控。实际送达时间、在站点停留的时长和出问题的原因,都来自它。没有它,这三项指标都要在一天结束时靠记忆还原,也就是根本还原不了。
第二个效果是给调度员减负:只要状态还是由他听着电话代填,半个班次就会花在把别人的工作抄进系统里。
执行人的工作条件不一样:一手拿手机,一手抱箱子,屏幕在太阳底下,网络时有时无。调度员的面板在这种条件下没法用——需要的是大号元素、尽量少的字段,以及断网时可预期的行为。
因此他的工作台是围绕班次来设计的,而不是围绕数据的完整性:屏幕上只有当前站点和下一个,其余都收进更深处。
只有当数据在动作发生的那一刻进入系统时,报表才有意义。如果状态是晚上「按当天结果」补填的,那么任何报表都会呈现一幅整洁的画面,与实际发生的事毫无关系。
依据积累的数据可以算出什么:
指标的定义设定一次,所有报表都用它。「按时送达」在调度员的报表里和在负责人的报表里必须是同一个意思——否则同一天的两份汇总对不上,而两份都会失去可信度。
报表可导出为文件、按计划生成,也可以通过 API 送到外部分析系统——导出的内容由项目确定。

系统界面截图,数字为演示用。第二块磁贴比第一块更重要:在没有拆解非正常结束的构成——取消、退回、配送失败——之前,总量只说明了负荷,说明不了工作质量。
物流系统很少独自存在:订单来自一个程序,客户在第二个程序里维护,库存在第三个里。以下是最常搭建交换的几个方向。某项对接的具体范围,取决于外部系统能对外提供什么,并在调研时确认。
已生成的订单可以自动作为申请传给物流,而配送状态可以回传到顾客的个人中心。橱窗本身和订单核算是怎么做的,见 电子商务.
可以与客户台账和成交历史对接:从客户卡片创建申请,配送结果回传给业务员。交换按客户标识进行,以免产生重复的往来单位。
它可以与公司的账务体系协同:订单、送货单、往来结算。交换方向和单据组合,取决于哪一套账被认定为主账。
订单是否备好、货件构成和标签从仓库进来,状态和退货回传过去。如果仓库跑在外部程序里,接缝就以数据交换的方式搭建——见上面关于与仓库衔接的那一节。
执行人的工作台可以是系统的一部分,也可以是通过 API 接入的独立应用:它接收任务,回传状态和确认。第二种方案用在已经有在用应用的场合。
在有货到付款的场合,可以与支付服务或执行人手里的终端对接:应付金额来自申请,支付结果回传到这单配送。具体范围取决于服务商。
地图与地址地理编码、车辆远程信息处理、通知服务、外包承运商。每一项这样的接入都是一个独立的交换模块;我们不会事先宣称已经有现成的连接器。
系统自己的接口:创建申请、获取状态和路线、回传送达确认、拉取操作日志。凡是没有专门模块的,都通过它接入。
交换规则到哪里都一样:每个操作都带一个键,因此重复传输不会生成第二份申请;差异不会消失,而是进入排查队列;每一次发送和每一次应答都写入数据交换日志。没有这三条规则,对接能撑到的正好是第一次断网。
物流不会在一天之内整体搬进系统:只要员工还按老办法维护状态,报表里的数据就毫无意义。因此上线是分段推进的,后一段建立在已经跑通的前一段之上。
申请现在是怎么进来的、谁在排路线、状态用什么维护、已经装了哪些程序、它们能对外提供什么。产出是一份流程描述,以及一份「优先自动化什么」的清单。
一个城市、一家配送服务或一个仓库。申请、路线、状态和执行人的标记,在真实运输上跑完整整一圈——然后再把这套流程铺到整个公司。
谁能改什么、需要哪些异常处理、退回和配送失败怎么处理、通知发给谁。权限和手工调整路线的流程也在这一步配置。
其余方向按已跑通的方案铺开,各项对接作为独立的交换模块接入。此后历史逐渐积累,跨周期的报表和用于车辆规划的数据也就有了。
请写明每天有多少单配送、申请从哪里来、用自有车队还是外包、有没有仓库,以及贵公司的数据现在躺在哪些程序里。我们会回答:优先自动化什么、有哪些可以接到现有系统上,以及试点从哪里开始比较合理。