113 lines
8.4 KiB
Markdown
113 lines
8.4 KiB
Markdown
# 博特维采购订单管理系统
|
|
|
|
苏州博特维智能科技有限公司内部使用的采购单 / 委外生产订单系统。当前源码版本 v4,支持制单、单次审批、正式 PDF 归档、撤回、作废、变更重审,以及付款、收票和交货跟进。
|
|
|
|
## 启动
|
|
|
|
需要 Python 3.11+。在项目根目录执行:
|
|
|
|
```text
|
|
python -m pip install -r po_app/requirements.txt
|
|
python po_app/app.py 8080
|
|
```
|
|
|
|
打开控制台打印的访问地址,默认 `http://127.0.0.1:8080`。也可双击 `po_app/启动.bat`。
|
|
|
|
首次运行不创建演示账号。管理员须读取服务电脑上的 `po_app/instance/setup.token`,在首次设置页面创建管理员,再通过“用户”页分配制单员、审批员账号。初始/重置密码在首次登录时须更改。
|
|
|
|
局域网协作应由一台固定电脑运行服务,其他电脑用浏览器访问主机 IP。每台电脑单独启动 EXE 会形成不同数据库。已有 EXE 须从本版源码重新打包,不能通过替换源码自动升级 EXE。
|
|
|
|
**已有数据升级前,请阅读 [运行与升级说明](运行与升级说明.md)。** 程序会先备份旧数据库再执行增量迁移;重复单号会阻止升级,不能自动给历史单据改号。
|
|
|
|
完整操作步骤见 [v4 使用与升级手册(PDF,16 页)](output/pdf/博特维采购订单系统_v4_使用与升级手册.pdf)。第 10-12 页包含企业微信建群、创建机器人、获取 Webhook、系统配置、手机审批验收及问题排查。手册维护方法见 [手册源文件说明](docs/manual/README.md)。
|
|
|
|
## Windows 单文件 EXE
|
|
|
|
在 Windows 64 位电脑上使用 Python 3.11 打包。在项目根目录的 PowerShell 中执行:
|
|
|
|
```powershell
|
|
py -3.11 -m venv tools/out/build-venv
|
|
tools/out/build-venv/Scripts/python.exe -m pip install -r requirements-build.txt
|
|
cd po_app
|
|
../tools/out/build-venv/Scripts/python.exe -m PyInstaller --noconfirm --distpath ../dist --workpath ../build 博特维采购订单系统_单文件版.spec
|
|
cd ..
|
|
```
|
|
|
|
产物为 `dist/博特维采购订单系统_单文件版.exe`,使用时无需安装 Python。将 EXE 放在可写的固定文件夹,双击启动;首次初始化口令位于 EXE 同目录的 `instance/setup.token`。默认自动打开浏览器,可设置 `PO_OPEN_BROWSER=0` 关闭自动打开。
|
|
|
|
安装开发验收依赖后,可执行 `python tools/browser_smoke.py --exe dist/博特维采购订单系统_单文件版.exe`。脚本在临时目录中复制并运行 EXE,验证页面、建单、手机尺寸审批、Excel 导入导出、带章 PDF 及重启后的归档一致性。EXE 测试不启用企业微信发送;测试数据和截图位于 `tools/out/ui-check-*`。
|
|
|
|
Windows 7 SP1 服务器使用单独的 [Win7 离线打包说明](packaging/win7/README_WIN7.md)。离线打包包包含 Python 3.8.10 官方安装程序、32/64 位离线依赖、两步构建脚本和自检;请在目标服务器生成 EXE。Win7 环境不要执行上面的 Python 3.11 打包命令。
|
|
|
|
已有 Win7 服务器更新正式版本时,请按 [服务器版本更新操作手册](packaging/win7/服务器版本更新操作手册.md) 操作;[PDF 打印版](output/pdf/Win7服务器版本更新操作手册_20261014.pdf)可下载到服务器边看边做。
|
|
|
|
## 主要能力
|
|
|
|
- 采购单和委外单,供应商/物料库、中文 XLS/XLSX 导入。
|
|
- 供应商支持维护公司简称,PDF 下载文件名采用“单据类型_订单号_供应商简称.pdf”;未填写简称时使用供应商全名,已审批文件重新下载也适用。
|
|
- 供应商库支持按名称、简称、编号搜索;物料库与订单编辑页支持按物料代码、规格搜索,选库内物料可带出单价。
|
|
- 订单列表支持按物料查历史订单并标出匹配明细,搜索结果包含已完成订单;可直接复制旧订单为草稿,新交期须重新填写。
|
|
- 审批通过时将订单中有代码、可明确匹配的物料单价写入物料库,保留四位小数。管理员可在物料库点击“同步历史审批价”,补录升级前的已审批订单。选物料时优先参考本账号同供应商的最近审批价,其他情况使用物料库默认价;两者都应在提交前核对。
|
|
- 草稿可暂存,“保存并提交”保证当前修改一起进入审批。
|
|
- 数量、单价四位精度;逐行四舍五入到分再合计,页面、数据库和 PDF 使用同一口径。
|
|
- 制单与审批由不同账号完成,管理员也遵守分工;审批员一次确认即可通过或驳回。
|
|
- 制单员仅访问自己的订单,详情、复制、PDF、台账和统计使用统一权限。
|
|
- 撤回、作废、批准后变更重审;每次提交保留内容快照,日志记录操作账号、姓名、环节及版本。
|
|
- 审批通过时归档带一枚“采购专用章”的正式 PDF,后续下载保持该文件;草稿、驳回和作废单带对应水印。
|
|
- 企业微信审批群通知、持久化发送队列、失败重试及过期待办跳过;管理员在“通知配置”页设置。
|
|
- 公司 Wi-Fi 内手机审批,通知链接登录后回到对应订单;保留盖章确认、角色分工和版本校验。
|
|
- 用户编辑、重置密码、启用和停用,以及旧会话失效。
|
|
- 随机部署密钥、表单 CSRF 校验、请求独立事务、单号唯一约束、重复建单和旧页面操作保护。
|
|
- 按状态、供应商、月份统计以及 Excel 台账导出。
|
|
- 已审批订单的预付款标记、收票与交货跟进;审批员或管理员登记付款状态与日期,支持部分付款、部分交货。
|
|
- 工作台按需预付款、已收票待付款、未交货、已付款未交齐等情况统计并跳转筛选,台账同步导出跟进状态。
|
|
- 工作台提供“未交付(含部分交货)”“已交付已收票待付款”“已完成”三类入口;未收票、未登记和变更后待核对订单仍可在“其他待跟进”查看。
|
|
|
|
图形审批章表示系统内部审批确认,不是第三方证书数字签名。金额分级、部门审批、企业微信个人定向通知、预算和逐笔资金对账不在当前版本中。付款与交货按整张订单标注状态,部分完成的明细可填写在备注中。
|
|
|
|
## 项目结构
|
|
|
|
```text
|
|
po_app/
|
|
app.py 服务入口、工作台、基础资料、用户、统计
|
|
security.py 会话、认证、请求事务、首次设置
|
|
order_routes.py 制单及审批操作、PDF 和版本查看
|
|
order_logic.py 权限、校验、金额、提交快照
|
|
order_tracking.py 付款、收票和交货跟进、工作台分类筛选
|
|
notifications.py 企业微信群通知、事务队列与后台发送
|
|
notification_routes.py 管理员通知配置、测试通知和重试
|
|
models.py 数据模型及固定精度字段
|
|
migrations.py 旧 SQLite 数据升级和自动备份
|
|
money.py Decimal 计算与舍入规则
|
|
excel_io.py XLS/XLSX 读取和上传文件名处理
|
|
pdf_export.py PDF 排版、内部审批图形章
|
|
amount_cn.py 人民币大写
|
|
templates/ 页面模板
|
|
static/ 样式、精确金额预览
|
|
instance/ 数据库、部署密钥、备份(不入库)
|
|
tests/ 隔离回归测试
|
|
tools/ 备份、测试和浏览器验收脚本
|
|
```
|
|
|
|
可用 `PO_DATA_DIR` 更改数据目录,`PO_HOST` 更改绑定地址。服务使用 Waitress。历史上传和导出目录同样不入库;新批准的正式 PDF 存在数据库的版本归档中。
|
|
|
|
企业微信接入及内网手机访问步骤见 [运行与升级说明](运行与升级说明.md#企业微信通知与公司-wi-fi-手机审批)。通知默认关闭,须配置真实 Webhook 和手机可达的内网地址后启用。源码测试使用模拟发送器,不会向真实群发消息。
|
|
|
|
## 检查和备份
|
|
|
|
```text
|
|
python -m pip install -r requirements-dev.txt
|
|
python -m pytest tests -q
|
|
node tests/test_money_js.cjs
|
|
python tools/browser_smoke.py
|
|
python tools/backup_db.py
|
|
```
|
|
|
|
浏览器验证依赖本机 Microsoft Edge;仅操作临时服务和临时数据库。测试输出在 `tools/out/`,不提交真实业务数据。
|
|
|
|
备份、恢复、升级限制、完整操作规则及验收步骤见 [运行与升级说明](运行与升级说明.md)。首次检查的历史问题见 [项目检查记录](项目检查-20260916.md),该记录描述修复前版本。
|
|
|
|
## 许可
|
|
|
|
本仓库为苏州博特维智能科技有限公司内部业务系统源码,仅供公司内部使用与维护。
|