返回

El Mallín 五金店管理系统

项目链接:

一套稳健的全栈 POS 与库存解决方案,旨在让传统家族企业实现现代化。它将手工账本转变为高性能的数字生态系统,具备实时库存跟踪、智能欠款管理和原子级事务完整性。

使用的技术

PHP 8.2Laravel 11React.jsInertia.jsPostgreSQLTailwind CSSSupabaseRailway系统架构
仪表盘与库存界面

🛠️ 挑战

“El Mallín” 是一家颇具口碑的家族五金店,其业务规模早已超出了传统纸质管理的能力。用纸质账本管理超过 20,000 种不同商品,造成了严重的瓶颈:

  • 📉 库存偏差:实际库存与记录数值之间存在差异。
  • 🐌 结账缓慢:手动查价和记录欠款拖慢了顾客服务。
  • 💸 通胀管理:在动荡的经济环境中,手动更新数千个价格根本无法实现。

我设计并开发了一套定制的数字化转型解决方案,用于集中管理运营、严格保障数据完整性,并提供实时的业务洞察。

🚀 核心功能

📦 智能库存与定价引擎

  • 高性能搜索: 实现了基于 SKU 和文本的优化索引,可在毫秒级内查询数千种商品。
  • 抗通胀定价: 构建了一个使用数据库事务的批量更新工具,可即时对整个品类按百分比调价——这是应对经济变化的关键功能。
  • 可视化库存预警: 前端界面与后端自动对低库存商品发出提醒,避免销售损失。

💳 集成 POS 与欠款账本

  • 原子事务: 销售和欠款记录都封装在数据库事务中(符合 ACID)。一次操作即可扣减库存、更新客户余额并记录流水。任何环节失败,整个操作都会回滚,确保 100% 的数据一致性。
  • 混合数据存储: 在 account_movements 表中使用 PostgreSQL 的 JSON 列存储非结构化的购物车明细(商品、数量),同时保持核心财务数据的结构化,以便快速生成报表。
  • 智能历史清理: 设计了一种清理算法,当客户余额归零时自动归档或删除其交易历史,从而随时间推移优化数据库存储和查询性能。
  • 专业开票: 集成 dompdf,即时生成带有品牌标识的 PDF 账户对账单和收据。

🔐 企业级安全与用户体验

  • 基于角色的访问控制(RBAC): 细粒度权限区分”管理员”(敏感财务数据、删除权限)与”员工”(销售、库存查看)的操作范围。
  • 移动优先的”货架旁”体验: 基于 Tailwind CSS 构建的完全响应式界面,让员工在店内为顾客服务时,可直接用手机查询库存和价格。

💻 技术架构:“现代单体”

我选择了 Laravel 11 + Inertia.js 架构,将单体应用的简洁性与单页应用(SPA)的交互性相结合。

  • 无缝的状态管理: Inertia.js 充当粘合剂,让我能够构建功能丰富、与 Laravel 后端紧密结合的 React 前端,无需复杂的 API 层或客户端状态库(如 Redux)。
  • 可靠的数据库: 部署在 Supabase(PostgreSQL) 上,利用连接池高效处理并发的 POS 请求。
  • 稳健的后端: 大量使用 Laravel 的服务容器和表单请求进行验证,确保任何无效数据都无法进入系统。
// Example: Atomic Consistency in Debt Registration
DB::transaction(function () use ($request, $client) {
    // 1. Log the financial movement
    AccountMovement::create([
        'client_id' => $client->id,
        'amount' => $request->total_amount,
        'type' => 'debt',
        'items' => json_encode($request->items)
    ]);

    // 2. Update Stock for every item in the cart
    foreach ($request->items as $item) {
        Product::find($item['id'])->decrement('stock', $item['quantity']);
    }

    // 3. Update Client Balance
    $client->increment('balance', $request->total_amount);
});

📊 业务成效

  • ⚡ 每位顾客的结账时间减少 60%,显著提升了服务效率。
  • 🎯 系统上线以来,实体库存与数字记录之间零差异。
  • 📈 店主首次能够实时掌握财务状况,这在该店 20 年的历史上尚属首次。
  • 🚀 通过即时批量调价实现经济适应能力,在通胀中保护利润空间。