资讯动态

电气设备行业SRM供应商管理系统架构与二次开发落地解析

发布时间:2026/10/25 14:13:37 来源:尧图企业网站定制
简介面向电力设备与电气制造企业供应链、采购及信息化从业者的行业SRM解决方案文档围绕供应商信息不透明、管理标准缺失、采购流程繁琐等痛点梳理透明化供应商档案、数字化采购协同、供应商评价、合同与物流跟踪及数据分析等模块并说明云计算与大数据架构下的系统价值与移动端应用。压缩包仅含1个docx文件约12KB适合快速了解方案框架、核心功能与行业机会也可作为选型汇报或方案撰写的参考底稿。已有157人学习。读者可从中获取按行业痛点、解决方案、核心功能、系统价值、未来趋势组织的完整叙述便于对照企业现状提炼需求清单理解供应商全生命周期协同管理思路并借鉴可定制化配置、技术支持与实施保障等表达要点。1. 某电气设备厂的月度会上一个迟交货问题问出了三个答案某电气设备厂的采购主管在月度复盘会上被问了一个很具体的问题上个月那批断路器晚到 11 天到底是供应商产能不够还是我们的订单下晚了会议室安静了半分钟因为答案分散在三个 Excel、两个共享盘和四个人的聊天记录里。这份《电气设备行业 SRM 供应商管理系统解决方案》要解决的就是这件事把供应商资质、绩效、合同、订单、物流、对账塞进一套云计算底座的供应链协同平台用大数据把「谁靠谱、谁拖期、钱花在哪」算清楚。它适合两类人看一类是正被 Excel 台账折磨的采购与供应商管理岗另一类是准备给制造业客户做 SRM 二次开发的技术团队。下文为了叙述方便把这个方案包背后的团队代称为「翎栖 SRM」它本身是一份商业资料形态的行业解决方案文档不是可直接运行的开源仓库所以我读它的方式是先看它把业务切成了哪几块再看每一块落到代码和数据层大概长什么样。2. 方案的整体骨架四层云架构与八个功能模块的边界先把这份方案包的「目录骨架」讲清楚后面所有改造都挂在这个骨架上。它给我的第一印象是典型的 To B 重型系统写法上层按角色切入口中层按业务域切模块底层用云计算和大数据兜住性能与分析。方案里反复强调的两句话是「基于云计算和大数据技术」和「可定制化配置」翻译成工程语言就是部署要能横向扩模块要能按客户裁剪指标要能下钻。2.1 四层架构接入层、应用层、支撑层与数据层各管什么按方案的功能描述反推一套能落地的 SRM 至少分四层。接入层负责 PC 门户、供应商门户和移动端三个入口其中供应商门户是很多人会漏掉的一块——供应商自己在里面维护资质、确认订单、上传发货单数据才不用采购员手工录。应用层就是方案里列的八个模块供应商信息管理、采购流程管理、供应商评价管理、合同管理、物流管理、供应商协同管理、数据分析、移动端支持。支撑层是流程引擎、消息通知、权限、附件存储、定时任务这些公共能力。数据层是业务库、附件对象存储和分析库三块分开。我一般会按这个方式给二次开发团队画工程目录让「哪块该动、哪块别碰」一眼可见srm-root/ ├── srm-gateway/ # 接入层PC/供应商门户/移动端统一入口做鉴权与限流 ├── srm-supplier/ # 供应商信息管理 评价管理 ├── srm-purchase/ # 采购流程管理寻源、询比价、订单 ├── srm-contract/ # 合同管理台账、履约节点、到期提醒 ├── srm-logistics/ # 物流管理发货单、在途、签收 ├── srm-report/ # 数据分析指标聚合、报表导出 ├── srm-common/ # 支撑层流程引擎适配、消息、附件、字典 └── deploy/ # docker-compose、初始化 SQL、Nginx 配置这段目录不是方案原文而是我按它的模块清单做的工程映射目的是让「八个功能」能对得上包。实际拆分时有两个原则供应商与评价放一个服务因为评价的输入全来自供应商主数据和订单履约结果拆开就要跨服务频繁回查合同与采购分开因为合同的生命周期比订单长得多到期提醒、履约节点这些定时逻辑放一起会互相拖累。参数上srm-gateway是所有入口的唯一出口移动端和供应商门户走的是同一套鉴权不要给供应商门户单独开一个无鉴权的口子这是后面权限踩坑的根源。2.2 八个模块的职责边界与依赖关系方案正文把八个模块平铺着列出来读起来像并列关系但真正做架构时必须排出依赖顺序否则开发到一半会发现评价模块拿不到数据。下面这张表是我按方案描述重新梳理的职责与依赖可以直接当开发排期表用模块主要职责上游依赖关键数据供应商信息管理资质档案、联系人、银行账户、准入状态无主数据源头供应商主表、资质附件供应商评价管理质量、交付、价格、服务四维打分供应商主数据、订单履约评分记录、等级采购流程管理需求归集、寻源、询比价、下单供应商主数据、评价等级询价单、报价、采购订单合同管理合同台账、条款、履约节点、到期提醒采购订单、供应商合同主表、节点表物流管理发货通知、在途跟踪、到货签收采购订单发货单、物流轨迹供应商协同管理门户账号、订单确认、异常反馈以上全部协同消息、确认记录数据分析采购金额、准时率、合格率、集中度数据层聚合指标宽表移动端支持审批、待办、异常预警接入层待办、推送记录依赖顺序清楚了一个很实际的问题就有了答案先上线哪个模块。我的建议是先做供应商信息管理和采购流程管理因为它们产生原始数据评价和数据分析后置因为没有订单数据支撑的评价就是拍脑袋。方案里讲「通过 SRM 实现供应商信息透明化提高采购决策准确性」透明度这个东西不是靠界面堆出来的是靠准入状态、评价等级、履约记录三个字段在选供应商的那一刻同时可见。2.3 本地起一套可验证的环境方案包给的是设计不是代码所以想验证「这套东西跑起来长什么样」得自己搭一个最小闭环。常见做法是拿 Spring Cloud 或 Spring Boot 多模块起服务MySQL 存业务Redis 做会话与字典缓存MinIO 存资质附件前端 Vue 加 ECharts 出报表。下面这套命令是我验证方案可行性时常用的起法# 1. 起中间件MySQL 8 / Redis / MinIO / Nginx docker compose -f deploy/docker-compose.yml up -d # 2. 初始化库表与字典数据V1 建表、V2 灌基础字典 mysql -h127.0.0.1 -P3306 -uroot -p srm deploy/sql/V1__init.sql mysql -h127.0.0.1 -P3306 -uroot -p srm deploy/sql/V2__dict.sql # 3. 按依赖顺序启动先主数据后业务 java -jar srm-supplier/target/srm-supplier.jar --spring.profiles.activelocal java -jar srm-purchase/target/srm-purchase.jar --spring.profiles.activelocal java -jar srm-gateway/target/srm-gateway.jar --spring.profiles.activelocal 命令本身没什么玄学关键是启动顺序和 profile。--spring.profiles.activelocal会把注册中心切成单机模式避免本地起一套 NacosV1__init.sql里的建表顺序必须让供应商主表排在最前因为订单、合同、评价三张表都有外键或逻辑外键指向它顺序颠倒会直接报错。启动完成后用供应商门户账号登录先建一条供应商、走一次准入审批、下一张订单这条链路跑通方案里描述的八个模块至少验证了一半。跑不通的常见原因是 MySQL 字符集用了默认的 utf8资质文件名里的中文会变问号V1__init.sql里记得统一utf8mb4。3. 供应商主数据与评价模型资质、信率先落库八个模块里真正决定系统好不好用的是最不起眼的供应商主数据。方案里有一句「供应商信息不透明难以了解供应商的质量和信誉」这是行业痛点第一条也是主数据设计的第一驱动力。我见过不少 SRM 项目在这里翻车把供应商当成一张表字段随需求加最后资质文件、联系人、银行账户全塞进主表一行几 KB查询慢得离谱改一个字段还要锁全表。3.1 主表加附件的拆法别把资质文件塞进业务表合格的拆法是主表、扩展表、附件表、账户表分开。主表只放高频查询字段资质文件走对象存储库里只存 key 和元信息。下面这段建表语句是我按方案的字段描述整理的可以直接拿去改CREATE TABLE srm_supplier ( id BIGINT PRIMARY KEY AUTO_INCREMENT, supplier_code VARCHAR(32) NOT NULL COMMENT 供应商编码准入时生成全局唯一, supplier_name VARCHAR(128) NOT NULL COMMENT 供应商全称, credit_code VARCHAR(32) DEFAULT NULL COMMENT 统一社会信用代码用于查重, category VARCHAR(64) NOT NULL COMMENT 物料大类变压器/开关柜/线缆/元器件, level VARCHAR(8) DEFAULT C COMMENT 评价等级 A/B/C/D由评价任务回写, status TINYINT NOT NULL DEFAULT 0 COMMENT 0待准入 1合格 2暂停 3淘汰, contact_name VARCHAR(32) DEFAULT NULL, contact_phone VARCHAR(20) DEFAULT NULL, create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY uk_code (supplier_code), KEY idx_credit (credit_code), KEY idx_cat_status (category, status) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT供应商主数据; CREATE TABLE srm_supplier_attach ( id BIGINT PRIMARY KEY AUTO_INCREMENT, supplier_id BIGINT NOT NULL, attach_type VARCHAR(32) NOT NULL COMMENT 营业执照/体系认证/业绩合同/检验报告, file_key VARCHAR(255) NOT NULL COMMENT 对象存储 key不存全路径, file_name VARCHAR(255) NOT NULL, expire_date DATE DEFAULT NULL COMMENT 证书有效期到期前 30 天预警, audit_state TINYINT NOT NULL DEFAULT 0 COMMENT 0待审 1通过 2驳回, KEY idx_supplier (supplier_id), KEY idx_expire (expire_date) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT供应商资质附件;supplier_code一定要系统生成而不是人工填人工填必然重码。credit_code加索引是为了准入时查重同一家供应商换个名字再注册一遍的情况非常多。expire_date这个字段看起来可有可无但它撑起了整个「资质到期预警」功能方案里没展开写实际项目里这是采购最常用的提醒之一索引不能省。附件表存file_key而不是完整 URL是为了将来换存储桶时不用刷库。分类字段category和状态字段status建联合索引因为供应商列表页最高频的查询就是「某类物料下所有合格供应商」。3.2 评价模型权重、指标和打分周期怎么落到代码里方案第四条核心功能是「实现对供应商质量、信誉等方面的评价管理」但没给算法。这块必须自己定否则就是一堆拍脑袋分数。我的做法是四维加权加分级权重按行业可调电气设备行业我一般给质量 0.4、交付 0.3、价格 0.2、服务 0.1因为这类产品一旦出质量问题停机损失远大于采购价差。WEIGHTS {quality: 0.40, delivery: 0.30, price: 0.20, service: 0.10} LEVEL_RULE [(90, A), (75, B), (60, C), (0, D)] # 分数下限 - 等级 def score_supplier(quality, delivery, price, service): 四维分数均为 0-100返回加权总分与等级 raw (quality * WEIGHTS[quality] delivery * WEIGHTS[delivery] price * WEIGHTS[price] service * WEIGHTS[service]) total round(raw, 1) level next(lv for low, lv in LEVEL_RULE if total low) return total, level def delivery_score(total_orders, on_time_orders, avg_delay_days): 交付分准时率占七成平均延迟天数扣分占三成 if total_orders 0: return 60.0 # 无履约记录给基准分避免新供应商直接判死 on_time_rate on_time_orders / total_orders * 100 penalty min(avg_delay_days * 2, 30) # 每延迟 1 天扣 2 分最多扣 30 return max(0.0, on_time_rate * 0.7 (100 - penalty) * 0.3)这段代码有两个容易被忽略的判定。第一个是total_orders 0的兜底新准入供应商没有履约数据如果不给基准分加权后直接掉到 D 级后面采购根本选不到它等于系统把新供应商全卡死了。第二个是penalty的上限 30不给上限的话一个延迟 60 天的单子会把交付分打到负数加权后把总分带崩实际业务里这家供应商该做的是暂停而不是给 0 分。打分周期我一般设成季度跑一次用定时任务扫订单表聚合人工评分部分只留「服务」一维给采购员填其余三维全自动算减少主观空间。方案里提「定期评价推动供应商持续改进」定期这两个字必须写死在调度配置里靠人记得去点评价的系统三个月后就没人点了。3.3 准入与冻结状态机要卡在服务层而不是界面层供应商状态从待准入到合格、暂停、淘汰看着是四个值实际是一条有前置条件的迁移链。常见做法是在服务层做一个状态机任何改状态的请求都必须过它别指望前端按钮置灰能拦住人。当前状态允许动作前置条件迁移后待准入准入通过营业执照已审、信用代码未重复合格待准入驳回资质缺失淘汰合格暂停存在重大质量事故或评分 D 级暂停暂停恢复整改报告审核通过合格合格/暂停淘汰连续两次 D 级或合同终止淘汰状态机写进服务层的好处是暂停状态下单、暂停状态走合同签署这两种非法操作会被统一拦在一处而不是散落在八个接口里。这类「玄学」问题在验收时才暴露测试同学从后台直接改库把状态改成合格绕过审批数据看着对审计时查不出是谁批的。所以每次状态迁移都要落一条操作日志包含操作人、前后状态、原因这也是方案强调「透明化」的底层支撑。4. 采购协同链路从寻源到对账的数字化闭环方案里「采购流程繁琐耗费时间和人力成本」是痛点第三条对应的解法是把寻源、询价、下单、发货、收货、对账连成一条不断裂的链。这条链最容易断在两个地方合同和物流。合同签完没人管履约物流发出去没人追在途前面数字化做得再漂亮最后一公里还是靠电话。4.1 寻源与合同台账里必须有的几个到期字段寻源阶段的产出是报价单落地就是一张询价单加多条报价明细比价时按含税单价、账期、交期三个维度排序。这里真正的坑不在比价在合同。合同模块如果只存一个附件那它就是个网盘。合格的合同台账至少要能回答三个问题这份合同还有多少额度没用、哪些付款节点快到期、哪些履约条款还没完成。{ contractNo: HT-2024-000318, supplierCode: SUP-000912, category: 开关柜, amountTotal: 1280000.00, amountUsed: 640000.00, payNodes: [ {node: 预付款, ratio: 0.3, planDate: 2024-03-10, state: PAID}, {node: 到货款, ratio: 0.6, planDate: 2024-06-20, state: PENDING}, {node: 质保金, ratio: 0.1, planDate: 2025-06-20, state: PENDING} ], expireDate: 2025-03-31, renewRemindDays: 60 }这份报文的关键是amountUsed和payNodes。amountUsed要在每次订单关联合同时累加超过amountTotal直接拒单这一步能挡住大量超合同采购。payNodes让付款从「财务想起来才付」变成「到期自动推待办」state字段是付款申请和实际付款的锚点。renewRemindDays设 60 天是因为电气设备的续签流程通常要走供应商重新报价和技术确认30 天会来不及。方案里讲「合同管理确保合同规范执行降低法律风险」法律风险的降低不靠存一份 PDF靠的是额度控制和节点提醒这两条硬约束。4.2 订单、物流与收货在途状态要能被系统自己推进物流管理在方案里只有一句「实现采购物流的全程跟踪和管理」实际做起来重点不是接快递接口而是管住供应商的发货行为。做法是让供应商在门户里填发货单填了才算发货采购这边才能看到在途。发货单和采购订单是多对一关系一张订单可以分批发货这是电气设备行业的常态一套柜子分三次发很常见。CREATE TABLE srm_shipment ( id BIGINT PRIMARY KEY AUTO_INCREMENT, shipment_no VARCHAR(32) NOT NULL COMMENT 发货单号供应商门户生成, order_id BIGINT NOT NULL COMMENT 关联采购订单, supplier_id BIGINT NOT NULL, qty DECIMAL(12,2) NOT NULL COMMENT 本次发货数量, expect_date DATE NOT NULL COMMENT 预计到货日用于算准时率, arrive_date DATE DEFAULT NULL COMMENT 实际签收日收货时回写, state TINYINT NOT NULL DEFAULT 0 COMMENT 0待发货 1在途 2已签收 3异常, KEY idx_order (order_id), KEY idx_state_expect (state, expect_date) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT发货单;expect_date和arrive_date这一对字段是整套评价体系的数据源交付分全靠它们算。state从 1 到 2 的推进必须由收货动作触发不能靠供应商自己点「已送达」否则准时率就失真了。订单侧还要允许部分收货qty和订单数量的差额挂起等到齐再关单或者直接按短溢装处理具体看合同条款。这块我吃过亏早期版本收货就直接把订单置为完成结果少发的两件货在系统里永远是「已完成」追了两个月才补回来。4.3 指标与移动端大数据分析落到几张宽表上方案里「通过大数据技术实现数据的分析和挖掘」这句话最容易做成 PPT。真正能用的分析落点是四张宽表采购金额按供应商和品类聚合、准时交付率、质量合格率、供应商集中度。前三个直接来自业务表第四个是很多人忽略但老板最关心的——单一供应商采购占比超过 40% 就是供应链风险信号。-- 近 12 个月供应商履约看板按供应商聚合 SELECT s.supplier_code, s.supplier_name, COUNT(DISTINCT o.id) AS order_cnt, SUM(o.amount) AS amount_total, ROUND(SUM(CASE WHEN sh.arrive_date sh.expect_date THEN 1 ELSE 0 END) / COUNT(sh.id) * 100, 1) AS on_time_rate FROM srm_supplier s LEFT JOIN srm_purchase_order o ON o.supplier_id s.id AND o.create_time DATE_SUB(CURDATE(), INTERVAL 12 MONTH) LEFT JOIN srm_shipment sh ON sh.order_id o.id AND sh.state 2 WHERE s.status 1 GROUP BY s.supplier_code, s.supplier_name ORDER BY amount_total DESC;注意sh.state 2这个条件放在 JOIN 里而不是 WHERE 里放 WHERE 会把没有发货记录的供应商整行过滤掉看板就少了一批「有订单但从没发货」的高风险供应商这恰恰是最该看的。移动端在这套链路里的定位不是把 PC 页面缩小而是把三类高频动作搬上去审批待办、异常预警、扫码收货。方案说「随时随地管理供应链」落到实现就是这三件事别把整个系统往小程序里塞。前端用 Vue 加 ECharts指标查询走预聚合别让看板直连明细表跑COUNT(DISTINCT)几十万订单下来一次查询能把库拖慢。5. 落地排查五个能把方案做翻车的细节方案文档读起来都顺落地时最容易在细节上翻车。这五条是我在类似项目里踩出来的按「现象、原因、解决」摆出来能省几天排查时间。现象一供应商门户登录后看不到自己的订单。原因是数据权限只做了角色级没做数据行级供应商账号和采购员账号共用一套角色。解决是把权限拆成两层功能权限管菜单按钮数据权限管「只能看 supplier_id 自己的」这一层在网关过滤器和 SQL 拦截器里同时卡只卡一层迟早被绕过。方案里「供应商协同管理」这块最容易被当成消息通知做掉实际它是权限隔离问题。现象二资质到期预警一条都没发出来。原因是定时任务按expire_date CURDATE() 30精确匹配跑批当天错过的就永远错过。解决是改成区间判断expire_date BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 30 DAY)并且加一张发送日志表做幂等同一条证书同一天只推一次。现象三评价等级和采购选源结果对不上。原因是评价任务跑完后只更新了评分记录表没回写供应商主表的level字段选源时读的还是主表。解决是把回写放进同一个事务或者干脆让选源接口实时关联最新评分别维护冗余字段。冗余字段好查但难一致这中间的取舍要在设计阶段就定死。现象四合同额度超了还能下单。原因是额度校验放在前端后端下单接口没校验供应商门户直接调接口就绕过去了。解决办法只有一个校验必须在服务层的下单事务里做用行锁把合同记录锁住再判断amountUsed 本次金额 amountTotal并发场景下不加锁必然超。现象五报表数字和台账对不上。原因是明细表用的是逻辑删除报表 SQL 没加删除标记过滤或者时区不统一create_time存 UTC 但按月聚合用本地时间。解决是统一在基类里做删除过滤数据库连接串强制指定时区报表口径写进文档谁改谁负责。这类问题没有后悔药只能靠上线前拿台账手工对一遍总数。提示这五条里有四条属于「校验位置放错」前端校验是体验后端校验才是底线方案文档不会告诉你这件事。6. 二次开发改造把通用 SRM 拧成行业专用这份方案包最大的价值不是那八个模块的名字而是它把电气设备行业的业务切分方式固定下来了二次开发时你只需要在切好的格子里填行业细节。我一般从三个点下手。第一个是物料分类体系通用 SRM 用三级分类够用电气设备行业得挂上电压等级、是否涉网、是否定制件这些属性因为它们直接决定供应商准入标准——涉网设备要求供应商有特定资质定制件要求有图纸协同能力。改造方式是在category旁边加一张扩展属性表别往主表加字段。第二个是评价权重可配置化。第 3 章那段 Python 代码里权重是硬编码的行业方案要交付给不同客户权重必须能按品类配。做法是把WEIGHTS挪成配置表按category维度存一行评价任务启动时加载改权重不用发版。第三个是审批流。方案里没细说但准入、合同、付款三条线都要走审批通用做法是接一套流程引擎把节点定义放配置里别在代码里写 if-else 判层级。改造点通用实现行业改造验证方法物料分类三级分类树挂电压等级/涉网/定制件属性新建一条涉网开关柜准入规则应自动加严评价权重代码常量按品类配置表改配置后重跑季度评价等级应变化审批流固定两级流程引擎配置化加一个 50 万以上合同多一级审批走单验证门户入口PC 为主扫码收货 待办推送手机扫发货单条码订单状态应同步推进验证改造是否生效我的习惯是准备三条测试数据一家新供应商、一张分批发的订单、一份快到期的合同每改一次就跑一遍这三条链路比写一堆单测更贴近真实场景。尤其是分批发货那条短溢装、部分收货、异常签收三种状态都要走到这是二次开发里最容易改坏的地方。最后说个教训。早些年我做类似系统总想着把方案里的功能一次全上结果供应商门户没人用数据全靠采购员手工补录评价分算出来全是 60 分基准值。从那以后我每次接这类项目都强制先只开主数据和一条订单链路让供应商真的在门户里点一次确认跑满一个季度再上评价和分析。功能少一点没关系数据是真的才有的算。这份方案包的模块清单和指标口径拿去对着改成自己厂的版本比从零画一遍省事得多希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