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.io.IOException;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 质检物料业务逻辑
|
* 质检物料业务逻辑
|
||||||
|
|
@ -242,6 +244,13 @@ public class QmsQcMaterialControllerService {
|
||||||
LocalDateTime now = LocalDateTime.now();
|
LocalDateTime now = LocalDateTime.now();
|
||||||
boolean allSuccess = true;
|
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) {
|
for (QmsQcMaterialImportDTO dto : data) {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
|
@ -252,7 +261,6 @@ public class QmsQcMaterialControllerService {
|
||||||
if (StrUtil.isBlank(dto.getMaterialCategoryCode())) {
|
if (StrUtil.isBlank(dto.getMaterialCategoryCode())) {
|
||||||
sb.append("物料类别编码不能为空;");
|
sb.append("物料类别编码不能为空;");
|
||||||
}
|
}
|
||||||
// 图号版本号可以为空,作为联合主键的一部分
|
|
||||||
|
|
||||||
if (!sb.isEmpty()) {
|
if (!sb.isEmpty()) {
|
||||||
dto.setError(sb.toString());
|
dto.setError(sb.toString());
|
||||||
|
|
@ -260,6 +268,15 @@ public class QmsQcMaterialControllerService {
|
||||||
continue;
|
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()
|
QmsQcMaterialCategory category = qcMaterialCategoryService.lambdaQuery()
|
||||||
.eq(QmsQcMaterialCategory::getCategoryCode, dto.getMaterialCategoryCode())
|
.eq(QmsQcMaterialCategory::getCategoryCode, dto.getMaterialCategoryCode())
|
||||||
|
|
@ -271,18 +288,8 @@ public class QmsQcMaterialControllerService {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 根据物料编号+图号版本号查询是否存在
|
// 根据物料编号+图号版本号查询是否存在(联合主键)
|
||||||
var query = qcMaterialService.lambdaQuery()
|
QmsQcMaterial exist = findByCompositeKey(dto.getMaterialNo(), dto.getDrawingNoVer());
|
||||||
.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();
|
|
||||||
|
|
||||||
String categoryPathName = buildCategoryPathName(category);
|
String categoryPathName = buildCategoryPathName(category);
|
||||||
|
|
||||||
|
|
@ -329,6 +336,27 @@ public class QmsQcMaterialControllerService {
|
||||||
return allSuccess;
|
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;
|
private String drawingNo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 图号版本号
|
* 图号版本号(联合主键,可为空)
|
||||||
*/
|
*/
|
||||||
@ExcelColumn("*图号版本号")
|
@ExcelColumn("图号版本号")
|
||||||
private String drawingNoVer;
|
private String drawingNoVer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -36,9 +36,9 @@ public class QmsQcMaterialImportDTO {
|
||||||
private String drawingNo;
|
private String drawingNo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 图号版本号(联合主键)
|
* 图号版本号(联合主键,可为空)
|
||||||
*/
|
*/
|
||||||
@ExcelColumn("*图号版本号")
|
@ExcelColumn("图号版本号")
|
||||||
private String drawingNoVer;
|
private String drawingNoVer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue