feat(qc-material): 校验导入数据中联合主键唯一性,新增相关辅助方法
- 在导入质检物料时检查物料编号+图号版本号的联合主键是否存在重复 - 新增buildCompositeKey方法用于构建联合主键字符串,便于重复检测 - 新增findByCompositeKey方法根据联合主键查询物料,替换原查询逻辑 - 修改导入DTO,新增QmsQcMaterialImportDTO类并完善注释 - 调整导出DTO中图号版本号字段注释,明确其作为联合主键且可为空 - 规范错误信息设置,明确指出Excel中存在重复的联合主键组合情况
This commit is contained in:
parent
2a7b4df62c
commit
7f81abd4d8
|
|
@ -38,7 +38,9 @@ import java.io.ByteArrayOutputStream;
|
|||
import java.io.IOException;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 质检物料业务逻辑
|
||||
|
|
@ -242,6 +244,13 @@ public class QmsQcMaterialControllerService {
|
|||
LocalDateTime now = LocalDateTime.now();
|
||||
boolean allSuccess = true;
|
||||
|
||||
// 检查Excel数据中是否存在重复的联合主键(物料编号+图号版本号)
|
||||
Map<String, Long> compositeKeyCount = new HashMap<>();
|
||||
for (QmsQcMaterialImportDTO dto : data) {
|
||||
String compositeKey = buildCompositeKey(dto.getMaterialNo(), dto.getDrawingNoVer());
|
||||
compositeKeyCount.merge(compositeKey, 1L, Long::sum);
|
||||
}
|
||||
|
||||
for (QmsQcMaterialImportDTO dto : data) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
|
|
@ -252,7 +261,6 @@ public class QmsQcMaterialControllerService {
|
|||
if (StrUtil.isBlank(dto.getMaterialCategoryCode())) {
|
||||
sb.append("物料类别编码不能为空;");
|
||||
}
|
||||
// 图号版本号可以为空,作为联合主键的一部分
|
||||
|
||||
if (!sb.isEmpty()) {
|
||||
dto.setError(sb.toString());
|
||||
|
|
@ -260,6 +268,15 @@ public class QmsQcMaterialControllerService {
|
|||
continue;
|
||||
}
|
||||
|
||||
// 检查Excel中是否有重复的联合主键
|
||||
String compositeKey = buildCompositeKey(dto.getMaterialNo(), dto.getDrawingNoVer());
|
||||
if (compositeKeyCount.get(compositeKey) > 1) {
|
||||
sb.append("Excel中存在重复的物料编号+图号版本号组合;");
|
||||
dto.setError(sb.toString());
|
||||
allSuccess = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
// 校验物料类别是否存在
|
||||
QmsQcMaterialCategory category = qcMaterialCategoryService.lambdaQuery()
|
||||
.eq(QmsQcMaterialCategory::getCategoryCode, dto.getMaterialCategoryCode())
|
||||
|
|
@ -271,18 +288,8 @@ public class QmsQcMaterialControllerService {
|
|||
continue;
|
||||
}
|
||||
|
||||
// 根据物料编号+图号版本号查询是否存在
|
||||
var query = qcMaterialService.lambdaQuery()
|
||||
.eq(QmsQcMaterial::getMaterialNo, dto.getMaterialNo());
|
||||
// 图号版本号为空时查询为空的记录
|
||||
if (StrUtil.isBlank(dto.getDrawingNoVer())) {
|
||||
query.and(q -> q.isNull(QmsQcMaterial::getDrawingNoVer)
|
||||
.or()
|
||||
.eq(QmsQcMaterial::getDrawingNoVer, ""));
|
||||
} else {
|
||||
query.eq(QmsQcMaterial::getDrawingNoVer, dto.getDrawingNoVer());
|
||||
}
|
||||
QmsQcMaterial exist = query.one();
|
||||
// 根据物料编号+图号版本号查询是否存在(联合主键)
|
||||
QmsQcMaterial exist = findByCompositeKey(dto.getMaterialNo(), dto.getDrawingNoVer());
|
||||
|
||||
String categoryPathName = buildCategoryPathName(category);
|
||||
|
||||
|
|
@ -329,6 +336,27 @@ public class QmsQcMaterialControllerService {
|
|||
return allSuccess;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据联合主键(物料编号+图号版本号)查询物料
|
||||
*/
|
||||
private QmsQcMaterial findByCompositeKey(String materialNo, String drawingNoVer) {
|
||||
return qcMaterialService.lambdaQuery()
|
||||
.eq(QmsQcMaterial::getMaterialNo, materialNo)
|
||||
.and(StrUtil.isBlank(drawingNoVer),
|
||||
q -> q.isNull(QmsQcMaterial::getDrawingNoVer)
|
||||
.or()
|
||||
.eq(QmsQcMaterial::getDrawingNoVer, ""))
|
||||
.eq(StrUtil.isNotBlank(drawingNoVer), QmsQcMaterial::getDrawingNoVer, drawingNoVer)
|
||||
.one();
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建联合主键字符串(用于重复检查)
|
||||
*/
|
||||
private String buildCompositeKey(String materialNo, String drawingNoVer) {
|
||||
return materialNo + "|" + (StrUtil.isBlank(drawingNoVer) ? "" : drawingNoVer);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出质检物料(不分页)
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -42,9 +42,9 @@ public class QmsQcMaterialExportDTO {
|
|||
private String drawingNo;
|
||||
|
||||
/**
|
||||
* 图号版本号
|
||||
* 图号版本号(联合主键,可为空)
|
||||
*/
|
||||
@ExcelColumn("*图号版本号")
|
||||
@ExcelColumn("图号版本号")
|
||||
private String drawingNoVer;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -36,9 +36,9 @@ public class QmsQcMaterialImportDTO {
|
|||
private String drawingNo;
|
||||
|
||||
/**
|
||||
* 图号版本号(联合主键)
|
||||
* 图号版本号(联合主键,可为空)
|
||||
*/
|
||||
@ExcelColumn("*图号版本号")
|
||||
@ExcelColumn("图号版本号")
|
||||
private String drawingNoVer;
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in New Issue