企业采购管理平台V1.4.3发布
项目:企业内部采购平台
当前版本:V1.4.3
一、项目简介
本项目是一个面向企业内部的轻量采购系统,包含“前台商城 + 后台管理”两部分:
1) 员工在前台浏览商品、加入购物车并下单;
2) 订单进入“审批流”后由采购/财务等角色在后台审批;
3) 支持售后申请与采购侧处理;
4) 集成企业微信(WeCom)用于登录与通知。
二、技术栈与运行形态
- 语言:PHP(无框架,纯 PHP 文件路由)
- 数据库:MySQL(PDO)
- 前端:原生 HTML + CSS(/public/assets/css/styles.css + /public/assets/css/admin.css)
- 会话:PHP Session(可配置 session_name)
- 通知:企业微信 API(src/wecom.php)+ 站内通知表 notifications
- 数据库迁移:src/db.php(启动时 run_migrations),并提供 /admin/setup.php 一键执行 schema.sql
三、目录结构(关键)
- public/ Web 根目录(前台/后台入口都在这里)
- index.php 前台首页:商品列表/分类筛选/搜索
- product.php 商品详情
- cart.php 购物车
- checkout.php 下单:门店、地址、采购原因、备注、报损、重复拦截、拆单、创建订单
- order_success.php 下单成功页(支持多订单 ids)
- user.php 用户中心(订单/通知/售后入口等)
- after_sale.php 用户侧售后申请与沟通
- login.php / logout.php 企业微信登录/退出
- admin/ 后台管理入口
- index.php Dashboard
- orders.php 订单审批列表(含站内通知、审批操作)
- order_detail.php 订单详情/审批/驳回/转交(含审批节点、旧品报损信息、收货信息)
- orders_query.php 订单查询
- orders_export.php 导出
- products.php 商品管理
- product_new.php/edit.php 商品新增/编辑
- categories.php 分类管理(含“分类绑定审批流”)
- stores.php 门店管理(含重复下单拦截开关、CSV 导入)
- after_sales.php 售后管理(状态更新、回复、附件)
- audit_logs.php 审计日志
- permissions.php 审批流版本/节点配置(含必填理由开关)
- wecom.php 企业微信配置
- site_config.php 站点配置(标题/品牌等)
- setup.php 数据库初始化/迁移辅助
- src/
- db.php PDO 连接、迁移、ensure_* 建表/加列
- util.php 通用工具:CSRF、站点配置、审计、审批流、通知、图片处理、UI 组件(admin_nav/render_footer)
- auth.php 登录态、角色/权限、后台访问控制(含“仅审批用户”逻辑)
- wecom.php 企业微信:token、SSO、消息通知
- db/schema.sql 全量建表 SQL(用于初始化)
- scripts/ 脚本(自动确认收货/早期迁移/初始化 SQL)
四、核心业务流程(人话版)
4.1 登录与权限
- 登录:通过企业微信 code 换取用户信息,落库 users(若不存在则创建),写入 session。
- 角色:users.role(admin/procurement/finance/user),并支持 user_groups 里的 approver 组把普通用户提升为“仅审批后台访问”。
- 后台访问:auth.php 中 can_access_admin_backend() 和 is_approver_only_user() 控制。
4.2 下单(含重复拦截、报损、按审批流拆单)
checkout.php 负责下单,关键点:
- 采购原因:必填(purchase_reason)
- 定制备注:某些分类 require_remark=1 时,备注必填且限制 200 字
- 报损采购:purchase_type=damage 时必须填旧品名称/报损原因并上传旧品图片(生成 200/800 缩略图)
- 重复下单拦截:门店 enable_duplicate_intercept=1 时,检测近 3 个月同门店同商品下单;需要二次确认原因 duplicate_confirm_reason
- 按分类审批流拆单:商品分类可绑定 category_approval_flow_version_id;同一购物车会按“审批流版本”拆成多张 orders
4.3 审批流(可配置、支持转交、支持必填理由)
审批流数据模型:
- approval_flow_versions:审批流版本(可激活一个版本)
- approval_flow_nodes:审批节点(顺序、审批人类型、审批人范围、通过/驳回理由是否必填)
- order_approval_steps:订单实例化后的审批步骤(pending/waiting/approved/rejected)
核心逻辑在 util.php 的 approval_flow_*:
- approval_flow_init_order:按订单的 approval_flow_version_id 初始化 steps
- approval_flow_approve_current / approval_flow_reject_current:更新当前节点、推进/终止流程,写入 order_status_history,并在完成时把 orders.status 置为“已确认”
- approval_flow_transfer_current:把当前 pending 节点的 approver 直接改为指定 userid,实现“转交”
- approval_flow_notify_step:对当前节点的审批人推送站内通知 + 企业微信通知(无后台权限的会跳过并写审计)
4.4 售后
- 用户侧:after_sale.php 可创建售后、上传附件、追加沟通消息
- 采购侧:admin/after_sales.php 可更新状态、回复消息、上传附件
- 通知:创建售后时通知指定的 approval_notify_userids;采购回复/状态变更会通知订单用户
五、系统流程图(Mermaid)
5.1 下单到审批(含拆单)
```mermaid
%%{init: {'theme':'dark','themeVariables': {'fontFamily':'ui-sans-serif, system-ui','primaryColor':'#1f2937','primaryTextColor':'#e5e7eb','primaryBorderColor':'#374151','lineColor':'#9ca3af','secondaryColor':'#111827','tertiaryColor':'#0b1220'}}}%%
flowchart TD
A[用户登录] --> B[加入购物车]
B --> C[checkout 提交]
C --> D{校验}
D -->|采购原因必填/备注校验| E[通过]
D -->|失败| X[提示错误并停留]
E --> F{报损?}
F -->|是| G[校验旧品信息+图片]
F -->|否| H[进入重复下单检测]
G --> H
H --> I{门店开启重复拦截?}
I -->|否| K[按审批流版本分组拆单]
I -->|是| J{近3个月重复?}
J -->|否| K
J -->|是| L[二次确认原因必填]
L --> K
K --> M[创建 orders + order_items + history]
M --> N[初始化 order_approval_steps]
N --> O[通知首节点审批人]
O --> P[进入后台待审批列表]
```
5.2 审批节点推进
```mermaid
%%{init: {'theme':'dark','themeVariables': {'fontFamily':'ui-sans-serif, system-ui','primaryColor':'#1f2937','primaryTextColor':'#e5e7eb','primaryBorderColor':'#374151','lineColor':'#9ca3af','secondaryColor':'#111827','tertiaryColor':'#0b1220'}}}%%
stateDiagram-v2
[*] --> 待审批: 下单/初始化步骤
待审批 --> 待审批: 通过当前节点(推进到下一个节点)
待审批 --> 已确认: 最后节点通过(订单生效)
待审批 --> 已驳回: 任一节点驳回
待审批 --> 待审批: 转交(改当前节点审批人为指定 userid)
已确认 --> 已发货: 录入物流后(后台/待补)
已发货 --> 已完成: 7天自动确认收货(scripts/auto_confirm.php)
已驳回 --> [*]
已完成 --> [*]
```
六、数据库概览(关键表)
- users:企业微信用户(userid/name/role/department)
- stores:门店(name/invoice_title/enable_duplicate_intercept)
- categories:分类(require_remark/category_approval_flow_version_id)
- products/product_specs/product_images/product_details:商品、规格、图片、详情
- orders:订单主表(status、金额、地址快照、采购原因、重复确认原因、审批流版本与当前节点、报损字段、物流字段等)
- order_items:订单明细
- order_status_history:状态变更与节点历史(含转交/理由)
- approval_flow_versions / approval_flow_nodes:审批流配置
- order_approval_steps:订单实例审批步骤
- notifications:站内通知
- after_sales / after_sales_messages / after_sales_attachments:售后
- audit_logs:审计日志
- schema_migrations:迁移记录
七、部署与初始化(基于现有代码)
1) 配置数据库连接
- 优先用环境变量:DB_HOST / DB_NAME / DB_USER / DB_PASS
- 或直接编辑 config/config.php(不建议在文档中记录明文密码)
2) 初始化数据库(任选其一)
- 方式A:访问 /admin/setup.php(管理员登录后)点击“执行建表语句”
- 方式B:命令行执行 scripts/init_db.php(会执行 db/schema.sql 的建表语句)
3) uploads 目录
- /public/uploads 需要可写,setup.php 提供“一键创建”
4) 企业微信配置
- 在后台“系统 -> 企业微信配置”写入 corp_id、corp_secret、agent_id 等(存入 settings/app_cache)
八、版本迭代记录(按迁移/脚本时间线)
2025-??(早期)
- scripts/migrate_001_add_shipping.php:orders 增加 express_company / tracking_no(后续迁移中已纳入)
2025-12-25
- 20251225_00:settings/app_cache(配置与缓存)
- 20251225_01:product_images 增加 sort_order(图片排序)
- 20251225_02:orders 增加地址快照字段、采购原因、二次确认原因、物流字段、关键时间戳
- 20251225_03:stores 增加 enable_duplicate_intercept(重复下单拦截开关)
- 20251225_04:售后消息/附件表(after_sales_messages/after_sales_attachments)
- 20251225_05:audit_logs 审计日志表
- 20251225_06:order_duplicate_details(重复下单检测结果落库)
- 20251225_07:订单状态英文 -> 中文迁移
- 20251225_08:售后 type/status 英文 -> 中文迁移
- 20251225_09:user_groups + approver 组(“仅审批用户”支持)
- 20251225_10:可配置审批流版本/节点 + order_approval_steps 实例化(默认采购+财务两节点)
- 20251225_11:categories.require_remark + orders.remark(定制类备注)
2025-12-29
- 20251229_00:订单采购类型与报损信息(purchase_type/old_item_name/damage_reason + order_damage_images)
- 20251229_01:notifications 站内通知表
2026-01-12
- 20260112_00:products.need_damage_confirm(新购时提示“是否需要报损”)
2026-01-13
- 20260113_00:审批节点“通过/驳回理由必填”配置(require_approve_note/require_reject_note)
- 20260113_00:categories 增加 category_approval_flow_version_id(分类绑定审批流,为拆单提供依据)
九、当前开发情况(基于现有代码可见能力)
已具备:
- 前台:商品浏览、购物车、下单(含重复拦截、报损、备注校验、按审批流拆单)
- 后台:订单审批(通过/驳回/转交)、订单详情、查询导出、商品/分类/门店管理、售后管理、审计日志、审批流配置、站点/企业微信配置、数据库初始化
- 通知:站内通知 + 企业微信通知(审批待办、订单驳回/确认、售后相关)
- 自动确认:发货后 7 天自动将订单置为已完成(scripts/auto_confirm.php)
建议接下来的开发方向(按优先级)
- P0:补齐“发货/物流录入”后台能力(对应 orders.express_company/tracking_no/shipped_at/status 维护)
- P0:把前台 index.php 中“直接输出 DB 报错堆栈”的展示改为可控提示(避免泄露环境信息)
- P1:库存/规格库存的出入库与锁库存策略(目前偏静态展示)
- P1:更细的权限粒度与审批人范围(部门/岗位/动态规则)
- P2:审计日志与通知的检索、归档与性能优化(分页/索引)
HelloVM-AI驱动的新一代IT技术工作室版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!
