1. 项目概述
这个在线采购系统采用SpringBoot+Vue前后端分离架构,是企业级采购管理的数字化解决方案。我在实际开发中发现,这类系统最核心的价值在于将传统线下采购流程标准化、可视化,同时通过技术手段解决供应商管理混乱、采购效率低下、审批流程冗长等痛点。
系统主要包含供应商管理、采购申请、审批流、订单跟踪、库存对接、数据分析六大模块。前端采用Vue3+Element Plus实现响应式界面,后端基于SpringBoot2.7+MyBatis Plus构建RESTful API,数据库选用MySQL8.0并配合Redis缓存。特别在采购审批环节,我们实现了可配置的工作流引擎,能适应不同企业的审批层级需求。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计
2.1 前端技术栈选型
选择Vue3而非React/Angular主要基于三点考量:
- 渐进式框架特性适合快速迭代的采购系统开发
- Composition API更利于复杂业务逻辑封装
- Element Plus组件库完美匹配后台管理系统需求
实际开发中我们特别注意了:
- 使用Vuex进行状态管理时采用模块化设计
- 路由守卫实现动态权限控制
- 通过axios拦截器统一处理Token刷新
- 采用WebSocket实现审批消息实时推送
2.2 后端技术方案
SpringBoot的自动配置特性大幅简化了项目搭建:
java复制@SpringBootApplication
@EnableTransactionManagement
@EnableCaching
public class ProcurementApplication {
public static void main(String[] args) {
SpringApplication.run(ProcurementApplication.class, args);
}
}
关键配置要点:
- 使用@Transactional注解管理采购订单事务
- 通过@Cacheable缓存供应商信息查询
- 自定义异常处理器统一返回格式
- 采用Spring Security OAuth2实现认证授权
3. 核心功能实现
3.1 采购审批工作流
采用Activiti引擎实现可配置审批流:
xml复制<process id="approvalFlow" name="采购审批流程">
<startEvent id="start"/>
<userTask id="deptApprove" name="部门审批"/>
<sequenceFlow sourceRef="start" targetRef="deptApprove"/>
<exclusiveGateway id="gateway1"/>
<!-- 更多节点配置 -->
</process>
审批状态机设计要点:
- 支持会签/或签等审批类型
- 可配置审批人规则(角色/特定人员)
- 审批超时自动转交机制
- 审批意见附件上传功能
3.2 供应商评估模型
构建了多维度的供应商评估体系:
sql复制CREATE TABLE supplier_evaluation (
id BIGINT PRIMARY KEY,
supplier_id BIGINT,
quality_score DECIMAL(5,2),
delivery_score DECIMAL(5,2),
service_score DECIMAL(5,2),
price_score DECIMAL(5,2),
total_score DECIMAL(5,2) GENERATED ALWAYS AS (
quality_score*0.3 + delivery_score*0.25 +
service_score*0.2 + price_score*0.25
) STORED
);
评估算法优化点:
- 动态权重配置功能
- 历史合作数据自动分析
- 黑名单/白名单机制
- 评估结果可视化看板
4. 系统集成方案
4.1 ERP系统对接
通过WebService实现与SAP的深度集成:
java复制@WebServiceClient
public class ErpIntegrationService {
@WebMethod
public MaterialInfo getMaterialInfo(String sku) {
// 调用SAP RFC接口
}
@WebMethod
public boolean syncPurchaseOrder(PurchaseOrderVO order) {
// 订单同步逻辑
}
}
对接注意事项:
- 字段映射配置化管理
- 数据格式转换处理
- 异步补偿机制设计
- 报文日志全量记录
4.2 支付网关集成
采用策略模式支持多支付渠道:
java复制public interface PaymentStrategy {
PaymentResult pay(PaymentRequest request);
}
@Service
@RequiredArgsConstructor
public class PaymentService {
private final Map<String, PaymentStrategy> strategies;
public PaymentResult processPayment(String channel, PaymentRequest request) {
return strategies.get(channel).pay(request);
}
}
支付安全要点:
- 敏感信息加密传输
- 签名验证机制
- 支付结果异步通知
- 对账文件自动处理
5. 性能优化实践
5.1 采购单导出优化
采用多线程分页查询+模板导出:
java复制@Async
public void exportPurchaseOrders(Long taskId, QueryCondition condition) {
int pageSize = 500;
int total = mapper.selectCount(condition);
int pages = (total + pageSize - 1) / pageSize;
// 使用CountDownLatch同步线程
List<Future<PageData>> futures = new ArrayList<>();
for (int i = 1; i <= pages; i++) {
futures.add(executor.submit(() ->
mapper.selectPage(new Page<>(i, pageSize), condition)
));
}
// 合并数据后使用POI-TTL导出
}
导出性能对比:
| 数据量 | 传统方式 | 优化方案 |
|---|---|---|
| 1万条 | 45s | 12s |
| 5万条 | 内存溢出 | 58s |
| 10万条 | - | 118s |
5.2 前端性能提升
实施的关键措施:
- 路由懒加载
- 组件异步加载
- 接口请求合并
- 表格虚拟滚动
- 本地缓存策略
通过Chrome DevTools测得优化效果:
- 首屏加载时间从4.2s降至1.8s
- 内存占用减少35%
- FPS稳定在60帧
6. 安全防护体系
6.1 权限控制方案
采用RBAC模型实现精细权限管理:
java复制@PreAuthorize("hasRole('PURCHASE_MANAGER') || "
+ "hasPermission(#orderId, 'approve')")
@PostMapping("/approve/{orderId}")
public Result approveOrder(@PathVariable Long orderId) {
// 审批逻辑
}
权限设计要点:
- 功能权限与数据权限分离
- 部门数据隔离实现
- 操作日志全记录
- 权限变更审计追踪
6.2 接口安全防护
实施的多层防护措施:
- HTTPS传输加密
- 请求签名验证
- 参数过滤/XSS防护
- 频率限制(Redis实现)
- 敏感操作二次验证
安全头配置示例:
yaml复制security:
headers:
content-security-policy: "default-src 'self'"
x-frame-options: DENY
x-content-type-options: nosniff
7. 部署运维方案
7.1 容器化部署
Docker Compose编排方案:
yaml复制version: '3'
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
volumes:
- mysql_data:/var/lib/mysql
redis:
image: redis:6
ports:
- "6379:6379"
backend:
build: ./procurement-backend
ports:
- "8080:8080"
depends_on:
- mysql
- redis
7.2 监控告警配置
Prometheus+Grafana监控方案:
yaml复制# application.yml
management:
endpoints:
web:
exposure:
include: health,info,metrics,prometheus
metrics:
export:
prometheus:
enabled: true
关键监控指标:
- JVM内存使用率
- 接口响应时间P99
- 数据库连接池状态
- 采购单创建TPS
- 审批流程平均耗时
8. 典型问题排查
8.1 并发审批冲突
现象:多人同时审批时出现状态不一致
解决方案:
java复制@Transactional
public synchronized Result approveOrder(ApproveDTO dto) {
PurchaseOrder order = orderMapper.selectByIdForUpdate(dto.getOrderId());
if (order.getStatus() != WAITING_APPROVE) {
throw new BusinessException("订单状态已变更");
}
// 后续审批逻辑
}
8.2 大数据量查询超时
优化方案:
- 添加适当索引
- 引入Elasticsearch辅助查询
- 实现分页缓存策略
- 优化SQL避免全表扫描
执行计划优化示例:
sql复制EXPLAIN
SELECT * FROM purchase_order
WHERE create_time > '2023-01-01'
ORDER BY total_amount DESC
LIMIT 100;
9. 项目演进方向
根据实际运营情况,我们规划了以下演进路线:
- 引入智能比价算法
- 开发供应商门户网站
- 集成电子签章功能
- 构建采购知识图谱
- 实现移动端审批应用
在技术架构层面,我们正在评估:
- 前端迁移到Vue3 + Vite
- 后端尝试SpringBoot3新特性
- 数据库分库分表方案
- 服务网格化改造
