采购 / 补货
Module 1 · 首个上线🔍
Welcome
🤖 问我任何事 / Ask anything
热销 · 库存 · 船舶位置 · 运输 · 补货 · SKU —— 全部来自我们自己的数据库Announcement
Alerts
💡 我的账号 —— 改自己的密码,并登记自己的企业微信地址。
忘记密码时,系统会把临时密码发到这个地址;没登记就只能找管理员重置。
修改密码
保存后所有登录会话都会结束,需要用新密码
重新登录 —— 万一别人知道了旧密码,他的登录状态也会一起失效。
我的企业微信地址
地址本身就是凭证 —— 保存后页面只显示末尾
几位,完整地址只留在服务器,活动日志里也不会记录它。
💡 管理面板 —— 配置 AI 密钥与告警解析、企业微信 Webhook、公告,以及告警规则的启用/发送开关。Webhook 地址本身就是凭证,页面只显示末尾几位,完整地址只保存在服务器。
⚙️ AI setup
公司统一填写一次:此处的 API 密钥保存在服务器上,所有账号共用,员工无需各自输入。
企业微信 Webhook
| 名称 | 类型 | 地址 |
|---|
告警规则
| 我的描述 | 条件 | SKU | 仓库 | Webhook | 发送开关 |
|---|
公告
| 时间 | 标题 | 内容 | 发布人 |
|---|
💡「采购/补货」看板 —— 取代原表格里靠
SUMIFS / VLOOKUP 计算的 采购 页。数据来自数据库视图 v_purchasing,打开时才算,不再全表重算卡顿。点任意行看补货计算明细。非常急 (需立即下单)
14 SKU
急 (本周补)
38 SKU
建议采购总量
6,420 件
库存健康
812 SKU
补货建议清单
本月请求
0
待处理
0
进行中
0
已完成
0
补货请求
🔍
| 编辑 | S/N ⇅ | 序号 ⇅ | 日期 ⇅ | 要求者 | 图片 | SKU | 出货数量 ⇅ | 寄去 | 状态 | 完成度 | 缺货天数 |
|---|
💡 收货记录。谁收了什么、哪几行数量对不上、以及有谁绕过采购
直接打了标签。这一页只能看,改不了 —— 事后能改的差异记录就不是记录了。
差异和强制放行排在前面,因为那才是打开这一页的理由;全部收货记录在第二个页签。
收货行数
—
包裹
—
数量不符
—
⚠️ 绕过采购
—
异常件
—
💡 进货 · 大宁仓进出流水。下面这张表就是
purchases_in
的**全部 38,166 条** —— 它不只是入仓:进 12,781 条、出 25,373 条。
默认只看「进」,要看出仓请点上面的 出 / 全部。上面的扫码收货现在是真的
(session 14),设计见 stockin_scan_spec.md。📦 扫码收货
扫快递单号开始 / scan a courier tracking number📷
💡 这个单号第一次见。系统里没有「进货快递单号」这个数据 ——
purchases_in.tracking_no 记的是发去新加坡的出货快递
(进 2 条 / 出 24,967 条)。所以第一次扫到的包裹一定是陌生的,这不是错误。
选出这个包裹里装的是哪一张 1688 订单,以后再扫就直接认得。一个单号可以装
多张订单,一张订单也可以分几个包裹寄。💡 先数,再填,再打标签。 实收是空的,必须自己数了填。
填的数跟应收不一样 → 这一行的打印按钮会锁住,要采购(志明)通过企业微信
发一个 4 位解锁码给你才能打。标签按实收打:数 17 就打 17 张,一件贴一张,
贴完多出标签就是数多了,货有剩就是数少了 —— 这是第二道核对,不花额外功夫。
| 必须查 | SKU | 品名 | 1688 订单 | 应收 | 实收 | 打印 | 说明书 | 额外处理 | 状态 |
|---|
这一包里还有别的东西
用你自己的话写就行。是 SKU、PC 编号或
SP 编号的话系统会自己认出来,认不出来也没关系 —— 认不出来的那种才是要紧的。
不管是什么,采购都会收到通知。
全部流水
—
进 (入仓)
—
出 (出仓)
—
已下单未到货
—
大宁仓进出流水
🔍
💡 拣货 = 按补货请求出仓。清单只列本轮该拣的货
(同一个 SKU 一轮只出一行,大件一行、小件两行 —— 免得供应商一到货就把收货仓塞爆),
而且只列仓库真的有货的行。
列表生成时间
—
发货仓
收货仓
—
本单进度0 / 0
拣货明细
| 图片 | SKU | 品名 | 需拣 | 已拣 | 拣货时间 | 进度 | 状态 |
|---|
总现货 (件)
0
海运在途 (件)
0
缺货 SKU
0
低库存 SKU
0
库存总览 · 各仓现货 + 在途
🔍
💡 品类由保留前缀自动判定(P-=宠物、TR-=旅游、FH-=童装、ZG-=定制、B0=亚马逊,其余=玩具),映射维护于参数设置表
sku_prefixes。SKU 总数
0
品类数
0
敏感件
0
超大件
0
SKU 主数据
🔍
💡 原来的 ~30 个「卖价」标签页合并为 一张
platform_prices 表,用「平台 + 店铺」筛选。毛利率 = (卖价 − 到岸成本) / 卖价。在售 listing
0
下架
0
平均毛利率
0%
低毛利 (<15%)
0
平台卖价
🔍
近30天销量
4,180 件
在途采购价值
¥86k
呆滞库存 (Aging)
1,541 SKU
补货完成率
92%
近12周销量趋势 (件)
各平台销售占比
库存健康分布
补货时效 (缺货未采购天数)
💡 呆滞库存 = 库龄长且近 90 天动销少的 SKU,占用资金与仓位。对应原表 Aging Inventory。
呆滞 SKU
0
占用金额 (¥)
0
平均库龄 (天)
0
>180 天
0
呆滞库存明细
| SKU | 品名 | 品类 | 现货 ⇅ | 库龄(天) ⇅ | 近90天销量 ⇅ | 占用金额(¥) ⇅ | 库龄段 |
|---|
💡 新品 = 上架 < 120 天。跟踪动销情况,决定是否加单或淘汰。对应原表 新品采购。
新品数
0
已动销
0
未动销
0
近90天销量 (件)
0
新品表现
| SKU | 品名 | 品类 | 上架天数 ⇅ | 近90天销量 ⇅ | 现货 ⇅ | 状态 |
|---|
💡 角色分模块授权 · 双站点:新加坡用户登录 SG 机、东莞用户登录中国机,数据双向同步。
用户数
0
启用
0
已停用
0
权限组
0
用户
| 姓名 | 登录名 | 权限组 | 密码 | 状态 |
|---|
单独授权 / this person
💡 这里改的是某一个人的权限。
浅色勾 = 从权限组继承;深色勾 + 「单」标记 = 只给这个人的例外(可以比权限组多,也可以比权限组少)。
取消例外请点该行的「跟随权限组」。金额字段(单价/到岸成本…)仍然按权限组授权,不在这里单独开。
保存后该用户的登录会话会结束,下次登录生效。
| 页面 / Page | 读 全 | 写 全 | 来源 / from |
|---|
角色权限矩阵
💡 读 = 能打开这个页面;写 = 能在页面里新增/修改/删除。
勾选「写」会自动勾上「读」—— 不能修改一个打不开的页面。菜单只是提示,真正拒绝的是服务器:
每个
/api/home/* 请求都会再检查一次。| 页面 / Page | 读 全 | 写 全 |
|---|
金额字段权限 / money fields
💡 这五个字段跨页面生效,单独授权。
销售必须能看到「到岸成本」—— 定价就是靠它,所以它对销售是工作数据,不是机密。
销售看不到「单价」「申报金额」「海运元/立方」,因为那些是到岸成本的输入,知道到岸价就够定价了。
💡 活动日志自动记录每一次数据改动:谁、何时、哪个模块、改了哪个字段、修改前 → 修改后。数据库层用触发器/自动化写入
audit_log 表,不可篡改。今日操作
0
近7天操作
0
活跃用户
0
修改类操作
0
活动日志
🔍
💡 原来藏在单元格
$X$1 / $AD$1 / $AF$1 里的「魔法数字」搬到这里集中管理。改一个值 —— 不会触发全表重算,下次打开看板才应用。补货参数
💡 原表
补货预算 第 1 行
AN1..BA1 的「魔法数字」。预备天数按体积线性插值:小件
— 天 → 大件 — 天,超过超大件阈值就是
— 天。改完立刻影响 采购/补货 与 补货预算 的建议采购
—— 数值是每次打开时算的,不存盘。汇率 CNY→SGD
💡 系统采用汇率 = 参考汇率 × (1 − 点差)。
参考汇率来自公开汇率源(不是 XE —— XE 没有免费接口),取到哪个源会记下来。
取不到的时候保留旧值不动,只是「上次更新」会显示得越来越久 ——
一个过期的汇率和一个新鲜的看起来一模一样,所以时间戳才是这块的重点。
参考汇率 CNY→SGD
参考汇率 SGD→CNY (= 1 ÷ CNY→SGD)
点差 (spread)
—
系统采用汇率—
上次更新—
来源—
自动更新(分钟)
0 = 关闭,最少 5
同步频率 (外部平台取数)
💡 每个平台各自一套:关闭、
按间隔(分钟或小时)、或按星期(可多选星期 × 多个时间,是一个网格
—— 周一/周三 × 08:00/18:00 = 每周 4 次)。
⚠️ AIS 船舶位置的那一格不是「取数间隔」:它是一条常连的 websocket, 船一广播就推过来,没有「多久取一次」这回事。那里能设的是开/关,以及 多久重读一次「要盯哪些船」并重发订阅 —— 新的船次要等下一次刷新才会被跟上。 两个都是真的会生效的开关,不是摆设。
⚠️ AIS 船舶位置的那一格不是「取数间隔」:它是一条常连的 websocket, 船一广播就推过来,没有「多久取一次」这回事。那里能设的是开/关,以及 多久重读一次「要盯哪些船」并重发订阅 —— 新的船次要等下一次刷新才会被跟上。 两个都是真的会生效的开关,不是摆设。
额外处理费率
💡 收货时如果某件货处理起来特别费工夫,
仓库的人可以填「用了多少分钟 + 耗材多少钱」。这里的费率决定工时折成多少钱:
额外成本 = 工时 × 费率 + 耗材,再除以件数就是
进出Planning.xlsx 的 P 列(额外处理费用/件)。
改这个费率不会改写已经记过的账 —— 每一笔都存了当时的费率。每人分钟 (RMB)
一小时相当于—
发货流程 (路线字典)
💡 一件代发 的路线字典。两张代发订单表的
「发货流程」列全部由这些代码拼出来,620 条带路线的订单 620 条都对得上。
这里的「最快 / 最迟」天数决定订单页上的 预计到达。
改了不会动原表 —— 原表的值留在旁边,随时可以「恢复」。
⚠️「C1-手提派送」原表两个天数都是空的,那是真的没有估计,留空即可。
| 路线 (拼好的整条) | 最快 (天) | 最迟 (天) | 使用次数 | 原表值 | 改动 |
|---|
流程代码 (腿)
路线是由这些代码拼出来的 · 只读| 代码 | Description | 最快 (+天) | 最迟 (+天) | 类型 |
|---|
💡 SKU MAP —— 纵轴 = 类目-产品类型,横轴 = 系列;格子里是该系列的代表图,
角标是该格的 SKU 数,点格子看全部。命名规则:类目 P=宠物 · FH=童装 · TR=旅游 · ZG=定制 ·
无前缀=玩具;格式为 类目-产品类型-系列-规格,例 P-TR-01-BL2020。产品类型是 2-4 个字母;
系列是数字(童装和旅游用 4 位),后面可以直接跟 2-3 个字母的配件码,例 P-BE-01OW ——
配件跟系列连写,所以它和 P-BE-01 在同一格。第 4 段保留给颜色尺寸,只有童装和旅游可以
再加第 5 段。亚马逊 SKU(B0/X0 开头)没有类型也没有系列,不进本图。
SKU 地图
sku_master载入中…
💡 补配件 —— 给客户补发零件/配件的跟踪表(对应原表 补配件),数据表 spare_parts_requests:控制号、订单号、SKU、数量、地址、状态、图片。
总请求
—
还没结案
—
已收到
—
Untraceable
—
补配件请求
🔍
💡 补货预算 —— 「采购/补货」背后的逐仓明细(对应原表 补货预算),数据库视图 v_replenishment:各仓现货 + 海运中 + 补货请求 = 合计,再算目标库存与补货量。
补货预算 · 逐仓明细
v_replenishment| SKU | L30 | 目标库存 | 现货(总) | 海运中 | 补货请求 | 合计可用 | 建议补货 |
|---|---|---|---|---|---|---|---|
| P-01-BL | 60 | 45 | 60 | 0 | 0 | 60 | 0 |
| ST-01-BL | 240 | 200 | 8 | 48 | 16 | 72 | 128 |
| FH-15-YL | 150 | 120 | 2 | 0 | 0 | 2 | 118 |
💡 海运/空运 —— 头程物流:运单、立方/重量、运费率、海/空运费与到岸税(来自 进货 的物流字段),用于分摊到岸成本(v_landed_cost)。
运输速度
🔍
💡 一件代发 —— 无需先入仓、由供应商/仓直接单件发给客户的订单流。占位模块:接入平台订单后按单触发代发与回填运单。
代发订单
规划中📮 代发订单列表占位 —— 订单号、SKU、客户、发货方、运单、状态。
💡 代发订单 —— 单次或不走正常流程的那一批。一件代发 是一套不备货的模型:多数商品按单去 1688/淘宝 买、由供应商或处理仓直接单件发给客户,不先入仓。只有同时需要在中国仓(大宁 / 义乌)和海外仓(如新加坡 NDT)备货的那部分商品才会有库存 —— 这跟本系统其余页面「先采购→入仓→拣货→发货」的假设不一样。
票数
—
有路线
—
本月新增
—
缺路线
—
代发订单 (单次 / 不走正常流程)
🔍
💡 代发订单 —— 重复采购的那一批。与「单次」分开两张表两个页面(ManYu:「split them to separate entities is the best」),不是一张表加筛选。一件代发 是一套不备货的模型:多数商品按单去 1688/淘宝 买、由供应商或处理仓直接单件发给客户,不先入仓。只有同时需要在中国仓(大宁 / 义乌)和海外仓(如新加坡 NDT)备货的那部分商品才会有库存 —— 这跟本系统其余页面「先采购→入仓→拣货→发货」的假设不一样。
票数
—
有路线
—
本月新增
—
缺路线
—
代发订单 (重复)
🔍
💡 超市货架 —— 代发里确实备货的那些 SKU,按仓位分开看。这正是上面说的例外:同时要在中国仓和海外仓备的商品。
SKU 数
—
有现货
—
需要补货
—
在途
—
超市货架 (Supermarket)
🔍
💡 杭州仓库进货 —— 备货商品进出浙江仓 / 杭州菜鸟集运仓的流水。⚠️「仓库整理」是采购订单号列里的一个真实取值(盘点行),不是缺失。
流水笔数
—
SKU 数
—
已出仓
—
待出仓
—
杭州仓库 - 进货
🔍
💡 退货管理 —— 买家退回到中国的件。含标签打印状态和 POD,所以跟 进货 页的标签打印是同一类操作,只是方向相反。⚠️「已退款不用退货」是真实取值,不是空值。
退货笔数
—
已打印寄出
—
已退款免退
—
待处理
—
退货管理
🔍
💡 记账 —— 内部账目:采购支出、运费、平台费、销售收入的记账与月度汇总(内部,不接外部会计系统)。占位模块。
账目总览
规划中本月采购支出
¥ —
本月运费
¥ —
本月销售收入
S$ —
毛利
S$ —
关于
最新的武林秘籍 PRO
跨境电商管理系统 · Xinyan · 双站点(新加坡 / 东莞)
版本 0.1 · UI 原型
取代 kdocs 电子表格(42 标签页),迁移至 PostgreSQL + 应用层。
取代 kdocs 电子表格(42 标签页),迁移至 PostgreSQL + 应用层。
模块:常规 · 仓库 · 采购 · 物流 · 电商 · 财务 · 系统
💡 销售历史 —— 逐笔销售记录(对应原表 销售历史),数据表 sales_history:日期、SKU、数量、订单号、BigSeller 单号。是补货 L30/L60/L90 需求的来源。
销售历史
🔍
sales_history| 日期 | SKU | 图片 | 品名 | 数量 | 仓库 | 订单号 | BigSeller 单号 | 原SKU |
|---|---|---|---|---|---|---|---|---|
| 读取中… / loading | ||||||||
💡 Order Backlog(缺货) —— BigSeller 自己的「Out of Stock」列表(订单页 status=new 下那个页签)。⚠️ 一行 = 一条订单明细,所以一张 2 件的订单会占 2 行。数据来自每次同步。
Order Backlog · 缺货订单
🔍
| 平台订单号 | SKU | 图片 | 商品 | 数量 | 店铺 | 平台 | 仓库 | 状态 |
|---|---|---|---|---|---|---|---|---|
| 读取中… / loading | ||||||||
