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

🛠️ 挑战
“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 年的历史上尚属首次。
- 🚀 通过即时批量调价实现经济适应能力,在通胀中保护利润空间。