功能目标
Project4 是一个完整的 ERP 企业资源规划系统,基于 Laravel 12 框架开发。系统采用分层架构设计,涵盖采购、仓储、生产、销售等核心业务流程,支持 RBAC 权限管理,提供数据看板等管理功能。
核心定位
Project4 以订单为驱动,打通”销售 → 生产 → 采购 → 仓库 → 成本 → 财务”完整链路,是面向制造型企业的全域 ERP 系统。
十大功能域
| 域 | 定位 | 实现层级 |
|---|---|---|
| 1. 基础数据中心 | 所有业务的主数据底座 | ✅ 核心已上线 |
| 2. 销售管理 | 收入入口,驱动后续所有业务 | 🔶 基础功能 |
| 3. 生产管理 | 制造核心,BOM 领料→完工 | 🔶 基础功能 |
| 4. 采购管理 | 供应链,闭环入库 | ✅ 核心已上线 |
| 5. 外加工管理 | 特殊供应链,外协制造 | 🔲 规划中 |
| 6. 仓库管理 | 物料实物台账,WMS 精细化 | ✅ 核心已上线 |
| 7. 成本管理 | ERP 灵魂,材料+人工+外包 | 🔲 规划中 |
| 8. 财务管理 | 应收/应付/账户/工资 | 🔲 规划中 |
| 9. 行政管理 | 报销/工资/资产 | 🔲 规划中 |
| 10. 报表中心 | 全域 BI,利润汇总 | 🔶 看板已有 |
核心业务闭环
┌──────────────────────────────────────┐
│ 基础数据中心(主数据层) │
│ 商品/BOM/客户/供应商/仓库/字典/员工 │
└──────────────┬───────────────────────┘
│ 主数据支撑
┌──────────────────────▼────────────────────────────┐
│ 业务执行层 │
│ │
┌──────▼──────┐ ┌──────────────┐ ┌──────────────┐ │
│ 销售管理 │ │ 生产管理 │ │ 采购管理 │ │
│ 报价→订单 │──▶│ 工单→领料 │◀──│ 申请→计划 │ │
│ 出库→收款 │ │ 工序→完工 │ │ 收货→入库 │ │
└──────┬──────┘ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │
│ ┌──────────▼────────────────────▼──────┐ │
│ │ 仓库管理(WMS) │ │
│ │ 材料库存←→出入库单←→成品库存 │ │
│ │ 调拨 / 盘点 / 批次FIFO / 仓位 │ │
│ └──────────────────────────────────────┘ │
│ │ │
└────────────────┐ ┌────────────────┘ │
▼ ▼ │
┌─────────────────────┐ │
│ 支撑层 │ │
│ 成本管理 财务管理 │ │
│ 外加工 行政管理 │ │
└──────────┬──────────┘ │
│ │
┌──────────▼──────────┐ │
│ 报表中心 / BI │ │
│ 销售/采购/库存/生产 │ │
│ 成本/利润/财务报表 │ │
└─────────────────────┘ │
└──────────────────────────────────────────────────┘
ERP 整体架构(升级版)
设计原则:订单驱动 · 单据走流水 · BOM 贯通成本 · SKU 唯一库存单位 ·
order_id全链路贯穿
四层体系
┌─────────────────────────────────────────────────────────────┐
│ Layer 1:基础数据中心(MDM) │
│ 数据字典 / 商品体系(SPU→SKU→BOM→Material) / 客户 / 供应商 │
│ 店铺 / 仓库结构 / 员工 / 部门 │
├─────────────────────────────────────────────────────────────┤
│ Layer 2:业务执行层 │
│ 销售 ←→ 生产 ←→ 采购 ←→ 外加工 ←→ 仓库 │
├─────────────────────────────────────────────────────────────┤
│ Layer 3:支撑层 │
│ 成本管理(材料+人工+外包) 财务管理(应收/应付/账户) │
│ 行政管理(报销/工资/资产) │
├─────────────────────────────────────────────────────────────┤
│ Layer 4:分析层 │
│ 数据看板 / 报表中心 / BI / 利润汇总 │
└─────────────────────────────────────────────────────────────┘
完整业务闭环(制造 ERP 标准)
1. 销售订单创建 ← 收入入口,驱动全链路
│
▼
2. 自动拆解生产工单 ← order_id 贯穿
│
▼
3. BOM 生成采购需求 ← 无 BOM = 无成本
│
▼
4. 采购入库(原材料) → 材料库存 ↑
│
▼
5. 生产领料(材料出库) → 材料库存 ↓
│
▼
6. 工序加工 / 外加工协同
│
▼
7. 成品完工入库 → 成品库存 ↑
│
▼
8. 销售出库 → 成品库存 ↓
│
▼
9. 自动计算成本(材料+人工+外包)
│
▼
10. 财务生成利润报表
三大关键设计约束
| 约束 | 规则 |
|---|---|
| ID 贯穿 | order_id 从销售订单开始,贯穿生产、采购、仓库、财务全链路 |
| 流水驱动库存 | 禁止直接改库存数量;必须通过「单据 → 流水 → 库存」 |
| BOM 驱动成本 | 无 BOM = 无法算材料成本;外加工 = 特殊供应商;SKU 是唯一库存单位 |
十大功能域详细清单
图例:✅ 已实现 🔶 部分实现 🔲 规划中
域 1:基础数据中心(MDM)
定位:所有业务的主数据底座,必须最先完善。
1.1 数据字典
| 功能点 | 状态 | 说明 |
|---|---|---|
| 供应商类型字典 | 🔲 | 原料供应商 / 外协厂 / 综合 |
| 客户类型字典 | 🔲 | 电商 / 门店 / 批发 |
| 税率配置 | 🔲 | 增值税率 9% / 13% 等 |
| 计量单位字典 | 🔲 | kg / 个 / m / 套 等 |
| 结算方式字典 | 🔲 | 月结 / 预付 / 货到付款 |
| 仓库类型字典 | 🔲 | 原料仓 / 成品仓 / 外协仓 |
路由:/base/dictionary(规划中)
1.2 商品体系(核心主数据)
层级结构:商品分类 → SPU → SKU → BOM → 材料(Material)
| 功能点 | 状态 | 说明 |
|---|---|---|
| 商品分类(多级树) | ✅ | /base/categories |
| 材料档案(编码/规格/单位/品类) | ✅ | /base/materials |
| 半成品档案 | ✅ | /base/semi-finished |
| SPU(商品主体) | ✅ | WMS /wms/catalog |
| SKU(规格变体) | ✅ | WMS /wms/catalog |
| BOM 物料清单 | ✅ | WMS /wms/catalog |
| BOM 自动生成采购需求 | 🔲 | 核心功能,规划中 |
| 材料 / SKU 绑定打通 | 🔶 | material_id 已有,完整打通规划中 |
| 批量导入材料 | 🔲 | Excel 导入 |
1.3 客户 / 供应商(往来单位)
| 功能点 | 状态 | 说明 |
|---|---|---|
| 往来单位 CRUD(多类型) | ✅ | 供应商 / 客户 / 外协 |
| 类型筛选 | ✅ | |
| 联系人管理 | ✅ | counterpart_employees |
| 绑定登录账号与角色 | ✅ | |
| 结算方式配置 | 🔲 | 关联数据字典 |
路由:/base/counterparts、/counterpart/employees
1.4 店铺档案
| 功能点 | 状态 | 说明 |
|---|---|---|
| 店铺档案 CRUD | ✅ | 含编码自动生成、状态管理 |
| 关联销售订单(店铺维度统计) | 🔲 |
路由:/base/stores
1.5 仓库结构 / 组织架构
| 功能点 | 状态 | 说明 |
|---|---|---|
| 仓库 → 库房 → 仓位 三级结构 | ✅ | WMS /wms/structure |
| 员工档案 | 🔶 | 职员表已有,独立员工模块规划中 |
| 部门管理 | 🔲 |
域 2:销售管理
流程:报价单 → 销售订单 → 出库单 → 客户收款
| 功能点 | 状态 | 说明 |
|---|---|---|
| 报价单 | 🔲 | |
| 销售订单(核心,含工作流状态) | ✅ | /sales/orders |
| 销售出库单(独立单据) | 🔲 | 当前出库逻辑内嵌于订单 |
| 客户收款单 | 🔲 | |
| 销项发票 | 🔲 | |
| 销售对账 | ✅ | /sales/reconciliations |
| 合同打印模板 | 🔲 |
已有路由:/sales/orders、/sales/reconciliations
规划路由:/sales/quotes、/sales/payments
域 3:生产管理
流程:销售订单 → 生产工单 → 工序任务 → 领料单 → 完工入库
| 功能点 | 状态 | 说明 |
|---|---|---|
| 生产工单(绑定销售订单) | ✅ | /production/plans |
| 生产异常登记 | ✅ | /production/exceptions |
| 领料单(材料出库独立单据) | 🔲 | 当前领料逻辑内嵌于生产计划 |
| 工序路线配置 | 🔲 | |
| 工序任务跟踪 | 🔲 | |
| 完工入库单 | 🔲 | 成品入库独立单据 |
| 生产进度看板 | 🔲 |
已有路由:/production/plans、/production/exceptions
规划路由:/production/picking、/production/finish、/production/routes
域 4:采购管理
流程:采购需求(BOM 生成)→ 采购计划 → 采购收货 → 入库 → 供应商付款
| 功能点 | 状态 | 说明 |
|---|---|---|
| 采购申请(含材料档案/供应商关联) | ✅ | /purchase/requests |
| 审批(通过/拒绝) | ✅ | |
| 采购计划(主数据绑定+收货进度条) | ✅ | /purchase/plans |
| 采购收货单(草稿→过账→自动入库) | ✅ | /purchase/receipts |
| 超量收货校验 | ✅ | |
| 采购退货单 | 🔲 | |
| 供应商付款单 | 🔲 | |
| 进项发票 | 🔲 | |
| BOM 自动生成采购需求 | 🔲 |
已有路由:/purchase/requests、/purchase/plans、/purchase/receipts
规划路由:/purchase/returns、/purchase/payments
域 5:外加工管理
外加工 = 特殊供应商(外协厂);逻辑复用采购模块,独立单据管理。
流程:生产任务 → 外加工发货 → 外协加工 → 外加工收货 → 成本归集
| 功能点 | 状态 | 说明 |
|---|---|---|
| 外加工发货单 | 🔲 | 发料给外协厂 |
| 外加工收货单 | 🔲 | 外协完工回厂入库 |
| 外加工结算单 | 🔲 | |
| 外加工成本归集 | 🔲 | 计入产品成本 |
规划路由:/outsource/outgoing、/outsource/incoming、/outsource/settlement
域 6:仓库管理(WMS)
流程:入库单 → 存储(仓位+批次)→ 出库单 → 调拨单 → 盘点单
| 功能点 | 状态 | 说明 |
|---|---|---|
| 材料库存(品类筛选/低库存预警) | ✅ | /warehouse/materials |
| 成品库存 | ✅ | /warehouse/products |
| 库存台账(全物料汇总) | ✅ | /warehouse/inventory-stocks |
| 盘点单(仓管录入/主管审核) | ✅ | /warehouse/count-sheets |
| 调拨单(仓位/仓库间转移) | 🔲 | |
| WMS 商品主数据(SPU/SKU/BOM) | ✅ | /wms/catalog |
| WMS 仓网结构(仓库→库房→仓位) | ✅ | /wms/structure |
| WMS 批次库存(FIFO) | ✅ | /wms/stock |
| 库存流水查询 | 🔲 | 按材料/SKU 查看历史 |
| 手动库存调整(调整单驱动) | 🔲 |
已有路由:/warehouse/materials、/warehouse/products、/warehouse/inventory-stocks、/warehouse/count-sheets、/wms/*
规划路由:/warehouse/transfers、/warehouse/adjustments
域 7:成本管理
构成:材料成本(BOM+领料)+ 人工成本(工序)+ 外包成本(外加工)
| 功能点 | 状态 | 说明 |
|---|---|---|
| 成本明细表(按工单/产品) | 🔲 | |
| 成本汇总报表 | 🔲 | |
| 产品成本自动计算 | 🔲 | 依赖 BOM + 领料 + 工序 + 外加工 |
| 标准成本 vs 实际成本差异 | 🔲 |
规划路由:/cost/details、/cost/summary
域 8:财务管理
流程:业务单据 → 自动生成财务数据(应收/应付)→ 收付款 → 账户余额
| 功能点 | 状态 | 说明 |
|---|---|---|
| 应收账款(销售) | 🔲 | |
| 应付账款(采购) | 🔲 | |
| 收款单 | 🔲 | |
| 付款单 | 🔲 | |
| 资金账户台账 | 🔲 | |
| 费用报销 | 🔲 |
规划路由:/finance/receivable、/finance/payable、/finance/accounts
域 9:行政管理
| 功能点 | 状态 | 说明 |
|---|---|---|
| 费用报销申请/审批 | 🔲 | |
| 员工工资计算 | 🔲 | |
| 工资条发放 | 🔲 | |
| 固定资产管理 | 🔲 | 可选 |
规划路由:/hr/expenses、/hr/salary
域 10:报表中心
| 功能点 | 状态 | 说明 |
|---|---|---|
| 数据看板(KPI 汇总) | ✅ | /dashboard |
| 销售报表 | 🔲 | |
| 采购报表 | 🔲 | |
| 库存报表 | 🔲 | |
| 生产报表 | 🔲 | |
| 成本报表 | 🔲 | |
| 利润报表 | 🔲 |
规划路由:/reports/sales、/reports/purchase、/reports/inventory、/reports/profit
实现状态总览
| 域 | 菜单位置 | 状态 | 当前覆盖率 |
|---|---|---|---|
| 基础数据中心 | 基础数据 | ✅ 核心上线 | ~65% |
| 销售管理 | 销售管理 | 🔶 部分上线 | ~45% |
| 生产管理 | 生产管理 | 🔶 部分上线 | ~40% |
| 采购管理 | 采购管理 | ✅ 核心上线 | ~75% |
| 外加工管理 | 外加工管理 | 🔲 规划中 | 0% |
| 仓库管理 | 库存管理 | ✅ 核心上线 | ~75% |
| 成本管理 | 成本管理 | 🔲 规划中 | 0% |
| 财务管理 | 财务管理 | 🔲 规划中 | 0% |
| 行政管理 | 行政管理 | 🔲 规划中 | 0% |
| 报表中心 | 报表中心 | 🔶 看板已有 | ~15% |
技术栈
后端
- 框架: Laravel 12
- PHP: 8.2+ (推荐 8.3)
- Web 服务器: Nginx 1.25+ (或 Apache 2.4+)
- 数据库: MySQL 8.0+ (或 MariaDB 10.5+)
- Excel 处理: PhpOffice/PhpSpreadsheet, PhpOffice/PhpWord
- ORM: Eloquent ORM
- 认证: Laravel Session (Web 认证)
- 编码规范: PSR-12,
declare(strict_types=1);
前端
- CSS 框架: TailwindCSS + DaisyUI
- JavaScript: Alpine.js(轻量级交互)
- 无障碍: ARIA 支持
- 主题: 深色模式兼容
开发工具
- 容器化: Docker Compose (可选)
- 包管理: Composer 2.0+
- 代码格式化: Laravel Pint
PHP 扩展要求
必需扩展:
pdo_mysql,mysqli– 数据库连接mbstring,iconv– 字符串处理json,xml– 数据处理zip– Excel 文件处理必需fileinfo,openssl,tokenizer,ctype,curl– 基础功能
推荐扩展(生产环境):
opcache– PHP 代码缓存,显著提升性能redis– 缓存和会话存储(如使用)
目录结构
project4/
├── app/
│ ├── Console/
│ │ └── Commands/ # Artisan 命令
│ ├── Exceptions/
│ │ └── Handler.php # 全局异常处理器
│ ├── Http/
│ │ ├── Controllers/
│ │ │ ├── Admin/ # 后台管理控制器
│ │ │ │ ├── AuthController.php # 认证控制器
│ │ │ │ ├── DashboardController.php # 数据看板控制器
│ │ │ │ ├── PurchaseController.php # 采购管理控制器
│ │ │ │ ├── WarehouseController.php # 仓储管理控制器
│ │ │ │ ├── ProductionController.php # 生产管理控制器
│ │ │ │ ├── SalesController.php # 销售管理控制器
│ │ │ │ └── PermissionController.php # 权限管理控制器
│ │ │ └── Controller.php # 基础控制器
│ │ ├── Middleware/ # 中间件
│ │ │ ├── PermissionMiddleware.php # 权限检查中间件
│ │ │ └── OperationLogMiddleware.php # 操作日志中间件
│ │ └── Traits/
│ │ └── ApiResponse.php # API 响应 Trait
│ ├── Repositories/ # 数据访问层(可选)
│ │ ├── RepositoryInterface.php # Repository 接口
│ │ └── BaseRepository.php # Repository 基础实现
│ ├── Models/ # 数据模型
│ │ ├── User.php # 用户模型
│ │ ├── Role.php # 角色模型
│ │ ├── Permission.php # 权限模型
│ │ ├── PurchaseRequest.php # 采购申请模型
│ │ ├── PurchasePlan.php # 采购计划模型
│ │ ├── Material.php # 材料模型
│ │ ├── MaterialStock.php # 材料库存模型
│ │ ├── MaterialInboundOrder.php # 材料入库单模型
│ │ ├── MaterialOutboundOrder.php # 材料出库单模型
│ │ ├── Product.php # 成品模型
│ │ ├── ProductStock.php # 成品库存模型
│ │ ├── ProductInboundOrder.php # 成品入库单模型
│ │ ├── ProductOutboundOrder.php # 成品出库单模型
│ │ ├── ProductionPlan.php # 生产计划模型
│ │ ├── ProductionRequisition.php # 生产领用单模型
│ │ ├── ProductionException.php # 生产异常模型
│ │ ├── SalesOrder.php # 销售订单模型
│ │ ├── SalesReconciliation.php # 销售对账模型
│ │ └── OperationLog.php # 操作日志模型
│ ├── Providers/
│ │ └── AppServiceProvider.php # 服务提供者
│ └── Services/ # 服务层
│ ├── AuthService.php # 认证服务
│ ├── DashboardService.php # 看板服务
│ ├── NumberGeneratorService.php # 编号生成服务
│ ├── PurchaseService.php # 采购服务
│ ├── WarehouseService.php # 仓储服务
│ ├── ProductionService.php # 生产服务
│ ├── SalesService.php # 销售服务
│ ├── OperationLogService.php # 操作日志服务
│ └── ExcelService.php # Excel 处理服务
├── bootstrap/
│ └── app.php # 应用启动文件
├── config/ # 配置文件
│ ├── app.php # 应用配置
│ ├── auth.php # 认证配置
│ ├── database.php # 数据库配置
│ ├── session.php # 会话配置
│ ├── cache.php # 缓存配置
│ ├── filesystems.php # 文件系统配置
│ ├── logging.php # 日志配置
│ └── queue.php # 队列配置
├── database/
│ ├── migrations/ # 数据库迁移文件
│ │ ├── 2025_01_01_000001_create_users_table.php
│ │ ├── 2025_01_01_000002_create_roles_table.php
│ │ ├── 2025_01_01_000003_create_permissions_table.php
│ │ ├── 2025_01_01_000004_create_role_permissions_table.php
│ │ ├── 2025_01_01_000005_create_user_roles_table.php
│ │ ├── 2025_01_01_010001_create_purchase_requests_table.php
│ │ ├── 2025_01_01_010002_create_purchase_plans_table.php
│ │ ├── 2025_01_01_020001_create_materials_table.php
│ │ ├── 2025_01_01_020002_create_material_stocks_table.php
│ │ ├── 2025_01_01_020003_create_material_inbound_orders_table.php
│ │ ├── 2025_01_01_020004_create_material_outbound_orders_table.php
│ │ ├── 2025_01_01_020006_create_products_table.php
│ │ ├── 2025_01_01_020007_create_product_stocks_table.php
│ │ ├── 2025_01_01_020008_create_product_inbound_orders_table.php
│ │ ├── 2025_01_01_020009_create_product_outbound_orders_table.php
│ │ ├── 2025_01_01_030001_create_production_plans_table.php
│ │ ├── 2025_01_01_030002_create_production_requisitions_table.php
│ │ ├── 2025_01_01_030003_create_production_exceptions_table.php
│ │ ├── 2025_01_01_040001_create_sales_orders_table.php
│ │ ├── 2025_01_01_040002_create_sales_reconciliations_table.php
│ │ └── 2025_01_01_050001_create_operation_logs_table.php
│ └── seeders/ # 数据填充器
├── public/ # Web 根目录(Nginx 指向)
│ └── index.php
├── resources/
│ ├── css/
│ │ └── app.css # 样式文件
│ ├── js/
│ │ └── app.js # JavaScript 文件
│ └── views/
│ └── admin/ # 后台管理视图
│ ├── dashboard/ # 数据看板视图
│ ├── purchase/ # 采购管理视图
│ ├── warehouse/ # 仓储管理视图
│ ├── production/ # 生产管理视图
│ ├── sales/ # 销售管理视图
│ ├── auth/ # 认证视图
│ └── permission/ # 权限管理视图
├── routes/
│ ├── web.php # Web 路由
│ ├── api.php # API 路由
│ └── console.php # 控制台路由
├── storage/ # 存储目录
├── tests/ # 测试文件
├── .env.example # 环境变量示例文件
├── nginx.conf.example # Nginx 配置示例
├── DEPLOYMENT.md # 部署文档
└── vite.config.js # Vite 构建配置
数据结构
权限体系(RBAC)
users(用户表)
id– 主键username– 用户名(唯一)password– 密码real_name– 真实姓名email– 邮箱(唯一)phone– 手机号(唯一)status– 状态(0=禁用,1=启用)last_login_at– 最后登录时间last_login_ip– 最后登录IP
roles(角色表)
id– 主键name– 角色名称(唯一)code– 角色代码(唯一)description– 角色描述status– 状态(0=禁用,1=启用)sort_order– 排序
permissions(权限表)
id– 主键name– 权限名称code– 权限代码(唯一)type– 权限类型(menu=菜单权限,button=按钮权限,data=数据权限)module– 所属模块action– 操作动作description– 权限描述parent_id– 父级ID(用于菜单层级)sort_order– 排序
role_permissions(角色权限关联表)
role_id– 角色IDpermission_id– 权限ID
user_roles(用户角色关联表)
user_id– 用户IDrole_id– 角色ID
采购管理
purchase_requests(采购申请表)
id– 主键request_no– 申请单号(唯一)applicant_id– 申请人IDrequest_date– 申请日期material_name– 材料名称specification– 规格quantity– 申请数量unit– 单位purpose– 用途说明status– 状态(0=待审批,1=已批准,2=已拒绝,3=已取消)approver_id– 审批人IDapproved_at– 审批时间
purchase_plans(采购计划表)
id– 主键plan_no– 计划单号(唯一)purchase_request_id– 关联采购申请IDcreator_id– 创建人IDplan_date– 计划日期supplier– 供应商material_name– 材料名称quantity– 计划数量unit_price– 单价total_amount– 总金额expected_arrival_date– 预计到货日期status– 状态(0=待执行,1=已到货,2=已取消)
仓储管理
materials(材料表)
id– 主键material_code– 材料编码(唯一)material_name– 材料名称specification– 规格unit– 单位category– 分类
material_stocks(材料库存表)
id– 主键material_id– 材料ID(唯一)quantity– 库存数量min_stock– 最低库存预警max_stock– 最高库存warehouse_location– 仓库位置
material_inbound_orders(材料入库单表)
id– 主键order_no– 入库单号(唯一)purchase_plan_id– 关联采购计划IDmaterial_id– 材料IDoperator_id– 操作人IDinbound_date– 入库日期quantity– 入库数量batch_no– 批次号
material_outbound_orders(材料出库单表)
id– 主键order_no– 出库单号(唯一)production_requisition_id– 关联生产领用单IDmaterial_id– 材料IDoperator_id– 操作人IDoutbound_date– 出库日期quantity– 出库数量purpose– 用途
products(成品表)
id– 主键product_code– 成品编码(唯一)product_name– 成品名称specification– 规格unit– 单位category– 分类
product_stocks(成品库存表)
id– 主键product_id– 成品ID(唯一)quantity– 库存数量min_stock– 最低库存预警max_stock– 最高库存warehouse_location– 仓库位置
product_inbound_orders(成品入库单表)
id– 主键order_no– 入库单号(唯一)production_plan_id– 关联生产计划IDproduct_id– 成品IDoperator_id– 操作人IDinbound_date– 入库日期quantity– 入库数量batch_no– 批次号
product_outbound_orders(成品出库单表)
id– 主键order_no– 出库单号(唯一)sales_order_id– 关联销售订单IDproduct_id– 成品IDoperator_id– 操作人IDoutbound_date– 出库日期quantity– 出库数量
生产管理
production_plans(生产计划表)
id– 主键plan_no– 计划单号(唯一)creator_id– 创建人IDplan_date– 计划日期start_date– 开始日期end_date– 结束日期product_id– 成品IDplanned_quantity– 计划数量completed_quantity– 已完成数量status– 状态(0=待开始,1=进行中,2=已完成,3=已取消)
production_requisitions(生产领用单表)
id– 主键requisition_no– 领用单号(唯一)production_plan_id– 关联生产计划IDmaterial_id– 材料IDoperator_id– 操作人IDrequisition_date– 领用日期quantity– 领用数量
production_exceptions(生产异常表)
id– 主键exception_no– 异常单号(唯一)production_plan_id– 关联生产计划IDreporter_id– 报告人IDexception_date– 异常日期exception_type– 异常类型(material_shortage=原料不足,equipment_failure=设备故障,quality_issue=质量问题,other=其他)title– 异常标题description– 异常描述solution– 解决方案status– 状态(0=待处理,1=处理中,2=已解决,3=已关闭)handler_id– 处理人IDresolved_at– 解决时间
销售管理
sales_orders(销售订单表)
id– 主键order_no– 订单号(唯一)customer_name– 客户名称customer_contact– 客户联系方式creator_id– 创建人IDorder_date– 订单日期product_id– 成品IDquantity– 销售数量unit_price– 单价total_amount– 总金额received_amount– 已收金额status– 状态(0=待出库,1=部分出库,2=已出库,3=已完成)
sales_reconciliations(销售对账表)
id– 主键reconciliation_no– 对账单号(唯一)sales_order_id– 关联销售订单IDproduct_outbound_order_id– 关联出库单IDcreator_id– 创建人IDreconciliation_date– 对账日期outbound_quantity– 出库数量sales_amount– 销售金额receivable_amount– 应收金额received_amount– 已收金额
系统日志
operation_logs(操作日志表)
id– 主键user_id– 用户IDtype– 操作类型module– 所属模块action– 操作动作description– 操作描述data– 操作数据(JSON)ip– IP地址user_agent– 用户代理
架构说明
分层架构
系统采用经典的分层架构设计:
┌──────────────────────────┐
│ 表现层(Web / App) │
│ 登录|数据看板|业务菜单 │
└──────────▲───────────────┘
│
┌──────────┴───────────────┐
│ 应用服务层(Service)│
│ 采购|仓储|生产|销售|权限 │
└──────────▲───────────────┘
│
┌──────────┴───────────────┐
│ 领域层(Domain) │
│ 单据|流程|库存|权限模型 │
└──────────▲───────────────┘
│
┌──────────┴───────────────┐
│ 数据层(DB) │
│ 主数据|业务单据|日志 │
└──────────────────────────┘
核心设计原则
- 控制器仅作为输入入口:所有业务逻辑封装在 Service 层
- 数据访问抽象:使用 Eloquent ORM,不允许在业务中直接写 SQL
- 单据驱动库存:所有库存变化必须通过单据驱动,不允许直接修改库存数量
- 原材料库存 ≠ 成品库存:严格区分两种库存类型
- RBAC 权限模型:用户 → 角色 → 权限的三层权限体系
- 简化业务流程:聚焦核心业务,暂不支持材料退料等复杂流程
服务层职责
- AuthService:用户认证、密码管理
- DashboardService:数据看板数据汇总
- NumberGeneratorService:各类单据编号生成
- PurchaseService:采购申请、采购计划业务逻辑
- WarehouseService:库存管理、入库/出库业务逻辑
- ProductionService:生产计划、领用、异常处理业务逻辑
- SalesService:销售订单、对账业务逻辑
- OperationLogService:操作日志记录服务
数据访问层(Repository)
系统提供了 Repository 接口和基础实现,用于抽象数据访问逻辑:
- RepositoryInterface:定义标准的数据访问接口
- BaseRepository:提供通用的 CRUD 操作方法
- 子类可以继承
BaseRepository并实现自定义的过滤和查询逻辑
使用方式(可选):
// 创建具体的 Repository
class PurchaseRequestRepository extends BaseRepository
{
public function __construct(PurchaseRequest $model)
{
parent::__construct($model);
}
protected function applyFilters($query, array $filters): void
{
if (isset($filters['status'])) {
$query->where('status', $filters['status']);
}
}
}
注意:当前 Service 层直接使用 Eloquent Model,Repository 层为可选实现,符合设计规范但非强制使用。
统一响应格式
系统提供了统一的 API 响应格式,通过 ApiResponse Trait 实现:
响应格式:
{
"success": true,
"code": 0,
"message": "操作成功",
"data": {}
}
错误码定义:
0– 成功1001– 未登录1002– 参数错误1003– 资源不存在1004– 库存不足1005– 权限不足2000– 服务器错误
使用方法:
// 在 Controller 中使用
return $this->success($data, '操作成功');
return $this->error('操作失败', self::ERROR_CODE_SERVER_ERROR);
return $this->unauthorized('请先登录');
return $this->forbidden('权限不足');
return $this->paginatedResponse($paginator);
异常处理
系统提供了全局异常处理器 App\Exceptions\Handler,统一处理所有 API 异常:
处理的异常类型:
ValidationException→ 1002 参数错误AuthenticationException→ 1001 未登录AccessDeniedHttpException→ 1005 权限不足NotFoundHttpException/ModelNotFoundException→ 1003 资源不存在MethodNotAllowedHttpException→ 1002 参数错误- 其他异常 → 2000 服务器错误
自动识别:对于 admin/api/* 路由或 expectsJson() 的请求,自动返回 JSON 格式的错误响应。
中间件
系统提供了以下中间件:
- PermissionMiddleware(权限检查中间件)
- 检查用户是否已登录
- 检查用户账号状态
- 检查用户是否拥有指定权限(可选)
- 使用方式:
Route::middleware(['permission:permission_code'])
- OperationLogMiddleware(操作日志中间件)
- 自动记录所有写操作(POST、PUT、PATCH、DELETE)
- 自动提取模块、操作类型、操作描述
- 排除敏感信息(密码等)
- 已自动应用到所有 Web 路由
基础 Controller
所有 Controller 继承自 App\Http\Controllers\Controller,提供以下功能:
- 统一响应方法:通过
ApiResponseTrait 提供 - 权限检查方法:
requireAuth()– 检查用户是否已登录requireActiveUser()– 检查用户是否已登录且未被禁用
- 用户信息获取:
currentUser()– 获取当前登录用户currentUserId()– 获取当前登录用户 ID
数据关系
采购计划 ──→ 材料入库
↓
原材料库存
↓
生产领用单
↓
生产计划
↓
成品入库
↓
成品库存
↓
销售出库
↓
销售对账
安全机制
输入验证
- 所有用户输入必须通过 Laravel 的验证规则
- 使用参数化查询,严禁 SQL 注入
- 文件上传必须验证文件类型和大小
认证与授权
- 使用 Laravel Session 进行 Web 认证
- 基于 RBAC 的权限控制
- 所有需要权限的操作必须检查用户权限
CSRF 保护
- 所有表单必须带有 CSRF Token
- Laravel 自动处理 CSRF 验证
数据权限
- 支持基于角色的数据权限控制
- 操作日志记录所有关键操作
密码安全
- 使用 Hash::make() 加密密码
- 密码修改需要验证原密
