ERP 系统

功能目标

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 – 角色ID
  • permission_id – 权限ID

user_roles(用户角色关联表)

  • user_id – 用户ID
  • role_id – 角色ID

采购管理

purchase_requests(采购申请表)

  • id – 主键
  • request_no – 申请单号(唯一)
  • applicant_id – 申请人ID
  • request_date – 申请日期
  • material_name – 材料名称
  • specification – 规格
  • quantity – 申请数量
  • unit – 单位
  • purpose – 用途说明
  • status – 状态(0=待审批,1=已批准,2=已拒绝,3=已取消)
  • approver_id – 审批人ID
  • approved_at – 审批时间

purchase_plans(采购计划表)

  • id – 主键
  • plan_no – 计划单号(唯一)
  • purchase_request_id – 关联采购申请ID
  • creator_id – 创建人ID
  • plan_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 – 关联采购计划ID
  • material_id – 材料ID
  • operator_id – 操作人ID
  • inbound_date – 入库日期
  • quantity – 入库数量
  • batch_no – 批次号

material_outbound_orders(材料出库单表)

  • id – 主键
  • order_no – 出库单号(唯一)
  • production_requisition_id – 关联生产领用单ID
  • material_id – 材料ID
  • operator_id – 操作人ID
  • outbound_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 – 关联生产计划ID
  • product_id – 成品ID
  • operator_id – 操作人ID
  • inbound_date – 入库日期
  • quantity – 入库数量
  • batch_no – 批次号

product_outbound_orders(成品出库单表)

  • id – 主键
  • order_no – 出库单号(唯一)
  • sales_order_id – 关联销售订单ID
  • product_id – 成品ID
  • operator_id – 操作人ID
  • outbound_date – 出库日期
  • quantity – 出库数量

生产管理

production_plans(生产计划表)

  • id – 主键
  • plan_no – 计划单号(唯一)
  • creator_id – 创建人ID
  • plan_date – 计划日期
  • start_date – 开始日期
  • end_date – 结束日期
  • product_id – 成品ID
  • planned_quantity – 计划数量
  • completed_quantity – 已完成数量
  • status – 状态(0=待开始,1=进行中,2=已完成,3=已取消)

production_requisitions(生产领用单表)

  • id – 主键
  • requisition_no – 领用单号(唯一)
  • production_plan_id – 关联生产计划ID
  • material_id – 材料ID
  • operator_id – 操作人ID
  • requisition_date – 领用日期
  • quantity – 领用数量

production_exceptions(生产异常表)

  • id – 主键
  • exception_no – 异常单号(唯一)
  • production_plan_id – 关联生产计划ID
  • reporter_id – 报告人ID
  • exception_date – 异常日期
  • exception_type – 异常类型(material_shortage=原料不足,equipment_failure=设备故障,quality_issue=质量问题,other=其他)
  • title – 异常标题
  • description – 异常描述
  • solution – 解决方案
  • status – 状态(0=待处理,1=处理中,2=已解决,3=已关闭)
  • handler_id – 处理人ID
  • resolved_at – 解决时间

销售管理

sales_orders(销售订单表)

  • id – 主键
  • order_no – 订单号(唯一)
  • customer_name – 客户名称
  • customer_contact – 客户联系方式
  • creator_id – 创建人ID
  • order_date – 订单日期
  • product_id – 成品ID
  • quantity – 销售数量
  • unit_price – 单价
  • total_amount – 总金额
  • received_amount – 已收金额
  • status – 状态(0=待出库,1=部分出库,2=已出库,3=已完成)

sales_reconciliations(销售对账表)

  • id – 主键
  • reconciliation_no – 对账单号(唯一)
  • sales_order_id – 关联销售订单ID
  • product_outbound_order_id – 关联出库单ID
  • creator_id – 创建人ID
  • reconciliation_date – 对账日期
  • outbound_quantity – 出库数量
  • sales_amount – 销售金额
  • receivable_amount – 应收金额
  • received_amount – 已收金额

系统日志

operation_logs(操作日志表)

  • id – 主键
  • user_id – 用户ID
  • type – 操作类型
  • module – 所属模块
  • action – 操作动作
  • description – 操作描述
  • data – 操作数据(JSON)
  • ip – IP地址
  • user_agent – 用户代理

架构说明

分层架构

系统采用经典的分层架构设计:

┌──────────────────────────┐
│        表现层(Web / App) │
│  登录|数据看板|业务菜单   │
└──────────▲───────────────┘
           │
┌──────────┴───────────────┐
│        应用服务层(Service)│
│  采购|仓储|生产|销售|权限 │
└──────────▲───────────────┘
           │
┌──────────┴───────────────┐
│        领域层(Domain)    │
│  单据|流程|库存|权限模型 │
└──────────▲───────────────┘
           │
┌──────────┴───────────────┐
│        数据层(DB)        │
│  主数据|业务单据|日志    │
└──────────────────────────┘

核心设计原则

  1. 控制器仅作为输入入口:所有业务逻辑封装在 Service 层
  2. 数据访问抽象:使用 Eloquent ORM,不允许在业务中直接写 SQL
  3. 单据驱动库存:所有库存变化必须通过单据驱动,不允许直接修改库存数量
  4. 原材料库存 ≠ 成品库存:严格区分两种库存类型
  5. RBAC 权限模型:用户 → 角色 → 权限的三层权限体系
  6. 简化业务流程:聚焦核心业务,暂不支持材料退料等复杂流程

服务层职责

  • 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 格式的错误响应。

中间件

系统提供了以下中间件:

  1. PermissionMiddleware(权限检查中间件)
    • 检查用户是否已登录
    • 检查用户账号状态
    • 检查用户是否拥有指定权限(可选)
    • 使用方式:Route::middleware(['permission:permission_code'])
  2. OperationLogMiddleware(操作日志中间件)
    • 自动记录所有写操作(POST、PUT、PATCH、DELETE)
    • 自动提取模块、操作类型、操作描述
    • 排除敏感信息(密码等)
    • 已自动应用到所有 Web 路由

基础 Controller

所有 Controller 继承自 App\Http\Controllers\Controller,提供以下功能:

  • 统一响应方法:通过 ApiResponse Trait 提供
  • 权限检查方法
    • requireAuth() – 检查用户是否已登录
    • requireActiveUser() – 检查用户是否已登录且未被禁用
  • 用户信息获取
    • currentUser() – 获取当前登录用户
    • currentUserId() – 获取当前登录用户 ID

数据关系

采购计划 ──→ 材料入库
                 ↓
           原材料库存
                 ↓
          生产领用单
                 ↓
            生产计划
                 ↓
           成品入库
                 ↓
            成品库存
                 ↓
           销售出库
                 ↓
            销售对账

安全机制

输入验证

  • 所有用户输入必须通过 Laravel 的验证规则
  • 使用参数化查询,严禁 SQL 注入
  • 文件上传必须验证文件类型和大小

认证与授权

  • 使用 Laravel Session 进行 Web 认证
  • 基于 RBAC 的权限控制
  • 所有需要权限的操作必须检查用户权限

CSRF 保护

  • 所有表单必须带有 CSRF Token
  • Laravel 自动处理 CSRF 验证

数据权限

  • 支持基于角色的数据权限控制
  • 操作日志记录所有关键操作

密码安全

  • 使用 Hash::make() 加密密码
  • 密码修改需要验证原密

Leave a Reply

您的邮箱地址不会被公开。 必填项已用 * 标注