1. 项目背景与核心价值
供应商关系管理(SRM)系统是现代企业供应链数字化的重要基础设施。这套基于SpringBoot+Vue的技术栈实现的SRM系统,本质上解决的是企业采购流程中的三个核心痛点:
- 供应商全生命周期管理:从准入、考核到淘汰的闭环管理
- 采购流程自动化:从需求提报、审批、订单到对账的线上化流转
- 数据驱动的决策支持:通过供应商绩效看板辅助采购决策
我在为某制造业客户实施SRM系统时发现,传统Excel+邮件的管理方式导致供应商资质文件版本混乱,采购审批平均耗时72小时。而部署该系统后,审批周期缩短至8小时,供应商违规率下降40%。这印证了SRM系统在提升供应链效率方面的实际价值。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计解析
2.1 后端技术选型
采用SpringBoot 2.7 + MyBatis Plus的组合主要基于以下考量:
- 快速迭代需求:SpringBoot的自动配置特性显著降低环境搭建成本。例如通过
@EnableTransactionManagement注解即可启用声明式事务,而传统的XML配置方式需要至少30行配置 - 高性能查询:MyBatis Plus的Lambda查询构建器避免SQL注入风险,同时提供分页插件:
java复制Page<SrmSupplier> page = new Page<>(1, 10);
LambdaQueryWrapper<SrmSupplier> wrapper = Wrappers.lambdaQuery()
.gt(SrmSupplier::getCreditScore, 80);
supplierMapper.selectPage(page, wrapper);
- 接口安全:采用JWT+RBAC的鉴权模式,关键接口增加
@PreAuthorize("hasRole('PURCHASE_MANAGER')")注解
2.2 前端架构设计
Vue3 + Element Plus的组合带来以下优势:
- 动态表单渲染:采购审批表单配置化,通过JSON Schema动态生成表单控件
javascript复制// 审批表单配置示例
const formSchema = {
fields: [
{
field: 'budget',
component: 'el-input-number',
label: '预算金额(万元)',
props: { precision: 2 }
}
]
}
-
可视化看板:基于ECharts的供应商绩效雷达图,直观展示质量、交付、价格等维度评分
-
微前端集成:通过qiankun框架实现与ERP系统的无缝集成,共享登录态
3. 核心功能模块实现
3.1 供应商准入模块
采用工作流引擎实现多级审批:
- 资质审查:OCR识别营业执照统一社会信用代码,自动校验工商信息
- 现场考察:通过微信小程序上传考察照片和GPS定位
- 样品检测:与LIMS系统对接获取检测报告数据
关键数据库表设计:
sql复制CREATE TABLE `srm_supplier` (
`id` bigint NOT NULL AUTO_INCREMENT,
`social_credit_code` varchar(18) COLLATE utf8mb4_bin NOT NULL COMMENT '统一社会信用代码',
`risk_level` enum('HIGH','MEDIUM','LOW') COLLATE utf8mb4_bin DEFAULT 'MEDIUM',
`qualification_files` json DEFAULT NULL COMMENT '资质文件URL数组',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_social_credit_code` (`social_credit_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
3.2 采购订单协同
实现采购订单的"发-收-验-付"全流程跟踪:
- 智能比价:基于历史采购价自动生成参考价区间
- 电子签章:集成CA证书实现合同在线签署
- 物流跟踪:对接快递100API自动抓取物流信息
异步处理架构:
java复制@RabbitListener(queues = "purchase.order.create")
public void handleOrderCreate(PurchaseOrder order) {
// 1. 生成PDF合同
pdfService.generateContract(order);
// 2. 发送短信通知
smsService.notifySupplier(order.getSupplierContact());
}
4. 系统部署与性能优化
4.1 容器化部署方案
采用Docker Compose编排服务:
yaml复制version: '3'
services:
srm-api:
image: openjdk:11-jre
ports:
- "8080:8080"
environment:
- SPRING_PROFILES_ACTIVE=prod
volumes:
- ./logs:/app/logs
srm-admin:
image: nginx:1.21
ports:
- "80:80"
volumes:
- ./dist:/usr/share/nginx/html
4.2 缓存策略设计
针对供应商目录这类高频读取数据:
- 一级缓存:MyBatis本地缓存(SqlSession级别)
- 二级缓存:Redis集群缓存,设置TTL为10分钟
- 缓存击穿防护:采用Redisson分布式锁实现互斥重建
java复制@Cacheable(value = "supplier", key = "#id", unless = "#result == null")
public SupplierDetailVO getSupplierDetail(Long id) {
return supplierMapper.selectDetailById(id);
}
5. 实施过程中的经验总结
在三个月的系统上线过程中,有几个关键教训值得分享:
-
供应商主数据清洗:历史数据中的重复供应商合并需要建立映射规则,我们最终采用"统一社会信用代码+法人姓名"的联合去重策略
-
审批流动态配置:最初硬编码的审批流无法适应组织架构调整,后来改用Activiti工作流引擎,支持可视化流程设计
-
移动端兼容性问题:Element Plus的日期组件在iOS Safari存在显示异常,最终通过引入
vant的移动端组件库解决 -
性能监控:通过Spring Boot Actuator暴露的
/actuator/metrics端点,我们发现供应商分页查询的TP99达到800ms,通过添加supplier_code索引后降至120ms
这套系统目前已在3家年采购额超10亿的企业稳定运行,日均处理采购申请300+笔。对于想要自主开发SRM系统的团队,建议先从采购订单模块入手,再逐步扩展供应商管理功能,采用迭代式开发降低实施风险。
