Files
star 5060d027e5 feat: 多工厂/厂间调拨/替代料/流水台账折叠 + 重写 README
- 多工厂(factory 表) + 顶栏工厂下拉过滤, 库存按厂聚合
- 厂间调拨(transfer): 源厂减+目标厂加, 总库存不变, 双向流水对账
- 替代料关系(substitute): 出库/BOM领料/生产领料缺料时提示可替代料
- 流水台账(ledger): 入出按日期合并折叠, 按日期导出同一 Excel
- 生产订单增强: 编辑/删除(级联清关联流水)/调入数量/确认调入=厂间调拨
- 入库新增送货日期字段; 出库物料编码扫码定位
- 重写 README 补全全部模块; .gitignore 排除 dist_pkg/build_pkg/*.db
- 停止跟踪 instance/app.db(运行时自动生成)
2026-09-29 11:17:48 +08:00

132 lines
7.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 物料入库 / 出库系统 (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
```bat
python build_exe.py
```
产物在 `dist/MaterialWMS.exe`。冻结后模板/静态走 `sys._MEIPASS`,库文件落 exe 同目录。
构建脚本使用 `--distpath dist_pkg` 以避开某些环境的「安全删除」钩子,构建完成后再复制到 `dist/`。
---
## 八、测试
```bat
python tools/e2e_test.py
```
覆盖:登录 / 收发核算 / BOM / 订单展开 / 领料 / 日志 / 报表 / 导入导出 /
入库·物料·BOM 批量导入窗口 / 角色拦截 / 替代料提示 / 厂间调拨对账。
---
## 九、部署与数据备份
- 数据唯一真源为 `dist/app.db`(EXE 同目录);搬 EXE 时务必把 `app.db` 一起带走。
- 更新 EXE 后**务必结束旧进程**(Windows:`Stop-Process -Name MaterialWMS -Force`)再重启,
否则浏览器连的是旧代码,会表现为「新功能点不了 / 没按钮」。
- 重大操作前复制 `app.db` 为 `.bak` 备份,可随时覆盖还原。