star 099496dec9 feat: 生产订单新增导出 Excel 与打印功能
- 订单列表页「导出 Excel」(/orders/export): 导出全部生产订单(订单号/BOM/接单量/工厂/状态/经手人/下单时间/备注)

- 订单详情页「导出 Excel」(/order/<id>/export): 导出派工单, 含「订单信息」+「领料明细」双 sheet

- 订单详情页「打印」按钮: window.print() + @media print 样式(隐藏导航/按钮, 输入框转纯文本, 隐藏提示), 输出干净派工单
2026-10-22 14:02:04 +08:00

物料入库 / 出库系统 (MaterialWMS)

本地 Web 物料管理系统,对标桌面 物料明细表.xlsx 的台账 + BOM 核算能力。 Flask + SQLite,免外部数据库,即开即用。库存由 SQL 实时聚合(在库 = 入库 − 出库), 彻底规避原 Excel 的 [1]物料入库!D_ 外部链接断链风险。

配套文档:物料入库出库系统_使用教程.md(完整功能教程)、物料入库出库系统_用户使用说明.md(面向操作员的使用手册)。


一、运行方式

方式一 · 单文件 EXE(推荐车间用) dist/MaterialWMS.exe 双击即开,自动弹出浏览器到 http://127.0.0.1:8080。 库文件 app.db 自动生成在 exe 同目录,换机器直接拷贝 exe 即可。

方式二 · 源码(双击 bat) 双击 启动.bat 启动;或命令行 python app.py(库文件生成在 instance/app.db)。

方式三 · 指定库位置 set WMS_DB=D:/path/app.db 后再启动,可把数据放到任意位置。

默认账号:admin / admin123(首次启动自动建;可在「用户」页加 operator / manager)。


二、角色权限

角色 权限
admin 全部,含用户管理、工厂管理、替代料管理
manager 物料/BOM/订单/报表/日志/Excel 导入导出/调拨/替代料
operator 库存看板 / 物料查看 / 入库 / 出库

三、核心库存口径

  • 在库 = Σ入库 − Σ出库,全部实时聚合,不在库里冗余存储。
  • 厂间调拨:从源厂出库减 + 目标厂入库加,系统总库存不变(只搬库,不消耗)。
  • 只有「出库 / 生产领料」会减少库存;入库、调入(调拨)只做加项或库间转移。
  • 多工厂:factory 表区分归属(SELF=自厂/总部为默认厂)。顶栏「工厂」下拉切换后, 看板 / 物料 / 收发 / 流水全部按所选厂过滤;全部 显示跨厂汇总。

四、功能清单

模块 说明
库存看板 实时核算在库;低于安全库存标黄、库存为负标红,顶部统计负数/预警数。BOM 标签页可按 BOM 型号查看「单套用量 × 接单量」的需求与齐套情况,并提供「模拟齐套」试算
物料 主数据 CRUD(编号/型号/单位/安全库存)+ 搜索;物料详情页展示各厂在库与流水
入库 流水登记(批次/数量/经手人/来源/送货日期),写入即更新库存
出库 流水登记,库存不足自动拦截;支持按 BOM 领料、物料编码扫码/输入自动定位;选物料后实时提示可替代料及库存
批量导入窗口 入库/出库/物料/BOM 页「批量导入窗口」按钮弹出模态框:粘贴多行清单或上传 Excel/CSV,实时预览解析与校验,一键批量生成
BOM BOM 型号 + 组成物料单套用量;支持上传真实 Altium / 嘉立创 BOM 模板(每个 worksheet 视为一个 BOM,sheet 名即 BOM 型号),或中文「组装」sheet;物料不存在的项导入时自动新建
生产订单 选 BOM + 接单量 → 自动展开「需求 = 单套用量 × 接单量」。支持编辑 / 删除(删除级联清除关联的领料出库与调入入库);订单详情页可填写每个物料的「调入数量」并确认调入(厂间调拨)
厂间调拨 在厂之间转移物料:源厂出库减 + 目标厂入库加,总库存不变;调拨单双向流水自动对账,可在流水台账按「调拨」类型筛选
替代料关系 维护「主料 ↔ 替代料」对照(可 Excel 导入);出库、BOM 领料、生产订单领料时,主料库存不足自动提示可用替代料及其库存
流水台账 入库 + 出库 按日期合并、折叠展示(默认展开最新一天,可全部展开/折叠);支持业务类型筛选、单号搜索、按日期导出为同一个 Excel 文件
报表 库存报表页,支持浏览器打印与导出 Excel
操作日志 每次收发/BOM/订单/导入/用户操作全记录(谁/何时/做了什么)
工厂管理 admin/manager 增厂、停用/启用;SELF 为默认自厂
用户管理 admin 增删改角色、启停账号

