1. 项目背景与核心价值
中小型制造企业的质量管理一直是数字化转型中的痛点。传统纸质记录或Excel表格管理方式存在数据孤岛、追溯困难、协同效率低下等问题。我们团队基于SpringBoot+Vue3+MyBatis技术栈开发的质量管理系统,正是为了解决这些实际问题而生。
这个系统最核心的价值在于实现了:
- 全流程质量数据电子化(从原材料入库到成品出库)
- 实时异常预警(通过SPC控制图自动判定)
- 多维度质量分析(Pareto图、趋势图、柏拉图等)
- 移动端快速报检(通过微信小程序集成)
提示:系统特别设计了"一键追溯"功能,输入任意产品序列号,30秒内可调出该产品所有相关检验记录、工艺参数、操作人员等信息,这对处理客户投诉至关重要。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构解析
2.1 前后端分离设计
采用SpringBoot+Vue3的经典组合,实现了真正的物理分离:
- 前端:Vue3 + Vite + Pinia + Element Plus
- 后端:SpringBoot 2.7 + Spring Security + JJWT
- 通信:RESTful API + WebSocket(实时报警)
java复制// 典型的质量检验API示例
@PostMapping("/api/inspection")
public Result submitInspection(@Valid @RequestBody InspectionDTO dto) {
// 1. 保存检验记录
InspectionRecord record = inspectionService.saveRecord(dto);
// 2. 触发SPC规则计算
spcService.calculateRules(record);
// 3. 推送实时通知
webSocketServer.sendMessage(new AlarmMsg(record));
return Result.success(record.getId());
}
2.2 MyBatis的深度应用
针对质量管理系统特有的复杂查询场景,我们采用了:
- 动态SQL处理多条件筛选(检验时间、工序、缺陷类型等组合查询)
- 二级缓存加速常用质量标准的读取
- 自定义TypeHandler处理检验结果中的特殊数据类型
xml复制<!-- 动态SQL示例:质量异常查询 -->
<select id="selectAbnormalRecords" resultMap="inspectionResultMap">
SELECT * FROM qms_inspection
<where>
<if test="startTime != null">
AND inspection_time >= #{startTime}
</if>
<if test="defectCodes != null and defectCodes.size() > 0">
AND defect_code IN
<foreach collection="defectCodes" item="code" open="(" separator="," close=")">
#{code}
</foreach>
</if>
<if test="isCritical != null">
AND is_critical = #{isCritical}
</if>
</where>
ORDER BY inspection_time DESC
</select>
3. 核心功能实现细节
3.1 检验计划管理
采用策略模式实现不同产品类型的检验方案配置:
- 全检方案(AQL 0.65)
- 抽检方案(GB/T 2828.1)
- 免检方案(针对优质供应商)
java复制public interface InspectionStrategy {
InspectionResult execute(InspectionContext context);
}
@Service
@RequiredArgsConstructor
public class InspectionService {
private final Map<String, InspectionStrategy> strategyMap;
public InspectionResult process(InspectionOrder order) {
InspectionStrategy strategy = strategyMap.get(order.getProductType());
return strategy.execute(createContext(order));
}
}
3.2 SPC质量控制图
实现Xbar-R、P、U等7种控制图:
- 实时计算CPK/PPK指标
- 自动触发西格玛规则报警(如连续7点上升)
- 支持自定义控制限
sql复制-- SPC数据计算示例(Xbar-R图)
SELECT
DATE(inspection_time) as day,
AVG(measure_value) as xbar,
MAX(measure_value) - MIN(measure_value) as r_value,
COUNT(*) as sample_size
FROM qms_measurement
WHERE product_code = #{productCode}
GROUP BY DATE(inspection_time), shift_id
ORDER BY day;
3.3 质量追溯系统
通过组合以下技术实现快速追溯:
- 全局唯一序列号(GS1标准)
- Elasticsearch全文检索
- 操作日志审计(Spring AOP实现)
4. 安全与性能优化
4.1 SQL注入防护
针对MyBatis使用中的安全风险:
- 严格使用#{}替代${}
- 启用mybatis-filter防止恶意SQL
- 定期执行SQL注入扫描
java复制// 安全示例:参数化查询
@Select("SELECT * FROM qms_product WHERE batch_no = #{batchNo}")
List<Product> findByBatchNo(@Param("batchNo") String batchNo);
// 危险示例:绝对禁止!(实际项目已通过代码扫描禁止)
@Select("SELECT * FROM qms_product WHERE batch_no = ${batchNo}")
List<Product> findByBatchNoUnsafe(@Param("batchNo") String batchNo);
4.2 高并发优化
针对检验数据高频写入场景:
- 采用Spring Batch分批处理
- Redis缓存热门质量标准
- MySQL读写分离(一主两从)
yaml复制# 数据源配置示例
spring:
datasource:
master:
url: jdbc:mysql://master-host:3306/qms
slave1:
url: jdbc:mysql://slave1-host:3306/qms
slave2:
url: jdbc:mysql://slave2-host:3306/qms
jpa:
show-sql: false
5. 部署与运维实践
5.1 数据库部署建议
针对MySQL的优化配置:
ini复制[mysqld]
innodb_buffer_pool_size = 4G # 内存的50-70%
innodb_log_file_size = 256M
max_connections = 500
query_cache_type = 0 # 禁用查询缓存
5.2 前端性能优化
Vue3项目的关键优化点:
- 动态导入路由组件
- 使用v-memo优化大型表格渲染
- 按需引入Element Plus组件
javascript复制// 动态导入示例
const InspectionList = defineAsyncComponent(() =>
import('./views/InspectionList.vue')
)
6. 典型问题解决方案
6.1 MyBatis缓存冲突
遇到Flowable覆盖MyBatis配置时:
- 明确指定MyBatis的配置位置
- 禁用Flowable不必要的mapper扫描
- 使用@MapperScan限定范围
java复制@Configuration
@MapperScan(
basePackages = "com.qms.mapper",
sqlSessionFactoryRef = "qmsSqlSessionFactory"
)
public class MyBatisConfig {
// 独立配置数据源和事务管理器
}
6.2 Vue3状态保持
实现详情页返回列表页保持查询状态:
typescript复制// 使用query参数保存状态
const router = useRouter()
const goDetail = (id) => {
router.push({
path: '/detail',
query: {
...route.query, // 保留现有查询参数
id
}
})
}
这套系统在某汽车零部件企业实施后,质量异常响应时间从平均4小时缩短至15分钟,客户投诉率下降37%。特别在应对主机厂飞行检查时,原本需要2天准备的质量追溯资料,现在可以实时生成。
