1、立项背景和目标:公司服务的中小型制造企业,普遍还在用 Excel 和纸质单据管理采购、仓库、生产和财务,数据分散、库存不准、成本算不清。项目目标是做一套多租户的 SaaS 制造业 ERP(Sunrocks ERP),企业注册后就能用,把"采购—仓储—生产—销售—财务"这条主线全部放到线上闭环管理,让库存数据实时准确、生产成本可追溯,降低企业的信息化门槛。
2、软件功能和核心模块: (1)基础资料:物料/SKU、产品分类、单位换算、供应商、客户、仓库库位、数据字典、编码规则; (2)采购管理:请购单、采购计划、采购订单、来料检验(IQC)、采购入库、退货、供应商价格记录; (3)仓储管理:出入库、调拨、盘点、库存调整、库存预留、批次/序列号、呆滞料分析、安全库存预警、库龄与出入库统计; (4)生产管理:需求单、生产计划、生产订单、领料、工序/工位/设备/人员管理、线边库、成品入库、成品检验(FQC)、返工、报废、加工损耗、生产成本核算; (5)委外与工厂协同:委外加工发料、收货、退料、结算,以及外协工厂的库存和对账; (6)销售管理:销售订单、价格单、折扣单、发货、退货、售后、开票、销售统计; (7)财务管理:应收应付、收付款、日记账、发票、固定资产、结算审批、财务报表; (8)系统管理:多租户企业注册、用户角色权限、菜单功能、操作日志、消息公告、中/英/泰多语言,支持微信支付、小程序和 OpenAPI 对外对接。
3、业务流程:销售订单或需求单 → 生成生产计划,经 MRP 运算得出物料缺口 → 请购/采购下单 → 来料检验后入库 → 生产领料、按工序报工 → 成品检验后入库 → 销售发货出库 → 生成应收应付,完成收付款和结算 → 汇总成库存、成本、销售、财务等多维度报表,供管理层决策。
1、整体架构和设计思路:系统是 Spring Boot 2.7 单体应用,打 WAR 包部署,分 Controller / Service(Manager)/ Mapper 三层。持久层用 MyBatis-Plus + MySQL,Redis 做缓存和会话存储,Sa-Token 负责登录认证和会话续期。前端最早是 JSP + jQuery,现在正逐步迁到 Thymeleaf。多租户采用共享库、共享表的方式,用 COMPANY_CODE 字段隔离各企业数据。国际化用 Spring MessageSource 加前端 I18N 组件,支持中英泰三种语言。对外提供 OpenAPI,并接入了微信支付 V3 和小程序。
2、我负责的模块和结果: (1)设计并实现多租户数据隔离:基于 MyBatis-Plus 的 TenantLineInnerInterceptor 写了租户处理器,所有 SQL 自动加上租户条件,全局表单独配白名单。业务代码不用再手写租户过滤,彻底避免了跨租户数据泄露; (2)负责仓储和生产核心单据:出入库、调拨、盘点、领料、成品入库、成本核算等,总计 XX+ 个页面和接口。库存流水全程可追溯,库存准确率从约 XX% 提升到 99% 以上; (3)完成认证体系改造:从传统 Session 迁到 Sa-Token,配合 Filter 统一处理登录校验、AJAX 请求返回 401、白名单放行; (4)推动国际化和前端迁移:抽取公共翻译 key,按页面按需加载语言包,支撑了泰国客户上线。
3、遇到的难点和解决方案: (1)并发出入库导致库存超扣:用数据库行锁加乐观锁版本号控制,同时把关键单据的状态流转放进一个事务里,解决了负库存问题; (2)大数据量报表查询慢:给常用查询条件建联合索引、改写 SQL 避免全表扫描,把热点统计数据缓存到 Redis,核心报表响应时间从 X 秒降到 1 秒以内; (3)手写 SQL 时重复拼接租户条件,或插入时漏填 COMPANY_CODE:统一规范 Mapper 写法,并在插入环节强制校验租户字段; (4)前端 JS 缓存导致上线后页面不更新:在 Maven 打包阶段用 replacer 插件给 JS 引用自动加上时间戳版本号。