中小型代工厂普遍存在物料管理依赖人工纸质记录、账实不符、找料困难、盘点耗时等问题。传统ERP过于厚重且缺乏PDA作业支持,导致库存准确率通常低于90%,每月因物料错发、漏发、呆滞造成的生产停工或成本浪费平均达5%~8%。本系统针对上述痛点,提供一套轻量、可快速部署的WMS(仓库管理系统),实现物料从进厂到出厂的全流程数字化追踪,帮助代工厂以较低成本(无需改造重型货架)将库存准确率提升至98%以上,盘点效率提升3倍。
项目核心功能:
1、基础数据管理模块,功能包含多仓库/多库位(支持货架、托盘、储位码)、物料档案(物料编码、名称、规格、最小库存、最大库存)、供应商/客户信息,建立统一物料主数据,一物一码,消除“一料多名”混乱,基础数据维护效率提升70%;
2、入库管理模块,功能包含采购入库(扫码收货、自动核对采购单)、生产退料(不良品/余料退库)、退货供应商、入库上架指引(推荐空闲库位),入库作业时间缩短40%,入库差错率由3%降至0.5%;
3、出库管理模块,功能包含领料出库(生产工单扫码领料)、销售发货(按订单拣货)、出库校验(扫码核对物料与数量),出库准确率从92%提升至99%,领料等待时间减少50%;
4、实时库存盘点模块,功能包含按库区/物料分类动态盘点(支持全盘、抽盘)、PDA扫码盘点(自动对比账面库存)、盘点差异单生成及审核、盈亏调整记录,盘点周期由月度停线2天缩短至半日在线盘点,人工录入错误降为0.05%;
5、PDA扫码作业模块,功能包含支持Android PDA设备,集成扫描头,覆盖入库、出库、移库、盘点、查询等所有作业环节,作业人员无需培训即可上手,单次扫码响应<0.5秒,日处理单据量可达500+;
技术难点与解决方案:
1、PDA离线作业数据同步,仓库网络覆盖不全(如地下室、金属货架区),离线时若无法上传数据会导致重复扫码或数据丢失,影响库存实时性(延迟可达30分钟以上),解决方案① PDA端集成SQLite本地数据库,支持离线扫码入库/出库,操作记录保存在本地;② 采用同步冲突解决策略:以最后一次操作为准,并记录离线操作时间戳;③ 网络恢复后自动批量上传(HTTP队列),并校验库存版本号防止脏数据,实现离线作业成功率100%,数据同步延迟<5秒(恢复网络后);
2、库存账实不一致(盘点差异频发),原人工盘点时每月差异笔数80+,差异金额占库存总额约4%,解决方式① 实施动态盘点策略:高周转物料(A类)每周循环盘点,低周转物料(C类)每月一次;② PDA扫码强制校验库位与物料编码,避免“放错货架”导致错发;③ 每次出库/入库后自动触发异步库存对账任务,对比数据库库存与库位实际剩余(基于操作记录推算),发现差异立即生成预警工单。经过三个月迭代,月度差异笔数降至8笔以内,差异金额占比<0.2%;
项目整体技术架构:
微服务架构:按业务边界拆分为三个独立服务:
1、用户权限服务:负责登录、角色、菜单、操作日志;
2、库存中心服务:负责多仓库库存管理、批次追踪、库存流水、冻结/解冻、盘点调整;
3、单据中心服务:负责入库单、出库单、退料单、发货单的生成与状态流转;
前端:Vue.js + Element UI,通过axios调用后端网关。
后端核心:Spring Boot、 Spring Cloud Alibaba(Nacos作为注册中心,Feign作为声明式HTTP客户端)。
数据层:MySQL、MyBatis-Plus。
分布式协调:Redis(分布式锁、库存预扣减)、Seata(AT模式分布式事务,跨服务调用时保证最终一致性)。
在项目中,作为后端核心开发,我主要负责以下模块的功能设计以及开发:
1、库存流水表设计,设计库存流水记录表(stock_flow_log),记录每一次库存变动(入库、出库、冻结、解冻、盘点调整),包含流水号、物料ID、仓库ID、批次号、变动数量、变动前/后库存、操作人、操作时间、业务单据号、业务类型等字段,流水记录写入性能 <10ms/条,支持每天 10万+ 笔流水,全链路追溯查询 <1秒;
2、多仓库多批次扣减逻辑实现,实现按“先进先出”和“指定批次”两种策略的库存扣减算法,支持从多个批次中依次扣减,并更新批次库存表(stock_batch),扣减逻辑单次执行时间 <50ms,支持同时处理 50个批次 的扣减;
3、库存扣减接口开发,提供Feign接口给单据中心服务调用,包括预扣库存、确认扣减、释放预扣、直接扣减等操作,使用分布式锁防止并发超扣,接口TP99 <100ms,支持 200 TPS 的扣减请求;
4、高并发死锁优化,解决多线程同时扣减同一物料、同一仓库下不同批次时的MySQL死锁问题,通过优化索引、调整隔离级别、引入Redis分布式锁三重手段,死锁率从 5% 降至 0.01% 以下,接口吞吐量提升 3倍;