五、Excel 模板字段速查

导入项 标准列(首行表头)
物料 物料编号、型号/规格、单位、安全库存(可选)、期初库存(可选)
入库 物料编号、数量、日期(可选)、批次(可选)、来源(可选)、经手人(可选)
出库 物料编号、数量、日期(可选)、用途(可选)、经手人(可选)
BOM 支持 Altium/嘉立创模板(Item / Part Number / Manufacture Part Number / Quantity / Reference / Part / Package),或中文「物料代码 + 数量」
替代料 「替代料」sheet:主料编号、替代料编号(可多行同一主料)

各页均有「下载模板」按钮可获取标准 Excel 模板。


六、目录结构

material_wms/
├─ app.py                 # 路由 + 鉴权 + 库存核算 + 冻结路径处理
├─ models.py              # SQLAlchemy 2.0 模型(user/material/inbound/outbound/
│                         #   bom/bom_item/prod_order/prod_order_alloc/factory/
│                         #   transfer/substitute/operation_log)
├─ excel_io.py            # Excel 双向导入导出 + 模板生成
├─ init_db.py             # 建表 + 管理员 + Excel 导入真实物料
├─ build_exe.py           # PyInstaller 单文件打包脚本(--distpath dist_pkg 避开安全删除钩子)
├─ requirements.txt       # flask / flask-sqlalchemy / sqlalchemy / openpyxl / pyinstaller
├─ 启动.bat
├─ templates/             # 登录/看板/物料/收发/BOM/订单/调拨/替代料/流水/报表/日志/用户/导入 共 22 个页面
├─ static/style.css
├─ tools/                 # e2e_test.py(全量冒烟) / check_*.py(各功能校验) / verify_*.py
├─ instance/app.db        # SQLite 库(源码模式自动生成, 已 gitignore)
└─ dist/MaterialWMS.exe   # 打包产物(单文件, 已 gitignore)

七、打包 EXE

python build_exe.py

产物在 dist/MaterialWMS.exe。冻结后模板/静态走 sys._MEIPASS,库文件落 exe 同目录。 构建脚本使用 --distpath dist_pkg 以避开某些环境的「安全删除」钩子,构建完成后再复制到 dist/。


八、测试

python tools/e2e_test.py

覆盖:登录 / 收发核算 / BOM / 订单展开 / 领料 / 日志 / 报表 / 导入导出 / 入库·物料·BOM 批量导入窗口 / 角色拦截 / 替代料提示 / 厂间调拨对账。


九、部署与数据备份

  • 数据唯一真源为 dist/app.db(EXE 同目录);搬 EXE 时务必把 app.db 一起带走。
  • 更新 EXE 后务必结束旧进程(Windows:Stop-Process -Name MaterialWMS -Force)再重启, 否则浏览器连的是旧代码,会表现为「新功能点不了 / 没按钮」。
  • 重大操作前复制 app.db 为 .bak 备份,可随时覆盖还原。
S
Description
No description provided
Readme
629 KiB
Languages
Python 63.1%
HTML 33.6%
CSS 2.9%
Batchfile 0.4%